网络策略

网络策略(Network Policy)是一个特定的配置, 用于限制一组pod如何和另外一个pod或网络endpoint进行通信。 网络策略使用标签(label)来选择pods,并定义规则, 指定那些流量可以达到哪些pods。 前提: 要是网络策略生效, 必须要安装支持网络策略的网络插件,否则网络策略不会生效

默认情况下, 所有的pod都是非隔离,意味着它会放行所有来源的流量。 但是对于应用了网络策略的pod。它就变成隔离的, 它会拒绝所有没有被网络策略放行的连接。

示例:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: test-network-policy
  namespace: default
spec:
  podSelector:
    matchLabels:
      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

下面对这个网络策略进行说明: 强制必须有的字段: apiVersion,kind, metadata spec: 包含定义网络策略的所有相关信息 podSelector: 选择目的pods, 如果为空, 则选择所有的pods policyTypes: 可选值为Ingress, Egress或二者, 如果为空, 则Ingress会被设定, 当有egress规则时, Egress类型也会被设定 ingress:入向规则的白名单规则列表, 每条规则放行匹配到from和ports的流量。流量的源要么要么来自namespaceSelector或者来自podSelector的pod, 都会被匹配到。 egress: 出向规则的白名单规则列表。 每条规则放行匹配到to和ports的流量 ipBlock: ip块定义CIDR, except则把某段ip, 从大的ip 网段里排除掉 上述示例中的规则整体的意思是:

  1. 隔离pod标签为“role=db”, 命名空间为default的pods的入向和出向流量
  2. 允许pod标签为“role=frontend”, 命名空间为default的pods访问pod标签为“role=db”, 命名空间为default的pods的6379的TCP端口
  3. 允许namespace标签为“project=myproject”的pods访问pod标签为“role=db”, 命名空间为default的pods的6379的TCP端口
  4. 允许pod标签为“role=db”, 命名空间为default的pods访问10.0.0.0/24网段的TCP端口5978

当命名空间里没有任何的网络策略时, 默认情况下,所有pods的出流量和入流量都会被放行。

你可以可以定义一些规则来修改默认行为,比如:

  • 默认拒绝所有的入流量
  • 默认允许所有的入流量
  • 默认拒绝所有的出流量
  • 默认允许所有的出流量
  • 默认拒绝所有的出流量和入流量

参考 官方文档之Network Policies

Copyright © suredandan 2018 all right reserved,powered by GitbookUpdateTime: 2020-04-09 16:42:03

results matching ""

    No results matching ""