通过 Kubernetes 网络策略限制 pod 流量
默认情况下,Kubernetes 对集群中任何 Pods 之间或 Pods 与任何其他网络中的资源之间的 IP 地址、端口或连接没有限制。您可以使用 Kubernetes 网络策略来限制进出 Pods 的网络流量。有关更多信息,请参阅 Kubernetes 文档中的网络策略
如果您的集群上有 1.13
版本或更早版本的 Amazon VPC CNI plugin for Kubernetes,则需要实施第三方解决方案来将 Kubernetes 网络策略应用于集群。1.14
版本或更高版本的插件可以实施网络策略,因此您无需使用第三方解决方案。在本主题中,您将了解如何将集群配置为在不使用第三方附加组件的情况下在集群上使用 Kubernetes 网络策略。
Amazon VPC CNI plugin for Kubernetes 中的网络策略在以下配置中受支持。
-
1.25
版本及更高版本的 Amazon EKS 集群。 -
集群上 1.14 版本或更高版本的 Amazon VPC CNI plugin for Kubernetes。
-
为
IPv4
或IPv6
地址配置的集群。 -
您可以将网络策略与容器组(pod)的安全组结合使用。通过网络策略,您可以控制集群内的所有通信。借助 Pods 的安全组,您可以控制从 Pod 中的应用程序对 Amazon 服务的访问。
-
您可以将网络策略与自定义网络和前缀委派结合使用。
注意事项
架构
-
当使用 Amazon VPC CNI plugin for Kubernetes 将 Amazon VPC CNI plugin for Kubernetes 网络策略应用于集群时,您只能将策略应用于 Amazon EC2 Linux 节点。无法将策略应用于 Fargate 或 Windows 节点。
-
网络策略仅适用于其中一个
IPv4
或IPv6
地址,但不适用于两者。在IPv4
集群中,VPC CNI 为容器组(pod)分配IPv4
地址并应用IPv4
策略。在IPv6
集群中,VPC CNI 为容器组(pod)分配IPv6
地址并应用IPv6
策略。系统将忽略应用于IPv6
集群的任何IPv4
网络策略规则。系统将忽略应用于IPv4
集群的任何IPv6
网络策略规则。
网络策略
-
网络策略仅适用于属于 Deployment 构成部分中的 Pods。未设置
metadata.ownerReferences
的独立 Pods 不能对其应用网络策略。 -
您可以对同一 Pod 应用多个网络策略。当配置两个或多个选择相同 Pod 的策略时,所有策略都将应用于 Pod。
-
网络策略中每个
ingress:
或egress:
选择器中每个协议的唯一端口组合数最多为 24 个。 -
对于任何 Kubernetes 服务,服务端口必须与容器端口相同。如果您使用的是命名端口,也请在服务规范中使用相同的名称。
迁移
-
如果您的集群当前使用第三方解决方案来管理 Kubernetes 网络策略,则可以将这些策略与 Amazon VPC CNI plugin for Kubernetes 结合使用。但是,您必须删除现有的解决方案,使其不再管理相同的策略。
安装
-
网络策略功能创建并需要一个名为
policyendpoints.networking.k8s.aws
的PolicyEndpoint
自定义资源定义(CRD)。自定义资源的PolicyEndpoint
对象由 Amazon EKS 管理。您不应该修改或删除这些资源。 -
如果您运行的容器组(pod)使用实例角色 IAM 凭证或连接到 EC2 IMDS,请注意检查是否存在会阻止访问 EC2 IMDS 的网络策略。您可能需要添加网络策略以允许访问 EC2 IMDS。有关更多信息,请参阅 Amazon EC2 用户指南中的实例元数据和用户数据。
对服务账户使用 IAM 角色或使用 EKS 容器组身份的容器组(pod)无法访问 EC2 IMDS。
-
Amazon VPC CNI plugin for Kubernetes 不会将网络策略应用于每个容器组(pod)的其他网络接口,而只应用于每个容器组(pod)的主接口 (
eth0
)。这会影响以下架构:-
ENABLE_V4_EGRESS
变量设置为true
的IPv6
容器组。此变量使IPv4
出口功能能够将 IPv6 容器组连接到IPv4
端点,例如集群外部的端点。IPv4
出口功能的工作原理是使用本地环回 IPv4 地址创建一个额外的网络接口。 -
使用诸如 Multus 之类的链式网络插件时。由于这些插件为每个容器组(pod)添加了网络接口,因此网络策略不适用于链式网络插件。
-