多集群(Cluster Mesh)

查看本文大纲

多集群(Cluster Mesh)功能允许在多个 Kubernetes 集群中进行网络通信,同时保持完整的策略执行。

设置 Cluster Mesh

  1. 前提条件

    • 所有集群必须使用相同的数据路径模式。
    • 集群间节点必须能够通过内部 IP 进行通信。
    • 网络必须允许集群间通信,具体端口在防火墙要求部分有详细说明。
  2. 安装 Cilium CLI

    • 需要下载并安装 Cilium CLI,具体步骤依赖于操作系统。
  3. 集群准备

    • 配置每个集群的唯一名称和 ID。
    • 确保所有集群中的 Pods 之间可以互相通信。
  4. 共享证书颁发机构(CA)

    • 如果计划跨集群运行 Hubble Relay,最好在集群间共享 CA,以便启用跨集群的 mTLS。
  5. 启用 Cluster Mesh

    • 运行 cilium clustermesh enable 命令在两个集群上部署 clustermesh-apiserver
    • 这个命令还会生成和导入所需的证书,并尝试自动检测最佳服务类型。
  6. 连接集群

    • 运行 cilium clustermesh connect 将集群连接起来,这个步骤只需要在一个方向上完成。
    • 使用 cilium clustermesh status --wait 命令等待集群连接成功。
  7. 测试集群间的 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 集群间实现高效的网络通信和策略管理,同时保持集群间的负载均衡和服务发现。