推荐答案
// www.javascriptcn.com code example
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: example-network-policy
namespace: default
spec:
podSelector:
matchLabels:
role: db
policyTypes:
- Ingress
- Egress
ingress:
- from:
- podSelector:
matchLabels:
role: frontend
ports:
- protocol: TCP
port: 6379
egress:
- to:
- ipBlock:
cidr: 10.0.0.0/24
ports:
- protocol: TCP
port: 5978本题详细解读
1. 什么是 Network Policy?
Network Policy 是 Kubernetes 中用于定义 Pod 之间网络通信规则的一种资源。它允许你控制哪些 Pod 可以与其他 Pod 通信,以及允许哪些端口和协议进行通信。
2. Network Policy 的核心字段
podSelector: 用于选择应用该 Network Policy 的 Pod。通过matchLabels字段指定标签选择器。policyTypes: 定义策略类型,可以是Ingress(入站流量)、Egress(出站流量)或两者都有。ingress: 定义允许的入站流量规则。可以指定来源 Pod 的标签选择器(podSelector)或 IP 块(ipBlock),以及允许的端口和协议。egress: 定义允许的出站流量规则。可以指定目标 IP 块(ipBlock)或 Pod 的标签选择器(podSelector),以及允许的端口和协议。
3. 示例解析
podSelector: 选择标签为role: db的 Pod。policyTypes: 同时应用Ingress和Egress策略。ingress: 允许来自标签为role: frontend的 Pod 的流量,且仅允许 TCP 协议的 6379 端口。egress: 允许流向10.0.0.0/24IP 段的流量,且仅允许 TCP 协议的 5978 端口。
4. 注意事项
- Network Policy 需要网络插件支持,如 Calico、Cilium 等。
- 如果没有 Network Policy,默认情况下所有 Pod 之间可以自由通信。
- 创建 Network Policy 后,只有符合规则的流量才会被允许,其他流量将被拒绝。