全部產品
Search
文件中心

Container Service for Kubernetes:為存量叢集開啟 API Server 內部網域名稱訪問

更新時間:Jan 09, 2026

為存量ACK託管叢集Pro版開啟內部網域名稱解析功能後,節點群組件(如 kubelet、kube-proxy)可從通過負載平衡(CLB)固定 IP 地址訪問 API Server 最佳化為通過內部網域名稱動態解析 API Server 訪問端點後直接存取,提升大規模叢集中節點群組件訪問 API Server 的效能表現和可用性。

適用範圍

  • 僅適用於ACK託管叢集Pro版,且叢集版本為1.30及以上。

  • 混合雲節點池暫無法啟用本功能。

  • 以下叢集已預設啟用API Server內部網域名稱,無需手動啟用:

    • 2024年11月以後建立,且版本為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 Gateway統一公網流量出口

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-worker和kube-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 Pod和ACS Pod預設通過內部網域名稱與API Server互動。

    此時,新增一個Pod,Pod能夠正常進入Ready狀態。

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

kube-proxy 配置更新後,重建其存量 Pod 以載入新配置。

  1. ACK叢集列表頁面,單擊目的地組群名稱,在叢集詳情頁左側導覽列,選擇工作负载 > 守護進程集

  2. 命名空間選擇 kube-system,定位並單擊 kube-proxy-worker和kube-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),操作到此結束。

相關文檔