代理连接

KubeSphere 的组件 Tower 用于代理连接。Tower 是一种通过代理在集群间建立网络连接的工具。如果 Host 集群(简称 H 集群)无法直接访问 Member 集群(简称 M 集群),您可以暴露 H 集群的代理服务地址,这样可以让 M 集群通过代理连接到 H 集群。当 M 集群部署在私有环境(例如 IDC)并且 H 集群可以暴露代理服务时,适用此连接方法。当您的集群分布部署在不同的云厂商上时,同样适用代理连接的方法。

要通过代理连接使用多集群功能,您必须拥有至少两个集群,分别用作 H 集群和 M 集群。您可以在安装 KubeSphere 之前或者之后将一个集群指定为 H 集群或 M 集群。有关安装 KubeSphere 的更多信息,请参考在 Linux 上安装在 Kubernetes 上安装

准备 Host 集群

Host 集群为您提供中央控制平面,并且您只能指定一个 Host 集群。

如果已经安装了独立的 KubeSphere 集群,您可以编辑集群配置,将 clusterRole 的值设置为 host

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

    使用 admin 帐户登录控制台,然后进入集群管理页面上的自定义资源 CRD,输入关键字 ClusterConfiguration,然后转到其详情页面。编辑 ks-installer 的 YAML 文件,方法类似于启用可插拔组件

  • 选项 B - 使用 Kubectl:

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

ks-installer 的 YAML 文件中,搜寻到 multicluster,将 clusterRole 的值设置为 host,然后点击更新(如果使用 Web 控制台)使其生效:

  1. multicluster:
  2. clusterRole: host

您需要稍等片刻待该更改生效。

在 Linux 上或者在现有 Kubernetes 集群上安装 KubeSphere 之前,您可以定义一个 Host 集群。如果您想在 Linux 上安装 KubeSphere,需要使用 config-sample.yaml 文件。如果您想在现有 Kubernetes 集群上安装 KubeSphere,需要使用两个 YAML 文件,其中一个是 cluster-configuration.yaml。要设置一个 Host 集群,请在安装 KubeSphere 之前,将 config-sample.yamlcluster-configuration.yaml 文件中对应的 clusterRole 的值修改为 host

  1. multicluster:
  2. clusterRole: host

备注

如果您在单节点集群上安装 KubeSphere (All-in-One),则不需要创建 config-sample.yaml 文件。这种情况下,您可以在安装 KubeSphere 之后设置 Host 集群。

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

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

设置代理服务地址

安装 Host 集群后,将在 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

备注

一般来说,主流公有云厂商会提供 LoadBalancer 解决方案,并且负载均衡器可以自动分配外部 IP。如果您的集群运行在本地环境中,尤其是在裸机环境中,可以使用 PorterLB 作为负载均衡器解决方案。

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

    1. kubectl -n kubesphere-system get svc

    命令输出结果可能如下所示:

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

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

      使用 admin 帐户登录控制台,然后进入集群管理页面上的自定义资源 CRD,输入关键字 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

准备 Member 集群

为了通过 Host 集群管理 Member 集群,您需要使它们之间的 jwtSecret 相同。因此,您首先需要在 Host 集群中执行以下命令来获取它。

  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 帐户登录控制台,然后进入集群管理页面上的自定义资源 CRD,输入关键字 ClusterConfiguration,然后转到其详情页面。编辑 ks-installer 的 YAML 文件,方法类似于启用可插拔组件

  • 选项 B - 使用 Kubectl:

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

ks-installer 的 YAML 文件中对应输入上面所示的 jwtSecret

  1. authentication:
  2. jwtSecret: gfIwilcc0WjNGKJ5DLeksf2JKfcLgTZU

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

  1. multicluster:
  2. clusterRole: member

您需要稍等片刻待该更改生效。

在 Linux 上或者在现有 Kubernetes 集群上安装 KubeSphere 之前,您可以定义 Member 集群。如果您想在 Linux 上安装 KubeSphere,需要使用 config-sample.yaml 文件。如果您想在现有 Kubernetes 集群上安装 KubeSphere,需要使用两个 YAML 文件,其中一个是 cluster-configuration.yaml。要设置 Member 集群,请在安装 KubeSphere 之前,在 config-sample.yamlcluster-configuration.yaml 文件中输入上方 jwtSecret 所对应的值,并将 clusterRole 的值修改为 member

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

备注

如果您在单节点集群上安装 KubeSphere (All-in-One),则不需要创建 config-sample.yaml 文件。这种情况下,您可以在安装 KubeSphere 之后设置 Member 集群。

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

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

导入 Member 集群

  1. admin 身份登录 KubeSphere 控制台,转到集群管理页面点击添加集群

    添加集群

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

    集群信息

  3. 连接方式,选择集群连接代理,然后点击导入。H 集群生成的代理部署会显示在控制台上。

    代理连接

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

  5. 待集群代理启动并运行,您会看到 M 集群已经导入 H 集群。

    已导入的集群