阅读量:2
Kubernetes网络策略实现指南
一、前置准备
- 安装Kubernetes集群
使用kubeadm初始化Master节点并加入Worker节点(参考kubeadm init和kubeadm join命令),确保集群正常运行。 - 部署支持网络策略的CNI插件
Kubernetes本身不直接实现网络策略,需依赖第三方插件。常用插件包括:- Calico(推荐,功能全面,支持复杂策略):通过
kubectl apply -f https://docs.projectcalico.org/v3.25/manifests/calico.yaml安装; - Cilium(基于eBPF,高性能);
- Weave Net(简单易用,适合中小型集群)。
插件需支持NetworkPolicy资源,否则策略无法生效。
- Calico(推荐,功能全面,支持复杂策略):通过
二、网络策略核心概念
- NetworkPolicy资源对象
通过YAML文件定义,用于声明Pod的流量控制规则,是实现网络隔离的核心。 - 关键字段说明
- podSelector:通过标签选择目标Pod(如
matchLabels: {app: backend}),空选择器表示当前命名空间内所有Pod; - policyTypes:定义策略类型,可选
Ingress(控制入站流量)、Egress(控制出站流量)或两者组合; - ingress:定义入站流量规则,包含
from(流量来源,如Pod标签、命名空间、IP段)和ports(允许的端口/协议); - egress:定义出站流量规则,包含
to(流量目标,如IP段、Pod标签)和ports(允许的端口/协议)。
- podSelector:通过标签选择目标Pod(如
三、常见配置示例
-
默认拒绝所有入站流量(基础隔离)
通过空podSelector匹配当前命名空间内所有Pod,仅允许显式定义的流量通过,防止未授权访问。apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: default-deny-ingress namespace: default spec: podSelector: {} # 匹配所有Pod policyTypes: - Ingress # 仅控制入站流量应用后,所有未明确允许的入站流量将被拒绝。
-
允许特定Pod间通信(微服务隔离)
允许带有app: frontend标签的Pod访问带有app: backend标签的Pod的8080端口(TCP),实现前后端服务的安全通信。apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-frontend-to-backend namespace: default spec: podSelector: matchLabels: app: backend # 作用于后端Pod policyTypes: - Ingress ingress: - from: - podSelector: matchLabels: app: frontend # 来自前端Pod ports: - protocol: TCP port: 8080该策略确保只有前端服务能访问后端服务,其他Pod无法访问。
-
限制出站流量到特定IP段(数据安全)
允许带有app: db标签的Pod访问外部10.0.0.0/24网段的3306端口(MySQL),防止数据库Pod访问无关外部服务,降低数据泄露风险。apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-db-to-external namespace: default spec: podSelector: matchLabels: app: db # 作用于数据库Pod policyTypes: - Egress # 仅控制出站流量 egress: - to: - ipBlock: cidr: 10.0.0.0/24 # 允许的IP段 ports: - protocol: TCP port: 3306适用于需要限制数据库访问外部IP的场景。
-
组合策略(入站+出站)
允许带有app: user-service标签的Pod:- 接收来自
app: frontend的Pod的80端口(TCP)流量; - 访问外部
192.168.1.0/24网段的443端口(HTTPS)。
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: combined-policy namespace: default spec: podSelector: matchLabels: app: user-service # 作用于用户服务Pod policyTypes: - Ingress - Egress ingress: - from: - podSelector: matchLabels: app: frontend # 入站来源 ports: - protocol: TCP port: 80 egress: - to: - ipBlock: cidr: 192.168.1.0/24 # 出站目标 ports: - protocol: TCP port: 443适用于需要同时控制入站和出站流量的复杂场景。
- 接收来自
四、应用与验证
- 应用策略
将YAML文件保存后,使用kubectl apply命令部署:kubectl apply -f.yaml - 查看策略
列出当前命名空间的网络策略,确认是否部署成功:kubectl get networkpolicies -n - 验证策略
- 创建临时测试Pod(如BusyBox):
kubectl run test-pod --image=busybox -it --rm --restart=Never -- sh - 在测试Pod中尝试访问目标Pod(如
app: backend的8080端口):wget -qO- http://:8080 - 根据策略预期,验证是否允许或拒绝访问(如默认拒绝策略下,未明确允许的流量将被拒绝)。
- 创建临时测试Pod(如BusyBox):
五、最佳实践
- 遵循最小权限原则
从“默认拒绝所有流量”开始,逐步添加必要的允许规则,避免过度开放权限(如默认拒绝入站流量,仅允许特定Pod访问)。 - 标签规范化
为Pod添加清晰的标签(如app: frontend、env: production),便于策略的精准匹配(如通过app: frontend选择前端Pod)。 - 渐进式部署
先在小范围测试策略(如测试命名空间),确认无误后再推广至生产环境,避免策略错误导致服务中断。 - 定期审计策略
使用kubectl get networkpolicies查看策略覆盖率,结合监控工具(如Prometheus)监控策略匹配的流量日志,及时调整策略(如删除未使用的规则)。
以上就是关于“Kubernetes网络策略如何实现”的相关介绍,筋斗云是国内较早的云主机应用的服务商,拥有10余年行业经验,提供丰富的云服务器、租用服务器等相关产品服务。云服务器资源弹性伸缩,主机vCPU、内存性能强悍、超高I/O速度、故障秒级恢复;电子化备案,提交快速,专业团队7×24小时服务支持!
简单好用、高性价比云服务器租用链接:https://www.jindouyun.cn/product/cvm