diff --git a/helm-charts/gerrit-operator/templates/operator.yaml b/helm-charts/gerrit-operator/templates/operator.yaml
index 1f689e2..3b2f320 100644
--- a/helm-charts/gerrit-operator/templates/operator.yaml
+++ b/helm-charts/gerrit-operator/templates/operator.yaml
@@ -68,6 +68,8 @@
           value: {{ .Values.ingress.type }}
         - name: CLUSTER_MODE
           value: "{{ .Values.cluster.mode | toString }}"
+        - name: CLUSTER_DOMAIN
+          value: {{ .Values.clusterDomain | default "cluster.local" }}
         ports:
         - containerPort: 80
         readinessProbe:
diff --git a/helm-charts/gerrit-operator/values.yaml b/helm-charts/gerrit-operator/values.yaml
index 93b41a9..b4356a9 100644
--- a/helm-charts/gerrit-operator/values.yaml
+++ b/helm-charts/gerrit-operator/values.yaml
@@ -12,6 +12,9 @@
   # Which ingress provider to use (options: NONE, INGRESS, ISTIO, AMBASSADOR)
   type: NONE
 
+# What cluster domain to use for generated resources
+clusterDomain: cluster.local
+
 ## Required to use an external/persistent keystore, otherwise a keystore using
 ## self-signed certificates will be generated
 externalKeyStore:
diff --git a/operator/src/main/java/com/google/gerrit/k8s/operator/Main.java b/operator/src/main/java/com/google/gerrit/k8s/operator/Main.java
index 93af62b..969affd 100644
--- a/operator/src/main/java/com/google/gerrit/k8s/operator/Main.java
+++ b/operator/src/main/java/com/google/gerrit/k8s/operator/Main.java
@@ -30,11 +30,12 @@
   public static void main(String[] args) throws Exception {
     try {
       String getClusterModeEnv = System.getenv("CLUSTER_MODE");
+      String clusterDomain = System.getenv().getOrDefault("CLUSTER_DOMAIN", "cluster.local");
       ClusterMode clusterMode =
           getClusterModeEnv == null
               ? ClusterMode.HIGH_AVAILABILITY
               : ClusterMode.valueOf(getClusterModeEnv.toUpperCase());
-      OperatorContext.createInstance(clusterMode);
+      OperatorContext.createInstance(clusterMode, clusterDomain);
       logger.atInfo().log("Cluster mode: %s", clusterMode);
 
       Injector injector = Guice.createInjector(Stage.PRODUCTION, new OperatorModule(clusterMode));
diff --git a/operator/src/main/java/com/google/gerrit/k8s/operator/OperatorContext.java b/operator/src/main/java/com/google/gerrit/k8s/operator/OperatorContext.java
index ced0b3c..3ae7d60 100644
--- a/operator/src/main/java/com/google/gerrit/k8s/operator/OperatorContext.java
+++ b/operator/src/main/java/com/google/gerrit/k8s/operator/OperatorContext.java
@@ -20,14 +20,16 @@
   private static OperatorContext instance;
 
   private final ClusterMode clusterMode;
+  private final String clusterDomain;
 
-  private OperatorContext(ClusterMode clusterMode) {
+  private OperatorContext(ClusterMode clusterMode, String clusterDomain) {
     this.clusterMode = clusterMode;
+    this.clusterDomain = clusterDomain;
   }
 
-  public static void createInstance(ClusterMode clusterMode) {
+  public static void createInstance(ClusterMode clusterMode, String clusterDomain) {
     if (instance == null) {
-      instance = new OperatorContext(clusterMode);
+      instance = new OperatorContext(clusterMode, clusterDomain);
     }
   }
 
@@ -37,4 +39,11 @@
     }
     return instance.clusterMode;
   }
+
+  public static String getClusterDomain() {
+    if (instance == null) {
+      throw new UnsupportedOperationException("The Operation Context must be initialised");
+    }
+    return instance.clusterDomain;
+  }
 }
diff --git a/operator/src/main/java/com/google/gerrit/k8s/operator/gerrit/dependent/GerritAbstractService.java b/operator/src/main/java/com/google/gerrit/k8s/operator/gerrit/dependent/GerritAbstractService.java
index 76663c4..af80a4d 100644
--- a/operator/src/main/java/com/google/gerrit/k8s/operator/gerrit/dependent/GerritAbstractService.java
+++ b/operator/src/main/java/com/google/gerrit/k8s/operator/gerrit/dependent/GerritAbstractService.java
@@ -18,6 +18,7 @@
 import static com.google.gerrit.k8s.operator.gerrit.dependent.GerritStatefulSet.JGROUPS_PORT;
 import static com.google.gerrit.k8s.operator.gerrit.dependent.GerritStatefulSet.SSH_PORT;
 
+import com.google.gerrit.k8s.operator.OperatorContext;
 import com.google.gerrit.k8s.operator.api.model.gerrit.Gerrit;
 import com.google.gerrit.k8s.operator.cluster.GerritClusterLabelFactory;
 import com.google.gerrit.k8s.operator.gerrit.GerritReconciler;
@@ -82,7 +83,8 @@
   }
 
   public String getHostname(String name, String namespace) {
-    return String.format("%s.%s.svc.cluster.local", getName(name), namespace);
+    return String.format(
+        "%s.%s.svc.%s", getName(name), namespace, OperatorContext.getClusterDomain());
   }
 
   public String getUrl(Gerrit gerrit) {
diff --git a/operator/src/main/java/com/google/gerrit/k8s/operator/network/istio/dependent/GerritIstioServiceEntries.java b/operator/src/main/java/com/google/gerrit/k8s/operator/network/istio/dependent/GerritIstioServiceEntries.java
index d9d3874..aa57362 100644
--- a/operator/src/main/java/com/google/gerrit/k8s/operator/network/istio/dependent/GerritIstioServiceEntries.java
+++ b/operator/src/main/java/com/google/gerrit/k8s/operator/network/istio/dependent/GerritIstioServiceEntries.java
@@ -18,6 +18,7 @@
 import static com.google.gerrit.k8s.operator.gerrit.dependent.GerritStatefulSet.JGROUPS_PORT;
 import static com.google.gerrit.k8s.operator.gerrit.dependent.GerritStatefulSet.SSH_PORT;
 
+import com.google.gerrit.k8s.operator.OperatorContext;
 import com.google.gerrit.k8s.operator.api.model.network.GerritNetwork;
 import com.google.gerrit.k8s.operator.cluster.GerritClusterLabelFactory;
 import com.google.gerrit.k8s.operator.gerrit.dependent.GerritHeadlessService;
@@ -83,7 +84,8 @@
   }
 
   private String getServiceHost(String podName, String serviceName, String namespace) {
-    return String.format("%s.%s.%s.svc.cluster.local", podName, serviceName, namespace);
+    return String.format(
+        "%s.%s.%s.svc.%s", podName, serviceName, namespace, OperatorContext.getClusterDomain());
   }
 
   @Override
diff --git a/operator/src/main/java/com/google/gerrit/k8s/operator/receiver/dependent/ReceiverService.java b/operator/src/main/java/com/google/gerrit/k8s/operator/receiver/dependent/ReceiverService.java
index 4c2a746..0298417 100644
--- a/operator/src/main/java/com/google/gerrit/k8s/operator/receiver/dependent/ReceiverService.java
+++ b/operator/src/main/java/com/google/gerrit/k8s/operator/receiver/dependent/ReceiverService.java
@@ -16,6 +16,7 @@
 
 import static com.google.gerrit.k8s.operator.receiver.dependent.ReceiverDeployment.HTTP_PORT;
 
+import com.google.gerrit.k8s.operator.OperatorContext;
 import com.google.gerrit.k8s.operator.api.model.receiver.Receiver;
 import com.google.gerrit.k8s.operator.cluster.GerritClusterLabelFactory;
 import com.google.gerrit.k8s.operator.receiver.ReceiverReconciler;
@@ -76,7 +77,8 @@
   }
 
   public static String getHostname(String receiverName, String namespace) {
-    return String.format("%s.%s.svc.cluster.local", getName(receiverName), namespace);
+    return String.format(
+        "%s.%s.svc.%s", getName(receiverName), namespace, OperatorContext.getClusterDomain());
   }
 
   private static List<ServicePort> getServicePorts(Receiver receiver) {
diff --git a/operator/src/test/java/com/google/gerrit/k8s/operator/cluster/dependent/GerritClusterGerritsTest.java b/operator/src/test/java/com/google/gerrit/k8s/operator/cluster/dependent/GerritClusterGerritsTest.java
index f28a30b..4b10745 100644
--- a/operator/src/test/java/com/google/gerrit/k8s/operator/cluster/dependent/GerritClusterGerritsTest.java
+++ b/operator/src/test/java/com/google/gerrit/k8s/operator/cluster/dependent/GerritClusterGerritsTest.java
@@ -42,7 +42,7 @@
       String expectedGerritMaintenanceOutputFile)
       throws ConfigInvalidException {
 
-    OperatorContext.createInstance(Constants.ClusterMode.HIGH_AVAILABILITY);
+    OperatorContext.createInstance(Constants.ClusterMode.HIGH_AVAILABILITY, "cluster.local");
     GerritCluster gerritCluster =
         ReconcilerUtils.loadYaml(GerritCluster.class, this.getClass(), inputFile);
     ClusterManagedGerrit clusterManagedGerrit = new ClusterManagedGerrit();
diff --git a/operator/src/test/java/com/google/gerrit/k8s/operator/indexer/dependent/GerritIndexerTest.java b/operator/src/test/java/com/google/gerrit/k8s/operator/indexer/dependent/GerritIndexerTest.java
index 91b9314..21579e7 100644
--- a/operator/src/test/java/com/google/gerrit/k8s/operator/indexer/dependent/GerritIndexerTest.java
+++ b/operator/src/test/java/com/google/gerrit/k8s/operator/indexer/dependent/GerritIndexerTest.java
@@ -60,7 +60,7 @@
 
   @BeforeAll
   public void setup() throws Exception {
-    OperatorContext.createInstance(ClusterMode.HIGH_AVAILABILITY);
+    OperatorContext.createInstance(ClusterMode.HIGH_AVAILABILITY, "cluster.local");
     kubernetesServer.before();
   }
 
diff --git a/operator/src/test/java/com/google/gerrit/k8s/operator/network/istio/dependent/GerritClusterIstioTest.java b/operator/src/test/java/com/google/gerrit/k8s/operator/network/istio/dependent/GerritClusterIstioTest.java
index 47e1eab..b2bb58a 100644
--- a/operator/src/test/java/com/google/gerrit/k8s/operator/network/istio/dependent/GerritClusterIstioTest.java
+++ b/operator/src/test/java/com/google/gerrit/k8s/operator/network/istio/dependent/GerritClusterIstioTest.java
@@ -32,7 +32,7 @@
   @MethodSource("provideYamlManifests")
   public void expectedGerritClusterIstioComponentsCreated(
       String inputFile, String expectedGatewayOutputFile, String expectedVirtualServiceOutputFile) {
-    OperatorContext.createInstance(ClusterMode.HIGH_AVAILABILITY);
+    OperatorContext.createInstance(ClusterMode.HIGH_AVAILABILITY, "cluster.local");
     GerritNetwork gerritNetwork =
         ReconcilerUtils.loadYaml(GerritNetwork.class, this.getClass(), inputFile);
     GerritClusterIstioGateway gatewayDependent = new GerritClusterIstioGateway();
diff --git a/operator/src/test/java/com/google/gerrit/k8s/operator/server/AdmissionWebhookAbstractTest.java b/operator/src/test/java/com/google/gerrit/k8s/operator/server/AdmissionWebhookAbstractTest.java
index 95cbce6..49ee9ea 100644
--- a/operator/src/test/java/com/google/gerrit/k8s/operator/server/AdmissionWebhookAbstractTest.java
+++ b/operator/src/test/java/com/google/gerrit/k8s/operator/server/AdmissionWebhookAbstractTest.java
@@ -73,7 +73,7 @@
 
     kubernetesServer.before();
 
-    OperatorContext.createInstance(getClusterMode());
+    OperatorContext.createInstance(getClusterMode(), "cluster.local");
     server.registerWebhook(new GerritClusterAdmissionWebhook(getClusterMode()));
     server.registerWebhook(new GerritAdmissionWebhook(getClusterMode()));
     server.start();
diff --git a/operator/src/test/java/com/google/gerrit/k8s/operator/test/AbstractGerritOperatorE2ETest.java b/operator/src/test/java/com/google/gerrit/k8s/operator/test/AbstractGerritOperatorE2ETest.java
index dd45f78..e79f536 100644
--- a/operator/src/test/java/com/google/gerrit/k8s/operator/test/AbstractGerritOperatorE2ETest.java
+++ b/operator/src/test/java/com/google/gerrit/k8s/operator/test/AbstractGerritOperatorE2ETest.java
@@ -89,7 +89,7 @@
 
     client.resource(receiverCredentials).inNamespace(operator.getNamespace()).createOrReplace();
 
-    OperatorContext.createInstance(Constants.ClusterMode.HIGH_AVAILABILITY);
+    OperatorContext.createInstance(Constants.ClusterMode.HIGH_AVAILABILITY, "cluster.local");
 
     gerritCluster = new TestGerritCluster(client, operator.getNamespace());
     gerritCluster.setIngressType(getIngressType());
