1. 网络策略(NetworkPolicy) 简介
1.1 网络策略
网络策略(NetworkPolicy)是一种关于 Pod 间及与其他网络端点间所允许的通信规则的规范。
NetworkPolicy 资源使用 标签 选择 Pod,并定义选定 Pod 所允许的通信规则。
注意:
网络策略通过网络插件 来实现。
网络策略也就相当于防火墙
要使用网络策略,用户必须使用支持 NetworkPolicy 的网络解决方案。例如 calico
1.2 隔离和非隔离的 Pod
默认情况下,Pod 是非隔离的,它们接受任何来源的流量。
隔离 Pod
Pod 可以通过相关的网络策略进行隔离。
只有满足特定规则的客户端才能访问特定的 Pod
一旦命名空间中有网络策略选择了特定的 Pod, 该 Pod 会拒绝网络策略所不允许的连接。 (命名空间下其他未被网络策略所选择的 Pod 会继续接收所有的流量)
隔离隔离是双向的,有 ingress 和 egress
网络策略不会冲突,它们是累积的。
2. NetworkPolicy 资源
2.1
通过 yaml 文件创建 NetworkPolicy 资源,yaml 文件模板为:
说明:
podSelector
:每个 NetworkPolicy 都包括一个 podSelector
对该策略所应用的一组 Pod 进行选择。
空的 podSelector 选择命名空间下的所有 Pod。
policyTypes
:每个 NetworkPolicy 都包含一个 policyTypes 列表,其中包含 Ingress 或 Egress 或两者兼具。
policyTypes 字段表示给定的策略是否应用于进入所选 Pod 的入口流量或者来自所选 Pod 的出口流量,或两者兼有。
如果 NetworkPolicy 未指定 policyTypes 则默认情况下始终设置 Ingress,如果 NetworkPolicy 有任何出口规则的话则设置 Egress。
ingress
:每个 NetworkPolicy 可包含一个 ingress 规则的白名单列表。
每个规则都允许同时匹配 from 和 ports 部分的流量。也就是同时满足
egress
:每个 NetworkPolicy 可包含一个 egress 规则的白名单列表。
每个规则都允许匹配 to 和 port 部分的流量。也就是同时满足
ingress.from
或egress.to
中,可以指定选择器:podSelector
: 表示选择哪些 Pod 允许作为入口源或出口目的地。namespaceSelector
: 选择特定的命名空间,允许作为入口或出口ipBlock
: 这将选择特定的 IP CIDR 范围以用作入口源或出口目的地。
注意:
条件表示或,即 Pod 有标签,或 namespace 有标签,例如:
条件表示与
如果没有策略,则允许所有数据包通过
2.2 NetworkPolicy 实际例子
为两个 pod 分别创建两个 svc
评论