什么是NetworkPolicy
IP 地址或端口层面(OSI 第 3 层或第 4 层)控制网络流量, 则你可以考虑为集群中特定应用使用 Kubernetes 网络策略(NetworkPolicy)。 NetworkPolicy 是一种以应用为中心的结构,允许你设置如何允许 Pod 与网络上的各类网络“实体” (我们这里使用实体以避免过度使用诸如“端点”和“服务”这类常用术语, 这些术语在 Kubernetes 中有特定含义)通信。 NetworkPolicy 适用于一端或两端与 Pod 的连接,与其他连接无关。
为什么需要NetworkPolicy
把POD看成是一台单独的主机,网络是多个主机间需要进行通信的纽带。POD和其它网络节点需要进行通信,K8S需要对POD的入口和出口流量进行监控控制,进行黑白名单控制,主要是白名单。
如何使用NetworkPolicy
简单案例
- 设置一个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: {}
-
验证结果
- 没有设置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/