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

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

Amazon EKS 叢集端點存取控制

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

建立新的叢集時,Amazon EKS 會建立受管 Kubernetes API 伺服器的端點,您必須使用 Kubernetes 管理工具 (如 kubectl) 來透過此端點與叢集進行通訊。根據預設,此 API 伺服器端點會在網際網路上公開,而其存取則受到 AWS Identity and Access Management (IAM) 及原生 Kubernetes 角色型存取控制 (RBAC) 的共同保護。

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

注意

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

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

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

修改叢集端點存取

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

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

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

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

Enabled Enabled
  • 叢集 VPC 中的 Kubernetes API 請求 (例如控制平面通訊的節點) 使用私有 VPC 端點。

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

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

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

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

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

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

    • 更新您的叢集。

您可以使用 AWS 管理主控台 或 AWS CLI. 修改叢集 API 伺服器端點存取。選取含有您要用來修改端點存取之工具名稱的標籤。

AWS 管理主控台

使用 修改叢集 API 伺服器端點存取 AWS 管理主控台

  1. Open the Amazon EKS console at https://console.aws.amazon.com/eks/home#/clusters.

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

  3. 選擇 Configuration (組態) 索引標籤。在 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 Pod (如果您使用它們) 可與叢集通訊。若不啟用私有端點,您的公有存取端點 CIDR 來源必須包含來自 VPC 的輸出來源。例如,如果您的私有子網路中有節點透過 NAT 閘道與網際網路通訊,則您需要新增 NAT 閘道的傳出 IP 地址,做為公有端點上允許 CIDR 區塊的一部分。

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

AWS CLI

使用 修改叢集 API 伺服器端點存取 AWS CLI

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

  1. 透過下列 AWS CLI 命令,更新叢集 API 伺服器端點的存取。替換叢集名稱和所需的端點存取值。如果您設定 endpointPublicAccess=true,則可以 (選擇性) 為 輸入單一 CIDR 區塊或以逗號分隔的 CIDR 區塊清單publicAccessCidrs。 區塊不能包含預留地址。如果您指定 CIDR 區塊,則公有 API 伺服器端點只會接收來自所列出區塊的要求。您可以指定的 CIDR 區塊有數目上限。如需詳細資訊,請參閱 Amazon EKS 服務配額. 如果您使用 CIDR 區塊來限制公有端點的存取,建議您也允許私有端點存取,讓節點和 Fargate Pod (如果您使用它們) 可與叢集通訊。若不啟用私有端點,您的公有存取端點 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 bastion host (堡壘主機 – 您可以在叢集 VPC 中的公有子網路啟動 Amazon EC2 執行個體,然後透過 SSH 登入該執行個體,以執行 kubectl 命令。如需詳細資訊,請參閱 AWS 上的 Linux 堡壘主機. 您必須確認 Amazon EKS 控制平面安全群組包含的規則允許連接埠 443 上來自堡壘主機的傳入流量。如需詳細資訊,請參閱 Amazon EKS 安全群組考量.

    設定堡壘主機的 kubectl 時,請確認您使用的 AWS 登入資料已對應至叢集的 RBAC 組態,或者將堡壘會使用的 IAM 使用者或角色新增至 RBAC 組態,之後再移除端點的公開存取。如需詳細資訊,請查看 管理叢集的使用者或 IAM 角色未經授權或存取遭拒 (kubectl)

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

    設定 kubectl IDE 的 AWS Cloud9 時,請確認您使用的 AWS 登入資料已對應至叢集的 RBAC 組態,或者將 IDE 會使用的 IAM 使用者或角色新增至 RBAC 組態,之後再移除端點的公開存取。如需詳細資訊,請查看 管理叢集的使用者或 IAM 角色未經授權或存取遭拒 (kubectl)