配置 Kubernetes NetworkPolicy 限制 Pod 间网络访问,首先需要确保集群网络插件支持 NetworkPolicy 功能。接着编写 YAML 文件,指定 apiVersion 为 networking.k8s.io/v1,kind 为 NetworkPolicy。在 spec 中通过 podSelector 选择目标 Pod,定义 policyTypes 为 Ingress 或 Egress。通过 ingress 或 egress 规则设置允许的来源(如 podSelector、namespaceSelector 或 ipBlock)及端口协议。最后使用 kubectl apply 应用策略,实现白名单模式的流量控制,默认未匹配流量将被拒绝。
Kubernetes 之 Network Policy
如何使用 kubernetes network policy 限制 pod 之间的通信?概述 kubernetes 要求集群中所有 pod,无论是节点内还是跨节点,都可以直接通信,或者说所有 pod 工作在同一跨节点网络,此网络一般是二层虚拟网络,称为 pod 网络。在安装引导 kubernetes 时,由选择并安装的 network plugin 实现。默认情况下,集群中所有 pod 之间,pod 与节点之间可以互通。网络主要解决两个问题,一个是连通性,实体之间能够通过网络互通。另一个是隔离性,出于安全,限制网络流量的目的,又要控制实体之间的连通性.network policy 用来实现隔离性,只有匹配规则的流量才能进入 pod,同理只有匹配规则的流量才可以离开 pod. 但请注意,kubernetes 支持的用以实现 pod 网络的 network plugin 有很多种,并不是全部都支持 network policy,为 kubernetes 选择 network plugin 时需要考虑到这点,是否需要隔离?可用 network plugin 及是否支持 network policy 请参考这里。基本原理 network policy 是 kubernetes 中的一种资源类型,它从属于某个 namespace.其内容从逻辑上看包含两个关键部分,一是 pod 选择器,基于标签选择相同 namespace 下的 pod,将其中定义的规则作用于选中的 pod.另一个就是规则了,就是网络流量进出 pod 的规则,其采用的是白名单模式,符合规则的通过,不符合规则的拒绝.
服务间网络流量的访问控制和传输过程中的流量加密 - 容器服务 Kubernetes 版 ACK(ACK)-阿里云帮助中心
网络安全防护涉及访问控制和流量加密。通过定义网络策略,您可以限制服务之间的网络访问,只允许特定的流量通过。网络策略涉及很多方面,例如默认允许或拒绝规则、命名空间隔离、安全组设置等。通过加密传输的流量,可以确保敏感数据在传输过程中不被篡改或窃取。通过综合使用以上技术和措施,您可以增强服务之间的安全性和保护敏感数据的传输。网络策略 在 Kubernetes 集群中,默认情况下允许所有 Pod 间的通信。在生产环境中这样的默认配置是不安全的。Kubernetes 网络策略 (Network Policy) 为您提供了一种机制来限制 Pod 间的网络流量 (通常称为东/西向流量) 以及 Pod 和外部服务之间的网络流量。Network Policy 使用 Pod Selectors 和 Labels 标签标识源和目的 Pod,同时在策略中支持指定的 IP 地址、端口号和协议类型及组合。使用 Terway 容器网络时,如果您希望在 IP 地址或者端口层面控制网络流量,您可以为集群中特定应用配置网络策略。
配置网络策略 (NetworkPolicy) 限制 Pod 访问的对象
网络策略 (NetworkPolicy) 是 Kubernetes 设计用来限制 Pod 访问的对象,相当于从应用的层面构建了一道防火墙,进一步保证了网络安全。NetworkPolicy 支持的能力取决于集群的网络插件的能力。默认情况下,如果命名空间中不存在任何策略,则所有进出该命名空间中的 Pod 的流量都被允许。NetworkPolicy 的 Ingress/Egress 对端选择方式有如下 3 种:namespaceSelector:根据命名空间的标签选择,具有该标签的命名空间都可以访问或被访问。podSelector:根据 Pod 的标签选择,具有该标签的 Pod 都可以访问或被访问。ipBlock:根据地址段选择,网段内的 IP 地址都可以访问或被访问。
网络策略
如果你希望在 IP 地址或端口层面 (OSI 第 3 层或第 4 层) 控制网络流量,NetworkPolicy 可以让你为集群内以及 Pod 与外界之间的网络流量指定规则。你的集群必须使用支持 NetworkPolicy 实施的网络插件。如果你希望针对 TCP、UDP 和 SCTP 协议在 IP 地址或端口层面控制网络流量,则你可以考虑为集群中特定应用使用 Kubernetes 网络策略 (NetworkPolicy)。NetworkPolicy 是一种以应用为中心的结构,允许你设置如何允许 Pod 与网络上的各类网络“实体”(我们这里使用实体以避免过度使用诸如“端点”和“服务”这类常用术语,这些术语在 Kubernetes 中有特定含义) 通信。NetworkPolicy 适用于一端或两端与 Pod 的连接,与其他连接无关。Pod 可以与之通信的实体是通过如下三个标识符的组合来辩识的:其他被允许的 Pod(例外:Pod 无法阻塞对自身的访问) 被允许的名字空间 IP 组块 (例外:与 Pod 运行所在的节点的通信总是被允许的,无论 Pod 或节点的 IP 地址) 在定义基于 Pod 或名字空间的 NetworkPolicy 时,你会使用选择算符来设定哪些流量可以进入或离开与该算符匹配的 Pod。
FAQ
默认情况下 Kubernetes Pod 间通信策略是什么?
默认情况下,如果命名空间中不存在任何策略,则所有进出该命名空间中的 Pod 的流量都被允许,所有 Pod 之间可以直接通信。
NetworkPolicy 生效的前提条件是什么?
集群必须使用支持 NetworkPolicy 实施的网络插件,否则创建 NetworkPolicy 资源对象没有控制器使其生效,是没有任何作用的。
如何创建默认拒绝所有流量的策略?
创建一个 podSelector 为空且 policyTypes 包含 Ingress 和 Egress 但不定义具体规则的 NetworkPolicy,即可限制来自命名空间的所有入站和出站流量。