欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

041.集群网络-K8S网络策略

程序员文章站 2022-03-05 17:15:54
一Kubernetes网络策略 1.1策略说明 为实现细粒度的容器间网络访问隔离策略,Kubernetes发布Network Policy,目前已升级为networking.k8s.io/v1稳定版本。 Network Policy的主要功能是对Pod间的网络通信进行限制和准入控制,设置方式为将 ......

一 kubernetes网络策略

1.1 策略说明

为实现细粒度的容器间网络访问隔离策略,kubernetes发布network policy,目前已升级为networking.k8s.io/v1稳定版本。
network policy的主要功能是对pod间的网络通信进行限制和准入控制,设置方式为将pod的label作为查询条件,设置允许访问或禁止访问的客户端pod列表。目前查询条件可以作用于pod和namespace级别。
为了使用network policy,kubernetes引入了一个新的资源对象network policy,供用户设置pod间网络访问的策略。但仅定义一个网络策略是无法完成实际的网络隔离的,还需要一个策略控制器(policy controller)进行策略的实现。
策略控制器由第三方网络组件提供,目前calico、cilium、kube-router、romana、weavenet等开源项目均支持网络策略的实现。network policy的工作原理如下所示,policy controller需要实现一个api listener,监听用户设置的network policy定义,并将网络访问规则通过各node的agent进行实际设置(agent则需要通过cni网络插件实现)。
041.集群网络-K8S网络策略

1.2 网络策略配置

网络策略的设置主要用于对目标pod的网络访问进行限制,在默认情况下对所有pod都是允许访问的,在设置了指向pod的network policy网络策略之后,访问pod将会被限制。
示例1:
[root@k8smaster01 study]# vi networkpolicy_01.yaml
  1 apiversion:  networking.k8s.io/v1
  2 kind: networkpolicy
  3 metadata:
  4   name: test-network-policy
  5   namespace: default
  6 spec:
  7   podselector:
  8     matchlabels:
  9       role: db
 10   policytypes:
 11   - ingress
 12   - egress
 13   ingress:
 14   - from:
 15     - ipblock:
 16         cidr: 172.17.0.0/16
 17         except:
 18         - 172.17.1.0/24
 19     - namespacesselector:
 20         matchlabels:
 21           project: mopoject
 22     - podselector:
 23         matchlabels:
 24           role: frontend
 25     ports:
 26     - protocol: tcp
 27       port: 6379
 28   egress:
 29   - to:
 30     - ipblock:
 31         cidr: 10.0.0.0/24
 32       ports:
 33       - protocol: tcp
 34         port: 5978
参数解释:
  • podselector:用于定义该网络策略作用的pod范围,本例的选择条件为包含“role=db”标签的pod。
  • policytypes:网络策略的类型,包括ingress和egress两种,用于设置目标pod的入站和出站的网络限制。
  • ingress:定义允许访问目标pod的入站白名单规则,满足from条件的客户端才能访问ports定义的目标pod端口号。
    • -from:对符合条件的客户端pod进行网络放行,规则包括基于客户端pod的label、基于客户端pod所在的namespace的label或者客户端的ip范围。
    • -ports:允许访问的目标pod监听的端口号。
  • egress:定义目标pod允许访问的“出站”白名单规则,目标pod仅允许访问满足to条件的服务端ip范围和ports定义的端口号。
    • -to:允许访问的服务端信息,可以基于服务端pod的label、基于服务端pod所在的namespace的label或者服务端ip范围。
    • -ports:允许访问的服务端的端口号。
如上示例的最终效果如下:
  • 该网络策略作用于namespace“default”中含有“role=db”label的全部pod。
  • 允许与目标pod在同一个namespace中的包含“role=frontend”label的客户端pod访问目标pod。
  • 允许属于包含“project=myproject”label的namespace的客户端pod访问目标pod。
  • 允许从ip地址范围“172.17.0.0/16”的客户端pod访问目标pod,但是不包括ip地址范围“172.17.1.0/24”的客户端。
  • 允许目标pod访问ip地址范围“10.0.0.0/24”并监听5978端口的服务。
注意:关于namespaceselector和podselector的说明:在from或to的配置中,namespaceselector和podselector可以单独设置,也可以组合配置。如果仅配置podselector,则表示与目标pod属于相同的namespace,而组合设置则可以设置pod所属的namespace,例如:
  1  - from:
  2     - namespacesselector:
  3         matchlabels:
  4           project: mopoject
  5     - podselector:
  6         matchlabels:
  7           role: frontend
如上表示允许访问目标pod的来源客户端pod应具有如下属性:属于有“project=myproject”标签的namespace,并且有“role=frontend”标签。

1.3 namespace级别策略

在namespace级别还可以设置一些默认的全局网络策略,以方便管理员对整个namespace进行统一的网络策略设置。
示例1:默认禁止任何客户端访问该namespace中的所有pod。
  1 apiversion: networking.k8s.io/v1
  2 kind: networkpolicy
  3 metadata:
  4   name: default-deny
  5 spec:
  6   podselector: {}
  7   policytypes:
  8   - ingress
示例2:默认允许任何客户端访问该namespace中的所有pod。
  1 apiversion: networking.k8s.io/v1
  2 kind: networkpolicy
  3 metadata:
  4   name: allow-all
  5 spec:
  6   podselector: {}
  7   ingress:
  8   - {}
  9   policytypes:
 10   - ingress
示例3:默认禁止该namespace中的所有pod访问外部服务。
  1 apiversion: networking.k8s.io/v1
  2 kind: networkpolicy
  3 metadata:
  4   name: default-deny
  5 spec:
  6   podselector: {}
  7   policytypes:
  8   - egress
示例4:默认允许该namespace中的所有pod访问外部服务。
  1 apiversion: networking.k8s.io/v1
  2 kind: networkpolicy
  3 metadata:
  4   name: allow-all
  5 spec:
  6   podselector:{}
  7   egress:
  8   - {}
  9   policytypes:
 10   - egress
示例5:默认禁止任何客户端访问该namespace中的所有pod,同时禁止访问外部服务。
  1 apiversion: networking.k8s.io/v1
  2 kind: networkpolicy
  3 metadata:
  4   name: default-deny
  5 spec:
  6   podselector: {}
  7   policytypes:
  8   - ingress
  9   - egress