多集群(Cluster Mesh)功能允许在多个 Kubernetes 集群中进行网络通信,同时保持完整的策略执行。
设置 Cluster Mesh
-
前提条件:
- 所有集群必须使用相同的数据路径模式。
- 集群间节点必须能够通过内部 IP 进行通信。
- 网络必须允许集群间通信,具体端口在防火墙要求部分有详细说明。
-
安装 Cilium CLI:
- 需要下载并安装 Cilium CLI,具体步骤依赖于操作系统。
-
集群准备:
- 配置每个集群的唯一名称和 ID。
- 确保所有集群中的 Pods 之间可以互相通信。
-
共享证书颁发机构(CA):
- 如果计划跨集群运行 Hubble Relay,最好在集群间共享 CA,以便启用跨集群的 mTLS。
-
启用 Cluster Mesh:
- 运行
cilium clustermesh enable
命令在两个集群上部署clustermesh-apiserver
。 - 这个命令还会生成和导入所需的证书,并尝试自动检测最佳服务类型。
- 运行
-
连接集群:
- 运行
cilium clustermesh connect
将集群连接起来,这个步骤只需要在一个方向上完成。 - 使用
cilium clustermesh status --wait
命令等待集群连接成功。
- 运行
-
测试集群间的 Pod 连接:
- 运行
cilium connectivity test
来验证集群间的连接。
- 运行
全局服务和负载均衡
- 定义全局服务:在每个集群中使用相同名称和命名空间定义 Kubernetes 服务,并添加
service.cilium.io/global: "true"
注释,以声明其为全局服务。 - 服务亲和性:可以通过注释
service.cilium.io/affinity
来指定服务应优先从本地集群或远程集群中选择端点。 - 禁用全局服务共享:默认情况下,全局服务会在多个集群中进行负载均衡。如果需要禁用跨集群的端点共享,可以设置
service.cilium.io/shared: "false"
。
KVStoreMesh
- KVStoreMesh 是 Cluster Mesh 的扩展,它在本地 kvstore 中缓存从远程集群获得的信息,提高了可扩展性和隔离性。
通过这些步骤,可以在多个 Kubernetes 集群间实现高效的网络通信和策略管理,同时保持集群间的负载均衡和服务发现。
下一章
最后更新于 2024/12/11