将安全组分配到单个 pods
适用于:带有 Amazon EC2 实例的 [.noloc] `Linux` 节点
适用于:私有子网
适用于 Pods 的安全组将 Amazon EC2 安全组与 Kubernetes Pods 集成在一起。您可以使用 Amazon EC2 安全组定义允许流向和来自于您部署到运行在许多 Amazon EC2 实例类型和 Fargate 上节点的 Pods 的入站和出站网络流量的规则。有关此功能的详细说明,请参阅容器组(pod)的安全组介绍
与 Amazon VPC CNI plugin forKubernetes 功能的兼容性
您可以将 Pods 的安全组与以下功能结合使用:
-
IPv4 源网络地址转换 - 有关更多信息,请参阅 为 pods 启用出站互联网接入。
-
集群、容器组(pod)和服务的 IPv6 地址 - 有关更多信息,请参阅 了解如何将 IPv6 地址分配给集群、pods 和服务。
-
使用 Kubernetes 网络策略限制流量 - 有关更多信息,请参阅 通过 Kubernetes 网络策略限制 pod 流量。
注意事项
在部署适用于 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 的安全组,但并非所有实例代的系列都支持安全组。例如,支持
m5
、c5
、r5
、m6g
、c6g
与r6g
实例系列和实例代。但不支持t
系列中的实例类型。有关支持的实例类型的完整列表,请参阅 GitHub 上的 limits.go文件。您的节点必须是在该文件中拥有 IsTrunkingCompatible: true
的所列出的实例类型之一。 -
如果您还使用 Pod 安全策略来限制对 Pod 更改的访问权限,则必须在 Kubernetes
ClusterRoleBinding
中为分配给您psp
的role
指定eks:vpc-resource-controller[.noloc]`Kubernetes
用户。如果您使用的是默认 Amazon EKSpsp
、role
和ClusterRoleBinding
,则此命令为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
)的NodePort
和LoadBalancer
型 Kubernetes 服务。有关将负载均衡器与实例目标一起使用的更多信息,请参阅 使用网络负载均衡器路由 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 -
在使用集群中的安全组的 Amazon EC2 节点上运行且使用 Nodelocal DNSCache
的 Pods 仅支持版本 1.11.0
或更高版本 Amazon VPC CNI 插件和POD_SECURITY_GROUP_ENFORCING_MODE
=standard
。要更新 Amazon VPC CNI 插件版本,请参阅 Amazon VPC CNI -
对于具有高流失率的 Pods 而言,适用于 Pods 的安全组可能会导致更高的 Pod 启动延迟。这是由于资源控制器中的速率限制造成的。
-
EC2 安全组范围处于 Pod 级别 - 有关更多信息,请参阅安全组。
如果您设置了
POD_SECURITY_GROUP_ENFORCING_MODE=standard
和AWS_VPC_K8S_CNI_EXTERNALSNAT=false
,则发往 VPC 外部端点的流量使用节点的安全组,而不是容器组(pod)的安全组。