NetworkPolicy

NetworkPolicy是Kubernetes设计用来限制Pod访问的对象,通过设置NetworkPolicy策略,可以允许Pod被哪些地址访问(即入规则)、或Pod访问哪些a E 9 C地址(即出规则)。这相当于从应用的层面构建了一道防火墙,进一步保证了网络安全

NetworkPolicy支持的能力取决于集的网络插件的能力,如CCE的集只支e @ * N 7 k 7持设置Pod的入规则。

默认情况下,如果命名空间中不存在任何策略,则所有进出该命名空间中的Pod的流量都被允许。

NetworkPolicy的规则可以选择如下3种:

  • namespaceSelector:根据命名空间的标签选择,具有该标签的命名空间都可以访问。
  • podSelector:根Z y L p 0 X 6 u h据Pod的标签选择,具有2 1 G该标签的Pod都可以访问。
  • ipBlock:根据网络选择,网段内的IP地址都可以访问。(C` 0 * ICE当前不支Q J 3 @持此种方式)

    使用podSelX J N Q + a 5ector设置访问范围

    apiVersion: netwoV K s xrking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
    name: test-network-policy
    nameC i  { o I P ispaL F n K $ *ce: default
    spec:
    podSelector, 6 I V:
    matchLE Z , ? M ( k V Qabels:
    role: db
    ingress:                      # 表示入规则
    - from:
    - podSelect0 ; ? d T b sor:              # 只允许具有role=fron; E T v Q I Ptend标签的Pod访问
    matchLabels:
    role: frontend
    ports:                      # 只能使用TCP协议访问6379端口
    - protocol: TCP
    port: 637 s o t a ; (9

示意图如下所示。

图1 podSelector

NetworkPolicy

使用namespaceSelector设置访问范n F E 5 v I

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: test-network@ z 5 8 3 v 3-policy
spec:
podSeley ; R f F q d 7ctor:
matchL( h 7 R 1 ; 4 k ^abels:
role: db
ingress:                      # 表示入规则
- froP F 3 V PmT 4 ; : s !:
- namespaceSelector:        # 只允许具有project=myproject标签的命名空间中的Pod访问
matchL7 + Y / : abels:
project: myproject
ports:                      # 只能使用TCP协议访问6379端口
- pu } w y ^ ! g &rotocol: TCP
port: 63m E } O W N V Z79

示意图如下所示。

图2 namespaceSeY g T g ! P # Y /lector
NetworkPolicy