将安全组分配到单个 pods - Amazon EKS

帮助改进此页面

想为本用户指南做出贡献? 滚动到页面底部,然后选择在 GitHub 上编辑此页面。您的贡献有助于我们的用户指南为每个人提供更充分的参考。

将安全组分配到单个 pods

适用于:带有 Amazon EC2 实例的 Linux 节点

适用于:私有子网

适用于 Pods 的安全组将 Amazon EC2 安全组与 Kubernetes Pods 集成在一起。您可以使用 Amazon EC2 安全组定义允许流向和来自于您部署到运行在许多 Amazon EC2 实例类型和 Fargate 上节点的 Pods 的入站和出站网络流量的规则。有关此功能的详细说明,请参阅 Pods 的安全组介绍博客文章。

与 Amazon VPC CNI plugin for Kubernetes 功能的兼容性

您可以将 Pods 的安全组与以下功能结合使用:

注意事项

在部署适用于 Pods 的安全组之前,请考虑以下限制和条件:

  • 适用于 Pods 的安全组不能与 Windows 节点一起使用。

  • 通过使用版本 1.16.0 或更高版本的 Amazon VPC CNI 插件,适用于 Pods 的安全组可以与为包含 Amazon EC2 节点的 IPv6 系列配置的集群一起使用。通过使用版本 1.7.7 或更高版本的 Amazon VPC CNI 插件,您可以将适用于 Pods 的安全组与仅包含 Fargate 节点的集群配置 IPv6 系列一起使用。有关更多信息,请参阅 将 IPv6 地址分配给您的集群、pods 和服务

  • 大多数基于 Nitro 的 Amazon EC2 实例系列都支持 Pods 的安全组,但并非所有实例代的系列都支持安全组。例如,支持 m5c5r5m6gc6gr6g 实例系列和实例代。但不支持 t 系列中的实例类型。有关支持的实例类型的完整列表,请参阅 GitHub 上的 limits.go 文件。您的节点必须是在该文件中拥有 IsTrunkingCompatible: true 的所列出的实例类型之一。

  • 如果您还使用 Pod 安全策略来限制对 Pod 更改的访问权限,则必须在 Kubernetes ClusterRoleBinding 中为分配给您 psprole 指定 eks:vpc-resource-controller Kubernetes 用户。如果您使用的是默认 Amazon EKS psproleClusterRoleBinding,则此命令为 eks:podsecuritypolicy:authenticated ClusterRoleBinding。例如,您将用户添加到 subjects: 部分,如以下示例所示:

    [...] subjects: - kind: Group apiGroup: rbac.authorization.k8s.io name: system:authenticated - apiGroup: rbac.authorization.k8s.io kind: User name: eks:vpc-resource-controller - kind: ServiceAccount name: eks-vpc-resource-controller
  • 如果您将自定义联网和适用于 Pods 的安全组一起使用,则请使用适用于 Pods 的安全组所指定的安全组,不要使用 ENIConfig 中指定的安全组。

  • 如果您使用的是版本 1.10.2 或更早版本的 Amazon VPC CNI 插件,并且将 terminationGracePeriodSeconds 设置包括在您的 Pod 规范中,则该设置的值不能为零。

  • 如果您使用的是版本 1.10 或更早版本的 Amazon VPC CNI 插件或 POD_SECURITY_GROUP_ENFORCING_MODE=strict 的版本 1.11(默认设置),则您向其分配安全组的 Pods 将不支持使用实例目标(externalTrafficPolicy 设置为 Local)的 NodePortLoadBalancer 型 Kubernetes 服务。有关将负载均衡器与实例目标一起使用的更多信息,请参阅 使用 Network Load Balancers 路由 TCP 和 UDP 流量

  • 如果您使用的是版本 1.10 或更早版本的 Amazon VPC CNI 插件或 POD_SECURITY_GROUP_ENFORCING_MODE=strict 的版本 1.11(默认设置),对于来自分配有安全组的 Pods 的出站流量,禁用源 NAT,以便应用出站安全组规则。要访问 Internet,必须在配置了 NAT 网关或实例的私有子网中部署的节点上启动具有已分配安全组的 Pods。将分配的安全组部署到公有子网的 Pods 无法访问 Internet。

    如果您使用的是 POD_SECURITY_GROUP_ENFORCING_MODE=standard 的版本 1.11 或者更高版本的插件,则发往 VPC 之外的 Pod 流量将转换为实例主网络接口的 IP 地址。对于此流量,将使用主网络接口的安全组中的规则,而不是 Pod's 安全组中的规则。

  • 要将 Calico 网络策略用于具有关联安全组的 Pods,您必须使用版本 1.11.0 或更高版本的 Amazon VPC CNI 插件并设置 POD_SECURITY_GROUP_ENFORCING_MODE=standard。否则,流向和来自具有关联安全组的 Pods 的流量不受 Calico 网络策略执行限制,并且仅受限于 Amazon EC2 安全组执行。要更新 Amazon VPC CNI 版本,请参阅 使用 Amazon VPC CNI 将 IP 分配给 Pods

  • 在使用集群中的安全组的 Amazon EC2 节点上运行且使用 Nodelocal DNSCache 的 Pods 仅支持版本 1.11.0 或更高版本 Amazon VPC CNI 插件和 POD_SECURITY_GROUP_ENFORCING_MODE=standard。要更新 Amazon VPC CNI 插件版本,请参阅 使用 Amazon VPC CNI 将 IP 分配给 Pods

  • 对于具有高流失率的 Pods 而言,适用于 Pods 的安全组可能会导致更高的 Pod 启动延迟。这是由于资源控制器中的速率限制造成的。

  • EC2 安全组范围处于 Pod 级别 - 有关更多信息,请参阅安全组

    如果您设置了 POD_SECURITY_GROUP_ENFORCING_MODE=standardAWS_VPC_K8S_CNI_EXTERNALSNAT=false,则发往 VPC 外部端点的流量使用节点的安全组,而不是 Pod 的安全组。