代理连接

前提条件

已经安装了至少两个 KubeSphere 集群,如果尚未安装,请参阅在 Linux 上安装或者在 Kubernetes 上安装

备注

多集群管理要求将 Kubesphere 安装在目标集群上,如果您已经有一个集群,则可以在上面部署 KubeSphere 最小安装,以便可以将其导入到多集群控制台。有关详细信息,请参见 Kubernetes 上的最小 KubeSphere

代理连接

KubeSphere 的 Tower 组件用于代理连接,它是通过代理在集群之间进行网络连接的工具。具体来说,如果主集群(以下简称 H 集群)无法直接访问成员集群(以下简称 M 集群),则可以暴露 H 集群的代理服务地址,M 集群可以通过这个代理服务地址连接到 H 集群。此方法适用于当 M 集群处于私有环境(例如 IDC)并且 H 集群能够暴露代理服务时,或者当集群分布在不同的云服务提供商之上时。

准备主集群

如果已经安装了独立的 KubeSphere,则可以通过编辑集群配置,将clusterRole的值设置为host。您需要稍等几分钟,以使更改生效。

  • 选项 A - 使用 web 控制台:

    使用admin帐户登录控制台,然后转到集群管理页面上的 CRDs,输入关键字ClusterConfiguration,然后转到其详细信息页面,编辑ks-installer的 YAML,方法类似于启用可插拔组件

  • 选项 B - 使用 Kubectl:

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

向下滚动并将clusterRole的值设置为host,然后点击更新(如果使用 web 控制台)以使其生效:

  1. multicluster:
  2. clusterRole: host

安装主集群和安装一个普通的 KubeSphere 集群没有太大差别,唯一的区别是在配置文件config-sample.yaml中设置参数clusterRole如下:

  1. multicluster:
  2. clusterRole: host

您可以使用 kubectl 来获取安装日志以验证状态。运行以下命令,稍等片刻,如果主集群已准备就绪,您将看到成功的日志返回。

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

设置代理服务地址

安装主集群后,将在kubesphere-system中创建一个名为 tower 的代理服务,其类型为LoadBalancer

如果集群中有可用的 LoadBalancer 插件,则可以看到 tower 服务有相应的EXTERNAL-IP地址,该地址将由 KubeSphere 自动获取并配置代理服务地址,这意味着您可以跳过设置代理服务地址这一步。执行以下命令确认是否有 LoadBalancer 插件。

  1. kubectl -n kubesphere-system get svc

命令的输出可能如下所示:

  1. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
  2. tower LoadBalancer 10.233.63.191 139.198.110.23 8080:30721/TCP 16h

备注

通常情况主流公有云厂商会提供负载均衡器解决方案,并且负载均衡器可以自动分配外部 IP。如果您的集群运行在本地环境中,尤其是在裸金属环境中,可以使用 Porter 作为负载均衡器解决方案。

  1. 如果在 tower 服务下看不到相应的地址显示出来(EXTERNAL-IP 处于 pending 状态),则需要手动设置代理地址。例如,您有一个可用的公有 IP 地址139.198.120.120,并且此 IP 地址的端口8080被转发到集群的端口30721。执行以下命令来检查服务。

    1. $ kubectl -n kubesphere-system get svc
    2. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
    3. tower LoadBalancer 10.233.63.191 <pending> 8080:30721/TCP 16h
  2. proxyPublishAddress的值添加到 ks-installer 的配置文件中,并按如下所示输入公有 IP 地址(此处示例139.198.120.120)和端口号。

    • 选项 A - 使用 web 控制台:

      使用admin帐户登录控制台,然后进入集群管理页面上的 CRDs,输入关键字ClusterConfiguration,然后进入其详细信息页面,编辑ks-installer的 YAML,方法类似于启用可插拔组件

    • 选项 B - 使用 Kubectl:

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

    定位到multicluster并为proxyPublishAddress添加新行来定义 IP 地址,以便访问 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. 保存配置并重启ks-apiserver

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

准备成员集群

为了在主集群管理成员集群,需要使它们之间的jwtSecret相同。因此,首先需要通过以下命令从主集群中获取它。

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

命令输出可能如下所示:

  1. jwtSecret: "gfIwilcc0WjNGKJ5DLeksf2JKfcLgTZU"

如果已经安装了独立的 KubeSphere,则可以通过编辑集群配置,将clusterRole的值设置为member。您需要稍等几分钟,以使更改生效。

  • 选项 A - 使用 web 控制台:

    使用admin帐户登录控制台,然后进入集群管理页面上的 CRDs,输入关键字 ClusterConfiguration,然后进入其详细信息页面,编辑ks-installer的 YAML,方法类似于启用可插拔组件

  • 选项 B - 使用 Kubectl:

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

输入上面相应地方显示的jwtSecret

  1. authentication:
  2. jwtSecret: gfIwilcc0WjNGKJ5DLeksf2JKfcLgTZU

向下滚动并将clusterRole的值设置为member,然后点击更新(如果使用 web 控制台)以使其生效:

  1. multicluster:
  2. clusterRole: member

安装成员集群和安装一个普通的 KubeSphere 集群没有太大差别,唯一的区别在配置文件config-sample.yaml中设置参数jwtSecretclusterRole如下:

  1. authentication:
  2. jwtSecret: gfIwilcc0WjNGKJ5DLeksf2JKfcLgTZU

向下滚动并将 clusterRole 的值设置为 member

  1. multicluster:
  2. clusterRole: member

导入集群

  1. 打开 H 集群仪表板,然后点击添加集群

    添加集群

  2. 输入要导入的集群的基本信息,然后单击下一步

    导入集群

  3. 连接方法中,选择集群连接代理,然后点击导入

    代理

  4. 根据指示在 M 集群中创建一个agent.yaml文件,然后将 deployment 复制并粘贴到该文件中,执行kubectl create -f agent.yaml然后等待代理启动并运行。请确保 M 集群可以访问代理地址。

  5. 当集群代理启动并运行时,您可以在 H 集群中看到已导入的集群。

    Azure AKS