Amazon EKS 附加组件 - Amazon EKS

Amazon EKS 附加组件

附加组件是为 Kubernetes 应用程序提供辅助操作功能的软件,但并不特定于应用程序。这包括可观测性代理或 Kubernetes 驱动程序等软件,这些软件允许集群与用于联网、计算和存储的底层 AWS 资源进行交互。附加组件软件通常由 Kubernetes 社区、AWS 等云提供商或第三方供应商构建和维护。Amazon EKS 会自动为每个集群安装自我管理的附加组件,例如 Amazon VPC CNI plugin for Kubernetes、kube-proxy 和 CoreDNS。您可以更改附加组件的默认配置并在需要时加以更新。

Amazon EKS 附加组件为 Amazon EKS 集群的一组经策管附加组件提供安装和管理。Amazon EKS 附加组件包含最新的安全补丁、错误修复,并经 AWS 验证能够与 Amazon EKS 一起使用。Amazon EKS 附加组件允许您始终如一地确保您的 Amazon EKS 集群安全稳定,并减少您在安装、配置和更新上所需执行的工作量。如果是类似于 kube-proxy 的自我管理附加组件,若已在您的集群上运行并且可作为 Amazon EKS 附加组件使用,那么您便可以安装 kube-proxy Amazon EKS 加载项开始享受 Amazon EKS 附加组件的功能所带来的益处。

您可以通过 Amazon EKS API 为 Amazon EKS 附加组件更新特定的 Amazon EKS 托管配置字段。在附加组件启动后,您还可以直接在 Kubernetes 集群中修改并非由 Amazon EKS 管理的配置字段,包括在适用时为附加组件定义特定的配置字段。Amazon EKS 不会覆盖您所做的这些更改。使用 Kubernetes 服务器端应用功能可以实现这一点。有关更多信息,请参阅 Kubernetes 字段管理

您可以将 Amazon EKS 附加组件与任何 Amazon EKS 节点类型配合使用。

注意事项
  • 要为集群配置附加组件,您的 IAM 用户必须具有 IAM 权限,以使用附加组件。如需了解更多信息,请参阅 Amazon Elastic Kubernetes Service 定义的操作 中的名称中带有 Addon 的操作。

  • Amazon EKS 附加组件能在您为集群预置或配置的节点上运行。节点类型包括 Amazon EC2 实例和 Fargate。

  • 您可以修改并非由 Amazon EKS 管理的字段以自定义 Amazon EKS 附加组件的安装。有关更多信息,请参阅 Kubernetes 字段管理

  • 如果您使用 AWS Management Console 创建集群,则 Amazon EKS kube-proxy、Amazon VPC CNI plugin for Kubernetes 和 CoreDNS Amazon EKS 附加组件会自动添加到您的集群中。如果您借助 eksctl 使用 config 文件创建集群,则 eksctl 还可以使用 Amazon EKS 附加组件创建集群。如果使用不带有 config 文件的 eksctl 或使用任何其他工具创建集群,则自我管理的 kube-proxy、Amazon VPC CNI plugin for Kubernetes 和 CoreDNS 附加组件将会安装,而不会安装 Amazon EKS 附加组件。您可以自行管理,也可以在集群创建后手动添加 Amazon EKS 附加组件。

  • eks:addon-cluster-adminClusterRoleBindingcluster-admin ClusterRole 绑定到 eks:addon-manager 身份。该角色拥有 eks:addon-manager 身份所需的权限,可以创建 Kubernetes 命名空间并将附加组件安装到命名空间中。如果删除 eks:addon-cluster-admin ClusterRoleBinding,Amazon EKS 集群将继续运行,但是 Amazon EKS 将无法再管理任何附加组件。以下平台版本开头的所有集群都使用新的 ClusterRoleBinding

    Kubernetes 版本 EKS 平台版本
    1.20 eks.12
    1.21 eks.14
    1.22 eks.9
    1.23 eks.5
    1.24 eks.3

您可以使用 Amazon EKS API、AWS Management Console、AWS CLI 和 eksctl 添加、更新或删除 Amazon EKS 附加组件。有关更多信息,请参阅管理 Amazon EKS 附加组件。您也可以使用 AWS CloudFormation 创建 Amazon EKS 附加组件。

Amazon EKS 提供的可用 Amazon EKS 附加组件

可在您的集群上创建以下 Amazon EKS 附加组件。您可以随时使用 eksctl、AWS Management Console 或 AWS CLI 查看可用附加组件的最新列表。要查看所有可用附加组件或安装附加组件,请参阅 创建附加组件。如果附加组件需要 IAM 权限,则集群必须具有 IAM OpenID Connect(OIDC)提供商。要确定是否具有一个提供商,还是创建一个提供商,请参阅为集群创建 IAM OIDC 提供商。安装附加组件后,您可以对其进行更新删除

选择一个附加组件以了解有关该附加组件及其安装要求的更多信息。

  • 名称vpc-cni

  • 描述 – 为集群提供本机 VPC 联网的 Kubernetes 容器网络接口(CNI)插件。默认情况下,在每个 Amazon EC2 节点上安装自行管理的或托管类型的附加组件。

  • 所需的 IAM 权限 – 此附加组件使用 Amazon EKS 的 服务账户的 IAM 角色 功能。如果集群使用 IPv4 系列,则需要 AmazonEKS_CNI_Policy 中的权限。如果集群使用 IPv6 系列,则必须使用 IPv6 模式中的权限创建 IAM policy。您可以创建 IAM 角色,将其中一个策略附加到该角色,并使用以下命令为附加组件使用的 Kubernetes 服务账户添加注释。

    my-cluster 替换为集群名称,并将 AmazonEKSVPCCNIRole 替换为角色名称。如果集群使用 IPv6 系列,则将 AmazonEKS_CNI_Policy 替换为您创建的策略名称。此命令要求您为您的设备安装 eksctl。如果您需要使用其他工具来创建角色、将策略附加到该角色并为 Kubernetes 服务账户添加注释,请参阅 配置 Kubernetes 服务账户以代入 IAM 角色

    eksctl create iamserviceaccount --name aws-node --namespace kube-system --cluster my-cluster --role-name "AmazonEKSVPCCNIRole" \ --role-only --attach-policy-arn arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy --approve
  • 其他信息 – 要了解有关附加组件可配置设置的更多信息,请参阅 GitHub 上的 aws-vpc-cni-k8s。要了解有关插件的更多信息,请参阅 Proposal: CNI plugin for Kubernetes networking over AWS VPC(提议:通过 AWS VPC 进行 Kubernetes 联网的 CNI 插件)。

  • 更新信息 – 您一次只能更新一个次要版本。例如,如果当前版本为 1.22.x-eksbuild.y,并且您想要更新到 1.24.x-eksbuild.y,则必须首先更新到 1.23.x-eksbuild.y,再更新到 1.24.x-eksbuild.y

  • 名称coredns

  • 描述 – 一个灵活、可扩展的 DNS 服务器,可用作 Kubernetes 集群 DNS。默认情况下,创建集群时会安装自行管理或托管类型的附加组件。当您启动具有至少一个节点的 Amazon EKS 集群时,无论集群中部署的节点数量如何,预设情况下都会部署 CoreDNS 镜像的两个副本。这些 CoreDNS pods 为集群中的所有 pods 提供名称解析。如果集群包含命名空间与 CoreDNS deployment 的命名空间相匹配的 AWS Fargate 配置文件,则可以将 CoreDNS pods 部署到 Fargate 节点。

  • 所需的 IAM 权限 – 此附加组件不需要任何权限。

  • 其他信息 – 要了解有关 CoreDNS 的更多信息,请参阅 Kubernetes 文档中的 Using CoreDNS for Service Discovery(使用 CoreDNS 进行服务发现)和 Customizing DNS Service(自定义 DNS 服务)。

  • 名称kube-proxy

  • 描述 – 维护每个 Amazon EC2 节点上的网络规则。它可以实现与容器组(pod)的网络通信。默认情况下,在集群中的每个 Amazon EC2 节点上安装自行管理或托管类型的附加组件。

  • 所需的 IAM 权限 – 此附加组件不需要任何权限。

  • 其他信息 – 要了解有关 kube-proxy 的更多信息,请参阅 Kubernetes 文档中的 kube-proxy

  • 更新信息 – 在更新当前版本之前,请考虑以下要求:

    • Amazon EKS 集群上的 Kube-proxy 具有与 Kubernetes 相同的兼容性和偏斜策略

    • Kube-proxy 必须与您的Amazon EC2 节点上的 kubelet 具有相同的次要版本。

    • Kube-proxy 不能高于集群控制面板的次要版本。

    • Amazon EC2 节点上的 kube-proxy 版本不能比控制面板的版本低两个以上的次要版本。例如,如果您的控制面板正在运行 Kubernetes 1.24,kube-proxy 次要版本不能低于 1.22。

    • 如果您最近将集群更新到新的 Kubernetes 次要版本,请将 Amazon EC2 节点更新到相同的次要版本,然后再将 kube-proxy 更新到与节点相同的次要版本。

  • 名称aws-ebs-csi-driver

  • 描述 – 为集群提供本机 VPC 联网的 Kubernetes Container Storage Interface(CSI)插件。

  • 所需的 IAM 权限 – 此附加组件使用 Amazon EKS 的 服务账户的 IAM 角色 功能。您必须使用 GitHub 示例策略中的权限创建 IAM policy。您可以创建 IAM 角色,将其中一个策略附加到该角色,并使用以下命令为附加组件使用的 Kubernetes 服务账户添加注释。将 my-cluster 替换为集群名称,将 AmazonEKS_EBS_CSI_DriverRole 替换为角色名称,并将 AmazonEBSCSIDriverPolicy 替换为您创建的策略名称。此命令要求您为您的设备安装 eksctl。如果您需要使用其他工具来创建角色、将策略附加到该角色并为 Kubernetes 服务账户添加注释,请参阅 配置 Kubernetes 服务账户以代入 IAM 角色

    eksctl create iamserviceaccount --name ebs-csi-controller-sa --namespace kube-system --cluster my-cluster \ --role-name "AmazonEKS_EBS_CSI_DriverRole" --role-only --attach-policy-arn arn:aws:iam::aws:policy/AmazonEBSCSIDriverPolicy --approve
  • 其他信息 – 要了解有关驱动程序的更多信息,请参阅 GitHub 上的 Amazon EBS CSI driver(Amazon EBS CSI 驱动程序)。您可以从 GitHub 部署用于测试目的的示例

  • 名称adot

  • 描述AWS Distro for OpenTelemetry(ADOT)是 OpenTelemetry 项目的安全、受 AWS 支持的生产就绪型发行版。

  • 所需的 IAM 权限 – 此附加组件使用 Amazon EKS 的 服务账户的 IAM 角色 功能。AmazonPrometheusRemoteWriteAccessAWSXrayWriteOnlyAccessCloudWatchAgentServerPolicy AWS 托管策略中的权限。您可以创建 IAM 角色,将托管策略附加到该角色,并使用以下命令为附加组件使用的 Kubernetes 服务账户添加注释。将 my-cluster 替换为集群名称,并将 AmazonEKS_ADOT_Collector_Role 替换为角色名称。此命令要求您为您的设备安装 eksctl。如果您需要使用其他工具来创建角色、将策略附加到该角色并为 Kubernetes 服务账户添加注释,请参阅 配置 Kubernetes 服务账户以代入 IAM 角色

    eksctl create iamserviceaccount --name adot-collector --namespace default --cluster my-cluster --role-name "AmazonEKS_ADOT_Collector_Role" \ --attach-policy-arn arn:aws:iam::aws:policy/AmazonPrometheusRemoteWriteAccess \ --attach-policy-arn arn:aws:iam::aws:policy/AWSXrayWriteOnlyAccess \ --attach-policy-arn arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy --approve
  • 其他信息 – 有关更多信息,请参阅 AWS Distro for OpenTelemetry 文档中的 Getting Started with AWS Distro for OpenTelemetry using EKS Add-Ons(通过 EKS 附加组件开始使用 AWS Distro for OpenTelemetry)。

来自独立软件供应商的其他 Amazon EKS 附加组件

除了之前的 Amazon EKS 附加组件列表外,您还可以添加来自独立软件供应商的各种操作软件 Amazon EKS 附加组件。选择一个附加组件以了解有关该附加组件及其安装要求的更多信息。

  • 发布者:Dynatrace

  • 名称dynatrace_dynatrace-operator

  • 版本v0.8.2-eksbuild.0

  • 命名空间dynatrace

  • 服务账户名称:此附加组件未使用服务账户。

  • AWS 托管 IAM policy:此附加组件不使用托管策略。

  • 自定义 IAM 权限:此附加组件不使用自定义权限。

  • 设置和使用说明:请参阅 dynatrace 文档中的 Kubernetes monitoring(Kubernetes 监控)。

  • 发布者:Factorhouse

  • 名称factorhouse_kpow

  • 版本v90.2.3-eksbuild.0

  • 命名空间factorhouse

  • 服务账户名称kpow

  • AWS 托管 IAM policyAWSLicenseManagerConsumptionPolicy

  • 创建所需 IAM 角色的命令:以下命令要求您的集群具有 IAM OpenID Connect(OIDC)提供商。要确定是否具有一个提供商,还是创建一个提供商,请参阅为集群创建 IAM OIDC 提供商。将 my-cluster 替换为您的集群的名称,并将 my-kpow-role 替换为您的角色名称。此命令要求您为您的设备安装 eksctl。如果您需要使用其他工具来创建角色并为 Kubernetes 服务账户添加注释,请参阅配置 Kubernetes 服务账户以代入 IAM 角色

    eksctl create iamserviceaccount --name kpow --namespace factorhouse --cluster my-cluster --role-name "my-kpow-role" \ --role-only --attach-policy-arn arn:aws:iam::aws:policy/service-role/AWSLicenseManagerConsumptionPolicy --approve
  • 自定义 IAM 权限:此附加组件不使用自定义权限。

  • 设置和使用说明:请参阅 Kpow 文档中的 AWS Marketplace LM

  • 发布者:Kubecost

  • 名称kubecost_kubecost

  • 版本v1.98.0-eksbuild.1

  • 命名空间kubecost

  • 服务账户名称:此附加组件未使用服务账户。

  • AWS 托管 IAM policy:此附加组件不使用托管策略。

  • 自定义 IAM 权限:此附加组件不使用自定义权限。

  • 设置和使用说明:请参阅 Kubecost 文档中的 Amazon EKS integration(Amazon EKS 集成)。

  • 如果您的集群是 1.23 版或更高版本,您必须在集群上安装 Amazon EBS CSI 驱动程序,否则您将收到错误信息。

  • 发布者:Nirmata

  • 名称nirmata_kyverno

  • 版本v1.8.1-eksbuild.0

  • 命名空间kyverno

  • 服务账户名称kyverno

  • AWS 托管 IAM policyAWSLicenseManagerConsumptionPolicy

  • 创建所需 IAM 角色的命令:以下命令要求您的集群具有 IAM OpenID Connect(OIDC)提供商。要确定是否具有一个提供商,还是创建一个提供商,请参阅为集群创建 IAM OIDC 提供商。将 my-cluster 替换为您的集群的名称,并将 my-kyverno-role 替换为您的角色名称。此命令要求您为您的设备安装 eksctl。如果您需要使用其他工具来创建角色并为 Kubernetes 服务账户添加注释,请参阅配置 Kubernetes 服务账户以代入 IAM 角色

    eksctl create iamserviceaccount --name kyverno --namespace kyverno --cluster my-cluster --role-name "my-kyverno-role" \ --role-only --attach-policy-arn arn:aws:iam::aws:policy/service-role/AWSLicenseManagerConsumptionPolicy --approve
  • 自定义 IAM 权限:此附加组件不使用自定义权限。

  • 设置和使用说明:请参阅 Nirmata 文档中的 Nirmata Kyverno Enterprise(Nirmata Kyverno 企业版)。

  • 发布者:Teleport

  • 名称teleport_teleport

  • 版本v10.3.1-eksbuild.0

  • 命名空间teleport

  • 服务账户名称:此附加组件未使用服务账户。

  • AWS 托管 IAM policy:此附加组件不使用托管策略。

  • 自定义 IAM 权限:此附加组件不使用自定义权限。

  • 设置和使用说明:请参阅 Teleport 文档中的 How Teleport Works(Teleport 的工作原理)。

  • 发布者:Tetrate

  • 名称tetrate-io_istio-distro

  • 版本v1.15.3-eksbuild.0

  • 命名空间istio-system

  • 服务账户名称:此附加组件未使用服务账户。

  • AWS 托管 IAM policy:此附加组件不使用托管策略。

  • 自定义 IAM 权限:此附加组件不使用自定义权限。

  • 设置和使用说明:请参阅 Tetrate Istio Distro 网站。

  • 发布者:Upbound

  • 名称upbound_universal-crossplane

  • 版本v1.9.1-eksbuild.0

  • 命名空间upbound-system

  • 服务账户名称:此附加组件未使用服务账户。

  • AWS 托管 IAM policy:此附加组件不使用托管策略。

  • 自定义 IAM 权限:此附加组件不使用自定义权限。

  • 设置和使用说明:请参阅 Upbound 文档中的 Upbound Universal Crossplane(UXP)