diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 50d002771314952ea02136c4d6c48ef0e8bdcc21..34865e9b31d85d00e3d2ce867f545e31560e66e0 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,5 +1,6 @@
 stages:
   - unittest
+  - build
   - build-devel
   - build-tag
 
@@ -9,6 +10,12 @@ workflow:
       variables:
         RUN_UNIT_TESTS: "True"
         RUN_BUILD_DEVEL: "True"
+    - if: $CI_COMMIT_BRANCH != "main"
+      variables:
+        RUN_UNIT_TESTS: "True"
+        RUN_BUILD_DEVEL: "True"
+        BUILD_COMMIT_SHORT: "True"
+        LATEST_TAG: "dev"
     - if: $CI_COMMIT_TAG
       variables:
         RUN_UNIT_TESTS: "True"
@@ -27,6 +34,19 @@ unittests:
   rules:
     - if: $RUN_UNIT_TESTS == "True"
 
+build:
+  stage: build
+  image:
+    name: gcr.io/kaniko-project/executor:debug
+    entrypoint: [""]
+  script:
+    - mkdir -p /kaniko/.docker
+    - echo "{\"auths\":{\"$CI_REGISTRY\":{\"auth\":\"$(echo -n ${CI_REGISTRY_USER}:${CI_REGISTRY_PASSWORD} | base64)\"}}}" > /kaniko/.docker/config.json
+    - sed -i -e "s/<VERSION>/${CI_COMMIT_TAG} (${CI_COMMIT_SHORT_SHA})/g" ${CI_PROJECT_DIR}/web/logs/apps.py
+    - /kaniko/executor --context $CI_PROJECT_DIR --destination ${CI_REGISTRY_IMAGE}:${CI_COMMIT_TAG} --destination ${CI_REGISTRY_IMAGE}:${LATEST_TAG}
+  rules:
+    - if: $BUILD_COMMIT_SHORT == "True"
+
 build-devel:
   stage: build-devel
   image:
diff --git a/web/tunnel/migrations/0012_tunnelmodel_tunnel_pod.py b/web/tunnel/migrations/0012_tunnelmodel_tunnel_pod.py
new file mode 100644
index 0000000000000000000000000000000000000000..20dc5e7dc23ce7dcc7a2eabe6340ecfd88336a1d
--- /dev/null
+++ b/web/tunnel/migrations/0012_tunnelmodel_tunnel_pod.py
@@ -0,0 +1,18 @@
+# Generated by Django 4.1.6 on 2023-02-10 18:51
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ("tunnel", "0011_tunnelmodel_svc_name"),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name="tunnelmodel",
+            name="tunnel_pod",
+            field=models.TextField(default="drf-tunnel-0"),
+        ),
+    ]
diff --git a/web/tunnel/models.py b/web/tunnel/models.py
index dde87cf6bcbd68437472071bab96284ab37e727c..767c1da54fdf8a9c3321a6b8b89d3cb33b7457ec 100644
--- a/web/tunnel/models.py
+++ b/web/tunnel/models.py
@@ -10,6 +10,7 @@ class TunnelModel(models.Model):
     target_node = models.TextField(null=False, max_length=32)
     target_port = models.IntegerField(null=False)
     date = models.DateTimeField(auto_now_add=True)
+    tunnel_pod = models.TextField(null=False, default="drf-tunnel-0")
 
     def __str__(self):
         return f"{self.servername}: {self.svc_name} - ssh [...]@{self.hostname} -L {self.local_port}:{self.target_node}:{self.target_port}"
diff --git a/web/tunnel/utils.py b/web/tunnel/utils.py
index 295114a80340a58baf8afc308acf254bd244382d..769fcb1e9ccced2188e8d675269bf19f01c99233 100644
--- a/web/tunnel/utils.py
+++ b/web/tunnel/utils.py
@@ -320,6 +320,7 @@ def k8s_get_svc_namespace():
 def k8s_create_svc(**kwargs):
     v1 = k8s_get_client()
     deployment_name = os.environ.get("DEPLOYMENT_NAME", "tunneling")
+    pod_name = os.environ.get("HOSTNAME", "drf-tunnel-0")
     name = kwargs["svc_name"]
     namespace = k8s_get_svc_namespace()
     labels = {"name": name}
@@ -342,7 +343,10 @@ def k8s_create_svc(**kwargs):
                     "targetPort": kwargs["local_port"],
                 }
             ],
-            "selector": {"app": deployment_name},
+            "selector": {
+                "app": deployment_name,
+                "statefulset.kubernetes.io/pod-name": pod_name,
+                },
         },
     }
     return v1.create_namespaced_service(