用途:审查 Kubernetes NetworkPolicy,回答"什么能访问某工作负载"以及该判断是否可信。基于 vendored 第三方 k8s-mcp(containers/kubernetes-mcp-server v0.0.66,Apache-2.0,固定静态 Go 二进制),共 7 个工具,严格只读,拒绝访问 Secrets,不支持任何变更操作。
主要能力与规则:两个前提必须遵守。其一,Kubernetes 默认放行,没有 NetworkPolicy 意味着所有出入站流量都被允许,因此"未发现策略"本身就是结论,必须连带说明后果。其二,空结果可能代表"看不到"而非"不存在":凭证缺少集群级 list 权限时,该服务器不会报错,而是静默把集群级查询改写为单命名空间并返回结果。
必要用法与流程:第一步先确认范围,执行 kubectl --kubeconfig $K8S_KUBECONFIG auth can-i list networkpolicies --all-namespaces;返回 yes 才可信任集群级结论,返回 no 则任何答案至多是命名空间级,必须明说。第二步列出策略:resources_list({"apiVersion": "networking.k8s.io/v1", "kind": "NetworkPolicy"}),或带 "namespace": "app1"。第三步报告 podSelector、policyTypes(Ingress/Egress)与实际 from/to 规则,而非仅说"存在策略"。第四步说明实际查询范围与响应集群。
空结果的六种原因:权限不足、命名空间不存在、命名空间为空、选择器无匹配、CRD 未安装(如 Cilium/Calico)、集群不可达;需分别给出准确措辞,选择器需一并展示以暴露拼写问题。
限制:命名空间级列表不代表全貌,其他命名空间的策略及集群级 CRD 策略(CiliumClusterwideNetworkPolicy、GlobalNetworkPolicy)同样适用。观察到的流量不等于被允许的流量,kubeshark-traffic 显示实际包流,与本技能声明式配置是两类证据,不可合并为单一结论。其他边界:看包用 kubeshark-traffic,指标用 prometheus、grafana,建实验环境用 containerlab、gns3、cml,服务/入口路径用 k8s-service-path,Pod 清单用 k8s-workload-inventory。