深入解析K8s Network Policy的spec字段:podSelector、policyTypes、ingress与egress的配置与应用
1. podSelector:选择目标Pod
2. policyTypes:定义策略类型
3. ingress:控制入站流量
4. 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。