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

Kubernetes NetworkPolicy:如何识别Pod已应用的网络策略

查询作用于Pod的NetworkPolicy方法

可以从Pod侧查询到作用于自身的NetworkPolicy,核心是通过Kubernetes API筛选匹配该Pod标签的策略,以下是具体实现方式:

1. 利用kubectl查询(Pod内需预装kubectl并配置权限)

如果Pod内有kubectl工具,且关联的服务账号具备读取NetworkPolicy的权限,可执行以下命令:

  • 先获取当前Pod的标签(替换my-pod为你的Pod名称):
POD_LABELS=$(kubectl get pod my-pod -n $(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace) -o jsonpath='{.metadata.labels}')
  • 筛选匹配该标签的NetworkPolicy:
kubectl get networkpolicy -n $(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace) -o json | jq --argjson labels "$POD_LABELS" '.items[] | select(
  .spec.podSelector.matchLabels == $labels 
  or (.spec.podSelector.matchExpressions // [] | any(
    .key as $k | .values[] as $v | $labels[$k] == $v
  ))
)'

也可以直接根据已知的Pod标签快速筛选,比如Pod带有app=web标签:

kubectl get networkpolicy -n $(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace) --field-selector=spec.podSelector.matchLabels.app=web

2. 直接调用Kubernetes API(无需kubectl)

如果Pod内没有kubectl,可通过HTTP请求直接调用API:

  1. 获取当前命名空间和服务令牌:
NAMESPACE=$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace)
TOKEN=$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)
  1. 发送请求查询匹配指定标签的NetworkPolicy(以app=web为例):
curl -s -H "Authorization: Bearer $TOKEN" --cacert /var/run/secrets/kubernetes.io/serviceaccount/ca.crt \
https://kubernetes.default.svc/api/v1/namespaces/$NAMESPACE/networkpolicies | \
jq '.items[] | select(.spec.podSelector.matchLabels.app == "web")'

注意事项

  • 确保Pod的服务账号拥有networkpolicies.get权限,需提前创建Role和RoleBinding进行授权。
  • 上述命令默认处理matchLabels和简单的matchExpressions匹配,若有更复杂的表达式规则,需要调整jq的筛选逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 13:45:32