Pod间通信控制、网络安全策略的配置与最佳实践
网络策略(Network Policy)是Kubernetes中用于控制Pod间通信的资源。通过网络策略,你可以:
Pod → 网络策略规则 → 流量过滤 → 允许/拒绝通信
作用:指定网络策略应用于哪些Pod。
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-specific-ingress
namespace: default
spec:
podSelector:
matchLabels:
app: web
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
app: frontend
ports:
- protocol: TCP
port: 80
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: control-both-ways
namespace: default
spec:
podSelector:
matchLabels:
app: backend
policyTypes:
- Ingress
- Egress
ingress:
- from:
- podSelector:
matchLabels:
app: frontend
ports:
- protocol: TCP
port: 8080
egress:
- to:
- podSelector:
matchLabels:
app: database
ports:
- protocol: TCP
port: 5432
- to:
- ipBlock:
cidr: 8.8.8.8/32
ports:
- protocol: UDP
port: 53
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: namespace-isolation
namespace: production
spec:
podSelector:
matchLabels:
app: sensitive
policyTypes:
- Ingress
ingress:
- from:
- namespaceSelector:
matchLabels:
purpose: production
ports:
- protocol: TCP
port: 443
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny
namespace: default
spec:
podSelector:
policyTypes:
- Ingress
- Egress
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-dns
namespace: default
spec:
podSelector:
policyTypes:
- Egress
egress:
- to:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: kube-system
ports:
- protocol: UDP
port: 53
- protocol: TCP
port: 53
# 查看网络策略
kubectl get networkpolicies
kubectl get networkpolicies -n <namespace>
# 查看网络策略详情
kubectl describe networkpolicy <policy-name>
# 创建网络策略
kubectl apply -f network-policy.yaml
# 删除网络策略
kubectl delete networkpolicy <policy-name>
# 测试网络策略
# 使用curl测试Pod间通信
kubectl exec -it <source-pod> -- curl <target-pod-ip>:<port>
# 查看Pod的IP地址
kubectl get pods -o wide
可能原因:Kubernetes集群未安装支持网络策略的CNI插件(如Calico、Cilium等)
解决方案:安装支持网络策略的CNI插件
可能原因:网络策略阻止了DNS流量
解决方案:添加允许访问DNS服务的egress规则
可能原因:规则设计不合理
解决方案:使用标签组织Pod,简化网络策略规则
网络策略是Kubernetes中实现网络安全的重要工具,通过合理配置网络策略,可以:
在实际应用中,需要根据应用的架构和安全需求,设计并实现合适的网络策略。网络策略的设计应该遵循最小权限原则,只允许必要的流量,同时确保应用的正常运行。