{"slug":"expose-a-service-in-one-cluster-to-another-cluster-cross-cluster-connectivity","title":"Expose a Service in one cluster to another cluster (cross-cluster connectivity)","tags":["tailscale","containers"],"agent_summary":"Last validated: Jan 5, 2026","trigger_phrases":[],"runnable":false,"markdown":"\r\n# Expose a Service in one cluster to another cluster (cross-cluster connectivity)\r\n\r\nLast validated: Jan 5, 2026\r\n\r\nYou can use the Tailscale Kubernetes Operator to expose a `Service` in one cluster to another cluster. This is done by exposing the `Service` on destination cluster A to the tailnet ( [cluster ingress](https://tailscale.com/docs/features/kubernetes-operator/how-to/cluster-ingress)), and connecting from a source `Service` in cluster B to the tailnet ( [cluster egress](https://tailscale.com/docs/features/kubernetes-operator/how-to/cluster-egress)) to access the `Service` running in cluster A.\r\n\r\nFor GitOps workflows that need to manage deployments across multiple clusters, refer to [Manage multi-cluster Kubernetes deployments with ArgoCD](https://tailscale.com/docs/solutions/manage-multi-cluster-kubernetes-deployments-argocd). To distribute secrets between clusters, refer to [Sync Kubernetes secrets across clusters with External Secrets Operator](https://tailscale.com/docs/solutions/sync-kubernetes-secrets-across-clusters-external-secrets).\r\n\r\n## [Prerequisites](https://tailscale.com/docs/features/kubernetes-operator/how-to/cross-cluster\\#prerequisites)\r\n\r\n- [Set up the Kubernetes Operator](https://tailscale.com/docs/features/kubernetes-operator#setup).\r\n\r\n## [Cross-cluster connectivity setup](https://tailscale.com/docs/features/kubernetes-operator/how-to/cross-cluster\\#cross-cluster-connectivity-setup)\r\n\r\nThis will need to be configured for each `Ingress` and `Egress` pair of `Services`. To set this up for access through ingress to a `Service` in cluster A and routing through egress from a `Service` in cluster B:\r\n\r\n1. Set up [`Ingress`](https://tailscale.com/docs/features/kubernetes-operator/how-to/cluster-ingress) in cluster A for the `Service` you wish to access.\r\n2. Expose the external `Service` (running in cluster A) using its Tailscale IP address in cluster B with an [annotation on the external `Service`](https://tailscale.com/docs/features/kubernetes-operator/how-to/cluster-egress#tailnet-node-ip-expose).\r\n\r\n## [Customization](https://tailscale.com/docs/features/kubernetes-operator/how-to/cross-cluster\\#customization)\r\n\r\n[Customize the operator and resources it manages](https://tailscale.com/docs/features/kubernetes-operator/how-to/customize).\r\n\r\n## [Troubleshooting](https://tailscale.com/docs/features/kubernetes-operator/how-to/cross-cluster\\#troubleshooting)\r\n\r\n[Troubleshoot the operator and resources it manages](https://tailscale.com/docs/reference/troubleshooting/containers/kubernetes-operator).\r\n\r\n![Project Logo](https://cdn.brandfetch.io/tailscale.com/fallback/lettermark/theme/dark/h/256/w/256/icon?c=1bfwsmEH20zzEfSNTed)\r\n\r\nAsk AI\r\n\r\nreCAPTCHA\r\n\r\nRecaptcha requires verification.\r\n\r\nprotected by **reCAPTCHA**\r\n","html":"<h1>Expose a Service in one cluster to another cluster (cross-cluster connectivity)</h1>\n<p>Last validated: Jan 5, 2026</p>\n<p>You can use the Tailscale Kubernetes Operator to expose a <code>Service</code> in one cluster to another cluster. This is done by exposing the <code>Service</code> on destination cluster A to the tailnet ( <a href=\"https://tailscale.com/docs/features/kubernetes-operator/how-to/cluster-ingress\">cluster ingress</a>), and connecting from a source <code>Service</code> in cluster B to the tailnet ( <a href=\"https://tailscale.com/docs/features/kubernetes-operator/how-to/cluster-egress\">cluster egress</a>) to access the <code>Service</code> running in cluster A.</p>\n<p>For GitOps workflows that need to manage deployments across multiple clusters, refer to <a href=\"https://tailscale.com/docs/solutions/manage-multi-cluster-kubernetes-deployments-argocd\">Manage multi-cluster Kubernetes deployments with ArgoCD</a>. To distribute secrets between clusters, refer to <a href=\"https://tailscale.com/docs/solutions/sync-kubernetes-secrets-across-clusters-external-secrets\">Sync Kubernetes secrets across clusters with External Secrets Operator</a>.</p>\n<h2><a href=\"https://tailscale.com/docs/features/kubernetes-operator/how-to/cross-cluster#prerequisites\">Prerequisites</a></h2>\n<ul>\n<li><a href=\"https://tailscale.com/docs/features/kubernetes-operator#setup\">Set up the Kubernetes Operator</a>.</li>\n</ul>\n<h2><a href=\"https://tailscale.com/docs/features/kubernetes-operator/how-to/cross-cluster#cross-cluster-connectivity-setup\">Cross-cluster connectivity setup</a></h2>\n<p>This will need to be configured for each <code>Ingress</code> and <code>Egress</code> pair of <code>Services</code>. To set this up for access through ingress to a <code>Service</code> in cluster A and routing through egress from a <code>Service</code> in cluster B:</p>\n<ol>\n<li>Set up <a href=\"https://tailscale.com/docs/features/kubernetes-operator/how-to/cluster-ingress\"><code>Ingress</code></a> in cluster A for the <code>Service</code> you wish to access.</li>\n<li>Expose the external <code>Service</code> (running in cluster A) using its Tailscale IP address in cluster B with an <a href=\"https://tailscale.com/docs/features/kubernetes-operator/how-to/cluster-egress#tailnet-node-ip-expose\">annotation on the external <code>Service</code></a>.</li>\n</ol>\n<h2><a href=\"https://tailscale.com/docs/features/kubernetes-operator/how-to/cross-cluster#customization\">Customization</a></h2>\n<p><a href=\"https://tailscale.com/docs/features/kubernetes-operator/how-to/customize\">Customize the operator and resources it manages</a>.</p>\n<h2><a href=\"https://tailscale.com/docs/features/kubernetes-operator/how-to/cross-cluster#troubleshooting\">Troubleshooting</a></h2>\n<p><a href=\"https://tailscale.com/docs/reference/troubleshooting/containers/kubernetes-operator\">Troubleshoot the operator and resources it manages</a>.</p>\n<p><img src=\"https://cdn.brandfetch.io/tailscale.com/fallback/lettermark/theme/dark/h/256/w/256/icon?c=1bfwsmEH20zzEfSNTed\" alt=\"Project Logo\"></p>\n<p>Ask AI</p>\n<p>reCAPTCHA</p>\n<p>Recaptcha requires verification.</p>\n<p>protected by <strong>reCAPTCHA</strong></p>\n"}