diff --git a/building_manager.py b/building_manager.py
index b7a9adc96614a68a20e61347ea20791cd57a2299..f93a014c55f4949c2e3ffa620d0f6163d358911e 100755
--- a/building_manager.py
+++ b/building_manager.py
@@ -149,6 +149,8 @@ def add_nodered_service(base_dir, hostname):
     template['deploy']['labels'].append(f'backup={hostname}')
     template['deploy']['labels'].extend(
         generate_traefik_path_labels(service_name, segment='main'))
+    template['deploy']['labels'].extend(
+        generate_traefik_subdomain_labels(service_name, segment='sub'))
 
     add_or_update_compose_service(compose_path, service_name, template)
 
@@ -209,6 +211,25 @@ def generate_traefik_host_labels(hostname, segment=None, priority=1):
     return label_list
 
 
+def generate_traefik_subdomain_labels(subdomain, segment=None, priority=2):
+    """Generates a traefik subdomain with necessary redirects
+
+    :subdomain: subdomain that will be assigned to a service
+    :segment: Optional traefik segment when using multiple rules
+    :priority: Priority of frontend rule
+    :returns: list of labels for traefik
+    """
+    label_list = []
+    # check segment
+    segment = f'.{segment}' if segment is not None else ''
+    # fill list
+    label_list.append(
+        f'traefik{segment}.frontend.rule='
+        f'HostRegexp:{subdomain}.{{domain:[a-zA-z0-9-]+}}')
+    label_list.append(f'traefik{segment}.frontend.priority={priority}')
+    return label_list
+
+
 def generate_traefik_path_labels(url_path, segment=None, priority=2):
     """Generates a traefik path url with necessary redirects