网络策略_NetworkPolicy

网络策略 NetworkPolicy

前端通过访问后端的API接口来获取数据库中的数据

前端、API接口、数据库在k8s中都为pod

k8s要求所有pod可以互相访问,但生产中,不能让前端直接访问后端数据库

目标是保护数据库,使其不允许从除了API以外的任何pod访问

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: db-policy
spec:
  podSelector:         # 该规则会在有如下标签的pod上生效
    matchLabels:
      role: db
  policyTypes:         # 对入口流量设置策略(出口为Egress)
    - Ingress
  ingress:
    - from:
      - podSelector:     # 有如下标签的pod可以访问
          matchLabels:
            name: api-pod
      ports:            # 定义
        - protocol: TCP
          port: 3306

网络策略是k8s本身的网络解决方案
flannel 不支持上述的网路策略

  • 不指定 metadata.namespace 时,表示默认namespace
  • 单独指定 spec.images.from.podSelector,作用范围是所有namespace中有相应标签的pod
  • 单独指定 spec.images.from.namespaceSelector ,作用范围是该namespace下的所有pod
  • imgress.form下的字段,以- 开头表示一条独立的规则。多个规则是OR的关系
  • 如果imgess.from.namesapceSelector前加 "-" ,则变成一条独立规则
  • podSelector前有"-",namespaceSelector前无"-" ,表示两条小规则要同时满足
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: db-policy
  namespace: prod      # 指定networkpolicy作用的命名空间
spec:
  podSelector:         # 该规则会在有如下标签的pod上生效
    matchLabels:
      role: db
  policyTypes:         # 对入口流量设置策略(出口为Egress)
    - Ingress
    - Egress
  ingress:
    - from:
      - podSelector:     # 有如下标签的pod可以访问
          matchLabels:
            name: api-pod
        namespaceSelector:
          matchLabels:
            name: staging
      - ipBlock:
          cidr: 192.168.5.10/32
      ports:
      - protocol: TCP
        port: 3306
  engress:
    - to:
      - ipBlock:
          cidr: 192.168.5.10/32
      ports:
        protocol: TCP
        port: 80
posted @ 2024-05-10 10:30  立勋  阅读(94)  评论(0)    收藏  举报