深入解析K8s Network Policy的spec字段:podSelector、policyTypes、ingress与egress的配置与应用
在Kubernetes(K8s)中,Network Policy 是用于定义Pod之间网络通信规则的重要工具。它通过spec字段中的多个子字段来精确控制流量的进出,确保集群内的网络安全性。本文将详细解析spec字段中的podSelector、policyTypes、ingress和egress的用法,并通过配置示例帮助初学者和管理员更好地理解和应用Network Policy。
1. podSelector:选择目标Pod
podSelector是Network Policy的核心字段之一,用于指定该策略作用于哪些Pod。它通过标签选择器(Label Selector)来筛选目标Pod。例如:
podSelector:
matchLabels:
app: web
上述配置表示该Network Policy将作用于所有标签为app=web的Pod。如果没有指定podSelector,则默认作用于当前命名空间下的所有Pod。
2. policyTypes:定义策略类型
policyTypes字段用于指定Network Policy的类型,包括Ingress(入站流量)和Egress(出站流量)。默认情况下,如果未显式定义policyTypes,K8s会根据ingress和egress字段的存在自动推断。例如:
policyTypes:
- Ingress
- Egress
此配置表示该策略同时控制入站和出站流量。
3. ingress:控制入站流量
ingress字段用于定义允许哪些流量进入目标Pod。它通常包含from和ports两个子字段:
from:指定允许流量的来源,可以是Pod、命名空间或IP地址块。ports:指定允许的端口号。
示例配置如下:
ingress:
- from:
- podSelector:
matchLabels:
app: database
ports:
- protocol: TCP
port: 3306
此配置表示只允许标签为app=database的Pod通过TCP协议的3306端口访问目标Pod。
4. egress:控制出站流量
egress字段用于定义目标Pod可以访问哪些外部资源。它与ingress字段类似,包含to和ports两个子字段:
to:指定允许访问的目标,可以是Pod、命名空间或IP地址块。ports:指定允许的端口号。
示例配置如下:
egress:
- to:
- ipBlock:
cidr: 10.0.0.0/24
ports:
- protocol: TCP
port: 80
此配置表示目标Pod可以访问IP地址范围为10.0.0.0/24的网络,并且只能通过TCP协议的80端口进行通信。
字段之间的关系与优先级
podSelector优先:podSelector决定了策略的作用范围,其他字段(如ingress和egress)都是基于此范围进行配置。policyTypes决定策略类型:policyTypes字段明确了策略是控制入站、出站还是两者兼具。ingress与egress细化规则:这两个字段进一步细化流量控制规则,确保只有符合条件的数据包可以通过。
总结
通过合理配置spec字段中的podSelector、policyTypes、ingress和egress,您可以实现精确的网络流量控制,提升Kubernetes集群的安全性。希望本文的解析和示例能帮助您更好地理解和应用Network Policy。