规划控制平面端点

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

Provider 和版本边界

端点功能取决于 Provider 版本。仅 ACP 次要版本并不能启用某项 Provider 功能。

Provider最近验证的 Provider 版本已记录的端点模式
Huawei DCSv1.0.22外部 LoadBalancer,或与 ACP v4.4+ 搭配使用的 type: internal 自建 VIP。单个控制平面节点只能将其自身 IP 用于开发或 PoC。
VMware vSpherev1.0.17外部 LoadBalancer,或与 ACP v4.4+ 搭配使用的 internal 自建 VIP,该模式会在控制平面节点上部署 Alive(keepalived 和 IPVS)。
裸金属不适用版本边界Internal 自建 VIP 和 External LoadBalancer。由于不存在需要保留的早期 Provider 版本,Bare Metal 指南会记录这两种模式,而不会提供旧版本工作流。
Huawei Cloud StackProvider 管理的 HCS ELB使用在 Huawei Cloud Stack 上创建集群中的端点字段和 ELB 工作流。

对于 DCS,type: internal 要求 DCS Provider v1.0.22+ 和 ACP v4.4+。DCS Provider v1.0.21 及更早版本仅支持外部 LoadBalancer 路径。不要仅根据 ACP 版本推断 Provider 功能。

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

外部 LoadBalancer 合约

在应用 Cluster API 资源之前,先配置并验证 LoadBalancer。

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

对于 ACP 端口要求,请使用权威页面,而不要将完整端口矩阵复制到本文档中:

WARNING

集群初始化后,不要仅将控制平面端点的更改当作常规 LoadBalancer 编辑来进行。该端点已嵌入 API server 证书、kubeconfig 以及管理集群连接中。更改端点需要经过规划的证书和连接迁移。

验证外部 LoadBalancer

在创建集群之前,确认监听器已存在,并且 Bootstrap 或管理环境能够打开前端端口:

nc -vz <control-plane-endpoint> 6443

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

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

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

自建 VIP 契约

对于 Huawei DCS,仅将此契约用于 DCS Provider v1.0.22+ 和 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,且之后无法通过 patch 更正错误选择。
  • VSphereCluster.status.conditions[SelfBuiltLoadBalancerReady] 仅报告 VIP 链路状态。它不会控制 VSphereCluster.status.ready,因此基础设施集群可能报告已就绪,而 VIP 仍在收敛。

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