共用方式為


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

本文可協助您部署私人連結型 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 叢集

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

    az group create \
        --name <private-cluster-resource-group> \
        --location <location>
    
  2. 使用具有 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 命令。

  1. 使用 kubectl 命令,設定 az aks get-credentials 連線到 Kubernetes 叢集。 此命令會下載憑證並設定 Kubernetes CLI 以供使用。

    az aks get-credentials --resource-group <private-cluster-resource-group> --name <private-cluster-name>
    
  2. 使用 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 個字元。

附註

您可以使用 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 區域的私人叢集更新為公用

您只能從 byosystem 更新至 none。 不支援其他更新值組合。 更新之前,請確定您 連線到私人叢集

警告

當您從 byosystemnone更新私人叢集時,代理程式節點會變更為使用公用 FQDN。 在使用 Azure 虛擬機器擴展集 的 AKS 叢集中,會執行節點映射升級,以使用公用 FQDN 更新您的節點。

  • 使用具有下列旗標的 byo 命令,將私人叢集從 systemnone更新至 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。 有數個選項可讓您與私人叢集建立網路連線:

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

虛擬網路對等互連

若要使用虛擬網路對等互連,您需要設定虛擬網路與私人 DNS 區域之間的連結。

  1. Azure 入口網站 中,流覽至您的節點資源群組,然後選取您的私人 DNS 區域資源
  2. 在服務功能表中的 [DNS 管理] 底下
  3. 在 [新增 虛擬網絡 連結] 頁面上,設定下列設定:
    • 連結名稱:輸入虛擬網路連結的名稱。
    • 虛擬網絡:選取包含 VM 的虛擬網路。
  4. 選取 [建立] 以建立虛擬網路連結。
  5. 流覽至包含叢集虛擬網路的資源群組,然後選取您的 虛擬網路資源
  6. 在服務功能表中的 [設定] 底下,選取 [對等互連]>[新增]
  7. 在 [ 新增對等互連 ] 頁面上,設定下列設定:
    • 對等互連連結名稱:輸入對等互連連結的名稱。
    • 虛擬網路:選取 VM 的虛擬網路。
  8. 選取 [ 新增 ] 以建立對等互連連結。

如需詳細資訊,請參閱虛擬網路對等互連

具有自訂 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),並將 設定 publicDNSfalse

    • 僅限公用 DNS – 將privateDNSZone設定為none並將publicDNS保留為其預設值(true),以停用私人區域建立。

    不支援同時設定privateDNSZone: nonepublicDNS: false

附註

條件式轉送不支援子域。

附註

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

使用私人端點連線

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

重要

如果虛擬網路是使用自定義 DNS 伺服器設定,則必須針對環境適當地設定私人 DNS。 如需詳細資料,請參閱虛擬網路名稱解析文件

建立私人端點資源

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

  1. 從 Azure 入口網站 首頁,選取 [建立資源]。
  2. 搜尋私人端點,然後選取 [建立>私人端點]。
  3. 選取 [建立]
  4. 在 [基本] 索引標籤上,指定下列設定:
    • 專案詳細資料
      • 訂閱:選取您的私人叢集所在的訂閱。
      • 資源群組:選取包含虛擬網路的資源群組。
    • 執行個體詳細資料
      • 名稱:輸入私人端點的名稱,例如 myPrivateEndpoint
      • 區域:選取與虛擬網路相同的區域。
  5. 選取 [下一步:資源 ],並設定下列設定:
    • 連線方法:選取連線到我目錄中的 Azure 資源。
    • 訂閱:選取您的私人叢集所在的訂閱。
    • 資源類型:選取 Microsoft.ContainerService/managedClusters
    • 資源:選取您的私人叢集。
    • 目標子資源:選取管理
  6. 選取 [下一步]:虛擬網絡 並設定下列設定:
    • 網路功能
      • 虛擬網路:選取您的虛擬網路。
      • 子網路:選取您的子網路。
  7. 選取下一步:DNS>下一步:標籤並視需要設定索引鍵/值 (選用)。
  8. 選取下一步: 檢閱 + 建立>建立

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

建立私人 DNS 區域

建立私人端點之後,請建立與私人叢集所建立的私人 DNS 區域同名的新私人 DNS 區域。 請記得在包含取用資源的 VNet 中建立此 DNS 區域。

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

建立 A 記錄

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

  1. 移至在先前步驟中建立的私人 DNS 區域。
  2. 在服務功能表中的 [DNS 管理] 底下,選取 [
  3. 在 [ 新增記錄集 ] 頁面上,設定下列設定:
    • 名稱:輸入從 A 私人叢集 DNS 區域中記錄擷取的名稱。
    • 類型:選取 A - 位址記錄
    • TTL:輸入從私人叢集 DNS 區域中 A 記錄擷取的數字。
    • TTL 單位:將下拉式選單的值更改為和私人叢集 DNS 區域中的 A 記錄一致。
    • IP 位址:輸入 您所建立私人端點的 IP 位址。
  4. 選取 [ 新增 ] 以建立 A 記錄。

重要

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

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

  1. 移至在先前步驟中建立的私人 DNS 區域。
  2. 在服務功能表中的 [DNS 管理] 底下
  3. 在 [新增 虛擬網絡 連結] 頁面上,設定下列設定:
    • 連結名稱:輸入虛擬網路連結的名稱。
    • 訂閱:選取您的私人叢集所在的訂閱。
    • 虛擬網絡:選取私人叢集的虛擬網路。
  4. 選取 [建立] 以建立連結。

作業可能需要幾分鐘的時間才能完成。 建立虛擬網路鏈接之後,您可以從您在步驟 2 中使用的 [虛擬網絡 連結] 索引標籤取它

警告

  • 如果私人叢集已停止並重新啟動,則會移除並重新建立私人叢集的原始私人連結服務,這會中斷私人端點與私人叢集之間的連線。 若要解決此問題,請刪除並重新建立連結至私人叢集且由任何使用者建立的私人端點。 如果重新建立的私人端點有新的 IP 位址,您也需要更新 DNS 記錄。
  • 如果您在私人 DNS 區域中更新 DNS 記錄,請確定您嘗試連線的主機是使用更新的 DNS 記錄。 您可以使用nslookup命令加以確認。 如果您注意到更新未反映在輸出中,您可能需要排清計算機上的 DNS 快取,然後再試一次。

下一步

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