建立私人 Azure Kubernetes Service (AKS) 叢集

在私人叢集中,控制平面或 API 伺服器都具有內部 IP 位址,如 RFC1918 - 私人網際網路的位址配置文件中所定義。 藉由使用私人叢集,您可以確保 API 伺服器與節點集區之間的網路流量僅保留在私人網路上。

控制平面或 API 伺服器會位於 Azure Kubernetes Service (AKS) 管理的 Azure 資源群組中。 您的叢集或節點集區位於 Azure 資源群組中。 伺服器和叢集或節點集區可以透過 API 伺服器虛擬網路中的 Azure Private Link 服務,以及在您的 AKS 叢集子網路中公開的私人端點,彼此通訊。

您佈建私人 AKS 叢集時,AKS 預設會建立擁有私人 DNS 區域的私人 FQDN,以及擁有 Azure 公用 DNS 中對應 A 記錄的額外公用 FQDN。 代理程式節點會繼續使用私人 DNS 區域中的 A 記錄來解析私人端點的私人 IP 位址,以便與 API 伺服器通訊。

本文的目的是協助您部署私人連結型 AKS 叢集。 如果您想要在沒有必要的私人連結或通道的情況下建立 AKS 叢集,請參閱 使用 API Server VNet Integration 建立 Azure Kubernetes Service 叢集(預覽)。

區域可用性

私人叢集適用於支援 AKS 的公用區域、Azure Government 和 Microsoft Azure 作業的 21Vianet 區域。

必要條件

  • Azure CLI 2.28.0 版或更新版本。 執行 az --version 以尋找版本,然後執行 az upgrade 以升級版本。 如果您需要安裝或升級,請參閱安裝 Azure CLI
  • aks-preview 延伸模組 0.5.29 或更高版本。
  • 如果使用 Azure Resource Manager (ARM) 或 Azure REST API,則 AKS API 版本必須是 2021-05-01 或更新版本。
  • 僅 Standard Azure Load Balancer 支援 Azure Private Link 服務。 不支援 Basic Azure Load Balancer。
  • 若要使用自訂 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 區域設定的區域名稱中找到更多資訊。

注意

Azure Linux 節點集區現已正式發行 (GA)。 若要了解優點和部署步驟,請參閱適用於 AKS 的 Azure Linux 容器主機簡介

限制

  • IP 授權範圍無法套用至私人 API 伺服器端點,這些範圍只適用於公用 API 伺服器
  • Azure Private Link 服務限制適用於私人叢集。
  • 沒有支援搭配私人叢集使用 Azure DevOps Microsoft 裝載的代理程式。 請考慮使用自我裝載的代理程式
  • 如果您需要啟用 Azure Container Registry 以使用私人 AKS 叢集,請在叢集虛擬網路中設定容器登錄的私人連結,或設定容器登錄虛擬網路與私人叢集虛擬網路之間的對等互連。
  • 沒有對現有的 AKS 叢集轉換成私人叢集的支援。
  • 刪除或修改客戶子網路中的私人端點,會導致叢集停止運作。

建立私人 AKS 叢集

建立資源群組

使用 az group create 命令建立資源群組。 您也可以為您的 AKS 叢集使用現有的資源群組。

az group create -l eastus -n myResourceGroup

預設的基本網路

使用具有 --enable-private-cluster 旗標的 az aks create 命令,建立具有預設基本網路的私人叢集。

az aks create -n <private-cluster-name> -g <private-cluster-resource-group> --load-balancer-sku standard --enable-private-cluster  

進階網路功能

使用具有下列旗標的 az aks create 命令,建立具有進階網路的私人叢集:

az aks create \
    --resource-group <private-cluster-resource-group> \
    --name <private-cluster-name> \
    --load-balancer-sku standard \
    --enable-private-cluster \
    --network-plugin azure \
    --vnet-subnet-id <subnet-id> \
    --dns-service-ip 10.2.0.10 \
    --service-cidr 10.2.0.0/24 

使用自訂網域

如果您想要設定自訂網域,使其僅能內部解析,請參閱使用自訂網域

停用公用 FQDN

在新的 AKS 叢集上停用公用 FQDN

使用 --disable-public-fqdn 旗標建立私人 AKS 叢集時,停用公用 FQDN。

az aks create -n <private-cluster-name> -g <private-cluster-resource-group> --load-balancer-sku standard --enable-private-cluster --enable-managed-identity --assign-identity <resourceID> --private-dns-zone <private-dns-zone-mode> --disable-public-fqdn

停用現有叢集上的公用 FQDN

使用具有 --disable-public-fqdn 旗標的 az aks update 命令,在現有的 AKS 叢集上停用公用 FQDN。

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

設定私人 DNS 區域

您可以利用下列參數來設定私人 DNS 區域:

  • 系統:這是預設值。 如果省略 --private-dns-zone 引數,則 AKS 會在節點資源群組中建立私人 DNS 區域。
  • :預設值是公用 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 叢集不同的訂閱中,則您必須在這兩個訂閱中註冊 Azure 提供者 Microsoft.ContainerServices
    • "fqdn-subdomain" 只能與 "CUSTOM_PRIVATE_DNS_ZONE_RESOURCE_ID" 搭配使用,才能提供子網域功能給 privatelink.<region>.azmk8s.io
    • 如果您的 AKS 叢集已設定為 Active Directory 服務主體,則 AKS 不支援使用系統指派的受控識別搭配自訂私人 DNS 區域。
    • 如果您指定 <subzone>,則 <subzone> 名稱會有 32 個字元的限制。

注意

除了 Azure CLI 之外,還可以使用 ARM 範本來設定 CUSTOM_PRIVATE_DNS_ZONE_RESOURCE_IDprivateDNSZone 接受私人 DNZ 區域資源識別碼,如下列範例所示:

properties.apiServerAccessProfile.privateDNSZone.
"apiServerAccessProfile": {
"enablePrivateCluster": true,
"privateDNSZone": "system|none|[resourceId(..., 'Microsoft.Network/privateDnsZones', 'privatelink.<region>.azmk8s.io']"
}

重要

建立叢集之後,就無法變更 CUSTOM_PRIVATE_DNS_ZONE_RESOURCE_ID,而且無法刪除。 否則,叢集執行升級作業時將會有問題。

使用私人 DNS 區域建立私人 AKS 叢集

使用具有下列旗標的 az aks create 命令,建立具有的私人 DNS 區域的私人 AKS 叢集:

az aks create -n <private-cluster-name> -g <private-cluster-resource-group> --load-balancer-sku standard --enable-private-cluster --enable-managed-identity --assign-identity <resourceID> --private-dns-zone [system|none]

使用自訂私人 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 -n <private-cluster-name> -g <private-cluster-resource-group> --load-balancer-sku standard --enable-private-cluster --enable-managed-identity --assign-identity <resourceID> --private-dns-zone <custom private dns zone or custom private dns subzone resourceID>

使用自訂私人 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 -n <private-cluster-name> -g <private-cluster-resource-group> --load-balancer-sku standard --enable-private-cluster --enable-managed-identity --assign-identity <resourceID> --private-dns-zone <custom private dns zone resourceID> --fqdn-subdomain <subdomain>

將私人 DNS 區域的私人叢集更新為公用

注意

此功能需要aks-preview延伸模組版本> = 0.5.97

使用具有下列旗標的 az aks update 命令,將私人叢集從 byosystem更新至 none

az aks update -n <private-cluster-name> -g <private-cluster-resource-group> --private-dns-zone none

注意

您只能從 byosystem 更新至 none。 不支援其他更新值組合。

用來連線到私人叢集的選項

API 伺服器端點沒有公用 IP 位址。 若要管理 API 伺服器,您使用的 VM 必須可存取 AKS 叢集的 Azure 虛擬網路 (VNet)。 有數個選項可讓您與私人叢集建立網路連線:

注意

在與 AKS 叢集相同的 VNET 中建立 VM 是最簡單的選項。 Express Route 和 VPN 會增加成本,而且需要額外的網路複雜性。 虛擬網路對等互連會要求您規劃網路 CIDR 範圍,以確保沒有重疊的範圍。

虛擬網路對等互連

虛擬網路對等互連是存取私人叢集的一種方式。 若要使用虛擬網路對等互連,您需要設定虛擬網路與私人 DNS 區域之間的連結。

  1. 在瀏覽器中,移至 Azure 入口網站
  2. 從 Azure 入口網站,移至節點資源群組。
  3. 選取私人 DNS 區域。
  4. 在左頁窗格中,選取虛擬網路
  5. 建立新的連結,將 VM 的虛擬網路新增至私人 DNS 區域。 需要幾分鐘的時間,DNS 區域連結才會變成可供使用。
  6. 在 Azure 入口網站中,瀏覽至叢集的虛擬網路所在的資源群組。
  7. 在右側窗格中,選取虛擬網路。 虛擬網路名稱的格式為 aks-vnet-*
  8. 在左側窗格中選取 [對等互連]
  9. 選取 [新增]、新增 VM 的虛擬網路,然後建立對等互連。 如需詳細資訊,請參閱虛擬網路對等互連

具有自訂 DNS 的中樞和輪輻

中樞和輪輻架構通常用來在 Azure 中部署網路。 在其中許多部署中,輪輻 VNet 中的 DNS 設定會設定為參考中央 DNS 轉寄站,以允許用於內部部署和以 Azure 為基礎的 DNS 解析。 將 AKS 叢集部署到這類的網路環境時,有一些特殊的考量:

Private cluster hub and spoke

  • 根據預設,佈建私人叢集時,叢集管理的資源群組中會建立私人端點 (1) 和私人 DNS 區域 (2)。 叢集會使用私人區域中的 A 記錄來解析私人端點的 IP,以便與 API 伺服器通訊。
  • 私人 DNS 區域只會連結至叢集節點所連結的 VNet (3)。 這表示私人端點只能由該連結 VNet 中的主機解析。 未在 VNet 上設定任何自訂 DNS 的情況下 (預設值),這會在主機點向 DNS 的 168.63.129.16 時正常運作,DNS 可以因為連結而在私人 DNS 區域中解析記錄。
  • 在包含叢集的 VNet 有自訂 DNS 設定 (4) 的情況下,除非私人 DNS 區域已連結至包含自訂 DNS 解析程式 (5) 的 VNet,否則叢集部署將會失敗。 在叢集佈建期間建立私人區域之後,您可以手動建立此連結,或使用事件型部署機制 (例如 Azure 事件方格和 Azure Functions),在偵測到建立區域時,透過自動化來建立此連結。 為避免在開始部署期間發生叢集失敗,您可以透過私人的 DNS 區域資源識別碼部署叢集。 這僅適用於資源類型 Microsoft.ContainerService/managedCluster 和 API 版本 2022-07-01。 不支援將舊版本與 ARM 版本或 Bicep 資源定義搭配使用。

注意

有條件的轉接不支援子網域。

注意

如果您正在使用自備路由表搭配 kubenet和自備 DNS 搭配私人叢集,則叢集建立會失敗。 在叢集建立失敗之後,節點資源群組中的 RouteTable 必須與子網路建立關聯,才能成功建立。

使用私人端點連線

您可以設定私人端點,讓 VNet 不需要對等互連,就能與私人叢集進行通訊。 若要使用私人端點,請在虛擬網路中建立新的私人端點,然後在虛擬網路與新的私人 DNS 區域之間建立連結。

重要

如果虛擬網路設定為自訂 DNS 伺服器,則必須針對環境確實設定私人 DNS。 如需詳細資料,請參閱虛擬網路名稱解析文件

建立私人端點資源

在您的 VNet 中建立私人端點資源:

  1. 在瀏覽器中,移至 Azure 入口網站
  2. 從 Azure 入口網站功能表選取 [建立資源]
  3. 搜尋私人端點,然後選取 [建立]> [私人端點]
  4. 選取 建立
  5. 在 [基本] 索引標籤上,設定下列選項:
    • 專案詳細資料
      • 選取 Azure 訂用帳戶
      • 選取虛擬網路所在的 Azure 資源群組
    • 執行個體詳細資料
      • 輸入私人端點的名稱,例如 myPrivateEndpoint
      • 選取私人端點的區域

重要

檢查選取的區域是否與您想要從中連線的虛擬網路相同,否則不會在 [設定] 索引標籤中看到您的虛擬網路。

  1. 選取下一步:資源並設定下列選項:
    • 連線方法:選取連線到我目錄中的 Azure 資源。
    • 訂閱:選取您的私人叢集所在的 Azure 訂閱。
    • 資源類型:選取 Microsoft.ContainerService/managedClusters
    • 資源:選取您的私人叢集。
    • 目標子資源:選取管理
  2. 選取下一步:虛擬網路並設定下列選項:
    • 網路
      • 虛擬網路:選取您的虛擬網路。
      • 子網路:選取您的子網路。
  3. 選取下一步:DNS>下一步:標籤並視需要設定索引鍵/值 (選用)。
  4. 選取下一步: 檢閱 + 建立>建立

建立資源之後,請記錄私人端點的私人 IP 位址以供日後使用。

建立私人 DNS 區域

建立私人端點之後,請使用與私人叢集所建立私人 DNS 區域具有相同名稱的新私人 DNS 區域:

  1. 在 Azure 入口網站中,移至節點資源群組。
  2. 選取私人 DNS 區域和記錄:
    • 私人 DNS 區域的名稱,其遵循模式 *.privatelink.<region>.azmk8s.io
    • A 記錄的名稱 (不包括私人 DNS 名稱)。
    • 存留時間 (TTL)。
  3. 從 Azure 入口網站選取 [建立資源]
  4. 搜尋私人 DNS 區域,然後選取建立私人 DNS 區域然後選取建立>私人 DNS 區域
  5. 在 [基本] 索引標籤上,設定下列選項:
    • 專案詳細資料
      • 選取您的 [訂用帳戶]
      • 選取已建立私人端點的資源群組
    • 執行個體詳細資料
      • 輸入從先前步驟擷取的 DNS 區域名稱
      • 區域預設為您的資源群組位置。
  6. 選取 [檢閱 + 建立]>[建立]

建立 A 記錄

建立私人 DNS 區域之後,請建立 A 記錄,以將私人端點與私人叢集產生關聯:

  1. 移至在先前步驟中建立的私人 DNS 區域。
  2. 概觀 頁面上,選取記錄集
  3. 在 [新增記錄集] 索引標籤上,設定下列選項:
    • 名稱:輸入從私人叢集 DNS 區域中 A 記錄擷取的名稱。
    • 類型:選取 A - 位址記錄
    • TTL:輸入從私人叢集 DNS 區域中 A 記錄擷取的數字。
    • TTL 單位:變更下拉式清單值,以符合私人叢集 DNS 區域的 A 記錄相同單位。
    • IP 位址:輸入您已建立的私人端點 IP 位址。

重要

建立 A 記錄時,請只使用名稱,而不是完整網域名稱 (FQDN)。

建立 A 記錄之後,請將私人 DNS 區域連結至將存取私人叢集的虛擬網路:

  1. 移至在先前步驟中建立的私人 DNS 區域。
  2. 在左窗格中,選取虛擬網路連結
  3. 選取新增並設定下列選項:
    • 連結名稱:輸入虛擬網路連結的名稱。
    • 訂閱:選取您的私人叢集所在的 Azure 訂閱。
    • 虛擬網路:選取您稍早為虛擬叢集建立的虛擬網路。
  4. 選取確定以建立連結。

需要幾分鐘才能完成作業。 建立虛擬網路連結之後,您可以從您在步驟 2 中使用的虛擬網路連結索引標籤進行存取。

警告

如果私人叢集已停止並重新啟動,則會移除並重新建立私人叢集的原始私人連結服務,這會中斷私人端點與私人叢集之間的連線。 若要解決此問題,請刪除並重新建立連結至私人叢集且由任何使用者建立的私人端點。 如果重新建立的私人端點有新的 IP 位址,您也需要更新 DNS 記錄。

下一步

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