详解kubernetes的网络访问控制

在 kubernetes集群内部,同一个namespace下的各pod之间的通讯都是“裸奔”的。

如果真的有人“非法”入侵到一个pod内,将会对其他关连的pod产生不利影响。

场景:一个简单的项目,有前端,后端,数据库,前后端在一个namespace中,数据库属于另一个namespace,前端去访问数据库时,默认情况下是直通访问,没有任何限制的,现增加一个网络访问控制。

1、网络策略,实现允许一些网段可以访问命名空间为miu360-dev下的 POD资源redis数据库:

networkpolicy.yml:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: test-network-policy
  namespace: miu360-dev
spec:
  podSelector:   #将要访问到的pod资源
    matchLabels:
      role: db
  policyTypes: #策略类型,包括流量入口,流量出口
  - Ingress
  - Egress
  ingress: #入口
  - from: #允许哪些ip可访问。
    - ipBlock:
        cidr: 172.17.0.0/16 #阻止哪些ip段可访问(黑名单)
        except:
        - 172.17.1.0/24  #允许哪些ip段可访问(白名单)
    - namespaceSelector:  #从哪个命名空间可以访问
        matchLabels:
          project: myproject
    - podSelector: #从哪个pod过来的可以访问,与上面的 namespace是或的关系
        matchLabels:
          role: frontend
    ports:
    - protocol: TCP
      port: 6379  #将要访问的目的端口
  egress: #出流量规则
  - to: #访问目标规则
    - ipBlock: #阻止访问规则
        cidr: 10.0.0.0/24 
    ports: #访问 
    - protocol: TCP
      port: 5978

2、一些常见的默认规则:

Default deny all ingress traffic

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

Default allow all ingress traffic

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

Default deny all egress traffic

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

Default allow all egress traffic

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

Default deny all ingress and all egress traffic

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

你可能感兴趣的:(详解kubernetes的网络访问控制)