zoukankan      html  css  js  c++  java
  • 041.Kubernetes集群网络-K8S网络策略

    一 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网络插件实现)。
    clipboard

    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
  • 相关阅读:
    整型变量修饰符,char类型数据存储原理,字节数,
    进制
    C语言的数据、常量和变量
    递归函数
    函数,#include <>和#include " "区别
    分支语句
    hdu_1015(dfs)
    基本数论
    基础几何
    hdu_1018(斯大林公式/n!的位数)
  • 原文地址:https://www.cnblogs.com/itzgr/p/12564963.html
Copyright © 2011-2022 走看看