zoukankan      html  css  js  c++  java
  • 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/

  • 相关阅读:
    Window 窗口类
    使用 Bolt 实现 GridView 表格控件
    lua的table库
    Windows编程总结之 DLL
    lua 打印 table 拷贝table
    使用 xlue 实现简单 listbox 控件
    使用 xlue 实现 tips
    extern “C”
    COleVariant如何转换为int double string cstring
    原来WIN32 API也有GetOpenFileName函数
  • 原文地址:https://www.cnblogs.com/wzs5800/p/14011174.html
Copyright © 2011-2022 走看看