K
K
Kumu's wiki
搜索文档…
网络策略
如果你在 IP 地址或者端口级别(OSI 3 层或者 4 层)控制流量,那么你可以考虑对集群中的特定应用程序使用 Kubernetes 网络策略。
网络策略通过 network plugin 实现,使用网络策略必须选用支持 NetworkPolicy 的网络解决方案,比如 Calico 方案是支持网络策略的。创建 NetworkPolicy 资源,但是没有相关的控制器实现,策略本身是不生效的。可以类比 Ingress 如果没有 ingress-controller,本身的规则也是无意义的。
默认,pods 之间所有的流量都放行的。网络策略不存在冲突,如果一个或者多个策略选择一个 Pod,那么该 Pod 受限于这些策略的 ingress/egress 规则允许的并集。评估顺序本身并不影响策略结果。

NetworkPolicy 资源

1
apiVersion: networking.k8s.io/v1
2
kind: NetworkPolicy
3
metadata:
4
name: test-network-policy
5
namespace: default
6
spec:
7
podSelector:
8
matchLabels:
9
role: db
10
policyTypes:
11
- Ingress
12
- Egress
13
ingress:
14
- from:
15
- ipBlock:
16
cidr: 172.17.0.0/16
17
except:
18
- 172.17.1.0/24
19
- namespaceSelector:
20
matchLabels:
21
project: myproject
22
- podSelector:
23
matchLabels:
24
role: frontend
25
ports:
26
- protocol: TCP
27
port: 6379
28
egress:
29
- to:
30
- ipBlock:
31
cidr: 10.0.0.0/24
32
ports:
33
- protocol: TCP
34
port: 5978
Copied!
    podSelector:每个 NetworkPolicy 包括一个 podSelector 用于选择策略所应用的 pods 分组。示例中策略选择器拥有 role: db 标签的 pods。空的 podSelector 匹配空间下的所有 pods。
    policyTypes:每个 NetworkPolicy 包括一个 policyTypes 列表,包括 IngressEgress 或两者都有。policyTypes 表示是否应用 ingress(入口) 流量到选定 pod 或者从选择的 pods 应用 egress(出口) 流量规则。 如果 NetworkPolicy 上未指定任何 policyTypes,则默认情况下始终设置 Ingress,如果 NetworkPolicy 具有任何出口规则,则设置 Egress
    ingress:每个 NetworkPolicy 可以包括允许的 ingress 规则列表。每个规则允许匹配 fromports 部分的流量。示例中包含一个规则,表示任何匹配源中都可以访问匹配的 Pod 的 6379 TCP 端口。
    egress:每个 NetworkPolicy 可以包括允许的 egress 规则列表。每个规则允许匹配到 toports 部分的流量。示例中包含一个规则,表示匹配的 Pod 可以访问任何在网段 10.0.0.0/24 中的 5978 TCP 端口。
示例规则综合起来表示,隔离 default 空间下标签为 "role=db" 的 pods 的 ingress 和 egress 流量。对于 ingress 流量,针对 default 空间下所有含有 "role=db" 的 pods 的 6379 端口访问,规则允许 "default" 空间下任何标签为 "role=frontend" 的 pod 访问,允许含有 "project=myproject" 标签的空间下的任何 pod 访问,还允许 172.17.0.0/16 网段中除了 172.17.1.0/24 段的 IP 访问。出口流量则允许 default 空间下含有 "role=db" 的 pod 访问网段为 10.0.0.0/24 并且端口为 5978 的服务。

tofrom 选择器

支持以下四种方式过滤选择:
    podSelector:在 NetworkPolicy 同一空间下选择 Pods,作为 ingress 源或者 egress 目的地
    namespaceSelector:选择特定空间下的所有 Pods,作为 ingress 源或者 egress 目的地
    to 或者 from 下的 namespaceSelectorpodSelector: to/from 下的条目,同时指定 namespaceSelectorpodSelector 来指定特定的 pods
    ipBlock:选择特定的 IP CIDR 范围来允许 ingress 源或者 egress 目的地。这些应该用于集群外的 IP,因为 Pod IP 并不是固定的
更多的示例可以参考 Kubernetes Network Policy Recipes
最近更新 11mo ago