You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何排查Kubernetes Pod所需全部连接以配置最严格Network Policy

找出Kubernetes Pod正常工作所需的全部连接方法

要创建最严格的Network Policy,得先明确Pod的所有必要连接,以下是实操步骤:

  • 抓包分析实时流量
    直接在Pod内运行tcpdump抓取所有网络包,记录一段时间内的所有连接:

    kubectl exec -it <pod-name> -n <namespace> -- tcpdump -i any -w /tmp/pod-traffic.pcap
    

    运行足够长时间覆盖Pod的所有业务场景后,将抓包文件导出到本地用Wireshark分析,筛选出所有源/目标IP、端口和协议,这是最直接的流量记录。

  • 排查关联的Service与Endpoint
    查看Pod关联的Service(包括作为后端被访问的和主动访问的):

    • 列出命名空间内的所有Service:kubectl get svc -n <namespace>,检查哪些Service的选择器匹配该Pod的标签。
    • 查看Pod内注入的Service环境变量:kubectl exec -it <pod-name> -n <namespace> -- env | grep SERVICE,这些变量通常对应Pod会访问的内部服务。
    • 查看Service对应的Endpoint:kubectl get endpoints <service-name> -n <namespace>,确认Pod连接的后端IP。
  • 分析应用日志定位依赖
    查看Pod的应用日志,寻找连接相关的关键词(如connect、timeout、failed to reach):

    kubectl logs -f <pod-name> -n <namespace>
    

    日志里通常会明确记载依赖的外部服务地址、API端点或数据库地址,这些都是必需的连接目标。

  • 临时放宽策略并记录允许的流量
    先创建一个允许所有进出流量的临时Network Policy:

    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: temp-allow-all
      namespace: <namespace>
    spec:
      podSelector:
        matchLabels:
          <pod-label-key>: <pod-label-value>
      policyTypes:
      - Ingress
      - Egress
      ingress:
      - {}
      egress:
      - {}
    

    然后开启CNI插件的流量日志功能(比如Calico、Cilium都支持),过滤该Pod的所有流量记录,整理出实际发生的连接规则,这能避免遗漏偶发的业务连接。

  • 监控DNS查询记录
    Pod访问内部Service或外部域名时会发起DNS请求,抓取DNS流量:

    kubectl exec -it <pod-name> -n <namespace> -- tcpdump -i any port 53
    

    分析查询的域名,对应到内部Service(通常是<service-name>.<namespace>.svc.cluster.local格式)或外部域名,这些都是需要允许的目标。

  • 逐个禁用连接验证必要性
    基于前面收集到的连接列表,逐个创建限制策略(比如禁止某个IP/端口),观察Pod的运行状态和业务是否正常。如果禁用后出现报错或功能失效,说明该连接是必需的;反之则可以排除。

内容的提问来源于stack exchange,提问作者k_roszczak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 21:12:39