保護 Kubernetes 的網路存取

Azure Bastion
Azure DNS
Azure Kubernetes Service (AKS)
Azure Private Link
Azure 虛擬網路

本文比較Azure Kubernetes Service (AKS) 和 Amazon Elastic Kubernetes Service (Amazon EKS) 的網路模式。 本文說明如何改善 AKS 叢集受控 API 伺服器的連線安全性,以及限制公用網路存取的不同選項。

注意

本文是一 系列文章的 一部分,可協助熟悉 Amazon EKS 的專業人員瞭解 AKS

Amazon EKS 網路模式

透過 Amazon Virtual Private Cloud (Amazon AWS) ,您可以將 Amazon Web Services (AWS) 資源啟動到由公用和私人 子網組成的虛擬網路,或由 CSV 中的 IP 位址範圍組成。 公用子網會裝載必須連線到網際網路的資源,而私人子網會裝載未連線至公用網際網路的資源。 Amazon EKS 可以在公用和私人子網中布建受控節點群組。

端點存取控制可讓您設定 API 伺服器端點可從公用網際網路或透過 API 連線。 EKS 提供數種方式來控制 叢集端點的存取。 您可以同時啟用預設公用端點、私人端點或兩個端點。 當您啟用公用端點時,您可以新增無類別Inter-Domain路由 (CIDR) 限制來限制可連線到公用端點的用戶端 IP 位址。

Amazon EKS 節點如何連線到受控 Kubernetes 控制平面,取決於叢集的端點設定。 您可以透過 Amazon EKS 主控台或 API 隨時變更端點設定。 如需詳細資訊,請參閱 Amazon EKS 叢集端點存取控制

僅限公用端點

透過公用端點公開控制平面是新 Amazon EKS 叢集的預設模式。 當只啟用叢集的公用端點時,來自 Amazon AWS 內的 Kubernetes API 要求,例如背景工作節點來控制平面通訊,請離開 AWS,但不要離開 Amazon 的網路。 若要讓節點連線到控制平面,他們必須使用公用 IP 位址和路由至網際網路閘道,或路由至網路位址轉譯 (NAT) 閘道,以便他們可以使用 NAT 閘道的公用 IP 位址。

公用和私人端點

啟用公用和私人端點時,KUBERnetes API 要求會透過 AMAZON EKS 管理的彈性網路介面與控制平面進行通訊, (在) 于) 。 叢集 API 伺服器可從網際網路存取。

僅限私人端點

僅啟用私人端點時,叢集 API 伺服器的所有流量,例如 kubectlhelm 命令,都必須來自叢集的 VPN 或連線網路。 已停用從網際網路對 API 伺服器的公用存取。 您可以使用 AWS 虛擬私人網路 (AWS VPN) AWS DirectConnect 來實作此存取模式。 若要限制沒有 AWS VPN 或 DirectConnect 的端點存取,您可以將 CIDR 限制新增至公用端點,以限制連線,而不需設定更多網路功能。

如需連線選項的詳細資訊,請參閱 存取僅限私人 API 伺服器

API 伺服器的 AKS 網路存取

有兩個選項可用來保護 AKS 中 Kubernetes API 的網路存取、私人 AKS 叢集或授權的 IP 範圍。

私人 AKS 叢集

AKS 私人叢集可確保 API 伺服器與節點集區之間的網路流量會保留在虛擬網路內。 在私人 AKS 叢集中,控制平面或 API 伺服器具有只能透過位於相同虛擬網路的 Azure 私人端點 存取的內部 IP 位址。 相同虛擬網路中任何虛擬機器 (VM) ,都可以透過私人端點私下與控制平面通訊。 控制平面或 API 伺服器裝載于 Azure 管理的訂用帳戶中,而 AKS 叢集及其節點集區則位於客戶的訂用帳戶中。

下圖說明私人叢集組態。

顯示私人 AKS 叢集的圖表。

下載這個架構的 Visio 檔案

若要布建私人 AKS 叢集,AKS 資源提供者會為私人 DNS 區域中的節點資源群組建立私人完整功能變數名稱 (FQDN) 。 或者,AKS 也可以使用 Azure 公用 DNS 區域中的對應位址 (A) 記錄來建立公用 FQDN。 代理程式節點會 A 使用私人 DNS 區域中的記錄來解析私人端點 IP 位址,以便與 API 伺服器通訊。

AKS 資源提供者可以在節點資源群組中建立私人 DNS 區域,或者您可以建立私人 DNS 區域,並將其資源識別碼傳遞至布建系統。 當您搭配使用 Terraform 搭配 AzureBicepARM 範本Azure CLIAzure PowerShell模組Azure REST API來建立叢集時,您可以建立私人叢集。

您可以在布建期間啟用 API 伺服器的公用 FQDN,或使用 az aks update 命令搭配 --enable-public-fqdn 現有叢集上的 參數。 如果您啟用公用 FQDN,任何存取伺服器的 VM,例如 Azure DevOps 自我裝載代理程式或GitHub Actions自我裝載的執行器,都必須位於裝載叢集的相同虛擬網路中,或是透過虛擬網路對等互連站對站 VPN連線的網路。

針對私人 AKS 叢集,您會停用 API 伺服器的公用 FQDN。 若要與私人控制平面通訊,VM 必須位於相同的虛擬網路中,或在具有私人 DNS 區域之虛擬網路連結的對等互連虛擬網路中。 私人 A DNS 區域中的記錄會將 API 伺服器的 FQDN 解析為與基礎控制平面通訊的私人端點 IP 位址。 如需詳細資訊,請參閱建立私人 Azure Kubernetes Service 叢集

私人叢集部署選項

AKS 資源提供者會公開下列參數來自訂私人 AKS 叢集部署:

  • authorizedIpRanges (字串) 指定 CIDR 格式允許的 IP 範圍。
  • disableRunCommand (布林值) 指定是否要停用 run 叢集的命令。
  • enablePrivateCluster (布林值) 指定是否要將叢集建立為私用。
  • enablePrivateClusterPublicFQDN (布林值) 指定是否要為私人叢集建立另一個公用 FQDN。
  • privateDnsZone (字串) 指定節點資源群組中的私人 DNS 區域。 如果您未指定值,資源提供者會建立區域。 您可以指定下列值:
    • System 為預設值。
    • None 預設為公用 DNS,因此 AKS 不會建立私人 DNS 區域。
    • <Your own private DNS zone resource ID> 會使用您以 或 格式 privatelink.<region>.azmk8s.io 建立的私人 DNS 區域 <subzone>.privatelink.<region>.azmk8s.io.

下表顯示部署私人 AKS 叢集的 DNS 組態選項:

私用 DNS區域選項 enablePrivateClusterPublicFQDN: true enablePrivateClusterPublicFQDN: false
系統 代理程式節點,以及 AKS 叢集虛擬網路中任何其他 VM,或任何連線到私人 DNS 區域的虛擬網路,請使用私人 DNS 區域 A 記錄來解析私人端點的私人 IP 位址。

任何其他 VM 都會使用 API 伺服器的公用 FQDN。
代理程式節點,以及 AKS 叢集虛擬網路中任何其他 VM,或任何連線到私人 DNS 區域的虛擬網路,請使用私人 DNS 區域 A 記錄來解析私人端點的私人 IP 位址。

沒有公用 API 伺服器 FQDN 可供使用。
None 所有 VM,包括代理程式節點,都會使用可透過 A Azure 受控公用 DNS 區域中記錄取得之 API 伺服器的公用 FQDN。 錯誤組態。 私人 AKS 叢集至少需要公用或私人 DNS 區域,以用於 API 伺服器的名稱解析。
<您自己的私人 DNS 區域資源識別碼> 代理程式節點,以及 AKS 叢集虛擬網路中任何其他 VM,或任何連線到私人 DNS 區域的虛擬網路,請使用私人 DNS 區域 A 記錄來解析私人端點的私人 IP 位址。

任何其他 VM 都使用 API 伺服器的公用 FQDN。
代理程式節點,以及 AKS 叢集虛擬網路中任何其他 VM,或任何連線到私人 DNS 區域的虛擬網路,請使用私人 DNS 區域 A 記錄來解析私人端點的私人 IP 位址。

沒有公用 API 伺服器 FQDN 可供使用。

私人叢集連線和管理

有數個選項可讓您與私人叢集建立網路連線。

您可以從相同虛擬網路或對等互連虛擬網路中的管理 VM 使用 kubectl 命令列工具來管理私人 AKS 叢集。

您可以在相同的虛擬網路或對等互連的虛擬網路中使用 Azure Bastion 來連線到 Jumpbox 管理 VM。 Azure Bastion 是完全受控的平臺即服務 (PaaS) ,可讓您使用瀏覽器和Azure 入口網站連線到 VM。 Azure Bastion 提供安全且順暢的遠端桌面通訊協定, (RDP) 或安全殼層 (SSH) 透過傳輸層安全性 (TLS) 直接從Azure 入口網站連線。 當 VM 透過 Azure Bastion 連線時,它們不需要公用 IP 位址、代理程式或特殊用戶端軟體。

您也可以使用 az aks 命令叫 用在私人 AKS 叢集上執行 kubectlhelm 命令,而不需要連線到 jumpbox VM。

授權的 IP 範圍

改善叢集安全性並將對 API 伺服器的攻擊降至最低的第二個選項是使用 授權的 IP 範圍。 授權的 IP 會將公用 AKS 叢集的控制平面存取限制為已知的 IP 位址和CIDR 清單。 當您使用此選項時,API 伺服器仍會公開,但存取受到限制。 如需詳細資訊,請參閱在 AKS Azure Kubernetes Service () 中使用授權的 IP 位址範圍保護 API 伺服器的存取

下列 az aks update Azure CLI 命令會授權 IP 範圍:

 az aks update \
     --resource-group myResourceGroup \
     --name myAKSCluster \
     --api-server-authorized-ip-ranges  73.140.245.0/24

AKS 連線考慮

  • AKS 私人叢集提供比授權 IP 更高的安全性和隔離。 不過,您無法將現有的公用 AKS 叢集轉換成私人叢集。 您可以啟用任何現有 AKS 叢集的授權 IP。

  • 您無法將授權的 IP 範圍套用至私人 API 伺服器端點。 授權 IP 僅適用于公用 API 伺服器。

  • 私人叢集不支援 Azure DevOps 裝載的代理程式。 請考慮使用自我裝載的代理程式。

  • 若要讓Azure Container Registry使用私人 AKS 叢集,請在叢集虛擬網路中設定容器登錄的私人連結。 或者,設定 Container Registry 虛擬網路與私人叢集虛擬網路之間的對等互連。

  • Azure Private Link 服務限制適用於私人叢集。

  • 如果您在私人叢集的客戶子網中刪除或修改私人端點,叢集將會停止運作。

參與者

本文由 Microsoft 維護。 它原本是由下列參與者所撰寫。

主要作者:

其他參與者:

若要查看非公用LinkedIn設定檔,請登入 LinkedIn。

下一步

下列參考提供檔和自動化範例的連結,以使用安全的 API 部署 AKS 叢集: