使用 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' 功能旗標

  1. 使用 az feature register 命令註冊 EnableAPIServerVnetIntegrationPreview 功能旗標。

    az feature register --namespace "Microsoft.ContainerService" --name "EnableAPIServerVnetIntegrationPreview"
    

    狀態需要幾分鐘的時間才會顯示「已註冊」

  2. 使用 az feature show 命令確認註冊狀態:

    az feature show --namespace "Microsoft.ContainerService" --name "EnableAPIServerVnetIntegrationPreview"
    
  3. 當狀態反映 [已註冊] 時,使用 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 -l westus2 -n <resource-group>
    

部署公用叢集

  • 使用 az aks create 命令與 --enable-api-server-vnet-integration 旗標,在受控 VNet 中部署使用 API 伺服器 VNet 整合的公用 AKS 叢集。

    az aks create -n <cluster-name> \
        -g <resource-group> \
        -l <location> \
        --network-plugin azure \
        --enable-apiserver-vnet-integration
    

部署私人叢集

  • 使用 az aks create 命令搭配 --enable-api-server-vnet-integration--enable-private-cluster 旗標,在受控 VNet 中部署使用 API 伺服器 VNet 整合的私人 AKS。

    az aks create -n <cluster-name> \
        -g <resource-group> \
        -l <location> \
        --network-plugin azure \
        --enable-private-cluster \
        --enable-apiserver-vnet-integration
    

以自備 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 -l <location> -n <resource-group>

建立虛擬網路

  1. 使用 az network vnet create 命令建立虛擬網路。

    az network vnet create -n <vnet-name> \
    -g <resource-group> \
    -l <location> \
    --address-prefixes 172.19.0.0/16
    
  2. 使用 az network vnet subnet create 命令建立 API 伺服器子網路。

    az network vnet subnet create -g <resource-group> \
    --vnet-name <vnet-name> \
    --name <apiserver-subnet-name> \
    --delegations Microsoft.ContainerService/managedClusters \
    --address-prefixes 172.19.0.0/28
    
  3. 使用 az network vnet subnet create 命令建立叢集子網路。

    az network vnet subnet create -g <resource-group> \
    --vnet-name <vnet-name> \
    --name <cluster-subnet-name> \
    --address-prefixes 172.19.1.0/24
    

建立受控識別,並在虛擬網路上將權限授與該識別

  1. 使用 az identity create 命令建立受控識別。

    az identity create -g <resource-group> -n <managed-identity-name> -l <location>
    
  2. 使用 az role assignment create 命令,將網路參與者角色指派給 API 伺服器子網路。

    az role assignment create --scope <apiserver-subnet-resource-id> \
    --role "Network Contributor" \
    --assignee <managed-identity-client-id>
    
  3. 使用 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 -n <cluster-name> \
    -g <resource-group> \
    -l <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>
    

部署私人叢集

  • 使用 az aks create 命令搭配 --enable-api-server-vnet-integration--enable-private-cluster 旗標,部署使用 API 伺服器 VNet 整合的私人 AKS。

    az aks create -n <cluster-name> \
    -g <resource-group> \
    -l <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>
    

將現有的 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 -n <cluster-name> \
    -g <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 -n <cluster-name> \
    -g <resource-group> \
    --enable-private-cluster
    

停用私人叢集模式

  • 使用 az aks update 命令與 --disable-private-cluster 旗標,停用私人叢集模式。

    az aks update -n <cluster-name> \
    -g <resource-group> \
    --disable-private-cluster
    

使用 kubectl 連線至叢集

  • 使用 az aks get-credentials 命令,設定 kubectl 連線到您的叢集。

    az aks get-credentials -g <resource-group> -n <cluster-name>
    

下一步

如需相關的最佳作法,請參閱 AKS 中的網路連線和安全性最佳做法