Agent Connection

    To use the multi-cluster feature using an agent, you must have at least two clusters serving as the H Cluster and the M Cluster respectively. A cluster can be defined as the H Cluster or the M Cluster either before or after you install KubeSphere. For more information about installing KubeSphere, refer to Installing on Linux and .

    A host cluster provides you with the central control plane and you can only define one host cluster.

    If you already have a standalone KubeSphere cluster installed, you can set the value of to host by editing the cluster configuration.

    • Option A - Use the web console:

      Use the admin account to log in to the console and go to CRDs on the Cluster Management page. Enter the keyword ClusterConfiguration and go to its detail page. Edit the YAML of ks-installer, which is similar to Enable Pluggable Components.

    • Option B - Use Kubectl:

    In the YAML file of ks-installer, navigate to multicluster, set the value of clusterRole to host, then click Update (if you use the web console) to make it effective:

    1. multicluster:
    2. clusterRole: host

    You need to wait for a while so that the change can take effect.

    You can define a host cluster before you install KubeSphere either on Linux or on an existing Kubernetes cluster. If you want to , you use a config-sample.yaml file. If you want to install KubeSphere on an existing Kubernetes cluster, you use two YAML files, one of which is cluster-configuration.yaml. To set a host cluster, change the value of clusterRole to host in config-sample.yaml or cluster-configuration.yaml accordingly before you install KubeSphere.

    1. multicluster:
    2. clusterRole: host

    Note

    If you install KubeSphere on a single-node cluster (), you do not need to create a config-sample.yaml file. In this case, you can set a host cluster after KubeSphere is installed.

    You can use kubectl to retrieve the installation logs to verify the status by running the following command. Wait for a while, and you will be able to see the successful log return if the host cluster is ready.

    1. kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l app=ks-install -o jsonpath='{.items[0].metadata.name}') -f

    After the installation of the host cluster, a proxy service called tower will be created in kubesphere-system, whose type is LoadBalancer.

    If a LoadBalancer plugin is available for the cluster, you can see a corresponding address for EXTERNAL-IP of tower, which will be acquired by KubeSphere. In this case, the proxy service is set automatically. That means you can skip the step to set the proxy. Execute the following command to verify if you have a LoadBalancer.

    1. kubectl -n kubesphere-system get svc

    The output is similar to this:

    Generally, there is always a LoadBalancer solution in the public cloud, and the external IP can be allocated by the load balancer automatically. If your clusters are running in an on-premises environment, especially a bare metal environment, you can use PorterLB as the LB solution.

    1. If you cannot see a corresponding address displayed (EXTERNAL-IP is pending), you need to manually set the proxy address. For example, you have an available public IP address 139.198.120.120, and port 8080 of this IP address has been forwarded to port 30721 of the cluster. Execute the following command to check the service.

      The output is similar to this:

      1. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
      2. tower LoadBalancer 10.233.63.191 <pending> 8080:30721/TCP 16h
    2. Add the value of proxyPublishAddress to the configuration file of ks-installer and input the public IP address (139.198.120.120 in this tutorial) and port number as follows.

      • Option A - Use the web console:

        Use the admin account to log in to the console and go to CRDs on the Cluster Management page. Enter the keyword ClusterConfiguration and go to its detail page. Edit the YAML of ks-installer, which is similar to .

      • Option B - Use Kubectl:

        1. kubectl -n kubesphere-system edit clusterconfiguration ks-installer

      Navigate to multicluster and add a new line for proxyPublishAddress to define the IP address to access tower.

      1. multicluster:
      2. clusterRole: host
      3. proxyPublishAddress: http://139.198.120.120:8080 # Add this line to set the address to access tower
    3. Save the configuration and wait for a while, or you can manually restart ks-apiserver to make the change effective immediately using the following command.

      1. kubectl -n kubesphere-system rollout restart deployment ks-apiserver

    In order to manage the member cluster from the host cluster, you need to make jwtSecret the same between them. Therefore, get it first by excuting the following command on the host cluster.

    1. kubectl -n kubesphere-system get cm kubesphere-config -o yaml | grep -v "apiVersion" | grep jwtSecret

    The output may look like this:

    If you already have a standalone KubeSphere cluster installed, you can set the value of clusterRole to by editing the cluster configuration.

    • Option A - Use the web console:

      Use the admin account to log in to the console and go to CRDs on the Cluster Management page. Enter the keyword ClusterConfiguration and go to its detail page. Edit the YAML of ks-installer, which is similar to Enable Pluggable Components.

    1. authentication:
    2. jwtSecret: gfIwilcc0WjNGKJ5DLeksf2JKfcLgTZU

    Scroll down and set the value of clusterRole to member, then click Update (if you use the web console) to make it effective:

    1. multicluster:
    2. clusterRole: member

    You need to wait for a while so that the change can take effect.

    You can define a member cluster before you install KubeSphere either on Linux or on an existing Kubernetes cluster. If you want to , you use a config-sample.yaml file. If you want to install KubeSphere on an existing Kubernetes cluster, you use two YAML files, one of which is cluster-configuration.yaml. To set a member cluster, input the value of jwtSecret shown above and change the value of clusterRole to member in config-sample.yaml or cluster-configuration.yaml accordingly before you install KubeSphere.

    1. authentication:
    2. jwtSecret: gfIwilcc0WjNGKJ5DLeksf2JKfcLgTZU
    1. multicluster:
    2. clusterRole: member

    Note

    If you install KubeSphere on a single-node cluster (), you do not need to create a config-sample.yaml file. In this case, you can set a member cluster after KubeSphere is installed.

    You can use kubectl to retrieve the installation logs to verify the status by running the following command. Wait for a while, and you will be able to see the successful log return if the member cluster is ready.

    1. Log in to the KubeSphere console as admin and click Add Cluster on the Cluster Management page.

    2. Enter the basic information of the cluster to be imported and click Next.

      cluster-info

    3. In Connection Method, select Cluster connection agent and click Import. It will show the agent deployment generated by the H Cluster in the console.

    4. Create an file on the M Cluster based on the instruction, then copy and paste the agent deployment to the file. Execute kubectl create -f agent.yaml on the node and wait for the agent to be up and running. Please make sure the proxy address is accessible to the M Cluster.

    5. You can see the cluster you have imported in the H Cluster when the cluster agent is up and running.

      cluster-imported