Kubernetes 网络策略(NetworkPolicy)完全指南:声明式 Pod 通信管控
Kubernetes 网络策略NetworkPolicy完全指南声明式 Pod 通信管控1. Before you begin前置条件1.1 核心要求Kubernetes 集群需支持 NetworkPolicy APIKubernetes 1.7 版本默认支持。部署支持网络策略的网络插件以下按字母排序无推荐优先级CalicoRomanaWeave 网络本文示例适用于所有上述网络插件无需修改配置即可直接使用。2. 创建 Nginx Deployment 并暴露服务作为演示目标先创建被访问的 Nginx 服务后续通过网络策略限制其访问权限2.1 部署 Nginx 应用# 创建 Deployment2 个副本 $ kubectl run nginx --imagenginx --replicas2 # 暴露 ServiceClusterIP 类型端口 80 $ kubectl expose deployment nginx --port802.2 验证资源状态$ kubectl get svc,pod # 预期输出确认 Nginx Pod 运行正常、Service 已创建 NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE svc/kubernetes 10.100.0.1 443/TCP 46m svc/nginx 10.100.0.16 0/TCP 33s NAME READY STATUS RESTARTS AGE po/nginx-701339712-e0qfq 1/1 Running 0 35s po/nginx-701339712-o00ef 1/1 Running 0 35s3. 测试服务能够被其它 Pod 访问默认情况下Kubernetes 集群内 Pod 可自由通信。验证无网络策略时其他 Pod 能否访问 Nginx 服务# 启动临时 busybox Pod执行后进入交互终端 $ kubectl run busybox --rm -ti --imagebusybox /bin/sh # 在交互终端中测试访问 Nginx Service--spider 仅检查连通性不下载内容 wget --spider --timeout1 nginx # 成功输出Connecting to nginx (10.100.0.16:80)无超时结论无网络策略时任意 Pod 可访问 Nginx 服务。4. 限制访问 Nginx 服务创建 NetworkPolicy通过 NetworkPolicy 定义规则仅允许带有access: true标签的 Pod 访问 Nginx 服务。4.1 编写 NetworkPolicy 配置文件创建nginx-policy.yaml内容如下kind: NetworkPolicy apiVersion: networking.k8s.io/v1 # 核心 API 版本必填 metadata: name: access-nginx # 网络策略名称 spec: podSelector: # 目标 Pod 选择器指定保护哪些 Pod matchLabels: run: nginx # 匹配 Nginx Pod 的标签与 Deployment 一致 ingress: # 入站规则允许哪些流量进入目标 Pod - from: - podSelector: # 来源 Pod 选择器仅允许带以下标签的 Pod 访问 matchLabels: access: true # 允许标签accesstrue4.2 核心字段说明字段作用podSelector定义策略作用的目标 Pod通过标签匹配本文中为 Nginx Podingress.from.podSelector定义允许访问的来源 Pod通过标签匹配本文中为带access: true的 PodapiVersion必须指定为networking.k8s.io/v1标准稳定版 API5. 为服务指定策略应用 NetworkPolicy执行以下命令创建网络策略$ kubectl create -f nginx-policy.yaml # 成功输出networkpolicy access-nginx created # 验证策略是否生效 $ kubectl get networkpolicy NAME POD-SELECTOR AGE access-nginx runnginx 10s6. 当访问标签没有定义时测试访问服务验证无access: true标签的 Pod 是否被拒绝访问# 启动无标签的 busybox Pod交互模式 $ kubectl run busybox --rm -ti --imagebusybox /bin/sh # 测试访问 Nginx 服务 wget --spider --timeout1 nginx # 失败输出wget: download timed out请求超时策略生效结论无指定标签的 Pod 被网络策略拦截无法访问 Nginx 服务。7. 定义访问标签后再次测试验证带有access: true标签的 Pod 是否允许访问# 启动带标签的 busybox Pod--labels 指定标签 $ kubectl run busybox --rm -ti --labelsaccesstrue --imagebusybox /bin/sh # 测试访问 Nginx 服务 wget --spider --timeout1 nginx # 成功输出Connecting to nginx (10.100.0.16:80)无超时访问允许结论符合标签条件的 Pod 可正常访问 Nginx 服务网络策略按预期生效。扩展NetworkPolicy 核心能力补充1. 更多规则配置示例允许特定命名空间的 Pod 访问ingress: - from: - namespaceSelector: # 匹配命名空间标签 matchLabels: environment: production允许特定 IP 段访问ingress: - from: - ipBlock: cidr: 192.168.0.0/16 # 允许的 IP 段 except: - 192.168.1.0/24 # 排除的 IP 段限制特定端口访问ingress: - ports: - protocol: TCP port: 80 # 仅允许 80 端口访问拒绝其他端口 from: - podSelector: matchLabels: access: true2. 关键注意事项默认行为无网络策略时Pod 可接收所有入站流量创建网络策略后仅允许策略中明确允许的流量。出站规则除了ingress入站还可通过egress定义 Pod 的出站流量规则限制 Pod 访问外部资源。标签匹配podSelector和namespaceSelector支持复杂标签匹配如matchExpressions满足多条件筛选需求。总结Kubernetes NetworkPolicy 提供了声明式的 Pod 通信管控能力核心价值在于实现 Pod 间的访问隔离提升集群安全性如限制数据库 Pod 仅允许应用 Pod 访问。按标签、命名空间、IP 段等维度灵活定义规则适配复杂业务场景。与网络插件解耦无需修改应用代码仅通过 YAML 配置即可生效。建议在生产环境中为核心服务如数据库、缓存、API 服务配置网络策略最小化访问权限降低安全风险。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2554139.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!