

 **帮助改进此页面** 

要帮助改进本用户指南，请选择位于每个页面右侧窗格中的**在 GitHub 上编辑此页面**链接。

# 将安全组分配给各个容器组（pod）
<a name="security-groups-for-pods"></a>

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

 **适用于**：私有子网

容器组（pod）的安全组将 Amazon EC2 安全组与 Kubernetes Pod 集成在一起。您可以使用 Amazon EC2 安全组定义允许流向和来自于容器组（pod）的入站和出站网络流量的规则，而这些容器组（pod）将部署到在许多 Amazon EC2 实例类型和 Fargate 上运行的节点。有关此功能的详细说明，请参阅[容器组（pod）的安全组介绍](https://www.amazonaws.cn/blogs/containers/introducing-security-groups-for-pods)博客文章。

## 与适用于 Kubernetes 的 Amazon VPC CNI 插件功能的兼容性
<a name="security-groups-for-pods-compatability"></a>

您可以将容器组（pod）的安全组与以下功能结合使用：
+ IPv4 源网络地址转换 - 有关更多信息，请参阅 [为容器组（pod）启用出站互联网访问权限](external-snat.md)。
+ 集群、容器组（pod）和服务的 IPv6 地址 - 有关更多信息，请参阅 [了解如何将 IPv6 地址分配给集群、容器组（pod）和服务](cni-ipv6.md)。
+ 使用 Kubernetes 网络策略限制流量 – 有关更多信息，请参阅[通过 Kubernetes 网络策略限制容器组（pod）流量](cni-network-policy.md)。

## 注意事项
<a name="sg-pods-considerations"></a>

在部署容器组（pod）的安全组之前，请考虑以下限制和条件：
+ 容器组（pod）的安全组不能与 Windows 节点或 EKS 自动模式一起使用。
+ 通过使用版本 1.16.0 或更高版本的 Amazon VPC CNI 插件，容器组（pod）的安全组可以与为包含 Amazon EC2 节点的 `IPv6` 系列配置的集群一起使用。通过使用版本 1.7.7 或更高版本的 Amazon VPC CNI 插件，容器组（pod）的安全组可以与为仅包含 Fargate 节点的 `IPv6` 系列配置的集群一起使用。有关更多信息，请参阅 [了解如何将 IPv6 地址分配给集群、容器组（pod）和服务](cni-ipv6.md)。
+ 大多数[基于 Nitro](https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances) 的 Amazon EC2 实例系列都支持容器组（pod）的安全组，但并非所有实例代的系列都支持安全组。例如，支持 `m5`、`c5`、`r5`、`m6g`、`c6g` 与 `r6g` 实例系列和实例代。但不支持 `t` 系列中的实例类型。有关支持的实例类型的完整列表，请参阅 GitHub 上的 [limits.go](https://github.com/aws/amazon-vpc-resource-controller-k8s/blob/v1.5.0/pkg/aws/vpc/limits.go) 文件。您的节点必须是在该文件中拥有 `IsTrunkingCompatible: true` 的所列出的实例类型之一。
+ 如果要将自定义联网和容器组（pod）的安全组一起使用，则请使用容器组（pod）的安全组所指定的安全组，不要使用 `ENIConfig` 中指定的安全组。
+ 如果您使用的是版本 `1.10.2` 或更低版本的 Amazon VPC CNI 插件，并且将 `terminationGracePeriodSeconds` 设置包括在您的容器组（pod）规范中，该设置的值不能为零。
+ 如果您使用的是版本 `1.10` 或更低版本的 Amazon VPC CNI 插件或 `POD_SECURITY_GROUP_ENFORCING_MODE`=`strict` 的版本 `1.11`（默认设置），则您向其分配安全组的容器组（pod）将不支持使用实例目标（`externalTrafficPolicy` 设置为 `Local`）的 `NodePort` 和 `LoadBalancer` 型 Kubernetes 服务。有关将负载均衡器与实例目标一起使用的更多信息，请参阅 [使用网络负载均衡器路由 TCP 和 UDP 流量](network-load-balancing.md)。
+ 如果您使用的是版本 `1.10` 或更低版本的 Amazon VPC CNI 插件或 `POD_SECURITY_GROUP_ENFORCING_MODE`=`strict` 的版本 `1.11`（默认设置），对于来自分配有安全组的容器组（pod）的出站流量，禁用源 NAT，以便应用出站安全组规则。要访问 Internet，必须在配置了 NAT 网关或实例的私有子网中部署的节点上启动具有已分配安全组的容器组（pod）。部署到公有子网的已分配安全组的 Pod 无法访问 Internet。

  如果您使用的是 `POD_SECURITY_GROUP_ENFORCING_MODE`=`standard` 的版本 `1.11` 或者更高版本的插件，则发往 VPC 之外的容器组（pod）流量将转换为实例主网络接口的 IP 地址。对于此流量，将使用主网络接口的安全组中的规则，而不是容器组（pod）安全组中的规则。
+ 要将 Calico 网络策略用于具有关联安全组的容器组（pod），您必须使用版本 `POD_SECURITY_GROUP_ENFORCING_MODE` 或更高版本的 Amazon VPC CNI 插件并设置 `1.11.0`=`standard`。否则，流向和来自具有关联安全组的容器组（pod）的流量不受 Calico 网络策略执行的限制，并且仅受限于 Amazon EC2 安全组执行。要更新 Amazon VPC CNI 版本，请参阅 [使用 Amazon VPC CNI 将 IP 分配给容器组（pod）](managing-vpc-cni.md) 
+ 在使用集群中的安全组的 Amazon EC2 节点上运行且使用 [NodeLocal DNSCache](https://kubernetes.io/docs/tasks/administer-cluster/nodelocaldns/) 的容器组（pod）仅支持版本 `1.11.0` 或更高版本的 Amazon VPC CNI 插件和 `POD_SECURITY_GROUP_ENFORCING_MODE`=`standard`。要更新 Amazon VPC CNI 插件版本，请参阅 [使用 Amazon VPC CNI 将 IP 分配给容器组（pod）](managing-vpc-cni.md) 
+ 对于具有高流失率的容器组（pod）而言，容器组（pod）的安全组可能会导致更高的容器组（pod）启动延迟。这是由于资源控制器中的速率限制造成的。
+ EC2 安全组范围处于容器组（pod）级别。有关更多信息，请参阅[安全组](https://docs.amazonaws.cn/vpc/latest/userguide/VPC_SecurityGroups.html)。

  如果您设置了 `POD_SECURITY_GROUP_ENFORCING_MODE=standard` 和 `AWS_VPC_K8S_CNI_EXTERNALSNAT=false`，则发往 VPC 外部端点的流量使用节点的安全组，而不是容器组（pod）的安全组。