編輯

共用方式為


對 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 的專業人員了解 Azure Kubernetes Service (AKS)

Amazon EKS 網路模式

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

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

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

僅限公用端點

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

公用和私人端點

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

僅限私人端點

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

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

API 伺服器的 AKS 網路存取

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

私人 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 搭配 Azure、BicepARM 範本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 (string) 以 CIDR 格式指定允許的 IP 範圍。
  • disableRunCommand (布爾值) 會指定是否要停用 run 叢集的命令。
  • enablePrivateCluster (布爾值) 會指定是否要將叢集建立為私用。
  • enablePrivateClusterPublicFQDN (布爾值) 會指定是否要為私人叢集建立另一個公用 FQDN。
  • privateDnsZone (string) 指定節點資源群組中的私人 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 直接從 Azure 入口網站,透過傳輸層安全性 (TLS) 提供安全且順暢的遠端桌面通訊協定 (RDP) 或安全殼層 (SSH) VM 連線。 當 VM 透過 Azure Bastion 連線時,它們不需要公用 IP 位址、代理程式或特殊客戶端軟體。

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

授權的IP範圍

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