为存量集群开启 API Server 内部域名访问

更新时间:
复制为 MD 格式

为存量ACK托管集群Pro开启内部域名解析功能后,节点组件(如 kubelet、kube-proxy)可从通过负载均衡(CLB)固定 IP 地址访问 API Server 优化为通过内部域名动态解析 API Server 访问端点后直接访问,提升大规模集群中节点组件访问 API Server 的性能表现和可用性。

适用范围

  • 仅适用于ACK托管集群Pro,且集群版本为1.30及以上。

  • 混合云节点池暂无法启用本功能。

  • 以下集群已默认启用API Server内部域名,无需手动启用:

    • 202411月以后新建,且版本为1.20及以上的集群。

    • 通过DescribeClusterDetail查询,若internal_dns_config.enabledtrue,则表明已启用。

变更和影响

  • 网络路径变更与安全组影响:

    启用后,节点访问 API Server 的通信路径将从API Server负载均衡(CLB)固定 IP 地址切换为内部域名直连。

    • 变更前(CLB 转发):节点 -> CLB IP -> API Server

    • 变更后(内网域名直连):节点 -> (内部域名解析) -> API Server ENI

    这意味着流量将绕过 CLB,直接访问API Server ENI。因此,需确保节点所在安全组与其 ENI 所在安全组之间网络互通。

  • 公网访问依赖:启用后,API Server对外的默认路由将变更为集群 VPC。若集群配置了依赖公网地址的 OIDC Issuer URL 或外部 Webhook,需确保集群 VPC 具备公网访问能力,否则API Server将无法连接外部服务。

  • 配置生效范围:

    • 启用后,kubelet 和 kube-proxy 访问API Server的路径将由访问负载均衡(CLB)固定 IP 地址切换至直连 API Server ENI。

    • default 命名空间下的 kubernetes Service Endpoints 会由指向API Server CLB IP切换为 API Server ENI IP,允许集群内的 Operator 等应用直连。

前置检查

执行操作前,请务必完成以下检查,否则会导致节点无法连接API Server

1. 检查安全组配置

  • 开启直连后,流量将直达 API Server 的 ENI。需确保其ENI 所在安全组规则允许直连。操作入口,请参见管理安全组

    安全组类型

    检查项

    操作建议

    企业级安全组

    入方向规则

    必须显式放行,手动添加规则:允许集群 VPC 网段及所有附加网段访问 TCP 6443 端口。

    普通安全组

    组内互通性

    • 若节点或容器与API Server在同一安全组,则默认互通。

    • 若在不同安全组,需配置安全组互通或放行对应网段的 6443 端口。

  • 检查节点及节点弹性网卡的安全组出方向,确保未禁止访问 6443 端口。

2. 检查 Webhook 与 OIDC 公网依赖

  • 检查是否存在依赖公网 URL 的 Webhook。

    kubectl get validatingwebhookconfiguration -o yaml -A | grep url
    kubectl get mutatingwebhookconfiguration -o yaml -A | grep url
  • ACK集群列表页面,单击目标集群名称,在集群详情页左侧导航栏,单击组件管理。定位API Server并查看其配置中的OIDC相关参数,确认是否使用公网地址。

API Server存在上述公网访问,且集群 VPC 无公网出口,需先配置NAT网关统一公网流量出口

3. 检查 DNS 解析配置

API Server 域名解析依赖 VPC 默认内网 DNS(100.100.2.136100.100.2.138)。

  • 默认情况:若节点使用默认 DNS 配置,无需额外操作。

  • 自定义 DNS:若在节点或容器上配置了自定义 DNS 服务器,需确保该 DNS 服务器能将 *.aliyuncs.comAPI Server 域名转发给上述阿里云内网 DNS 进行解析。

步骤一:开启API Server内部域名解析

调用OpenAPI ModifyCluster,在集群 VPC 内创建内网解析记录。本小节以默认情况为例,即节点使用阿里云默认内网 DNS。

如节点或容器使用自建 DNS 服务器,请参见下文自定义 DNS 说明
  1. 调用ModifyCluster,填写参数。

    {
        "control_plane_endpoints_config": {
            "internal_dns_config": {
                "enabled": true
            }
        }
    }
  2. 更新过程中,API Server会自动重启。等待重启完成,通过DescribeClusterDetail查看internal_dns_config.enabled参数取值为true,确认配置生效。

步骤二:修改 kube-proxy 配置

API Server域名生效后,将 kube-proxy 的连接地址从 IP 切换为该域名。

  1. ACK集群列表页面,单击目标集群名称,在集群详情页左侧导航栏,选择配置管理 > 配置项

  2. 命名空间选择 kube-system,定位 kube-proxy-workerkube-proxy-worker-windows。

  3. 逐一在 kubeconfig 字段中,定位 server 参数,修改为以下格式。

    https://apiserver.{cluster_id}.{region_id}.cs.aliyuncs.com:6443
    • {cluster_id}:集群 ID。

    • {region_id}:集群地域 ID(如 cn-hangzhou)。

步骤三:验证内部域名是否生效

修改存量节点前,通过创建新节点或新 Pod 来验证域名解析是否已对新增资源生效。

  • 节点池灵骏节点池中的节点:

    在集群中扩容一个新节点,新节点的 kubelet 和 kube-proxy 将自动使用内部域名。

    待节点就绪后,登录节点,通过以下命令查看其kubelet配置文件的server地址是否为内部域名。

    cat /etc/kubernetes/kubelet.conf
  • 虚拟节点

    ACK Virtual Node组件需为v2.14.0及以上。

    开启内部域名后,新建的ECI PodACS Pod默认通过内部域名与API Server交互。

    此时,新增一个Pod,Pod能够正常进入Ready状态。

步骤四:重建存量 kube-proxy Pod 使其生效

kube-proxy 配置更新后,重建其存量 Pod 以加载新配置。

  1. ACK集群列表页面,单击目标集群名称,在集群详情页左侧导航栏,选择工作负载 > 守护进程集

  2. 命名空间选择 kube-system,定位并单击 kube-proxy-workerkube-proxy-worker-windows,在容器组页签下,按照页面提示逐一删除其Pod,使其重建并加载新配置。

    重要

    为确保业务平稳,需采用灰度方式分批删除,观察 Pod 重建正常后再执行后续删除。

步骤五:修改存量节点的 kubelet 配置

更新存量节点的 kubelet 配置并重启服务,完成向内部域名访问的切换。为确保集群稳定性,本小节分为单节点验证和批量运维两部分。

  1. 单节点验证。

    1. 选择一个存量节点,登录节点并执行以下命令,将 API Server 地址从 IP 切换为域名,并重启 kubelet。

      • {clb-ip}:当前 /etc/kubernetes/kubelet.conf 中配置的 CLB IP

      • {cluster-id}:集群 ID

      • {region-id}:地域 ID

      # 以下为单行命令,将替换配置与重启服务合并执行
      sed -i.bak 's#https://{clb-ip}:6443#https://apiserver.{cluster-id}.{region-id}.cs.aliyuncs.com:6443#g' /etc/kubernetes/kubelet.conf && systemctl restart kubelet

      示例如下:

      sed -i.bak 's#https://10.XX.XX.1:6443#https://apiserver.c34f3cdb665954e2f8e8e40a824a*****.cn-hangzhou.cs.aliyuncs.com:6443#g' /etc/kubernetes/kubelet.conf && systemctl restart kubelet
    2. 完成后,在控制台观察节点,确保处于就绪状态。

  2. 批量运维剩余节点。

    单节点验证成功后,在控制台使用批量运维节点功能,对剩余的存量节点分批次进行批量操作。

    1. ACK集群列表页面,单击目标集群名称,在集群详情页左侧导航栏,选择节点管理 > 节点

    2. 勾选待执行操作的节点,单击页面下方的批量运维,然后选择执行 Shell 命令。按照页面提示配置执行命令,提交批量任务的执行。

      # 在执行命令的命令内容中,填入以下参数
      sed -i.bak 's#https://{clb-ip}:6443#https://apiserver.{cluster-id}.{region-id}.cs.aliyuncs.com:6443#g' /etc/kubernetes/kubelet.conf && systemctl restart kubelet
    3. 等待任务执行完成,观测节点状态无误后重复此操作,直至完成存量节点的更新。

附录

自定义 DNS 说明

当节点或容器配置了自建 DNS 服务器时,请参见本小节开启API Server内部域名解析。

API Server域名解析生效依赖于VPC 中默认配置的内网 DNS 解析服务地址 100.100.2.136 和 100.100.2.138。若自建 DNS 服务器需要解析该域名,需将 DNS 服务器所在的 VPC 关联到该内部域名解析范围。

操作步骤

通过 OpenAPI ModifyCluster修改集群配置,在开启 API Server访问优化的同时,通过 bind_vpcs 参数关联自建 DNS 服务器的 VPC。

本步骤默认 DNS 服务器 VPC 与集群在同一账号下。若属于不同账号,请参见跨账号关联VPC完成内网DNS解析统一管理(即步骤15)。
  1. 调用OpenAPI ModifyCluster,填写以下内容。

    ["vpc-id"]中填写 DNS 服务器所在的 VPC ID。数组类型,多个VPC之间使用英文半角逗号(,)分隔。
    {
        "control_plane_endpoints_config": {
            "internal_dns_config": {
                "enabled": true,
                "bind_vpcs": ["vpc-id"] 
            }
        }
    }
  2. 等待生效后,通过DescribeClusterDetail查看生效后的信息。

  3. 后续操作:

    • 如果是首次开启内部域名访问,请继续执行步骤二步骤五,完成后续的配置更新和验证。

    • 如果此前已开启内部域名访问,本次仅新增关联 VPC(bind_vpcs),操作到此结束。

相关文档