為存量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.enabled為true,則表明已啟用。
變更和影響
網路路徑變更與安全性群組影響:
啟用後,節點訪問 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 命名空間下的
kubernetesService 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.136 和 100.100.2.138)。
預設情況:若節點使用預設 DNS 配置,無需額外操作。
自訂 DNS:若在節點或容器上配置了自訂 DNS 伺服器,需確保該 DNS 伺服器能將
*.aliyuncs.com或 API Server 網域名稱轉寄給上述阿里雲內網 DNS 進行解析。
步驟一:開啟API Server內部網域名稱解析
調用OpenAPI ModifyCluster,在叢集 VPC 內建立內網解析記錄。本小節以預設情況為例,即節點使用阿里雲預設內網 DNS。
如節點或容器使用自建 DNS 伺服器,請參見下文自訂 DNS 說明。
調用ModifyCluster,填寫參數。
{ "control_plane_endpoints_config": { "internal_dns_config": { "enabled": true } } }更新過程中,API Server會自動重啟。等待重啟完成,通過DescribeClusterDetail查看
internal_dns_config.enabled參數取值為true,確認配置生效。
步驟二:修改 kube-proxy 配置
API Server網域名稱生效後,將 kube-proxy 的串連地址從 IP 切換為該網域名稱。
步驟三:驗證內部網域名稱是否生效
修改存量節點前,通過建立新節點或新 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 以載入新配置。
在ACK叢集列表頁面,單擊目的地組群名稱,在叢集詳情頁左側導覽列,選擇。
命名空間選擇 kube-system,定位並單擊 kube-proxy-worker和kube-proxy-worker-windows,在容器組頁簽下,按照頁面提示逐一刪除其Pod,使其重建並載入新配置。
重要為確保業務平穩,需採用灰階方式分批刪除,觀察 Pod 重建正常後再執行後續刪除。
步驟五:修改存量節點的 kubelet 配置
更新存量節點的 kubelet 配置並重啟服務,完成向內部網域名稱訪問的切換。為確保叢集穩定性,本小節分為單節點驗證和批量營運兩部分。
單節點驗證。
選擇一個存量節點,登入節點並執行以下命令,將 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完成後,在控制台觀察節點,確保處於就緒狀態。
批量營運剩餘節點。
單節點驗證成功後,在控制台使用批量營運節點功能,對剩餘的存量節點分批次進行大量操作。
在ACK叢集列表頁面,單擊目的地組群名稱,在叢集詳情頁左側導覽列,選擇。
勾選待執行操作的節點,單擊頁面下方的批量營運,然後選擇執行 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等待任務執行完成,觀測節點狀態無誤後重複此操作,直至完成存量節點的更新。
附錄
自訂 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解析統一管理(即步驟1到5)。
調用OpenAPI ModifyCluster,填寫以下內容。
在
["vpc-id"]中填寫 DNS 伺服器所在的 VPC ID。數群組類型,多個VPC之間使用英文半形逗號(,)分隔。{ "control_plane_endpoints_config": { "internal_dns_config": { "enabled": true, "bind_vpcs": ["vpc-id"] } } }等待生效後,通過DescribeClusterDetail查看生效後的資訊。
後續操作: