K8S系列之NetworkPolicy

什么是NetworkPolicy

K8S系列之NetworkPolicy_第1张图片

IP 地址或端口层面(OSI 第 3 层或第 4 层)控制网络流量, 则你可以考虑为集群中特定应用使用 Kubernetes 网络策略(NetworkPolicy)。 NetworkPolicy 是一种以应用为中心的结构,允许你设置如何允许 Pod 与网络上的各类网络“实体” (我们这里使用实体以避免过度使用诸如“端点”和“服务”这类常用术语, 这些术语在 Kubernetes 中有特定含义)通信。 NetworkPolicy 适用于一端或两端与 Pod 的连接,与其他连接无关。

为什么需要NetworkPolicy

把POD看成是一台单独的主机,网络是多个主机间需要进行通信的纽带。POD和其它网络节点需要进行通信,K8S需要对POD的入口和出口流量进行监控控制,进行黑白名单控制,主要是白名单。

如何使用NetworkPolicy

简单案例

  1. 设置一个pod的出口流量网段:10.0.0.0/24
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  creationTimestamp: '2023-05-11T06:59:28Z'
  generation: 1
  managedFields:
    - apiVersion: networking.k8s.io/v1
      fieldsType: FieldsV1
      fieldsV1:
        'f:spec':
          'f:egress': {}
          'f:podSelector': {}
          'f:policyTypes': {}
      manager: ACK-Console Apache-HttpClient
      operation: Update
      time: '2023-05-11T06:59:28Z'
  name: test-policy
  namespace: default
  resourceVersion: '4153321'
  uid: 6a7ab796-64c2-4200-88dc-bdcfae3646a4
spec:
  egress:
    - to:
        - ipBlock:
            cidr: 10.0.0.0/24
  podSelector:
    matchLabels:
      app: test-consumer
  policyTypes:
    - Ingress
    - Egress
status: {}

  1. 验证结果
    K8S系列之NetworkPolicy_第2张图片
  • 没有设置NetworkPolicy的时候,是可以ping 通的。
  • 添加NetworkPolicy后,就出现错误,这个错误访问DNS服务的错误,因为限制了POD的出口的网络策略。

NetworkPolicy的2种policyTypes

  • egress:出口流量隔离
  • ingress:入口流量隔离

ingress

每个 NetworkPolicy 可包含一个 ingress 规则的白名单列表。 每个规则都允许同时匹配 from 和 ports 部分的流量。示例策略中包含一条简单的规则: 它匹配某个特定端口,来自三个来源中的一个,第一个通过 ipBlock 指定,第二个通过 namespaceSelector 指定,第三个通过 podSelector 指定。

egress

每个 NetworkPolicy 可包含一个 egress 规则的白名单列表。 每个规则都允许匹配 to 和 port 部分的流量。该示例策略包含一条规则, 该规则将指定端口上的流量匹配到 10.0.0.0/24 中的任何目的地。

总结

NetworkPolicy是作用于POD的网络策略,可作用于一组POD,也可以对整个namespace中的POD生效,创建策略需要谨慎。

官方文档:https://kubernetes.io/zh-cn/docs/concepts/services-networking/network-policies/

你可能感兴趣的:(kubernetes,docker,容器)