代理连接
KubeSphere 的组件 Tower 用于代理连接。Tower 是一种通过代理在集群间建立网络连接的工具。如果主集群无法直接访问成员集群,您可以暴露主集群的代理服务地址,这样可以让成员集群通过代理连接到主集群。当成员集群部署在私有环境(例如 IDC)并且主集群可以暴露代理服务时,适用此连接方法。当您的集群分布部署在不同的云厂商上时,同样适用代理连接的方法。
要通过代理连接使用多集群功能,您必须拥有至少两个集群,分别用作主集群和成员集群。您可以在安装 KubeSphere 之前或者之后将一个集群指定为主集群或成员集群。有关安装 KubeSphere 的更多信息,请参考在 Linux 上安装和在 Kubernetes 上安装。
准备主集群
主集群为您提供中央控制平面,并且您只能指定一个主集群。
如果已经安装了独立的 KubeSphere 集群,您可以编辑集群配置,将 clusterRole
的值设置为 host
。
选项 A - 使用 Web 控制台:
使用
admin
帐户登录控制台,然后进入集群管理页面上的定制资源定义,输入关键字ClusterConfiguration
,然后转到其详情页面。编辑ks-installer
的 YAML 文件,方法类似于启用可插拔组件。选项 B - 使用 Kubectl:
kubectl edit cc ks-installer -n kubesphere-system
在 ks-installer
的 YAML 文件中,搜寻到 multicluster
,将 clusterRole
的值设置为 host
,然后点击确定(如果使用 Web 控制台)使其生效:
multicluster:
clusterRole: host
要设置主集群名称,请在 ks-installer
的 YAML 文件中的 multicluster.clusterRole
下添加 hostClusterName
字段:
multicluster:
clusterRole: host
hostClusterName: <主集群名称>
备注
- 建议您在准备主集群的同时设置主集群名称。若您的主集群已在运行并且已经部署过资源,不建议您再去设置主集群名称。
- 主集群名称只能包含小写字母、数字、连字符(-)或者半角句号(.),必须以小写字母或数字开头和结尾。
您需要稍等片刻待该更改生效。
在 Linux 上或者在现有 Kubernetes 集群上安装 KubeSphere 之前,您可以定义一个主集群。如果您想在 Linux 上安装 KubeSphere,需要使用 config-sample.yaml
文件。如果您想在现有 Kubernetes 集群上安装 KubeSphere,需要使用两个 YAML 文件,其中一个是 cluster-configuration.yaml
。
要设置一个主集群,请在安装 KubeSphere 之前,将 config-sample.yaml
或 cluster-configuration.yaml
文件中对应的 clusterRole
的值修改为 host
。
multicluster:
clusterRole: host
要设置主集群名称,请在 config-sample.yaml
或 cluster-configuration.yaml
文件中的 multicluster.clusterRole
下添加 hostClusterName
字段:
multicluster:
clusterRole: host
hostClusterName: <主集群名称>
备注
- 主集群名称只能包含小写字母、数字、连字符(-)或者半角句号(.),必须以小写字母或数字开头和结尾。
信息
如果您在单节点集群上安装 KubeSphere (All-in-One),则不需要创建 config-sample.yaml
文件。这种情况下,您可以在安装 KubeSphere 之后设置主集群。
您可以使用 kubectl 来获取安装日志以验证状态。运行以下命令,稍等片刻,如果主集群已准备就绪,您将看到成功的日志返回。
kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l 'app in (ks-install, ks-installer)' -o jsonpath='{.items[0].metadata.name}') -f
设置代理服务地址
安装主集群后,将在 kubesphere-system
中创建一个名为 tower
的代理服务,其类型为 LoadBalancer
。
如果集群中有可用的 LoadBalancer 插件,则可以看到 Tower 服务有相应的 EXTERNAL-IP
地址,该地址将由 KubeSphere 自动获取并配置代理服务地址,这意味着您可以跳过设置代理服务地址这一步。执行以下命令确认是否有 LoadBalancer 插件。
kubectl -n kubesphere-system get svc
命令输出结果可能如下所示:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
tower LoadBalancer 10.233.63.191 139.198.110.23 8080:30721/TCP 16h
备注
一般来说,主流公有云厂商会提供 LoadBalancer 解决方案,并且负载均衡器可以自动分配外部 IP。如果您的集群运行在本地环境中,尤其是在裸机环境中,可以使用 OpenELB 作为负载均衡器解决方案。
执行以下命令来检查服务。
kubectl -n kubesphere-system get svc
命令输出结果可能如下所示。在此示例中,可以看出
NodePort
为30721
:NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
tower LoadBalancer 10.233.63.191 <pending> 8080:30721/TCP 16h
由于
EXTERNAL-IP
处于pending
状态,您需要手动设置代理地址。例如,如果您的公有 IP 地址为139.198.120.120
,则需要将公网 IP 的端口,如30721
转发到NodeIP
:NodePort
。将
proxyPublishAddress
的值添加到ks-installer
的配置文件中,并按如下所示输入公有 IP 地址(此处示例139.198.120.120
)和端口号。选项 A - 使用 Web 控制台:
使用
admin
帐户登录控制台,然后进入集群管理页面上的定制资源定义,输入关键字ClusterConfiguration
,然后转到其详情页面。编辑ks-installer
的 YAML 文件,方法类似于启用可插拔组件。选项 B - 使用 Kubectl:
kubectl -n kubesphere-system edit clusterconfiguration ks-installer
搜寻到
multicluster
并添加新行输入proxyPublishAddress
来定义 IP 地址,以便访问 Tower。multicluster:
clusterRole: host
proxyPublishAddress: http://139.198.120.120:{NodePort} # Add this line to set the address to access tower
请将 YAML 文件中的 {NodePort} 替换为您在步骤 2 中指定的端口。
保存配置并稍等片刻,或者您可以运行以下命令手动重启
ks-apiserver
使修改立即生效。kubectl -n kubesphere-system rollout restart deployment ks-apiserver
准备成员集群
为了通过主集群管理成员集群,您需要使它们之间的 jwtSecret
相同。因此,您首先需要在主集群中执行以下命令来获取它。
kubectl -n kubesphere-system get cm kubesphere-config -o yaml | grep -v "apiVersion" | grep jwtSecret
命令输出结果可能如下所示:
jwtSecret: "gfIwilcc0WjNGKJ5DLeksf2JKfcLgTZU"
如果已经安装了独立的 KubeSphere 集群,您可以编辑集群配置,将 clusterRole
的值设置为 member
。
选项 A - 使用 Web 控制台:
使用
admin
帐户登录控制台,然后进入集群管理页面上的定制资源定义,输入关键字ClusterConfiguration
,然后转到其详情页面。编辑ks-installer
的 YAML 文件,方法类似于启用可插拔组件。选项 B - 使用 Kubectl:
kubectl edit cc ks-installer -n kubesphere-system
在 ks-installer
的 YAML 文件中对应输入上面所示的 jwtSecret
:
authentication:
jwtSecret: gfIwilcc0WjNGKJ5DLeksf2JKfcLgTZU
向下滚动并将 clusterRole
的值设置为 member
,然后点击确定(如果使用 Web 控制台)使其生效:
multicluster:
clusterRole: member
您需要稍等片刻待该更改生效。
在 Linux 上或者在现有 Kubernetes 集群上安装 KubeSphere 之前,您可以定义成员集群。如果您想在 Linux 上安装 KubeSphere,需要使用 config-sample.yaml
文件。如果您想在现有 Kubernetes 集群上安装 KubeSphere,需要使用两个 YAML 文件,其中一个是 cluster-configuration.yaml
。要设置成员集群,请在安装 KubeSphere 之前,在 config-sample.yaml
或 cluster-configuration.yaml
文件中输入上方 jwtSecret
所对应的值,并将 clusterRole
的值修改为 member
。
authentication:
jwtSecret: gfIwilcc0WjNGKJ5DLeksf2JKfcLgTZU
multicluster:
clusterRole: member
备注
如果您在单节点集群上安装 KubeSphere (All-in-One),则不需要创建 config-sample.yaml
文件。这种情况下,您可以在安装 KubeSphere 之后设置成员集群。
您可以使用 kubectl 来获取安装日志以验证状态。运行以下命令,稍等片刻,如果成员集群已准备就绪,您将看到成功的日志返回。
kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l 'app in (ks-install, ks-installer)' -o jsonpath='{.items[0].metadata.name}') -f
导入成员集群
以
admin
身份登录 KubeSphere 控制台,转到集群管理页面点击添加集群。在导入集群页面输入要导入的集群的基本信息。您也可以点击右上角的编辑模式以 YAML 格式查看并编辑基本信息。编辑完成后,点击下一步。
在连接方式,选择集群连接代理,然后点击创建。主集群为代理部署 (Deployment) 生成的 YAML 配置文件会显示在控制台上。
根据指示在成员集群中创建一个
agent.yaml
文件,然后将代理部署复制并粘贴到该文件中。在该节点上执行kubectl create -f agent.yaml
然后等待代理启动并运行。请确保成员集群可以访问代理地址。待集群代理启动并运行,您会看到成员集群已经导入主集群。