如何使用kubectl获取所有命名空间下所有Deployment对应Pod的端口列表
全集群所有Deployment关联Pod端口查询命令调整方案
核心调整点
原命令只能查询指定命名空间下的单个Deployment,要实现全集群全量查询,只需要改三个地方:
- 加
-A(全拼是--all-namespaces)参数,让kubectl遍历所有命名空间拉取资源 - 删掉命令里写死的Deployment名
rke2-coredns-rke2-coredns,这样就不会限定单个实例,会返回所有Deployment - 调整原来的jsonpath写法,用range循环遍历每个Deployment、每个容器,同时把命名空间、Deployment名、容器名打出来,避免全量返回时端口信息混在一起分不清归属,也能解决原写法在多容器场景下容易出现的字段错位问题。
可直接使用的命令
适配你当前使用的PowerShell环境,直接执行即可输出结构化结果:
kubectl get deployments -A -o jsonpath="{range .items[*]}{'\n'}=== 所属命名空间: {.metadata.namespace} | Deployment名称: {.metadata.name} ==={'\n'}{range .spec.template.spec.containers[*]}容器名: {.name}{'\n'}端口配置: {.ports}{'\n'}{end}{'---'}{end}"
输出示例
对应你之前查询的coredns实例,输出片段如下:
=== 所属命名空间: kube-system | Deployment名称: rke2-coredns-rke2-coredns === 容器名: coredns 端口配置: [{"containerPort":53,"name":"udp-53","protocol":"UDP"},{"containerPort":53,"name":"tcp-53","protocol":"TCP"}] ---
补充说明
- 上述命令查询的是Deployment Pod模板中显式声明的端口,和你原命令的查询数据源完全一致,仅扩大了查询范围
- 如果存在容器未显式声明
containerPort字段,对应端口配置位置会显示为空,这是K8s的正常特性:未显式声明的端口不影响容器监听使用,只是不会体现在资源定义中,如果需要获取容器实际运行时监听的所有端口,需要结合kubectl exec在容器内通过网络工具抓取 - 如果需要导出为制表符分隔的精简格式方便后续表格处理,可以使用以下版本:
kubectl get deployments -A -o jsonpath="{range .items[*]}{.metadata.namespace}{'\t'}{.metadata.name}{'\t'}{range .spec.template.spec.containers[*]}{.name}{'\t'}{.ports[*]}{'\n'}{end}{end}"
内容的提问来源于stack exchange,提问作者Manx123
相关产品推荐
相关产品推荐

