Kubernetes网络策略实战:使用ahmetb/kubernetes-network-policy-recipes禁止应用出站流量...

Kubernetes网络策略实战:使用ahmetb/kubernetes-network-policy-recipes禁止应用出站流量

kubernetes-network-policy-recipes Example recipes for Kubernetes Network Policies that you can just copy paste kubernetes-network-policy-recipes 项目地址: https://gitcode.com/gh_mirrors/ku/kubernetes-network-policy-recipes

引言

在Kubernetes集群中,网络策略(NetworkPolicy)是实现微服务安全隔离的关键组件。本文将深入探讨如何使用网络策略禁止特定应用的出站流量,这是ahmetb/kubernetes-network-policy-recipes项目中的一个典型场景。

应用场景

禁止应用出站流量的策略在以下场景特别有用:

  1. 安全敏感型应用:如单实例数据库,需要严格控制其对外连接
  2. 合规要求:满足某些行业规范对网络流量的限制
  3. 故障隔离:防止问题应用影响其他服务
  4. 最小权限原则:只允许必要的网络通信

基础网络策略实现

准备工作

首先创建一个测试用的Web应用:

kubectl run web --image=nginx --labels="app=web" --expose --port=80

禁止所有出站流量

创建以下网络策略YAML文件:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: foo-deny-egress
spec:
  podSelector:
    matchLabels:
      app: foo
  policyTypes:
  - Egress
  egress: []

关键配置解析:

  • podSelector: 选择带有app=foo标签的Pod
  • policyTypes: 指定策略类型为出站(Egress)
  • egress: []: 空规则表示禁止所有出站流量

应用策略:

kubectl apply -f foo-deny-egress.yaml

测试效果

运行测试Pod并尝试连接:

kubectl run --rm --restart=Never --image=alpine -i -t --labels="app=foo" test -- ash

在Pod内执行:

wget -qO- --timeout 1 http://web:80/

现象分析:连接失败,但原因并非策略直接拦截,而是DNS解析被阻止。这是因为Kubernetes的DNS服务(kube-dns)也需要通过网络策略允许才能访问。

进阶:允许DNS解析

修改网络策略,允许DNS流量:

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

关键改进:

  • 允许访问kube-system命名空间下带有k8s-app: kube-dns标签的Pod
  • 开放53端口的UDP和TCP协议(DNS服务)

再次测试

wget --timeout 1 -O- http://web

现象分析:现在可以解析域名(能看到IP地址),但实际连接仍然被阻止,这正是我们期望的效果——只允许DNS解析,禁止其他所有出站连接。

生产环境建议

  1. 版本兼容性:确保Kubernetes集群版本支持Egress策略(如GKE需要1.8.4-gke.0及以上)
  2. 策略粒度:可以根据需要进一步细化规则,如:
    • 允许访问特定内部服务
    • 按端口限制访问
  3. 监控:实施策略后应监控应用日志,确保不会意外阻断必要通信
  4. 渐进式实施:生产环境建议先审计现有流量模式,再逐步实施限制

清理资源

kubectl delete pod,service web
kubectl delete networkpolicy foo-deny-egress

总结

通过本文的实践,我们学习了如何使用Kubernetes网络策略精确控制应用的出站流量。这种"默认拒绝"的安全模型是构建零信任网络架构的重要基础。在实际应用中,可以根据业务需求灵活调整策略,在安全性和可用性之间取得平衡。

kubernetes-network-policy-recipes Example recipes for Kubernetes Network Policies that you can just copy paste kubernetes-network-policy-recipes 项目地址: https://gitcode.com/gh_mirrors/ku/kubernetes-network-policy-recipes

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

平钰垚Zebediah

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值