Use Submariner to connect the network between Karmada member clusters

This document demonstrates how to use the Submariner to connect the network between member clusters.

Submariner flattens the networks between the connected clusters, and enables IP reachability between Pods and Services.

Install Karmada

Install Karmada control plane

Following the steps Install Karmada control plane in Quick Start, you can get a Karmada.

Join member cluster

In the following steps, we are going to create a member cluster and then join the cluster to Karmada control plane.

  1. Create member cluster

We are going to create a cluster named cluster1 and we want the KUBECONFIG file in $HOME/.kube/cluster.config. Run following command:

  1. hack/create-cluster.sh cluster1 $HOME/.kube/cluster1.config

This will create a cluster by kind.

  1. Join member cluster to Karmada control plane

Export KUBECONFIG and switch to karmada apiserver:

  1. export KUBECONFIG=$HOME/.kube/karmada.config
  2. kubectl config use-context karmada-apiserver

Then, install karmadactl command and join the member cluster:

  1. go install github.com/karmada-io/karmada/cmd/karmadactl
  2. karmadactl join cluster1 --cluster-kubeconfig=$HOME/.kube/cluster1.config

In addition to the original member clusters, ensure that at least two member clusters are joined to the Karmada.

In this example, we have joined two member clusters to the Karmada:

  1. # kubectl get clusters
  2. NAME VERSION MODE READY AGE
  3. cluster1 v1.21.1 Push True 16s
  4. cluster2 v1.21.1 Push True 5s
  5. ...

Deploy Submariner

We are going to deploy Submariner components on the host cluster and member clusters by using the subctl CLI as it’s the recommended deployment method according to Submariner official documentation.

Submariner uses a central Broker component to facilitate the exchange of metadata information between Gateway Engines deployed in participating clusters. The Broker must be deployed on a single Kubernetes cluster. This cluster’s API server must be reachable by all Kubernetes clusters connected by Submariner, therefore, we deployed it on the karmada-host cluster.

Install subctl

Please refer to the SUBCTL Installation.

Use karmada-host as Broker

  1. subctl deploy-broker --kubeconfig /root/.kube/karmada.config --kubecontext karmada-host

Join cluster1 and cluster2 to the Broker

  1. subctl join --kubeconfig /root/.kube/cluster1.config broker-info.subm --natt=false
  1. subctl join --kubeconfig /root/.kube/cluster2.config broker-info.subm --natt=false

Connectivity test

Please refer to the Multi-cluster Service Discovery.