资讯详情

资讯详情

eksctl 0.15.0 版本解读:KMS 加密、中国区域支持与 Bottlerocket 节点组

云原生容器编排DevOps【免费下载链接】eksctlThe official CLI for Amazon EKS项目地址https://gitcode.com/gh_mirrors/ek/eksctl点击查看免费下载eksctl 0.15.0 是 eksctl 迈向全球区域 企业级安全能力的关键版本它一次性引入了 KMS secrets 加密、中国Beijing / Ningxia区域支持、Kubernetes 1.15 以及 Bottlerocket 节点组等重磅能力。本文以 docs/release_notes/0.15.0.md 为核心骨架结合当前仓库的配置定义与源码实现逐条剖析这些特性的使用方式与底层原理帮助你在使用或升级 eksctl 时准确掌握该版本的完整能力边界。一、KMS 加密提供商支持#18971.1 配置入口secretsEncryption从 0.15.0 起eksctl 的 ClusterConfig 新增了secretsEncryption字段用于为 EKS 集群启用 Kubernetes Secrets 的 KMS 加密。该字段的类型定义位于 pkg/apis/eksctl.io/v1alpha5/types.go// SecretsEncryption defines the configuration for KMS encryption provider type SecretsEncryption struct { // required KeyARN string json:keyARN,omitempty }字段说明字段类型必填含义keyARNstring是AWS KMS 密钥的 ARN用于加密集群中的 Secrets 资源secretsEncryption挂在 ClusterConfig 顶层与metadata、managedNodeGroups平级在 types.go 中通过SecretsEncryption *SecretsEncryption \json:secretsEncryption,omitempty 接入。1.2 完整配置示例仓库提供了开箱即用的示例 examples/19-kms-cluster.yaml# An example of ClusterConfig with KMS secrets encryption --- apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: cluster-19 region: us-west-2 managedNodeGroups: - name: ng-1 desiredCapacity: 2 secretsEncryption: # ARN of the KMS key keyARN: arn:aws:kms:us-west-2:000000000000:key/00000000-0000-0000-0000-000000000000使用时只需将keyARN替换为你账号下真实存在的 KMS 主密钥 ARN。该密钥通常需要与集群处于同一区域并具有允许 EKS 服务使用的密钥策略授权。1.3 底层实现如何落入 CloudFormationeksctl 在生成集群 CloudFormation 模板时会根据配置组装EncryptionConfig。核心逻辑位于 pkg/cfn/builder/cluster.govar encryptionConfigs []gfneks.Cluster_EncryptionConfig if c.spec.SecretsEncryption ! nil c.spec.SecretsEncryption.KeyARN ! { encryptionConfigs []gfneks.Cluster_EncryptionConfig{ { Resources: gfnt.NewSlice(gfnt.NewString(secrets)), Provider: gfneks.Cluster_Provider{ KeyArn: gfnt.NewString(c.spec.SecretsEncryption.KeyARN), }, }, } }可以看到只有当secretsEncryption被配置且keyARN非空时才会生成EncryptionConfig资源类型固定为secrets生成结果写入集群资源的EncryptionConfig字段见 cluster.go最终由 CloudFormation 交付给 EKS相关模板类型Cluster_EncryptionConfig定义于 pkg/goformation/cloudformation/eks/aws-eks-cluster_encryptionconfig.go印证了模板资源的映射关系。启用后EKS 会在写入 etcd 之前使用指定 KMS 密钥对 Secrets 进行信封加密这是满足等保、SOC 2 等安全合规场景的常见做法。二、中国区域支持Beijing 与 Ningxia#1860 #1741 #17200.15.0 为 eksctl 补齐了 AWS 中国分区的支持正式开放北京cn-north-1#1741与宁夏cn-northwest-1#1720两个区域。在 pkg/apis/eksctl.io/v1alpha5/types.go 中它们被声明为正式的区域常量// RegionCNNorthwest1 represents the China region Ningxia RegionCNNorthwest1 cn-northwest-1 // RegionCNNorth1 represents the China region Beijing RegionCNNorth1 cn-north-12.1 分区机制aws-cnPartition中国区域属于独立的 AWS Partitionaws-cn它与标准区域aws在服务主账户、STS 域名、DNS 后缀等方面均有差异。分区定义集中在 pkg/apis/eksctl.io/v1alpha5/partitions.goconst ( PartitionAWS aws PartitionChina aws-cn PartitionUSGov aws-us-gov ... )其中中国分区在 partitions.go 中的定义如下{ name: PartitionChina, serviceMappings: map[string]string{ EC2: ec2.amazonaws.com.cn, EKS: eks.amazonaws.com, EKSFargatePods: eks-fargate-pods.amazonaws.com, }, regions: []string{RegionCNNorth1, RegionCNNorthwest1}, endpointServiceDomainPrefix: fmt.Sprintf(cn.%s, standardPartitionServiceDomainPrefix), v1SDKDNSPrefix: amazonaws.com.cn, },关键差异点DNS 后缀中国分区的 SDK / 资源域名后缀为amazonaws.com.cn而非标准分区的amazonaws.com服务映射EC2 等服务的 principal 域名为ec2.amazonaws.com.cn区域归属cn-north-1与cn-northwest-1被partitionFromRegion正确解析到aws-cn分区见 partitions.go。这意味着在 ClusterConfig 中直接写region: cn-north-1或region: cn-northwest-1eksctl 就会自动套用中国分区的整套约定无需手工指定分区。三、中国区域 Addons 支持与镜像区域化重构#1867配套中国区域支持0.15.0 重构了 addons 容器镜像的设置逻辑#1867使 addon 镜像能够按区域与分区自动解析。3.1 核心实现UseRegionalImage重构后的镜像设置逻辑位于 pkg/addons/image.go核心函数UseRegionalImage会遍历 Pod 模板中的所有容器与 InitContainer将形如%s.dkr.ecr.%s.%s/image:tag的镜像模板替换为真实的区域化镜像地址func UseRegionalImage(spec *corev1.PodTemplateSpec, region string) error { dnsSuffix, err : awsDNSSuffixForRegion(region) if err ! nil { return err } for i : range spec.Spec.Containers { imageFormat : spec.Spec.Containers[i].Image if isRegionalImageFormat(imageFormat) { regionalImage : fmt.Sprintf(imageFormat, api.EKSResourceAccountID(region), region, dnsSuffix) spec.Spec.Containers[i].Image regionalImage } } ... }其中awsDNSSuffixForRegion调用api.Partitions.V1SDKDNSPrefixForRegion(region)见 image.go在中国区域返回amazonaws.com.cnapi.EKSResourceAccountID(region)负责返回不同分区 / 区域的 EKS 资源AMI、ECR 镜像所属的 AWS 账户 ID其 switch 分支中专门包含cn-northwest-1与cn-north-1见 types.go。device_plugin.go中同样采用了该模式见 pkg/addons/device_plugin.go保证 GPU 设备插件等 addon 在中国区域也能正确拉取镜像。3.2 测试佐证镜像区域化行为有专门的单元测试覆盖见 pkg/addons/image_test.go其中包含regionalizes to a Chinese region with correct DNS suffix用例验证中国区域下镜像地址携带amazonaws.com.cn后缀确保重构逻辑在中国分区下输出正确。四、Kubernetes 1.15 支持#1917 #19160.15.0 同步支持了 Kubernetes 1.15。在 eksctl 中集群版本在创建与升级阶段由ClusterVersionsManager统一管理它通过 EKS API 的DescribeClusterVersions拉取官方支持的版本列表并过滤掉UNSUPPORTED状态见 pkg/eks/versions_manager.go因此新版本支持以版本可用性的形式自动生效metadata.version: 1.15即可创建 1.15 集群。升级方面仓库中保留了从 1.15 升级到 1.16 的实测经验注释见 pkg/ctl/upgrade/cluster.go 与 pkg/ctl/update/cluster.go// updating from 1.15 to 1.16 has been observed to take longer than the default value of 25 minutes即1.15 → 1.16 的升级耗时可能超过默认的 25 分钟等待阈值升级时建议留意--timeout参数或等待策略避免因超时误判升级失败。五、Bottlerocket NodeGroups 支持#1918 #19190.15.0 引入了对 BottlerocketAWS 推出的容器专用 Linux 发行版节点组的支持这是 eksctl 节点组 AMI 家族的重要扩充。5.1 配置结构NodeGroupBottlerocketbottlerocket配置块定义在 pkg/apis/eksctl.io/v1alpha5/types.go// NodeGroupBottlerocket holds the configuration for Bottlerocket based // NodeGroups. NodeGroupBottlerocket struct { // optional EnableAdminContainer *bool json:enableAdminContainer,omitempty // Settings contains any bottlerocket settings // optional Settings *InlineDocument json:settings,omitempty }字段类型含义enableAdminContainerbool指针是否启用 Bottlerocket 的 admin 容器用于 SSH 登录与运维settingsInlineDocument直接透传给 Bottlerocket 的任意设置项TOML 格式节点组通过amiFamily: Bottlerocket显式指定使用 Bottlerocket AMI该字段挂在 NodeGroup 顶层见 types.go。5.2 完整配置示例仓库示例 examples/20-bottlerocket.yaml 给出了两种典型用法apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: cluster-20 region: us-west-2 nodeGroups: - name: ng1-public instanceType: m5.xlarge desiredCapacity: 4 amiFamily: Bottlerocket labels: network-locality.example.com/public: true bottlerocket: enableAdminContainer: true settings: motd: Hello, eksctl! - name: ng2-public-ssh instanceType: m5.xlarge desiredCapacity: 4 amiFamily: Bottlerocket ssh: # Enable ssh access (via the admin container) allow: true publicKeyName: my-example-keypair要点解读settings.motd会写入 Bottlerocket 登录后的欢迎信息验证了settings字段可直接覆盖任意 Bottlerocket 系统设置第二种方式展示了通过ssh.allow: truepublicKeyName结合 admin 容器开启 SSH 访问的推荐做法注意示例文件头部明确提示Bottlerocket AMI 并非所有区域都可用创建前应先确认目标区域是否有对应 AMI。5.3 底层引导实现Bottlerocket 节点使用 TOML 格式的 userdata 完成引导。自管节点与托管节点的引导器分别位于pkg/nodebootstrap/bottlerocket.goNewUserDataForBottlerocket生成含settings的 TOML并通过bottlerocketSettingsTOML将用户提供的设置与派生设置合并bottlerocket.gopkg/nodebootstrap/managed_bottlerocket.go托管节点组的 Bottlerocket 引导同样读取EnableAdminContainer与Settings并校验用户设置managed_bottlerocket.go。对应的测试见 pkg/nodebootstrap/bottlerocket_test.go覆盖了 admin 容器开关与自定义 settings 的 TOML 渲染结果可作为自定义 settings 的格式参考。六、ImprovementsCI 与集成测试质量#1857 #1864移除集成测试超时#1857此前集成测试存在硬编码超时慢速环境如中国区域网络、大规模集群容易误判失败该版本移除了这一限制使长时间运行的端到端测试可以按真实耗时完成CircleCI 产物归档#1864release 与 rc 任务在 CI 中产生的构建产物被统一存储归档便于追溯每次发布的二进制与校验信息。这两项属于工程流程改进不影响用户侧 API但提升了版本发布的可靠性与可追溯性。七、Fixes分区与空指针相关修复#1855 #1877 #1871 #18727.1 集群访问校验空指针修复#1855修复了集群访问校验路径上的一处空指针解引用问题避免在部分字段缺失的边界场景下发生 panic提升了配置校验的健壮性。7.2 IRSA 默认 audience 按分区设置#1877IRSAIAM Roles for Service Accounts此前固定使用统一的 audience。0.15.0 改为根据 AWS Partition 设置默认 audience在中国分区aws-cn下STS 的 audience 与标准分区不同必须使用sts.amazonaws.com.cn对应的值才能正确完成 Web Identity 令牌验证。这一逻辑的基座在 pkg/iam/oidc/api.goOpenIDConnectManager持有partition与audience两个字段默认值defaultAudience sts.amazonaws.com创建 OIDC Provider 时通过ClientIDList注入api.go并生成带:aud条件的 AssumeRole 策略文档api.go。分区相关的行为有表驱动测试直接锁定见 pkg/iam/oidc/api_test.goEntry(Default AWS partition, aws, sts.amazonaws.com), Entry(AWS China partition, aws-cn, sts.amazonaws.com),测试验证了不同分区下 OIDC 策略文档中的 ARN 前缀arn:aws-cn:iam::...与 audience 条件的正确组合。7.3 OpenIDConnectProviderArn 分区检查#1871 #1872针对 issue #18710.15.0 在构造OpenIDConnectProviderArn时加入了分区一致性检查ARN 中的分区必须与集群所在区域匹配例如中国区域必须是aws-cn标准区域必须是aws防止因分区错配导致 IAM OIDC 集成失败。ARN 的组装路径同样位于 pkg/iam/oidc/api.go其中fmt.Sprintf(arn:%s:iam::%s:oidc-provider/%s, m.partition, m.accountID, m.hostnameAndPath())显式使用分区前缀。八、总结与升级建议eksctl 0.15.0 的发布使 eksctl 的能力版图发生了三个方向的关键变化安全能力通过secretsEncryption.keyARN一行配置即可为集群启用 KMS Secrets 加密参考 examples/19-kms-cluster.yaml满足企业级合规要求区域覆盖正式支持中国区cn-north-1北京与cn-northwest-1宁夏并通过 Partition 机制与镜像区域化重构pkg/addons/image.go保证 addons 在中国区可用节点多样性支持 Bottlerocket 节点组参考 examples/20-bottlerocket.yaml并同步支持 Kubernetes 1.15。升级到 0.15.0 及之后版本时建议重点验证目标区域是否为aws-cn分区影响 OIDC audience 与镜像后缀、Bottlerocket AMI 在目标区域是否可用以及 1.15 → 1.16 升级任务的超时预留。以上所有配置项与修复逻辑均可在当前仓库的pkg/apis/eksctl.io/v1alpha5、pkg/cfn/builder、pkg/iam/oidc与pkg/nodebootstrap目录中追溯验证。赞分享云原生容器编排DevOps【免费下载链接】eksctlThe official CLI for Amazon EKS项目地址https://gitcode.com/gh_mirrors/ek/eksctl点击查看免费下载相关推荐Swagger Codegen 生成的 Java API 客户端FakeClassnameTags123Api 的 testClassname 端点实战解析Swagger Codegen 生成的 Java API 客户端FakeClassnameTags123Api 的 testClassname 端点实战解析云原生容器编排DevOpseksctl v0.129.0 版本深度解读三大 AWS 新区域支持、Outposts 全版本放开与配套文档完善eksctl v0.129.0 版本深度解读三大 AWS 新区域支持、Outposts 全版本放开与配套文档完善 本篇技术指南围绕 eksctl 官方发布说明云原生容器编排DevOpseksctl v0.148.0 版本解析新增 AWS 隔离分区ISO区域支持与 Addon 越界崩溃修复eksctl v0.148.0 版本解析新增 AWS 隔离分区ISO区域支持与 Addon 越界崩溃修复 本文基于 eksctl 仓库 docs/rele云原生容器编排DevOps上一篇揭秘Kronos金融大模型K线分词与自回归预测的深度技术解析下一篇Inno Setup高级压缩配置终极指南平衡压缩率与安装速度的10个技巧创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →