规划控制平面端点

每个集群都需要一个用于 Kubernetes API 的稳定端点。在创建集群之前选择端点模式,并在 kubeadm 初始化控制平面后保持地址稳定。

按 Provider 划分的端点模式

此版本中可用的端点模式取决于 Provider。

Provider端点模式
Huawei DCSExternal LoadBalancer,或在与 ACP v4.4+ 配对时使用 type: internal 自建 VIP。单个控制平面节点只能将自身 IP 用于开发或 PoC。
VMware vSphereExternal LoadBalancer,或在与 ACP v4.4+ 配对时使用 internal 自建 VIP,该模式会在控制平面节点上部署 Alive(keepalived 和 IPVS)。
Bare MetalInternal 自建 VIP 和 External LoadBalancer。
Huawei Cloud StackProvider 管理的 HCS ELB。使用 在 Huawei Cloud Stack 上创建集群 中的端点字段和 ELB 工作流。

对于 DCS,type: internal 需要 ACP v4.4+。请在创建集群之前进行规划。使用外部 LoadBalancer 的现有集群将继续使用它,除非你已有经过测试的迁移计划。

对于 vSphere,type: internal 需要 vSphere Provider v1.0.17+ 和 ACP v4.4+,并且这是创建时的选择:只有以这种方式创建的集群才能使用它,而 Provider 从早期版本升级的集群会继续使用其外部 LoadBalancer。此外,还要求 alive 集群插件已存在,并且可以部署到 global 集群,因为 Provider 通过 ModuleInfo 安装 Alive,而不是自行提供它。在规划模式之前,请验证所有这些条件;请参阅控制平面端点模式。

External LoadBalancer 契约

在应用 Cluster API 资源之前,配置并验证负载均衡器。

要求契约
侦听器使用带 TLS 透传的第 4 层 TCP 转发。TLS 由 Kubernetes API server 而非负载均衡器终止。
前端使用一个稳定的 VIP(IP 地址)和 TCP 端口 6443。在创建集群之前预留该地址。
后端在 TCP 端口 6443 上添加每个控制平面节点的 IP。不要添加工作节点。
健康检查优先对 https://<control-plane-node-ip>:6443/healthz 执行 HTTPS 检查,并要求返回 HTTP 200。如果设备仅支持 TCP 检查,请记录该检查只能证明端口可达,不能证明 API server 健康。
后端所有权负载均衡器所有者必须在控制平面节点添加、替换或移除时更新后端成员。DCS 和 vSphere Provider 不管理外部负载均衡器后端。
引导可达性在 Cluster API 创建控制平面期间,引导节点或当前管理集群必须能够访问前端端点。
节点可达性所有控制平面节点都必须能够访问该端点。业务集群端点还必须可从 global 集群访问。
名称和证书不要在集群端点前使用 DNS 名称(FQDN)——不支持通过域名访问集群。API server 证书由集群自身的 CA 签发,因此无法在端点上提供客户签发的证书;而没有该证书的域名也无法发挥其通常的作用。

有关 ACP 端口要求,请参阅以下页面:

WARNING

集群初始化后,不要将更改控制平面端点作为常规负载均衡器编辑操作。该端点已嵌入 API server 证书、kubeconfig 和管理集群连接中。更改端点需要经过规划的证书和连接迁移。

验证外部 LoadBalancer

在创建集群之前,确认侦听器已存在,并且引导环境或管理环境可以打开前端端口:

nc -vz <control-plane-endpoint> 6443

至少有一个 API server 运行后,从代表负载均衡器的网络位置验证首选健康检查:

curl -kfsS https://<control-plane-node-ip>:6443/healthz

预期响应为 ok,HTTP 状态为 200。

自建 VIP 契约

对于 Huawei DCS,仅将此契约用于 ACP v4.4+。在 VMware vSphere 上,它适用于 provider v1.0.17 及更高版本。对于裸金属,请遵循特定于 provider 的指南。

  • 在与将承载 VIP 的控制平面接口处于同一 Layer-2 网络的网段中,预留一个未使用的 IPv4 地址。
  • 使用在该 Layer-2 域中唯一的 VRID。
  • 允许控制平面节点与周围网络之间的 VRRP 流量和免费 ARP 更新。
  • 至少使用三个控制平面节点以实现高可用性。
  • 确保节点镜像和受支持的 alive 软件包提供所需的 VIP 运行时和 IPVS 配置。
  • 对于自建 VIP,请使用 IP 地址,而不是域名。
  • 在控制平面节点被替换时,让 provider 和 Alive 协调 VIP 及后端成员关系。不要为同一 VIP 维护第二个手动后端列表。

在 VMware vSphere 上,还需遵循以下规则:

  • VIP 必须为 IPv4。不接受 IPv6 和双栈端点。
  • vrid 必须介于 1 和 255 之间。该范围由 provider 的准入 webhook 强制执行,而不是由 CRD schema 强制执行,因此超出范围的值会在应用时被拒绝,而不是由 kubectl --dry-run=client 拒绝。
  • VIP 不得等于集群 VSphereMachineConfigPool 对象中声明的任何插槽地址(network.primary.ip 或 network.additional[].ip)。它还必须位于每个外部 IPAM 池范围之外;provider 无法读取这些池,也不会检测到该冲突。
  • 集群创建时会写入 spec.controlPlaneLoadBalancer,或者永远不会写入。字段缺失已经表示使用外部 LoadBalancer,因此之后无法再填写;已写入的字段也无法编辑或清除。要纠正错误,必须重建集群。
  • 对于多 NIC 节点,请显式设置 interface。自动检测会匹配节点的主 IP,且错误的选择之后无法通过修补进行更改。
  • VSphereCluster.status.conditions[SelfBuiltLoadBalancerReady] 仅报告 VIP 链路。它不会控制 VSphereCluster.status.ready,因此基础设施集群可能在 VIP 仍处于收敛过程中时就报告已就绪。

有关 DCS 清单和验证,请参阅在 Huawei DCS 上创建集群。有关裸金属清单,请参阅在裸金属上创建集群。有关 vSphere,请参阅控制平面端点模式。