K8s networkPolicy

2021-04-14  本文已影响0人  jaymz明

最近k8s的版本又升级了,已经到v21. 更新的速度很快,学习也要加快速度。
本篇来整理下networkPolicy相关的知识,加深下印象。有时候用着用着,就打架了。

metadata 描述信息
podSelector pod选择器,选定的pod所有的出入站流量要遵循本networkpolicy的约束
policyTypes 策略类型。包括了Ingress和Egress,默认情况下一个policyTypes的值一定会包含Ingress,当有egress规则时,policyTypes的值中会包含Egress
ingress 入站
egress 出站

来个例子:

kind: NetworkPolicy
metadata:
  name: test-network-policy
  namespace: default // 该网络policy作用于default的namespace
spec:
  podSelector:
    matchLabels:
      role: db  // 应用在pod的label里含有role=db进行隔离处理
  policyTypes:
  - Ingress
  - Egress
  ingress:
  - from:
    - ipBlock:
        cidr: 172.17.0.0/16
        except:
        - 172.17.1.0/24
    - namespaceSelector:
        matchLabels:
          project: myproject
    - podSelector:
        matchLabels:
          role: frontend
    ports:
    - protocol: TCP
      port: 6379
  egress:
  - to:
    - ipBlock:
        cidr: 10.0.0.0/24
    ports:
    - protocol: TCP
      port: 5978

ingress--from: 显而易见,就是外部pod能够访问到隔离的pod。
egress--to: 隔离pod能够出去的路径。
我们来仔细看下ingress下面的配置:

  1. 标明了ip段: pod 来于172.17.0.0/16,但是排除172.17.1.0/24。
  2. 从namespace来的,改namespace有标签:project=myproject。
  3. 符合的pod:pod的label含有role=frontend。

上述符合要求的pod可以访问role=db的pod的6379端口。

egress规则:是出去的流量。
从role=db的pod可以访问10.0.0.0/24网段的目的端口5978 。

再写个例子:
我们想对namespace为team-red下的pod(app=nginx)进行入站限制。只允许pod的label为app=security的能访问。

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: test-network-policy
  namespace: team-red
spec:
  podSelector:
    matchLabels:
      app: nginx 
  policyTypes:
  - Ingress
  ingress:
   -from:
     - podSelector:
        matchLabels:
          app: security

另外一些默认的规则:
1.同namespace的pod,入站规则为全部禁止

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny
spec:
  podSelector: {}
  policyTypes:
  - Ingress

2.同namespace的pod,入站规则为全部开放:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-all
spec:
  podSelector: {}
  ingress:
  - {} 

3.同namespace的pod,出站规则为全部禁止

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny
spec:
  podSelector: {}
  policyTypes:
  - Egress

4.同namespace的pod,出站规则为全部开放

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-all
spec:
  podSelector: {}
  egress:
  - {}
  policyTypes:
  - Egress
上一篇 下一篇

猜你喜欢

热点阅读