Amazon EKS 叢集端點存取控制 - Amazon EKS

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

Amazon EKS 叢集端點存取控制

本主題可協助您啟用 Amazon EKS 叢集 Kubernetes API 伺服器端點和限制的私有存取,或完全停用從網際網路的公有存取。

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

您可啟用 Kubernetes API 伺服器的私有存取,讓節點和 API 伺服器間的所有通訊都不會離開 VPC。您可以限制可以從網際網路存取 API 伺服器的 IP 地址,或完全停用對 API 伺服器的網際網路存取。

注意

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

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

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

修改叢集端點存取

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

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

  • 來自您叢集 VPC 內 (如節點與控制平面間的通訊) 的 Kubernetes API 請求會離開 VPC,但不會離開 Amazon 的網路。

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

已啟用 已啟用
  • 來自您叢集 VPC 內 (如節點與控制平面間的通訊) 的 Kubernetes API 請求會使用私有 VPC 端點。

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

已停用 已啟用
  • 前往您叢集 API 伺服器的所有流量必須來自叢集的 VPC 或連接的網路

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

  • 公有 DNS 伺服器會將叢集的 API 伺服器端點解析為 VPC 的私有 IP 地址。在過去,端點只能從 VPC 內解析。

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

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

    • 更新您的叢集。

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

AWS Management Console
若要修改叢集 API 伺服器端點存取 AWS Management Console
  1. 在以下網址開啟 Amazon EKS 主控台:https://console.aws.amazon.com/eks/home#/clusters

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

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

  4. 對於 Private access (私有存取),選擇是否啟用或停用您叢集的 Kubernetes API 伺服器端點的私有存取。如果您啟用私有存取,源自於您叢集的 VPC 的 Kubernetes API 將使用私有 VPC 端點。您必須啟用私有存取,才能停用公有存取。

  5. 對於 Public access (公有存取),選擇是否啟用或停用您叢集的 Kubernetes API 伺服器端點的公有存取。若您停用公有存取,您叢集的 Kubernetes API 伺服器僅可接收來自叢集 VPC 內的請求。

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

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

AWS CLI
運用 AWS CLI修改您叢集 API 伺服器端點的存取

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

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

    注意

    下列命令會啟用 API 伺服器端點的私有存取以及來自單一 IP 地址的公有存取。使用單一 CIDR 區塊或您想要限制網路存取的 CIDR 區塊清單取代 203.0.113.5/32

    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 伺服器

若您已停用叢集 Kubernetes API 伺服器端點的公有存取,將只能在 VPC 內或連接的網路存取 API 伺服器。以下是存取 Kubernetes API 伺服器端點的幾種可能方法:

連線網路

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

Amazon EC2 堡壘主機

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

設定堡壘主機的 kubectl 時,請確認您使用的 AWS 憑證已映射至叢集的 RBAC 組態,或者將堡壘會使用的 IAM 主體新增至 RBAC 組態,之後再移除端點的公有存取。如需詳細資訊,請參閱 授予 Kubernetes API 的存取權 未經授權或存取遭拒 (kubectl)

AWS Cloud9 IDE

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

kubectl為 AWS Cloud9 IDE 設定時,請務必使用已對應至叢集 RBAC 組態的 AWS 認證,或在移除端點公用存取權之前,將 IDE 將使用的 IAM 主體新增至 RBAC 組態。如需更多詳細資訊,請參閱 授予 Kubernetes API 的存取權 未經授權或存取遭拒 (kubectl)