• k8s-NetworkPolicy-网络策略


    网络策略 NetworkPolicy

    网络策略(NetworkPolicy)是允许pod组彼此之间以及和其他网络Endpoint端点通信的规则。
    NetworkPolicy资源使用标签来选择Pods并定义规则,这些规则指定允许所选Pods的流量请求。

    网络策略是在IP 地址或端口层面(OSI 第 3 层或第 4 层)控制网络流量。

    应用场景

    适用于有网络隔离、流量限制的需要场景比如项目组隔离和应用隔离,一般可以在每个项目组的namespace下设置默认的网络策略来制流量请求。

    前提条件

    网络策略由网络插件实现,因此你必须使用支持NetworkPolicy的网络解决方案。例如Calico、Cilium、Kube-router、Romana、WeaveNet等等。
    创建一个 NetworkPolicy 资源对象而没有控制器来使它生效的话,是没有任何作用的。

    隔离和非隔离的 Pod

    默认情况下,Pod 是非隔离的,它们接受任何来源的流量。

    当Pod 被某 NetworkPolicy 选中时进入被隔离状态,并且被选中的Pod将受限于这些策略的 入站(Ingress)/出站(Egress)规则。
    PS: 网络策略不会冲突,如果一个pod被多个NetworkPolicy选中,会遵守这些流量策略规则的并集。

    构成要素

    NetworkPolicy基本构成要素:

    • 匹配哪些 Pod
    • 入口流量的规则,表示谁允许访问这些 Pod
    • 出口流量的规则,表示这些 Pod 允许访问谁

    基本规则

    • 如果 Pod 没有被 NetworkPolicy 匹配到,那么它的流量是被允许的。
    • 如果 Pod 被 NetworkPolicy 匹配到,但是没有出口(egress)/入口(ingress)规则声明,那么它的出口/入口流量是被禁止的。

    例如,拥有标签app: test的pod虽然被匹配到,但NetworkPolicy有声明Ingress策略但没有具体ingress规则,所以这些pod的入口流量是被禁止的。

    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: default-deny-ingress
    spec:
      podSelector: 
        matchLabels:
          app: test
      policyTypes:
      - Ingress
    

    如果想要允许入站流量,则应该声明具体ingress规则,例如允许拥有app: test标签pod的全部入站流量:

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

    注意事项

    • 没声明ingrss或egress的默认是空数组,表示拒绝所有。

    • 只能指定规则来允许流量通行,而不能直接禁止流量通行。即通过白名单的方式控制pod的进出口流量,没有黑名单。

    • MatchLabels内部是and关系。

        ingress:
        - from:
          - podSelector:
              matchLabels:
                app: client1
                app: client2
      

      上述例子中只有同时拥有app: client1app: client2的pod才能被选中。

    • NetworkPolicy 默认的作用域是 Pod 所在的 Namespace.

    • 通过namespaceSelector可允许其他命名空间下的流量。

      例如,允许所有命名空间拥有标签为group: kube-public的pod的流量进来:

        ingress:
        - from:
          - namespaceSelector:
              matchLabels:
                group: kube-public
      

    参考

    https://kubernetes.io/zh/docs/concepts/services-networking/network-policies/

  • 相关阅读:
    数据表的水平拆分
    高性能网站架构
    文本框内容改变触发事件
    树莓派3B(1)- Raspberry Pi 3B 安装系统并联网
    一年经验Java程序员面经小记
    Windows系统安装总结
    树莓派3B(2)- 配置多个wifi,自动寻找可用网络
    Centos7 Apache实现Http访问SVN资源库
    Centos7搭建svn服务
    读《重构 改善既有代码的设计》有感
  • 原文地址:https://www.cnblogs.com/wzs5800/p/14011174.html
Copyright © 2020-2023  润新知