当前位置: 首页 > news >正文

Kubernetes网络策略完全指南

Kubernetes网络策略完全指南

引言

在 Kubernetes 中,网络策略(Network Policy)是实现微服务间网络隔离的关键机制。通过网络策略,可以控制 Pod 之间以及 Pod 与外部的网络通信。本文将深入探讨 Kubernetes 网络策略的配置和最佳实践。

一、网络策略概述

1.1 网络策略作用

┌─────────────────────────────────────────────────────────────┐ │ 网络策略作用示意 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ ┌──────────┐ 允许 ┌──────────┐ 禁止 ┌──────────┐│ │ │ Pod A │──────────>│ Pod B │───────────×│ Pod C ││ │ └──────────┘ └──────────┘ └──────────┘│ │ │ │ │ │ × × │ │ │ │ │ │ ┌──────────┐ ┌──────────┐ │ │ │ Pod D │ │ Pod E │ │ │ └──────────┘ └──────────┘ │ │ │ └─────────────────────────────────────────────────────────────┘

1.2 网络策略类型

类型描述作用范围
Ingress入站流量控制控制进入 Pod 的流量
Egress出站流量控制控制 Pod 发出的流量
Ingress + Egress双向流量控制同时控制入站和出站

二、网络策略基础配置

2.1 基础 Ingress 策略

apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: deny-all-ingress spec: podSelector: matchLabels: app: my-app policyTypes: - Ingress ingress: - from: - podSelector: matchLabels: role: frontend ports: - protocol: TCP port: 80

2.2 基础 Egress 策略

apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-dns-egress spec: podSelector: matchLabels: app: my-app policyTypes: - Egress egress: - to: - namespaceSelector: matchLabels: name: kube-system podSelector: matchLabels: k8s-app: kube-dns ports: - protocol: UDP port: 53

2.3 双向策略

apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: full-network-policy spec: podSelector: matchLabels: app: api 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

三、网络策略选择器

3.1 Pod Selector

apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: pod-selector-policy spec: podSelector: matchLabels: app: backend ingress: - from: - podSelector: matchLabels: app: frontend

3.2 Namespace Selector

apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: namespace-selector-policy spec: podSelector: matchLabels: app: sensitive ingress: - from: - namespaceSelector: matchLabels: environment: production

3.3 IP Block 选择器

apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: ip-block-policy spec: podSelector: matchLabels: app: api ingress: - from: - ipBlock: cidr: 192.168.0.0/24 except: - 192.168.0.100/32

3.4 组合选择器

apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: combined-selector-policy spec: podSelector: matchLabels: app: database ingress: - from: - podSelector: matchLabels: role: api namespaceSelector: matchLabels: environment: production

四、网络策略高级配置

4.1 多端口配置

apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: multi-port-policy spec: podSelector: matchLabels: app: web ingress: - from: - ipBlock: cidr: 0.0.0.0/0 ports: - protocol: TCP port: 80 - protocol: TCP port: 443

4.2 多规则配置

apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: multi-rule-policy spec: podSelector: matchLabels: app: api ingress: - from: - podSelector: matchLabels: app: frontend ports: - protocol: TCP port: 8080 - from: - ipBlock: cidr: 10.0.0.0/8 ports: - protocol: TCP port: 8443

4.3 默认拒绝策略

apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: default-deny-all spec: podSelector: {} policyTypes: - Ingress - Egress

五、网络策略场景实践

5.1 数据库隔离策略

apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: database-isolation spec: podSelector: matchLabels: app: postgres policyTypes: - Ingress ingress: - from: - podSelector: matchLabels: app: api - podSelector: matchLabels: app: worker ports: - protocol: TCP port: 5432

5.2 前端服务策略

apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: frontend-policy spec: podSelector: matchLabels: app: frontend policyTypes: - Ingress - Egress ingress: - from: - ipBlock: cidr: 0.0.0.0/0 ports: - protocol: TCP port: 80 - protocol: TCP port: 443 egress: - to: - podSelector: matchLabels: app: api ports: - protocol: TCP port: 8080 - to: - namespaceSelector: matchLabels: name: kube-system podSelector: matchLabels: k8s-app: kube-dns ports: - protocol: UDP port: 53

5.3 敏感服务隔离

apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: sensitive-service-policy spec: podSelector: matchLabels: app: sensitive policyTypes: - Ingress - Egress ingress: - from: - podSelector: matchLabels: role: admin namespaceSelector: matchLabels: name: admin egress: []

六、网络策略最佳实践

6.1 策略层次结构

┌─────────────────────────────────────────────────────────────┐ │ 网络策略层次结构 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 1. 命名空间级别策略(默认拒绝) │ │ │ │ │ ▼ │ │ 2. 应用级别策略(允许特定服务通信) │ │ │ │ │ ▼ │ │ 3. Pod 级别策略(细粒度控制) │ │ │ └─────────────────────────────────────────────────────────────┘

6.2 策略配置清单

  • 为每个命名空间配置默认拒绝策略
  • 明确允许 DNS 流量
  • 限制数据库访问仅允许特定服务
  • 分离前端和后端网络策略
  • 限制敏感服务的网络范围

6.3 性能考虑

因素影响优化建议
策略数量过多策略影响性能合并相似策略
规则复杂度复杂规则增加延迟保持规则简洁
网络插件不同插件性能差异选择高性能插件

七、网络策略调试与验证

7.1 检查网络策略

# 查看所有网络策略 kubectl get networkpolicies # 查看特定策略详情 kubectl describe networkpolicy my-policy # 查看策略适用的 Pod kubectl get pods -l app=my-app

7.2 测试网络连通性

# 在 Pod 内测试连通性 kubectl exec -it my-pod -- ping target-pod-ip # 使用 nc 测试端口 kubectl exec -it my-pod -- nc -zv target-pod-ip 8080 # 使用 curl 测试 HTTP kubectl exec -it my-pod -- curl http://target-service

7.3 常见问题排查

问题原因解决方案
Pod 无法访问外部Egress 策略限制添加 Egress 规则
Pod 无法通信缺少 Ingress 规则添加 Ingress 规则
DNS 解析失败未允许 DNS 流量添加 DNS Egress 规则
策略不生效网络插件不支持确认使用支持的 CNI

八、网络策略与服务网格对比

特性Network PolicyService Mesh
粒度Pod/命名空间级别服务/方法级别
加密不支持mTLS
流量控制简单允许/拒绝复杂路由规则
可观测性有限丰富
性能开销中等

九、总结

网络策略是 Kubernetes 安全的重要组成部分:

  1. Ingress 控制:限制进入 Pod 的流量
  2. Egress 控制:限制 Pod 发出的流量
  3. 选择器:支持 Pod、Namespace、IP 块选择
  4. 默认策略:建议配置默认拒绝
  5. 分层策略:从命名空间到 Pod 的多层次控制

通过合理配置网络策略,可以显著提高集群的安全性,防止横向移动攻击。

下一步行动

  1. 审查现有网络策略配置
  2. 配置默认拒绝策略
  3. 为关键服务配置隔离策略
  4. 测试策略有效性
  5. 定期审计网络策略
http://www.jsqmd.com/news/812071/

相关文章:

  • 摩尔定律的泛化:从芯片到多领域的指数增长模型解析
  • Agent开发工程师缺口达1.2万!2026年AI人才市场最稀缺品类薪酬暴涨55%
  • 气象数据分析入门:手把手教你用Anaconda配置Python环境,读取ERA5等GRIB数据
  • 2026年潮汕生腌优质商家推荐指南:汕头生腌宵夜、汕头生腌店、汕头生腌打包、汕头网红生腌店、潮汕毒药、潮汕生腌店选择指南 - 优质品牌商家
  • arp-scan:穿透防火墙的局域网设备发现利器,为什么它比传统扫描工具更有效?
  • 基于agentforge-openclaw框架构建智能体:从原理到实战应用
  • 基于 HarmonyOS 6.0 的高颜值资源社区页面开发实战:从页面构建到组件封装深度解析
  • 京东商品自动监控下单终极指南:告别手动刷新,轻松抢购心仪商品
  • Logisim-evolution:从数字逻辑仿真到CPU设计的教学与工程实践
  • SpringBoot 外部化配置实战:从优先级到多环境融合策略
  • 基于 HarmonyOS 6.0 的学习社区页面开发实践:从页面构建到跨端体验优化
  • Perplexity检索JAMA时总漏掉关键RCT?用这4类结构化查询指令,召回率提升至98.6%(附可复用Prompt库)
  • DashClaw:基于React与TypeScript的模块化个人仪表盘开发指南
  • 超声波MEMS扬声器:颠覆可穿戴音频设计的固态声学革命
  • AI编程助手会话管理:自动压缩JSONL上下文解决响应卡顿
  • 避坑指南:STM32 GPIO实验那些新手容易踩的坑(时钟使能、模式配置、调试技巧)
  • ViP-LLaVA:让大模型通过视觉提示精准理解图像区域
  • PCHIP-EWT带式输送机故障诊断系统【附代码】
  • 2026现阶段河北铝板装饰网厂家口碑解析与选择指南 - 2026年企业推荐榜
  • 保姆级教程:在CentOS 7上从零部署DataEase v1.14.0(附200G磁盘规划建议)
  • 收藏这份AI学习路线图:小白也能轻松入门大模型,从入门到精通的完整指南
  • Kubernetes存储类与持久化卷深度解析
  • 企业云盘同步机制深度对比:巴别鸟/坚果云/飞书/OneDrive横评
  • 从HTC One M9泄露事件看智能手机产品信息攻防与供应链管理
  • 3分钟搞定网易云音乐NCM解密:免费工具让加密音乐随处播放
  • Ethora MCP CLI:连接AI与Web3应用平台的自动化桥梁
  • FPRF芯片技术解析:从软件定义射频到LMS7002M实战应用
  • 2026年当前配电柜市场指南:剖析重庆宇轩机电设备有限公司的综合实力 - 2026年企业推荐榜
  • 解锁iPad生产力:一文详解连接Windows作副屏的实用方案
  • AI智能体可观测性实战:agent-dash框架集成与调试指南