VPC 組態 - Eksctl 使用者指南

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

VPC 組態

叢集的專用 VPC

根據預設, eksctl create cluster會為叢集建立專用 VPC。這是為了避免因各種原因干擾現有資源,包括安全性,但也因為偵測現有 VPC 中的所有設定具有挑戰性。

  • 使用的預設 VPC CIDR eksctl192.168.0.0/16

    • 它分為 8 個 (/19) 子網路 (3 個私有、3 個公有和 2 個預留)。

  • 初始節點群組是在公有子網路中建立的。

  • 除非指定 ,否則會停用 SSH --allow-ssh 存取。

  • 根據預設,節點群組允許來自連接埠 1025 - 65535 上控制平面安全群組的傳入流量。

注意

us-east-1 eksctl 中,預設只會建立 2 個公有和 2 個私有子網路。

變更 VPC CIDR

如果您需要設定與其他 VPC 的對等互連,或只是需要更大或更小範圍的 IPs,您可以使用 --vpc-cidr 旗標來變更它。如需選擇允許在 AWS VPC 中使用的 CIDR 區塊的指南,請參閱 AWS 文件。

如果您要建立 IPv6 叢集,您可以在 VPC.IPv6Cidr cluser 組態檔案中設定 。此設定僅在組態檔案中,而不是在 CLI 旗標中。

如果您擁有 IPv6 IP 地址區塊,您也可以攜帶自己的 IPv6 集區。請參閱將您自己的 IP 地址 (BYOIP) 帶到 Amazon EC2,了解如何匯入您自己的集區。然後使用 cluser config 檔案中VPC.IPv6Cidr的 來設定 Eksctl。

使用現有的 VPC:與 kops 共用

您可以使用由 kops 管理的現有 Kubernetes 叢集的 VPC。提供此功能是為了促進遷移和/或叢集對等互連。

如果您先前已建立具有 kops 的叢集,例如使用類似以下的命令:

export KOPS_STATE_STORE=s3://kops
kops create cluster cluster-1.k8s.local --zones=us-west-2c,us-west-2b,us-west-2a --networking=weave --yes

您可以使用相同的 VPC 子網路在相同的 AZs 中建立 EKS 叢集 (請注意:至少需要 2 AZs/子網路):

eksctl create cluster --name=cluster-2 --region=us-west-2 --vpc-from-kops-cluster=cluster-1.k8s.local

使用現有的 VPC:其他自訂組態

eksctl 為自訂 VPC 和子網路拓撲提供一些但不完整的彈性。

您可以使用 --vpc-private-subnets--vpc-public-subnets旗標提供私有和/或公有子網路,以使用現有的 VPC。您可以自行決定確保您使用的子網路正確分類,因為沒有簡單的方法來驗證子網路是否實際為私有或公有,因為組態會有所不同。

鑑於這些旗標, eksctl create cluster 會自動判斷 VPC ID,但不會建立任何路由表或其他資源,例如網際網路/NAT 閘道。不過,它會為初始節點群組和控制平面建立專用安全群組。

您必須確保在不同 AZs 中提供至少 2 個子網路,EKS 會檢查此條件。如果您使用現有的 VPC,EKS 或 Eksctl 不會強制執行或檢查下列要求,而 EKS 會建立叢集。叢集的某些基本函數可在沒有這些要求的情況下運作。(例如,標記並非絕對必要,測試已顯示可以在子網路上不設定任何標籤的情況下建立功能叢集,但無法保證這一律會保留,並建議標記。)

標準需求:

  • 所有指定的子網路都必須位於相同 IPs 區塊內的相同 VPC 中

  • 根據需求提供足夠數量的 IP 地址

  • 足夠數量的子網路 (下限 2),視需求而定

  • 子網路至少會加上下列標籤:

    • kubernetes.io/cluster/<name> 標籤設定為 sharedowned

    • kubernetes.io/role/internal-elb 私有子網路1的標籤設定為

    • kubernetes.io/role/elb 公有子網路1的標籤設定為

  • 正確設定的網際網路和/或 NAT 閘道

  • 路由表具有正確的項目,且網路正常運作

  • :所有公有子網路都應MapPublicIpOnLaunch啟用 屬性 (即在 AWS 主控台Auto-assign public IPv4 address中)。受管節點群組和 Fargate 不會指派公有 IPv4 地址,必須在子網路上設定 屬性。

EKS 或 Kubernetes 可能會實施其他要求,而且完全由您隨時掌握任何要求和/或建議up-to-date,並視需要/可能實作這些要求。

套用的預設安全群組設定eksctl可能不足以與其他安全群組中的資源共用存取權。如果您想要修改安全群組的輸入/輸出規則,您可能需要使用其他工具來自動化變更,或透過 EC2 主控台執行。

如有疑問,請勿使用自訂 VPC。eksctl create cluster 不使用任何--vpc-*旗標的 一律會使用全功能專用 VPC 來設定叢集。

範例

使用具有 2 倍私有子網路和 2 倍公有子網路的自訂 VPC 建立叢集:

eksctl create cluster \
  --vpc-private-subnets=subnet-0ff156e0c4a6d300c,subnet-0426fb4a607393184 \
  --vpc-public-subnets=subnet-0153e560b3129a696,subnet-009fa0199ec203c37

或使用下列同等組態檔案:

apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: my-test region: us-west-2 vpc: id: "vpc-11111" subnets: private: us-west-2a: id: "subnet-0ff156e0c4a6d300c" us-west-2c: id: "subnet-0426fb4a607393184" public: us-west-2a: id: "subnet-0153e560b3129a696" us-west-2c: id: "subnet-009fa0199ec203c37" nodeGroups: - name: ng-1

使用具有 3 倍私有子網路的自訂 VPC 建立叢集,並讓初始節點群組使用這些子網路:

eksctl create cluster \
  --vpc-private-subnets=subnet-0ff156e0c4a6d300c,subnet-0549cdab573695c03,subnet-0426fb4a607393184 \
  --node-private-networking

或使用下列同等組態檔案:

apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: my-test region: us-west-2 vpc: id: "vpc-11111" subnets: private: us-west-2d: id: "subnet-0ff156e0c4a6d300c" us-west-2c: id: "subnet-0549cdab573695c03" us-west-2a: id: "subnet-0426fb4a607393184" nodeGroups: - name: ng-1 privateNetworking: true

使用自訂 VPC 4x 公有子網路建立叢集:

eksctl create cluster \
  --vpc-public-subnets=subnet-0153e560b3129a696,subnet-0cc9c5aebe75083fd,subnet-009fa0199ec203c37,subnet-018fa0176ba320e45
apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: my-test region: us-west-2 vpc: id: "vpc-11111" subnets: public: us-west-2d: id: "subnet-0153e560b3129a696" us-west-2c: id: "subnet-0cc9c5aebe75083fd" us-west-2a: id: "subnet-009fa0199ec203c37" us-west-2b: id: "subnet-018fa0176ba320e45" nodeGroups: - name: ng-1

您可以在儲存庫的 examples 資料夾中找到更多範例:

自訂共用節點安全群組

eksctl 將建立和管理共用節點安全群組,允許未受管節點與叢集控制平面和受管節點之間的通訊。

如果您想要改為提供自己的自訂安全群組,您可以覆寫組態檔案中sharedNodeSecurityGroup的欄位:

vpc: sharedNodeSecurityGroup: sg-0123456789

根據預設,在建立叢集時, eksctl會將規則新增至此安全群組,以允許與 EKS 建立的預設叢集安全群組進行通訊。預設叢集安全群組由 EKS 控制平面和受管節點群組使用。

如果您想要自行管理安全群組規則,您可以透過在組態檔案中將 manageSharedNodeSecurityGroupRules設定為 false eksctl來防止 建立規則:

vpc: sharedNodeSecurityGroup: sg-0123456789 manageSharedNodeSecurityGroupRules: false

NAT 閘道

叢集的 NAT Gateway 可以設定為 DisableSingle(預設) 或 HighlyAvailableHighlyAvailable 選項會在區域的每個可用區域中部署 NAT Gateway,因此如果 AZ 關閉,其他 AZs 中的節點仍然可以與網際網路通訊。

它可以透過 --vpc-nat-mode CLI 旗標或在叢集組態檔案中指定,如以下範例所示:

vpc: nat: gateway: HighlyAvailable # other options: Disable, Single (default)

請參閱此處的完整範例。

注意

只有在叢集建立期間才支援指定 NAT Gateway。在叢集升級期間不會碰觸到它。