叢集存取 - Eksctl 使用者指南

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

叢集存取

管理對 Kubernetes API 伺服器端點的存取

根據預設,EKS 叢集會公開 Kubernetes API 伺服器,但不會直接從 VPC 子網路 (public=true, private=false) 中公開。來自 VPC 內 API 伺服器的流量必須先退出 VPC 網路 (但不是 Amazon 的網路),然後重新輸入以到達 API 伺服器。

使用叢集組態檔案建立叢集時,叢集的 Kubernetes API 伺服器端點存取可以設定為公有和私有存取。範例如下:

vpc: clusterEndpoints: publicAccess: <true|false> privateAccess: <true|false>

設定 Kubernetes API 端點存取時,有一些額外的注意事項:

  1. EKS 不允許叢集未啟用私有公有存取。

  2. EKS 確實允許建立僅允許啟用私有存取的組態,但 eksctl 在叢集建立期間不支援它,因為它可防止 eksctl 將工作者節點加入叢集。

  3. 將叢集更新為只有私有的 Kubernetes API 端點存取,表示依預設,Kubernetes 命令 (例如 kubectl) 以及 eksctl utils write-kubeconfigeksctl delete cluster和 可能需要在叢集 VPC 中eksctl utils update-kube-proxy執行命令。

    • 這需要對各種 AWS 資源進行一些變更。如需詳細資訊,請參閱叢集 API 伺服器端點

    • 您可以提供 vpc.extraCIDRs 來將其他 CIDR 範圍附加至 ControlPlaneSecurityGroup,允許 VPC 外部的子網路到達 kubernetes API 端點。同樣地,您也可以提供 vpc.extraIPv6CIDRs來附加 IPv6 CIDR 範圍。

以下是如何使用 utils子命令設定 Kubernetes API 端點存取的範例:

eksctl utils update-cluster-vpc-config --cluster=<clustername> --private-access=true --public-access=false

若要使用 ClusterConfig 檔案更新設定,請使用:

eksctl utils update-cluster-vpc-config -f config.yaml --approve

請注意,如果您未傳遞旗標,它會保留目前的值。一旦您對提議的變更感到滿意,請新增 approve旗標以對執行中的叢集進行變更。

限制對 EKS Kubernetes Public API 端點的存取

EKS 叢集的預設建立會公開 Kubernetes API 伺服器。

此功能僅適用於公有端點。API 伺服器端點存取組態選項不會變更,而且您仍然可以選擇停用公有端點,讓叢集無法從網際網路存取。(來源:https://https://github.com/aws/containers-roadmap/issues/108#issuecomment-552766489)

若要在建立叢集時限制存取一組 CIDRs的公有 API 端點,請設定 publicAccessCIDRs 欄位:

vpc: publicAccessCIDRs: ["1.1.1.1/32", "2.2.2.0/24"]

若要更新現有叢集的限制,請使用:

eksctl utils update-cluster-vpc-config --cluster=<cluster> 1.1.1.1/32,2.2.2.0/24

若要使用 ClusterConfig 檔案更新限制,請在 中設定新的 CIDRsvpc.publicAccessCIDRs並執行:

eksctl utils update-cluster-vpc-config -f config.yaml
重要

如果設定publicAccessCIDRs和建立節點群組,privateAccess則應將 設定為 ,true或將節點的 IPs新增至publicAccessCIDRs清單。

如果節點因為存取受限而無法存取叢集 API 端點,叢集建立將會失敗,context deadline exceeded因為節點無法存取公有端點且無法加入叢集。

若要在單一命令中更新叢集的 API 伺服器端點存取和公有存取 CIDRs,請執行:

eksctl utils update-cluster-vpc-config --cluster=<cluster> --public-access=true --private-access=true --public-access-cidrs=1.1.1.1/32,2.2.2.0/24

若要使用組態檔案更新設定:

vpc: clusterEndpoints: publicAccess: <true|false> privateAccess: <true|false> publicAccessCIDRs: ["1.1.1.1/32"]
eksctl utils update-cluster-vpc-config --cluster=<cluster> -f config.yaml