使用 API Server VNet 整合建立 Azure Kubernetes Service (AKS) 叢集 (預覽)
已設定 API Server VNet 整合的 Azure Kubernetes Service (AKS) 叢集會將 API 伺服器端點直接投射至委派的子網路,而該子網路位於部署了 AKS 的 VNet 中。 API 伺服器 VNet 整合可在 API 伺服器與叢集節點之間啟用網路通訊,而不需要使用私人連結或通道。 可以使用的 API 伺服器位於委派子網路的內部負載平衡器 VIP 後方,而節點則必須經過設定後使用。 藉由使用 API 伺服器 VNet 整合,您可以確保 API 伺服器與節點集區之間的網路流量僅保留在私人網路上。
API Server 連線能力
控制平面或 API 伺服器位於 AKS 管理的 Azure 訂用帳戶中。 您的叢集或節點集區位於 Azure 訂用帳戶中。 組成叢集節點的伺服器和虛擬機器可以透過投射到委派子網路的 API 伺服器 VIP 和 Pod IP 來彼此通訊。
公用或私人叢集均支援 API 伺服器 VNet 整合。 您可以在叢集佈建之後新增或移除公用存取權。 不同於非 VNet 整合式叢集,代理程式節點一律會直接與 API 伺服器內部負載平衡器 (ILB) IP 的私人 IP 位址通訊,而不使用 DNS。 所有節點對 API 伺服器的流量都會保留在私人網路上,而且 API 伺服器與節點的連線不需要通道。 叢集外用戶端如需與 API 伺服器通訊,則需要啟用公用網路存取。 如果公用網路存取已停用,則應遵循與標準私人叢集相同的私人 DNS 設定方法。
區域可用性
API 伺服器 VNet 整合適用於所有全域 Azure 區域。
必要條件
- 具有 aks-preview 延伸模組 0.5.97 或更新版本的 Azure CLI。
- 如果使用 ARM 或其餘 API,則 AKS API 版本必須是 2022-04-02-預覽版或更新版本。
安裝 aks-preview Azure CLI 延伸模組
重要
AKS 預覽功能可透過自助服務,以加入方式使用。 預覽會以「現狀」和「可供使用時」提供,其其不受服務等級協定和有限瑕疵擔保所保護。 客戶支援部門會盡最大努力,部分支援 AKS 預覽。 因此,這些功能不適合實際執行用途。 如需詳細資訊,請參閱下列支援文章:
使用
az extension add
命令安裝 aks-preview 延伸模組。az extension add --name aks-preview
使用
az extension update
命令,更新為已發行的最新版延伸模組。az extension update --name aks-preview
註冊 'EnableAPIServerVnetIntegrationPreview' 功能旗標
使用
az feature register
命令註冊EnableAPIServerVnetIntegrationPreview
功能旗標。az feature register --namespace "Microsoft.ContainerService" --name "EnableAPIServerVnetIntegrationPreview"
狀態需要幾分鐘的時間才會顯示「已註冊」。
使用
az feature show
命令確認註冊狀態:az feature show --namespace "Microsoft.ContainerService" --name "EnableAPIServerVnetIntegrationPreview"
當狀態反映 [已註冊] 時,使用
az provider register
命令重新整理 Microsoft.ContainerService 資源提供者的註冊。az provider register --namespace Microsoft.ContainerService
透過受控 VNet 建立使用 API 伺服器 VNet 整合的 AKS 叢集
您可以在受控 VNet 或自備 VNet 模式中設定使用 API 伺服器 VNet 整合的 AKS 叢集。 您可以將它們建立為公用叢集 (使用可透過公用 IP 存取的 API 伺服器) 或私人叢集 (API 伺服器只能透過私人 VNet 連線)。 您也可以在公用和私人狀態之間切換,而不需要重新部署叢集。
建立資源群組
使用
az group create
命令建立資源群組。az group create --location westus2 --name <resource-group>
部署公用叢集
使用
az aks create
命令與--enable-api-server-vnet-integration
旗標,在受控 VNet 中部署使用 API 伺服器 VNet 整合的公用 AKS 叢集。az aks create --name <cluster-name> \ --resource-group <resource-group> \ --location <location> \ --network-plugin azure \ --enable-apiserver-vnet-integration \ --generate-ssh-keys
部署私人叢集
使用
az aks create
命令搭配--enable-api-server-vnet-integration
和--enable-private-cluster
旗標,在受控 VNet 中部署使用 API 伺服器 VNet 整合的私人 AKS。az aks create --name <cluster-name> \ --resource-group <resource-group> \ --location <location> \ --network-plugin azure \ --enable-private-cluster \ --enable-apiserver-vnet-integration \ --generate-ssh-keys
以自備 VNet 建立使用 API 伺服器 VNet 整合的私人 AKS 叢集
使用自備 VNet 時,您必須建立 API 伺服器子網並委派給 Microsoft.ContainerService/managedClusters
,以授與 AKS 服務權限,將 API 伺服器 Pod 和內部負載平衡器插入該子網。 任何其他工作負載都不能使用該子網路,但位於相同虛擬網路的多個 AKS 叢集可以使用該子網路。 支援的 API 伺服器子網路大小下限為 /28。
叢集身分識別需要 API 伺服器子網路和節點子網路的權限。 缺少 API 伺服器子網路的權限會導致佈建失敗。
警告
AKS 叢集會在子網路位址空間中保留至少 9 個 IP。 IP 位址不足可能會讓 API 伺服器無法進行調整,並造成 API 伺服器中斷。
建立資源群組
- 使用
az group create
命令建立資源群組。
az group create --location <location> --name <resource-group>
建立虛擬網路
使用
az network vnet create
命令建立虛擬網路。az network vnet create --name <vnet-name> \ --resource-group <resource-group> \ --location <location> \ --address-prefixes 172.19.0.0/16
使用
az network vnet subnet create
命令建立 API 伺服器子網路。az network vnet subnet create --resource-group <resource-group> \ --vnet-name <vnet-name> \ --name <apiserver-subnet-name> \ --delegations Microsoft.ContainerService/managedClusters \ --address-prefixes 172.19.0.0/28
使用
az network vnet subnet create
命令建立叢集子網路。az network vnet subnet create --resource-group <resource-group> \ --vnet-name <vnet-name> \ --name <cluster-subnet-name> \ --address-prefixes 172.19.1.0/24
建立受控識別,並在虛擬網路上將權限授與該識別
使用
az identity create
命令建立受控識別。az identity create --resource-group <resource-group> --name <managed-identity-name> --location <location>
使用
az role assignment create
命令,將網路參與者角色指派給 API 伺服器子網路。az role assignment create --scope <apiserver-subnet-resource-id> \ --role "Network Contributor" \ --assignee <managed-identity-client-id>
使用
az role assignment create
命令,將網路參與者角色指派給叢集子網路。az role assignment create --scope <cluster-subnet-resource-id> \ --role "Network Contributor" \ --assignee <managed-identity-client-id>
部署公用叢集
使用
az aks create
命令與--enable-api-server-vnet-integration
旗標,部署使用 API 伺服器 VNet 整合的公用 AKS 叢集。az aks create --name <cluster-name> \ --resource-group <resource-group> \ --location <location> \ --network-plugin azure \ --enable-apiserver-vnet-integration \ --vnet-subnet-id <cluster-subnet-resource-id> \ --apiserver-subnet-id <apiserver-subnet-resource-id> \ --assign-identity <managed-identity-resource-id> \ --generate-ssh-keys
部署私人叢集
使用
az aks create
命令搭配--enable-api-server-vnet-integration
和--enable-private-cluster
旗標,部署使用 API 伺服器 VNet 整合的私人 AKS。az aks create --name <cluster-name> \ --resource-group <resource-group> \ --location <location> \ --network-plugin azure \ --enable-private-cluster \ --enable-apiserver-vnet-integration \ --vnet-subnet-id <cluster-subnet-resource-id> \ --apiserver-subnet-id <apiserver-subnet-resource-id> \ --assign-identity <managed-identity-resource-id> \ --generate-ssh-keys
將現有的 AKS 叢集轉換為 API Server VNet 整合
您可以藉由提供符合稍早所列需求的 API 伺服器子網路,將現有的公用/私人 AKS 叢集轉換成 API 伺服器 VNet 整合叢集。 這些需求包括:位於與叢集節點相同的 VNet 中、已針對 AKS 叢集身分識別授予權限、未被私人端點等其他資源所使用,以及至少 /28 的大小。 轉換叢集是單向移轉。 叢集在啟用之後,就無法停用 API 伺服器 VNet 整合。
此升級會在所有節點集區上執行節點映像版本升級,並在所有節點進行滾動映像升級時重新啟動所有工作負載。
警告
將叢集轉換為 API 伺服器 VNet 整合會導致 API 伺服器 IP 位址變更,但主機名稱會維持不變。 如果 API 伺服器的 IP 位址已列入任何防火牆或網路安全性群組規則,則可能需要更新這些規則。
使用
az aks update
命令與--enable-apiserver-vnet-integration
旗標,將叢集部署到 API 伺服器 VNet 整合。az aks update --name <cluster-name> \ --resource-group <resource-group> \ --enable-apiserver-vnet-integration \ --apiserver-subnet-id <apiserver-subnet-resource-id>
在具有 API Server VNet 整合的現有叢集上啟用或停用私人叢集模式
使用 API Server VNet 整合設定的 AKS 叢集可以啟用或停用公用網路存取/私人叢集模式,而不需重新部署叢集。 API 伺服器主機名稱不會變更,但會在必要時修改或移除公用 DNS 項目。
注意
--disable-private-cluster
目前處於預覽版。 如需詳細資訊,請參閱參考和支援層級。
啟用私人叢集模式
使用
az aks update
命令與--enable-private-cluster
旗標,啟用私人叢集模式。az aks update --name <cluster-name> \ --resource-group <resource-group> \ --enable-private-cluster
停用私人叢集模式
使用
az aks update
命令與--disable-private-cluster
旗標,停用私人叢集模式。az aks update --name <cluster-name> \ --resource-group <resource-group> \ --disable-private-cluster
使用 kubectl 連線至叢集
使用
az aks get-credentials
命令,設定kubectl
連線到您的叢集。az aks get-credentials --resource-group <resource-group> --name <cluster-name>
NSG 安全性規則
根據預設,允許 VNet 中的所有流量。 但是,如果您已新增NSG規則來限制不同子網之間的流量,請確定 NSG 安全性規則允許下列類型的通訊:
Destination | 來源 | 通訊協定 | Port | 使用 |
---|---|---|---|---|
APIServer 子網 CIDR | 叢集子網 | TCP | 443 和 4443 | 啟用節點與 API 伺服器之間通訊的必要專案。 |
APIServer 子網 CIDR | Azure Load Balancer | TCP | 9988 | 必須啟用 Azure Load Balancer 與 API 伺服器之間的通訊。 您也可以啟用 Azure Load Balancer 與 API 伺服器子網 CIDR 之間的所有通訊。 |
下一步
如需相關的最佳作法,請參閱 AKS 中的網路連線和安全性最佳做法。