使用 亚马逊云科技 Config 监控亚马逊弹性 Kubernetes 服务的版本合规性

亚马逊弹性 Kubernetes 服务 亚马逊 EKS )提供托管的 Kubernetes 服务,通过将无差别的繁重工作转移给 亚马逊云科技 来简化集群操作。由于 Kubernetes 每隔 4 个月发布一次新版本,因此客户很难保持其 EKS 集群处于最新状态,尤其是在多个 亚马逊云科技 账户中。此外,跟踪EKS版本将有助于您的升级策略,并使团队能够从新功能、设计更新和错误修复中受益。

Kubernetes 集群具有控制平面和数据平面。在不同平面上运行的 Kubernetes 软件需要更新才能保持最新状态。控制层面更新由 亚马逊云科技 管理,因此您只需要启动新的次要版本的流程即可。在数据层面,Amazon EKS 通过提供 Amazon E KS 优化的 亚马逊系统映像 (AMI) 和使用 Amazon EK S 托管节点组 (MNG) ,使基础设施层的 升级成为一个简单的过程。但是,正如我们的 最佳实践指南 中所述,需要采取一系列行动 。

使用 亚马逊云科技 Config 监控亚马逊 EKS

在这篇文章中,我们将使用 亚马逊云科技 Config ,该服务允许您通过规则持续评估您的资源。首先,我们将使用 亚马逊云科技 Config 来监控具有 亚马逊云科技 Config 托管规则的 Amazon EKS 控制平面的版本。接下来,我们将部署 亚马逊云科技 Config 自定义 Lambda 规则 , 以监控您的 A mazon EKS 托管节点组 (MNG) 中使用的亚马逊系统映像 (AMI) 版本以获取可用更新。这将为您的运营团队提供必要的可见性,以控制与升级相关的风险,并通过监控有效版本来保持基础架构处于最新状态。为了获得对多个 亚马逊云科技 账户的可见性,可以将 亚马逊云科技 Config 配置为使用 组织范围 的聚合器为您提供单一视图。

亚马逊云科技 Config 在 亚马逊 EventBridge 上发布了该活动 。使用 事件模式 ,可以仅筛选感兴趣的事件。然后,您可以在 EventBridge 中定义 众多可用目标 之一来接收这些事件。

以下是我们将部署的 亚马逊云科技 Config 规则的架构图:

Architecture diagram of the solution with the numbered components

该解决方案中的不同组件是:

  1. 用于检查 EKS 控制平面版本的 亚马逊云科技 Config 托管规则。
  2. 一条 亚马逊云科技 Config 自定义 Lambda 规则,用于监控我们托管节点组的新 AMI 版本。
  3. 亚马逊云科技 Config 生成的所有事件都将发送到亚马逊 EventBridge。通过事件模式,您可以触发通知给利益相关者(电子邮件、http 等)或将其转发给其他目标。

先决条件:

要完成 亚马逊云科技 托管规则部分的步骤,您将需要以下内容:

  • 在您的账户中启用了 亚马逊云科技 Config,如果需要,您可以 直接从控制台使用 一键设置

对于 亚马逊云科技 Config 自定义 Lambda 规则部分,您将需要:

  • 安装 亚马逊云科技 命令行接口 (亚马逊云科技 CLI)
  • 安装 亚马逊云科技 无服务器应用程序模型命令行 (亚马逊云科技 SAM CLI)。
  • 安装 Git
  • 安装 Node.js 和 npm

通过 亚马逊云科技 Config 托管规则监控 EKS 控制平面版本

对于 Amazon EKS,我们可以使用 亚马逊云科技 Config 提供的 eks-cluster-suster-suster-suster-suster-superte-supp ort 版本来确保控制层面的版本处于亚马逊云科技 Config 托管规则 的完整列表可在文档中找到。

要从 亚马逊云科技 Config 启用 eks-cluster 支持的版本,请执行以下操作:

  1. 打开 亚马逊云科技 Config 控制台。
  2. 在导航窗格中,选择 “ 规则”。
  3. 选择 “ 添加规则”。
  4. 亚马逊云科技 托管规则 下 ,搜索 E KS。
  5. 选择 eks-cluster 支持的版本,选择 “下一步 ”。
  6. 在 “ 参数 ” 下的 “ ” 列中,输入您要视为合规的 EKS 的最新版本。在撰写本文时,我使用的是 1.26。
  7. 选择 “ 下一步 ” ,查看您的规则,然后单击 “ 添加规则”。
  8. 从列表中选择新规则,然后在 “ 操作 ” 下选择 “ 重新评估 ”。

此屏幕截图显示了您的账户中包含三个集群的规则详细信息。

Console view of managed rule eks-cluster-supported-version details in AWS Config

利用 亚马逊云科技 Lambda 扩展 亚马逊云科技 Config 以监控 EKS 托管节点组 (MNG)

以下步骤创建了一个 亚马逊云科技 Config 自定义 Lambda 规则,并使用 GitHub 存储库中的代码为我们的托管节点组启用该规则。

安装程序:

让我们首先使用 sam-cli 工具创建所需的 Lambda:

# You can download the zip from github instead of git clone
git clone https://github.com/aws-samples/aws-config-eks-mng-checkupdate.git
cd aws-config-eks-mng-checkupdate
sam build
sam deploy --guided

我们建议将 config-custom-rule-eks-mng 作为堆栈名称的值。 对其他选项使用默认值。

以下是此命令的输出示例:

        Deploying with following values
        ===============================
        Stack name                   : config-custom-rule-eks-mng
        Region                       : ca-central-1
        Confirm changeset            : True
        Disable rollback             : False
        Deployment s3 bucket         : aws-sam-cli-managed-default-samclisourcebucket-xxxxx
        Capabilities                 : ["CAPABILITY_IAM"]
        Parameter overrides          : {}
        Signing Profiles             : {}
…
Successfully created/updated stack - config-eks-ami in ca-central-1

这将在 亚马逊云科技 Config 中创建 Lambda 以及自定义规则 eks-Mng-CheckUpdate ,其中包含调用该 Lambda 的资源策略。为 Lambda 创建的 IAM 角色拥有 EKS 的只读权限,并拥有 亚马逊云科技 Systems Manager (SSM) 中可用版本的 GetPar ameter 权限。

周期性触发器类型

亚马逊云科技 Config 规则可以在定期计划或配置更改时触发。亚马逊云科技 Config 目前不为托管节点组 (MNG) 提供支持。为了评估 MNG 资源,我们定义了定期运行的 亚马逊云科技 Config 自定义 Lambda 规则。有多种定期选择,从每小时到每 24 小时一次。考虑到这与 AMI 更新频率有关,我们通过模板选择了 24 小时时段。请注意,随着规则评估的增加,您的 亚马逊云科技 Config 成本将增加。要了解更多信息,请参阅 亚马逊云科技 Config 定价页面 。为组织需求选择合适的频率将帮助您获得适当的可见度水平,而不会积累不必要的费用。如果需要比定期检查更快地重新评估规则,则可以从 亚马逊云科技 Config 控制台触发按需评估。要触发按需评估,请选择相应的规则,然后从操作菜单中单击 “ 重新评估 ” 选项。

以下是来自 亚马逊云科技 Config 控制台的自定义规则提供的结果视图:

Results provided by custom rule in AWS Config console

当前版本的 亚马逊云科技 Config 规则支持节点运行 亚马逊 Linux 2 和 Bottlerocket 的 亚马逊 EKS 优化版 AMI 有关支持版本的更多详细信息 ,请参阅 GitHub 项目

用于筛选亚马逊 EventBridge 中事件的事件模式

如果您想对我们在EventBridge中的新规则发生的任何合规性变化做出反应。以下是涵盖当今使用规则的事件模式示例:

{
  "source": ["aws.config"],
  "detail-type": ["Config Rules Compliance Change"],
  "detail": {
    "configRuleName": ["EKS-MNG-CheckUpdate", "eks-cluster-supported-version"]
  }
}

对于目标,可以从各种 亚马逊云科技 服务甚至外部 API 中进行选择, 详情 请参阅 完整列表

清理

为了防止您的账户产生额外费用,以下步骤将删除已创建的资源:

1 — 通过 亚马逊云科技 Config 控制台。 选择规则 eks-cluster-supported-version , 然后从操作菜单中使用删除规则选项。

2 — 通过以下命令删除自定义规则和关联资源:

sam 删除--stack-name config-custom-rule-eks-mng

3 — 在 EventBridge 控制台中,删除已添加的规则(如果有)。

结论

在这篇博客文章中,我们演示了如何在控制层面和数据层面跟踪您的 EKS 版本。通过利用 亚马逊云科技 Config 规则(托管和自定义),您可以自动完成跟踪有效版本所需的工作。

要集中查看集群和托管节点组版本,您可以设置 组织范围的聚合器 以利用 亚马逊云科技 Config 聚合 功能。 这将帮助你跟上 Kubernetes 的发布周期。 在规划升级时,您需要查阅 EKS 版本页面 ,其中包含每个版本的具体信息。

Mathieu Bruneau

Mathieu Bruneau 是加拿大亚马逊网络服务的容器专家解决方案架构师。在 DevOps 一词流行之前,他一直在弥合运营团队和开发团队之间的讨论。他住在加拿大蒙特利尔,喜欢与妻子和他的三个孩子共度时光,要么玩电子游戏,要么扔飞盘。


*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您发展海外业务和/或了解行业前沿技术选择推荐该服务。