本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
VPC 配置
集群专用 VPC
默认情况下,eksctl create cluster将为集群创建专用 VPC。这样做是为了避免由于各种原因干扰现有资源,包括安全,但也因为检测现有 VPC 中的所有设置具有挑战性。
-
使用的默认 VPC CIDR
eksctl是192.168.0.0/16。-
它分为 8 (
/19) 个子网(3 个私有子网、3 个公共子网和 2 个预留子网)。
-
-
初始节点组是在公有子网中创建的。
-
除非指定,否则
--allow-ssh将禁用 SSH 访问。 -
默认情况下,节点组允许来自控制平面安全组的入站流量通过端口 1025-65535。
注意
在 us-east-1 eksctl 中,默认情况下仅创建 2 个公有子网和 2 个私有子网。
更改 VPC 网段
如果您需要设置与其他 VPC 的对等互连,或者只是需要更大或更小的范围 IPs,则可以使用 --vpc-cidr flag 对其进行更改。有关选择允许在 AWS VPC 中使用的 CIDR 块的指南,请参阅 AWS 文档。
如果您正在创建 IPv6 集群,则可以在集群配置文件VPC.IPv6Cidr中进行配置。此设置仅在配置文件中,不在 CLI 标志中。
如果您拥 IPv6 有 IP 地址块,也可以自带地址 IPv6 池。有关如何导入自己的地址池的信息,请参阅将自己的 IP 地址 (BYOIP) 带到 Amaz EC2 on。然后使用集群配置文件VPC.IPv6Cidr中的 Eksctl 来配置 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/subnets 个):
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标志提供私有 and/or 公有子网,从而使用现有 VPC。您有责任确保对所使用的子网进行正确分类,因为配置各不相同,因此没有简单的方法可以验证子网实际上是私有子网还是公有子网。
有了这些标志,eksctl create cluster将自动确定 VPC ID,但不会创建任何路由表或其他资源,例如 internet/NAT 网关。但是,它将为初始节点组和控制平面创建专用的安全组。
您必须确保在不同的子网中提供至少 2 个子网, AZs并且 EKS 会检查这种情况。如果您使用现有 VPC,则 EKS 或 Eksctl 不会强制执行或检查以下要求,EKS 会创建集群。集群的某些基本功能无需这些要求即可运行。(例如,标记并不是严格必需的,测试表明,可以在子网上不设置任何标签的情况下创建功能集群,但是不能保证它会一直有效,因此建议使用标记。)
标准要求:
-
所有给定的子网都必须位于同一 VPC 中,位于同一个区块内 IPs
-
根据需要提供足够数量的 IP 地址
-
足够数量的子网(最少 2 个),视需要而定
-
子网至少标有以下内容:
-
kubernetes.io/cluster/<name>标签设置为shared或owned -
kubernetes.io/role/internal-elb私有子网1的标签设置为 -
kubernetes.io/role/elb公共子网1的标签设置为
-
-
正确配置的互联网 and/or NAT 网关
-
路由表中有正确的条目并且网络运行正常
-
新:所有公有子网都应
MapPublicIpOnLaunch启用该属性(即Auto-assign public IPv4 address在 AWS 控制台中)。托管节点组和 Fargate 不分配公有 IPv4 地址,必须在子网上设置该属性。
EKS 或 Kubernetes 可能还会施加其他要求,完全取决于你是否遵守任何要求 up-to-date。and/or recommendations, and implement those as needed/possible
应用的默认安全组设置eksctl可能足以与其他安全组中的资源共享访问权限,也可能不够。如果您想修改安全组的 ingress/egress 规则,则可能需要使用其他工具来自动进行更改,或者通过 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
更多示例可以在 repo 的examples文件夹中找到:
自定义共享节点安全组
eksctl将创建和管理共享节点安全组,该组允许非托管节点与集群控制平面和托管节点之间进行通信。
如果您希望改为提供自己的自定义安全组,则可以覆盖配置文件中的sharedNodeSecurityGroup字段:
vpc: sharedNodeSecurityGroup: sg-0123456789
默认情况下,在创建集群时,eksctl会向该安全组添加规则,以允许与 EKS 创建的默认集群安全组进行通信。EKS 控制平面和托管节点组均使用默认集群安全组。
如果您想自己管理安全组规则,则可以通过在配置文件false中设置manageSharedNodeSecurityGroupRules为来eksctl阻止创建规则:
vpc: sharedNodeSecurityGroup: sg-0123456789 manageSharedNodeSecurityGroupRules: false
NAT 网关
可以将集群的 NAT 网关配置为Disable、Single(默认)或HighlyAvailable。该HighlyAvailable选项将在该区域的每个可用区部署一个 NAT 网关,这样,如果一个可用区关闭,另一个可用区中的节点仍 AZs 能与 Internet 通信。
它可以通过 --vpc-nat-mode CLI 标志或在集群配置文件中指定,如下例所示:
vpc: nat: gateway: HighlyAvailable # other options: Disable, Single (default)
请在此
注意
只有在创建集群时才支持指定 NAT 网关。在集群升级期间不会触及它。