適用於: ✔️ AKS 自動化 ✔️ AKS 標準
一個以 API Server VNet Integration 配置的 Azure Kubernetes Service (AKS) 叢集,會將 API 伺服器端點直接投射到 VNet 中部署 AKS 的委派子網路。 API 伺服器 VNet 整合可在 API 伺服器與叢集節點之間啟用網路通訊,而不需要使用私人連結或通道。 可以使用的 API 伺服器位於委派子網路的內部負載平衡器 VIP 後方,而節點則必須經過設定後使用。 藉由使用 API 伺服器 VNet 整合,您可以確保 API 伺服器與節點集區之間的網路流量僅保留在私人網路上。
對大多數生產工作負載來說,AKS Automatic 是推薦的預設 AKS 體驗。 AKS Automatic 預設為生產準備,並包含 API Server VNet 整合作為預先設定的叢集安全功能。 在 AKS 標準中,API Server VNet 整合是可選的,你可以在建立叢集時啟用,或透過更新現有叢集來啟用。
想了解更多關於 AKS 自動的資訊,請參閱 What is Azure Kubernetes Service (AKS) Automatic?
API Server VNet 整合於 AKS Automatic 與 AKS Standard
API Server VNet 整合可在兩種 AKS 叢集模式中提供,但設置方式有所不同:
- AKS Automatic:API Server VNet 整合已預先設定好。
- AKS 標準:API Server VNet 整合為選用,必須明確啟用。
大多數生產情境建議從 AKS Automatic 開始,以使用生產準備預設並降低營運開銷。
API Server 連線能力
控制平面或 API 伺服器位於 AKS 管理的 Azure 訂閱中。 你的叢集或節點池都在你的 Azure 訂閱中。 組成叢集節點的伺服器和虛擬機器可以透過投射到委派子網路的 API 伺服器 VIP 和 Pod IP 來彼此通訊。
公用或私人叢集均支援 API 伺服器 VNet 整合。 您可以在叢集佈建之後新增或移除公用存取權。 不同於非 VNet 整合式叢集,代理程式節點一律會直接與 API 伺服器內部負載平衡器 (ILB) IP 的私人 IP 位址通訊,而不使用 DNS。 所有節點對 API 伺服器的流量都會保留在私人網路上,而且 API 伺服器與節點的連線不需要通道。 叢集外用戶端如需與 API 伺服器通訊,則需要啟用公用網路存取。 如果公用網路存取已停用,則應遵循與標準私人叢集相同的私人 DNS 設定方法。
先決條件
- 你必須安裝 Azure CLI 2.73.0 或更新版本。 您可以使用 命令來檢查您的版本
az --version。 - 如果你帶了自己的虛擬網路,請先檢視 虛擬網路的先決條件。
局限性
下列限制適用於 API Server VNet 整合,無論是在 AKS Automatic 上預先設定,或是在 AKS Standard 上明確啟用:
- API Server VNet 整合不支援 虛擬網路 加密。 部署在 v3 或更早 AKS 節點 SKU (不支援 VNet 加密)上的叢集是被允許的,但流量不會被加密。 部署於 v4 或更新 AKS 節點 SKU (支援 VNet 加密)的叢集會被封鎖,因為加密的 VNet 與 API Server VNet 整合不相容。 欲了解更多資訊,請參閱 AKS 支援的虛擬機 SKU。
- 要使用雙堆疊網路,叢集需要 Kubernetes 版本 1.26.3 或更新版本,網路插件
azure和網路插件模式overlay。 欲了解更多資訊,請參閱 Azure CNI 叢集雙堆疊網路。
Availability
- API Server VNet 整合可在除 qatarcentral 外的所有 GA 公有雲區域使用。
建立一個包含 API Server VNet 整合的叢集
AKS Automatic (建議做為正式環境的預設選項)
在 AKS Automate 中,API Server VNet 整合是預先設定好的。 不需要明確 --enable-apiserver-vnet-integration 的標記。
依照快速入門,建立 AKS Automatic 叢集:
AKS Standard:受控虛擬網路
你可以在管理模式下將 AKS Standard 叢集與 API Server VNet 整合配置為公有或私有叢集。
附註
qatarcentral 不支援 API Server VNet Integration。
建立資源群組
使用 az group create 命令建立資源群組。
az group create --location <location> --name <resource-group>
部署公用叢集
使用 az aks create 命令搭配 --enable-apiserver-vnet-integration 旗標,部署具有適用於受控 VNet 之 API Server VNet 整合的公用 AKS Standard 叢集。
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-apiserver-vnet-integration 和 --enable-private-cluster 旗標,為受控 VNet 部署具有 API Server VNet 整合功能的私有 AKS Standard 叢集。
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
AKS 標準:自備 VNet
使用自帶 VNet 時,必須建立並委派一個 API 伺服器子網路給 Microsoft.ContainerService/managedClusters。 此委派授與 AKS 服務權限,允許將 API 伺服器 Pod 與內部負載平衡器部署到該子網路。 任何其他工作負載都不能使用該子網路,但位於相同虛擬網路的多個 AKS 叢集可以使用該子網路。 最小支援的 API 伺服器子網大小為 /28。
叢集身分識別需要 API 伺服器子網路和節點子網路的權限。 缺少 API 伺服器子網路的權限會導致佈建失敗。
警告
一個 AKS 叢集在子網位址空間中保留至少九個 IP。 IP 位址用盡可能會阻礙 API 伺服器擴展,導致 API 伺服器中斷。
附註
qatarcentral 不支援 API Server VNet Integration。
建立資源群組
使用 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-apiserver-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-apiserver-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 Standard 叢集轉換為 API Server VNet 整合
警告
API Server VNet 整合是一種單向且對容量敏感的功能。 當您在現有 AKS Standard 叢集啟用 API Server VNet 整合時,會受到以下限制:
-
需手動重啟:啟用 API Server VNet 整合
az aks update --enable-apiserver-vnet-integration後,因控制平面資源轉移,您必須立即重啟叢集,變更才會生效。 這個重啟並非自動化的。 延遲重新啟動會增加容量變得無法使用的風險,這可以防止 API 伺服器啟動。 叢集重啟同時確保所有節點都能可靠地重新連接到新的 API 伺服器端點。 - 容量會被驗證,但不會保留:AKS 會在你啟用現有叢集的功能時驗證區域容量,但這個驗證不會保留容量。 如果你延遲重啟,導致容量在這段期間無法使用,叢集在停止或重啟後可能會無法啟動。 在正式開放(GA)前啟用此功能的叢集,或啟用後尚未重新啟動的叢集,則不會進行容量驗證。
- 此功能無法停用:啟用後,該功能即為永久。 你無法關閉 API Server 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>請使用 [
az aks stop][az-aks-stop] 和 [az aks start][az-aks-start] 指令重新啟動叢集。az aks stop --name <cluster-name> --resource-group <resource-group> az aks start --name <cluster-name> --resource-group <resource-group>
在具有 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 \
--enable-apiserver-vnet-integration \
--apiserver-subnet-id <apiserver-subnet-resource-id>
停用私人叢集模式
使用 az aks update 命令與 --disable-private-cluster 旗標,停用私人叢集模式。
az aks update --name <cluster-name> \
--resource-group <resource-group> \
--disable-private-cluster
使用 kubectl 連線至叢集
使用 kubectl 命令,設定 az aks get-credentials 以連線到您的叢集。
az aks get-credentials --resource-group <resource-group> --name <cluster-name>
透過 Private Link 公開 API 伺服器
你可以使用 Azure Private Link,透過 API Server VNet 整合,公開私有叢集的 API 伺服器端點。 以下步驟說明如何在叢集 VNet 中建立 Private Link Service(PLS),並透過私人端點從另一個 VNet 或訂閱連接至該服務。
附註
qatarcentral 不支援 API Server VNet Integration。
建立 API Server VNET 整合私人叢集
使用az aks create命令,搭配--enable-apiserver-vnet-integration和--enable-private-cluster旗標,建立具備 API Server VNet 整合的私人 AKS 叢集。
az aks create --name <cluster-name> \
--resource-group <resource-group> \
--location <location> \
--enable-private-cluster \
--enable-apiserver-vnet-integration
如需有關如何設定 API Server VNet 與 Private Link 整合的詳細指引,請參閱 Private Link with API Server VNet Integration。
網路安全性群組 (NSG) 安全性規則
根據預設,允許 VNet 中的所有流量。 但是,如果您已新增 NSG 規則來限制不同子網路之間的流量,請確定 NSG 安全性規則允許下列類型的通訊:
| 目的地 | 來源 | 通訊協定 | 港口 | 使用 |
|---|---|---|---|---|
| APIServer 子網路 CIDR | 叢集子網路 | TCP | 443 和 4443 | 啟用節點與 API 伺服器之間通訊的必要專案。 |
| APIServer 子網路 CIDR | Azure Load Balancer | TCP | 9988 | 必須啟用 Azure Load Balancer 與 API 伺服器之間的通訊。 你也可以啟用 Azure Load Balancer 與 API 伺服器子網 CIDR 之間的所有通訊。 |
相關內容
- 建立 AKS 自動叢集
- 如需相關的最佳作法,請參閱 AKS 中的網路連線和安全性最佳做法。
- 若需有關設定 API Server VNet 整合的私人連結的指引,請參見 Private Link with API Server VNet Integration。