本文可協助您部署私人連結型 AKS 叢集。 如果您想要在沒有必要的私人連結或通道的情況下建立 AKS 叢集,請參閱使用 API Server VNet 整合建立 Azure Kubernetes Service 叢集(預覽版)。
概觀
在私人叢集中,控制平面或 API 伺服器都具有內部 IP 位址,如 RFC1918 - 私人網際網路的位址配置文件中所定義。 藉由使用私人叢集,您可以確保 API 伺服器與節點集區之間的網路流量只會保留在專用網路上。
控制平面或 API 伺服器位於 AKS 管理的 Azure 資源群組中,而您的叢集或節點集區位於您的資源群組中。 伺服器和叢集或節點集區可以透過 API 伺服器虛擬網路中的 Azure Private Link 服務,以及在您的 AKS 叢集子網路中公開的私人端點,彼此通訊。
當您布建私人 AKS 叢集時,AKS 預設會使用私人 DNS 區域建立私人 FQDN,並在 Azure 公用 DNS 中建立具有對應 A
記錄的其他公用 FQDN。 代理程式節點會繼續使用 A
私人 DNS 區域中的記錄,解析私人端點的私人IP位址,以便與 API 伺服器通訊。
區域可用性
私人叢集適用於公用區域、Azure Government,以及由 21Vianet 運作並支援 AKS 的 Microsoft Azure 區域。
必要條件
- Azure CLI 2.28.0 版或更高版本。 執行
az --version
以尋找版本,然後執行az upgrade
以升級版本。 如果您需要安裝或升級,請參閱安裝 Azure CLI。 - 如果使用 Azure Resource Manager (ARM) 或 Azure REST API,則 AKS API 版本必須是 2021-05-01 或更新版本。
- 若要使用自訂 DNS 伺服器,請在自訂 DNS 伺服器中新增 Azure 公用 IP 位址 168.63.129.16 作為上游 DNS 伺服器,並且確定將此公用 IP 位址新增為第一個 DNS 伺服器。 如需 Azure IP 位址的詳細資訊,請參閱什麼是 IP 位址 168.63.129.16?
- 叢集的 DNS 區域應該是您轉送至 168.63.129.16 的區域。 您可以在 Azure 服務 DNS 區域設定的區域名稱中找到更多資訊。
- 使用 API Server VNet 整合啟用的現有 AKS 叢集可以啟用私人叢集模式。 如需詳細資訊,請參閱在具有 API Server VNet 整合的現有叢集上啟用或停用私人叢集模式。
附註
Azure Linux 節點集區現已正式發行 (GA)。 若要了解優點和部署步驟,請參閱適用於 AKS 的 Azure Linux 容器主機簡介。
限制
- IP 授權範圍無法套用至私人 API 伺服器端點,只能套用至公用 API 伺服器。
- Azure Private Link 服務限制適用於私人叢集。
- 沒有支援搭配私人叢集使用 Azure DevOps Microsoft 裝載的代理程式。 請考慮使用自我裝載的代理程式。
- 如果您需要讓 Azure Container Registry 與私人 AKS 叢集搭配運作, 請在叢集虛擬網路 中設定容器登錄的私人連結,或設定容器登錄虛擬網路與私人叢集虛擬網路之間的對等互連。
- 刪除或修改客戶子網路中的私人端點,會導致叢集停止運作。
- 僅 Standard Azure Load Balancer 支援 Azure Private Link 服務。 不支援 Basic Azure Load Balancer。
建立私人 AKS 叢集
使用
az group create
命令建立資源群組。 您也可以為您的 AKS 叢集使用現有的資源群組。az group create \ --name <private-cluster-resource-group> \ --location <location>
使用具有
az aks create
旗標的--enable-private-cluster
命令,建立具有預設基本網路的私人叢集。az aks create \ --name <private-cluster-name> \ --resource-group <private-cluster-resource-group> \ --load-balancer-sku standard \ --enable-private-cluster \ --generate-ssh-keys
連線到私人叢集
若要管理 Kubernetes 叢集,請使用 Kubernetes 命令列用戶端 kubectl。 如果您使用 Azure Cloud Shell,則 kubectl
已安裝。 若要在本機安裝 kubectl
,請使用 az aks install-cli
命令。
使用
kubectl
命令,設定az aks get-credentials
連線到 Kubernetes 叢集。 此命令會下載憑證並設定 Kubernetes CLI 以供使用。az aks get-credentials --resource-group <private-cluster-resource-group> --name <private-cluster-name>
使用
kubectl get
命令確認叢集的連線。 此命令會傳回叢集節點的清單。kubectl get nodes
使用自訂網域
如果您想要設定自訂網域,使其僅能內部解析,請參閱使用自訂網域。
停用公用 FQDN
停用新叢集上的公用 FQDN
使用
az aks create
命令搭配--disable-public-fqdn
旗標建立私人 AKS 叢集時,停用公用 FQDN。az aks create \ --name <private-cluster-name> \ --resource-group <private-cluster-resource-group> \ --load-balancer-sku standard \ --enable-private-cluster \ --assign-identity <resourceID> \ --private-dns-zone <private-dns-zone-mode> \ --disable-public-fqdn \ --generate-ssh-keys
停用現有叢集上的公用 FQDN
使用具有
az aks update
旗標的--disable-public-fqdn
命令,在現有的 AKS 叢集上停用公用 FQDN。az aks update \ --name <private-cluster-name> \ --resource-group <private-cluster-resource-group> \ --disable-public-fqdn
設定私人 DNS 區域
您可以利用下列參數來設定私人 DNS 區域:
-
system
︰這是預設值。 如果省略--private-dns-zone
引數,則 AKS 會在節點資源群組中建立私人 DNS 區域。 -
none
:預設值為公用 DNS。 AKS 不會建立私人 DNS 區域。 -
CUSTOM_PRIVATE_DNS_ZONE_RESOURCE_ID
:這需要您為 Azure 全域雲端建立下列格式的私人 DNS 區域:privatelink.<region>.azmk8s.io
或<subzone>.privatelink.<region>.azmk8s.io
。 您將需要該私人 DNS 區域的資源識別碼以供未來使用。 您也需要具有私人 DNS 區域參與者和網路參與者角色的使用者指派身分識別或服務主體。 使用 API 伺服器 VNet 整合進行部署時,私人 DNS 區域支援private.<region>.azmk8s.io
或<subzone>.private.<region>.azmk8s.io
的命名格式。 建立叢集之後,您無法變更或刪除此資源,因為它可能會導致效能問題和叢集升級失敗。- 如果私人 DNS 區域位於與 AKS 叢集不同的訂用帳戶中,您必須在這兩個訂用帳戶中註冊
Microsoft.ContainerServices
Azure 提供者。 - 您可以僅使用
fqdn-subdomain
搭配CUSTOM_PRIVATE_DNS_ZONE_RESOURCE_ID
來為privatelink.<region>.azmk8s.io
提供子域功能。 - 如果您的 AKS 叢集已設定為 Active Directory 服務主體,則 AKS 不支援使用系統指派的受控識別搭配自訂私人 DNS 區域。 叢集必須使用使用者指派的受控識別驗證。
- 如果您要指定
<subzone>
,則<subzone>
的名稱限制為 32 個字元。
- 如果私人 DNS 區域位於與 AKS 叢集不同的訂用帳戶中,您必須在這兩個訂用帳戶中註冊
附註
您可以使用 CUSTOM_PRIVATE_DNS_ZONE_RESOURCE_ID
ARM 範本或 Azure CLI 進行設定。
privateDNSZone
接受私人 DNZ 區域 resourceID
,如下列範例所示:
properties.apiServerAccessProfile.privateDNSZone.
"apiServerAccessProfile": {
"enablePrivateCluster": true,
"privateDNSZone": "system|none|[resourceId(..., 'Microsoft.Network/privateDnsZones', 'privatelink.<region>.azmk8s.io']"
}
使用私人 DNS 區域建立私人 AKS 叢集
使用具有下列旗標的
az aks create
命令,建立具有的私人 DNS 區域的私人 AKS 叢集:az aks create \ --name <private-cluster-name> \ --resource-group <private-cluster-resource-group> \ --load-balancer-sku standard \ --enable-private-cluster \ --assign-identity <resourceID> \ --private-dns-zone [system|none] \ --generate-ssh-keys
使用自訂私人 DNS 區域或私人 DNS 子區域建立私人 AKS 叢集
使用具有下列旗標的
az aks create
命令,建立具有的自訂 DNS 區或子區域的私人 AKS 叢集:# The custom private DNS zone name should be in the following format: "<subzone>.privatelink.<region>.azmk8s.io" az aks create \ --name <private-cluster-name> \ --resource-group <private-cluster-resource-group> \ --load-balancer-sku standard \ --enable-private-cluster \ --assign-identity <resourceID> \ --private-dns-zone <custom private dns zone or custom private dns subzone resourceID> \ --generate-ssh-keys
使用自訂私人 DNS 區域和自訂子區域建立私人 AKS 叢集
使用具有下列旗標的
az aks create
命令,建立具有的自訂 DNS 區和子網域的私人 AKS 叢集:# The custom private DNS zone name should be in one of the following formats: "privatelink.<region>.azmk8s.io" or "<subzone>.privatelink.<region>.azmk8s.io" az aks create \ --name <private-cluster-name> \ --resource-group <private-cluster-resource-group> \ --load-balancer-sku standard \ --enable-private-cluster \ --assign-identity <resourceID> \ --private-dns-zone <custom private dns zone resourceID> \ --fqdn-subdomain <subdomain> \ --generate-ssh-keys
將私人 DNS 區域的私人叢集更新為公用
您只能從 byo
或 system
更新至 none
。 不支援其他更新值組合。 更新之前,請確定您 連線到私人叢集。
警告
當您從 byo
或 system
none
更新私人叢集時,代理程式節點會變更為使用公用 FQDN。 在使用 Azure 虛擬機器擴展集 的 AKS 叢集中,會執行節點映射升級,以使用公用 FQDN 更新您的節點。
使用具有下列旗標的
byo
命令,將私人叢集從system
或none
更新至az aks update
:az aks update \ --name <private-cluster-name> \ --resource-group <private-cluster-resource-group> \ --private-dns-zone none
連接私人叢集的選項
API 伺服器端點沒有公用 IP 位址。 若要管理 API 伺服器,您必須使用可存取 AKS 叢集 Azure 虛擬網絡 (VNet) 的 VM。 有數個選項可讓您與私人叢集建立網路連線:
- 使用具有
az vm create
旗標的--vnet-name
命令,在與 AKS 叢集相同的 VNet 中建立 VM。 - 在不同的網路中使用 VM,並設定虛擬網路對等互連。
- 使用 Express Route 或 VPN 連線。
- 使用 AKS
command invoke
功能。 - 使用私人端點連線。
- 使用部署到連接至叢集 API 伺服器的子網路中的 Cloud Shell 執行個體。
在與 AKS 叢集相同的 VNET 中建立 VM 是最簡單的選項。 Express Route 和 VPN 會增加成本,而且需要額外的網路複雜性。 虛擬網路對等互連會要求您規劃網路 CIDR 範圍,以確保沒有重疊的範圍。
虛擬網路對等互連
若要使用虛擬網路對等互連,您需要設定虛擬網路與私人 DNS 區域之間的連結。
- 在 Azure 入口網站 中,流覽至您的節點資源群組,然後選取您的私人 DNS 區域資源。
- 在服務功能表中的 [DNS 管理] 底下
- 在 [新增 虛擬網絡 連結] 頁面上,設定下列設定:
- 連結名稱:輸入虛擬網路連結的名稱。
- 虛擬網絡:選取包含 VM 的虛擬網路。
- 選取 [建立] 以建立虛擬網路連結。
- 流覽至包含叢集虛擬網路的資源群組,然後選取您的 虛擬網路資源。
- 在服務功能表中的 [設定] 底下,選取 [對等互連]>[新增]。
- 在 [ 新增對等互連 ] 頁面上,設定下列設定:
- 對等互連連結名稱:輸入對等互連連結的名稱。
- 虛擬網路:選取 VM 的虛擬網路。
- 選取 [ 新增 ] 以建立對等互連連結。
如需詳細資訊,請參閱虛擬網路對等互連。
具有自訂 DNS 的中樞和輪輻
中樞和輪輻架構通常用來在 Azure 中部署網路。 在其中許多部署中,輪輻 VNet 中的 DNS 設定會設定為參考中央 DNS 轉寄站,以允許用於內部部署和以 Azure 為基礎的 DNS 解析。
將 AKS 叢集部署到這類的網路環境時,有一些特殊的考量:
根據預設,佈建私人叢集時,叢集管理的資源群組中會建立私人端點 (1) 和私人 DNS 區域 (2)。 叢集會使用私人區域中的
A
記錄來解析私人端點的 IP,以便與 API 伺服器通訊。私人 DNS 區域只會連結至叢集節點所連結的 VNet (3)。 這表示私人端點只能由該連結 VNet 中的主機解析。 未在 VNet 上設定任何自訂 DNS 的情況下 (預設值),這會在主機點向 DNS 的 168.63.129.16 時正常運作,DNS 可以因為連結而在私人 DNS 區域中解析記錄。
如果您保留預設的私人 DNS 區域行為,AKS 會嘗試將區域直接連結至裝載叢集的輪輻 VNet,即使區域已經連結至中樞 VNet 也一樣。
在使用自訂 DNS 伺服器的分支 VNet 中,如果叢集的受控識別在分支 VNet 上缺少 網路參與者,此動作可能會失敗。
若要防止失敗,請選擇下列 其中一個 支援的組態:自定義私人 DNS 區域 – 提供預先建立的私人區域,並將其設定
privateDNSZone
為其資源識別符。 將該區域連結至適當的 VNet(例如中樞 VNet),並將 設定publicDNS
為false
。僅限公用 DNS – 將
privateDNSZone
設定為none
,並將publicDNS
保留為其預設值(true
),以停用私人區域建立。
不支援同時設定
privateDNSZone: none
和publicDNS: false
。
附註
條件式轉送不支援子域。
附註
如果您正在使用自備路由表搭配 kubenet 和自備 DNS 搭配私人叢集,則叢集建立會失敗。 在叢集建立失敗之後,必須將節點資源群組中的 RouteTable
與子網路建立關聯,才能讓建立成功。
使用私人端點連線
您可以設定私人端點,讓 VNet 不需要對等互連,就能與私人叢集進行通訊。 在包含取用資源的虛擬網路中建立新的私人端點,然後在虛擬網路與相同網路中的新私人 DNS 區域之間建立連結。
重要
如果虛擬網路是使用自定義 DNS 伺服器設定,則必須針對環境適當地設定私人 DNS。 如需詳細資料,請參閱虛擬網路名稱解析文件。
建立私人端點資源
在您的 VNet 中建立私人端點資源:
- 從 Azure 入口網站 首頁,選取 [建立資源]。
- 搜尋私人端點,然後選取 [建立>私人端點]。
- 選取 [建立]。
- 在 [基本] 索引標籤上,指定下列設定:
-
專案詳細資料
- 訂閱:選取您的私人叢集所在的訂閱。
- 資源群組:選取包含虛擬網路的資源群組。
-
執行個體詳細資料
- 名稱:輸入私人端點的名稱,例如 myPrivateEndpoint。
- 區域:選取與虛擬網路相同的區域。
-
專案詳細資料
- 選取 [下一步:資源 ],並設定下列設定:
- 連線方法:選取連線到我目錄中的 Azure 資源。
- 訂閱:選取您的私人叢集所在的訂閱。
- 資源類型:選取 Microsoft.ContainerService/managedClusters。
- 資源:選取您的私人叢集。
- 目標子資源:選取管理。
- 選取 [下一步]:虛擬網絡 並設定下列設定:
-
網路功能
- 虛擬網路:選取您的虛擬網路。
- 子網路:選取您的子網路。
-
網路功能
- 選取下一步:DNS>下一步:標籤並視需要設定索引鍵/值 (選用)。
- 選取下一步: 檢閱 + 建立>建立。
建立資源之後,請記錄私人端點的私人 IP 位址以供日後使用。
建立私人 DNS 區域
建立私人端點之後,請建立與私人叢集所建立的私人 DNS 區域同名的新私人 DNS 區域。 請記得在包含取用資源的 VNet 中建立此 DNS 區域。
- 在 Azure 入口網站 中,流覽至您的節點資源群組,然後選取您的私人 DNS 區域資源。
- 在服務功能表中的 [DNS 管理] 底下,選取 [記錄集],並記下下列事項:
- 私人 DNS 區域的名稱,其遵循模式
*.privatelink.<region>.azmk8s.io
。 -
A
記錄的名稱 (不包括私人 DNS 名稱)。 - 存留時間 (TTL)。
- 私人 DNS 區域的名稱,其遵循模式
- 從 Azure 入口網站 首頁,選取 [建立資源]。
- 搜尋 私用 DNS 區域,然後選取 [建立> 私用 DNS 區域]。
- 在 [基本] 索引標籤上,指定下列設定:
-
專案詳細資料:
- 選取您的 [訂用帳戶]。
- 請選取您用於建立私人端點的資源群組。
-
執行個體詳細資料
- 名稱:輸入從先前步驟擷取的 DNS 區域名稱。
- 區域預設為您的資源群組位置。
-
專案詳細資料:
- 選取 [檢閱+建立]>[建立]。
建立 A
記錄
建立私人 DNS 區域之後,請建立 A
記錄,以將私人端點與私人叢集產生關聯:
- 移至在先前步驟中建立的私人 DNS 區域。
- 在服務功能表中的 [DNS 管理] 底下,選取 [
- 在 [ 新增記錄集 ] 頁面上,設定下列設定:
-
名稱:輸入從
A
私人叢集 DNS 區域中記錄擷取的名稱。 - 類型:選取 A - 位址記錄。
-
TTL:輸入從私人叢集 DNS 區域中
A
記錄擷取的數字。 -
TTL 單位:將下拉式選單的值更改為和私人叢集 DNS 區域中的
A
記錄一致。 - IP 位址:輸入 您所建立私人端點的 IP 位址。
-
名稱:輸入從
- 選取 [ 新增 ] 以建立
A
記錄。
重要
建立 A
記錄時,請只使用名稱,而不是完整網域名稱 (FQDN)。
將私人 DNS 區域連結至虛擬網路
建立 A
記錄之後,請將私人 DNS 區域連結至將存取私人叢集的虛擬網路:
- 移至在先前步驟中建立的私人 DNS 區域。
- 在服務功能表中的 [DNS 管理] 底下
- 在 [新增 虛擬網絡 連結] 頁面上,設定下列設定:
- 連結名稱:輸入虛擬網路連結的名稱。
- 訂閱:選取您的私人叢集所在的訂閱。
- 虛擬網絡:選取私人叢集的虛擬網路。
- 選取 [建立] 以建立連結。
作業可能需要幾分鐘的時間才能完成。 建立虛擬網路鏈接之後,您可以從您在步驟 2 中使用的 [虛擬網絡 連結] 索引標籤取它。
警告
- 如果私人叢集已停止並重新啟動,則會移除並重新建立私人叢集的原始私人連結服務,這會中斷私人端點與私人叢集之間的連線。 若要解決此問題,請刪除並重新建立連結至私人叢集且由任何使用者建立的私人端點。 如果重新建立的私人端點有新的 IP 位址,您也需要更新 DNS 記錄。
- 如果您在私人 DNS 區域中更新 DNS 記錄,請確定您嘗試連線的主機是使用更新的 DNS 記錄。 您可以使用
nslookup
命令加以確認。 如果您注意到更新未反映在輸出中,您可能需要排清計算機上的 DNS 快取,然後再試一次。
下一步
如需相關的最佳作法,請參閱 AKS 中的網路連線和安全性最佳做法。