控制對叢集API伺服器端點的網路存取 - Amazon EKS

協助改善此頁面

想要為此使用者指南做出貢獻嗎? 捲動至此頁面底部,然後選取 [編輯此頁面於] GitHub。您的貢獻將有助於使我們的用戶指南更適合所有人。

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

控制對叢集API伺服器端點的網路存取

本主題可協助您為 Amazon EKS 叢集的KubernetesAPI伺服器端點啟用私有存取,並限制或完全停用來自網際網路的公開存取。

當您建立新叢集時,Amazon EKS 會為您用來與叢集通訊的受管KubernetesAPI伺服器建立端點 (使用Kubernetes管理工具,例如kubectl)。根據預設,此API伺服器端點對網際網路是公用的,而且API伺服器的存取是使用 AWS Identity and Access Management (IAM) 和原生Kubernetes角色型存取控制 (RBAC) 的組合來保護伺服器的安全。

您可以啟用對KubernetesAPI伺服器的私人存取,以便節點與伺API服器之間的所有通訊都保持在您的VPC. 您可以限制可以從互聯網訪問API服務器的 IP 地址,或完全禁用對API服務器的互聯網訪問。

注意

由於此端點適用於KubernetesAPI伺服器,而不是用於與通訊的傳統 AWS PrivateLink 端點 AWS API,因此在 Amazon VPC 主控台中不會顯示為端點。

當您為叢集啟用端點私有存取時,Amazon EKS 會代表您建立 Route 53 私有託管區域,並將其與叢集建立關聯VPC。此私有託管區域由 Amazon 管理EKS,並且不會出現在您帳戶的 Route 53 資源中。為了使私有託管區域能夠正確地將流量路由到您的API伺服器,您VPC必須已經enableDnsHostnamesenableDnsSupport設定為true,並且為您設定的DHCP選項VPC必須包含AmazonProvidedDNS在其網域名稱伺服器清單中。如需詳細資訊,請參Amazon VPC 使用者指南VPC中的更新DNS支援

您可以在建立新叢集時定義API伺服器端點存取需求,也可以隨時更新叢集的API伺服器端點存取權限。

修改叢集端點存取

使用本節所述程序來修改現有叢集的端點存取。下表顯示支援的API伺服器端點存取組合及其相關行為。

端點公有存取 端點私有存取 Behavior (行為)
已啟用 已停用
  • 這是新 Amazon EKS 叢集的預設行為。

  • KubernetesAPI源自叢集內部的請求 VPC (例如節點到控制平面的通訊) 會離開 Amazon 的網路,VPC但不會離開。

  • 您的叢集API伺服器可從網際網路存取。您可以選擇性地限制可存取公用端點的CIDR區塊。如果您限制對特定CIDR區塊的存取,則建議您同時啟用私有端點,或確保您指定的CIDR區塊包含節點和 Fargate Pods (如果您使用它們) 存取公用端點的位址。

已啟用 已啟用
  • KubernetesAPI群集內的請求VPC(例如節點到控制平面的通信)使用私有VPC端點。

  • 您的叢集API伺服器可從網際網路存取。您可以選擇性地限制可存取公用端點的CIDR區塊。

已停用 已啟用
  • 叢集API伺服器的所有流量必須來自叢集VPC或連線的網路內部。

  • 您的API伺服器無法從網際網路公開存取。任何kubectl指令都必須來自VPC或連接的網路內部。如需連接選項,請參閱 訪問僅限私人API服務器

  • 叢集的API伺服器端點由公用DNS伺服器解析為私有 IP 位址,從VPC. 在過去,端點只能從中解析VPC.

    如果您的端點未解析為現有叢集內VPC的私人 IP 位址,您可以:

    • 啟用公有存取,然後再次停用它。您只需對叢集執行一次,從此以後,端點就會解析為私有 IP 地址。

    • 更新您的叢集。

您可以使用或修改叢集API伺服器端點存 AWS Management Console 取 AWS CLI。

AWS Management Console
若要修改叢集API伺服器端點存取 AWS Management Console
  1. https://console.aws.amazon.com/eks/家裡 #/集群打開 Amazon EKS 控制台。

  2. 選擇叢集名稱以顯示您叢集的資訊。

  3. 選擇 Networking (聯網) 索引標籤,選擇 Update (更新)。

  4. 對於私人存取,請選擇是否要啟用或停用叢集KubernetesAPI伺服器端點的私人存取。如果啟用私人存取,則來自叢集內部的KubernetesAPI要求會VPC使用私有VPC端點。您必須啟用私有存取,才能停用公有存取。

  5. 對於「公用」存取,請選擇是否要啟用或停用叢集KubernetesAPI伺服器端點的公開存取。如果停用公用存取,叢集的KubernetesAPI伺服器只能從叢集內接收要求VPC。

  6. (選用) 如果您已啟用 Public access (公開存取),則可以指定網際網路可用來與公有端點通訊的地址。選取 Advanced Settings (進階設定)。輸入CIDR圖塊,例如203.0.113.5/32。區塊不能包含預留地址。您可以透過選取 Add source (新增來源) 來輸入其他區塊。您可以指定的CIDR區塊數目上限。如需詳細資訊,請參閱檢視和管理 Amazon EKS 和Fargate服務配額。如果未指定封鎖,則公用API伺服器端點會接收來自所有 (0.0.0.0/0) IP 位址的要求。如果您使用CIDR區塊限制對公用端點的存取,建議您同時啟用私有端點存取,以便節點和 Fargate Pods (如果您使用它們) 可以與叢集通訊。如果未啟用私有端點,則您的公用存取端點CIDR來源必須包含來自VPC. 例如,如果私有子網路中有一個透過閘道與網際網路通訊的節點,則需要將NAT閘道的輸出 IP 位址新增為公用端點上允許CIDR區塊的一部分。NAT

  7. 選擇 Update (更新) 以完成操作。

AWS CLI
若要修改叢集API伺服器端點存取 AWS CLI

使用 AWS CLI 版本1.27.160或更新版本完成下列步驟。您可以使用 aws --version 來檢查您的目前版本。若要安裝或升級 AWS CLI,請參閱安裝 AWS CLI.

  1. 使用下列 AWS CLI 命令更新叢集API伺服器端點存取權。替換叢集名稱和所需的端點存取值。如果您設定endpointPublicAccess=true,則您可以 (選擇性) 輸入單一區CIDR塊或以逗號分隔的CIDR區塊清單。publicAccessCidrs區塊不能包含預留地址。如果您指定CIDR區塊,則公用API伺服器端點只會接收來自所列區塊的要求。您可以指定的CIDR區塊數目上限。如需詳細資訊,請參閱檢視和管理 Amazon EKS 和Fargate服務配額。如果您使用CIDR區塊限制對公用端點的存取,建議您同時啟用私有端點存取,以便節點和 Fargate Pods (如果您使用它們) 可以與叢集通訊。如果未啟用私有端點,則您的公用存取端點CIDR來源必須包含來自VPC. 例如,如果私有子網路中有一個透過閘道與網際網路通訊的節點,則需要將NAT閘道的輸出 IP 位址新增為公用端點上允許CIDR區塊的一部分。NAT如果未指定任何CIDR區塊,則公用API伺服器端點會接收來自所有 (0.0.0.0/0) IP 位址的要求。

    注意

    下列命令可從API伺服器端點的單一 IP 位址啟用私人存取和公開存取。以單203.0.113.5/32一區CIDR塊或您要限制網路存取的CIDR區塊清單 (以逗號分隔) 取代。

    aws eks update-cluster-config \ --region region-code \ --name my-cluster \ --resources-vpc-config endpointPublicAccess=true,publicAccessCidrs="203.0.113.5/32",endpointPrivateAccess=true

    範例輸出如下。

    { "update": { "id": "e6f0905f-a5d4-4a2a-8c49-EXAMPLE00000", "status": "InProgress", "type": "EndpointAccessUpdate", "params": [ { "type": "EndpointPublicAccess", "value": "true" }, { "type": "EndpointPrivateAccess", "value": "true" }, { "type": "publicAccessCidrs", "value": "[\203.0.113.5/32\"]" } ], "createdAt": 1576874258.137, "errors": [] } }
  2. 使用叢集名稱和前述命令傳回的更新 ID,藉由以下命令監控端點存取的更新狀態,當狀態顯示為 Successful,您的更新就完成了。

    aws eks describe-update \ --region region-code \ --name my-cluster \ --update-id e6f0905f-a5d4-4a2a-8c49-EXAMPLE00000

    範例輸出如下。

    { "update": { "id": "e6f0905f-a5d4-4a2a-8c49-EXAMPLE00000", "status": "Successful", "type": "EndpointAccessUpdate", "params": [ { "type": "EndpointPublicAccess", "value": "true" }, { "type": "EndpointPrivateAccess", "value": "true" }, { "type": "publicAccessCidrs", "value": "[\203.0.113.5/32\"]" } ], "createdAt": 1576874258.137, "errors": [] } }

訪問僅限私人API服務器

如果您已停用叢集KubernetesAPI伺服器端點的公用存取權,則只能從您VPC或連線的網路中存取API伺服器。以下是存取KubernetesAPI伺服器端點的幾種可能方式:

連線網路

使用AWS 傳輸閘道或其他 Connect 選項將您的網絡接到,然後在連接的網絡中使用計算機。VPC您必須確保 Amazon EKS 控制平面安全群組包含允許連線網路連接埠 443 上的輸入流量的規則。

Amazon EC2 堡壘主機

您可以將 Amazon EC2 執行個體啟動到叢集中的公有子網路,VPC然後透過該執行個體登SSH入以執行kubectl命令。如需詳細資訊,請參閱 AWS上的 Linux 堡壘主機。您必須確保 Amazon EKS 控制平面安全群組包含規則,以允許來自防禦主機的連接埠 443 上的輸入流量。如需詳細資訊,請參閱檢視叢集的 Amazon EKS 安全群組需求

kubectl為防禦主機設定時,請務必使用已對應至叢集RBAC組態的 AWS 證明資料,或在移除端點公開存取之前,將堡壘將使用的主IAM體新增至RBAC組態。如需詳細資訊,請參閱 授與IAM使用者和角色對 Kubernetes 的存取權 APIs未經授權或存取遭拒 (kubectl)

AWS Cloud9 IDE

AWS Cloud9 是雲端整合式開發環境 (IDE),讓您只要使用瀏覽器即可撰寫、執行和偵錯程式碼。您可以在叢集 AWS Cloud9 IDE中建立,VPC並使用與叢集IDE進行通訊。如需詳細資訊,請參閱在 AWS Cloud9中建立環境。您必須確保 Amazon EKS 控制平面安全群組包含允許IDE安全群組在連接埠 443 上輸入流量的規則。如需詳細資訊,請參閱檢視叢集的 Amazon EKS 安全群組需求

kubectl針對您的進行設定時 AWS Cloud9 IDE,請務必使用已對應至叢集RBAC組態的 AWS 認證,或在移除端點公用存取之前,IDE將要使用的IAM主體新增至RBAC組態。如需詳細資訊,請參閱 授與IAM使用者和角色對 Kubernetes 的存取權 APIs未經授權或存取遭拒 (kubectl)