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

如何通过JSONPath过滤kubectl节点查询结果,排除主节点获取工作节点IP

解决方案

方案1:基于节点角色标签筛选(最稳定,优先推荐)

绝大多数Kubernetes集群的工作节点都会自带标准角色标签node-role.kubernetes.io/worker,直接用kubectl的标签筛选参数就可以直接过滤出工作节点,不需要做字符串匹配:

kubectl get nodes -l node-role.kubernetes.io/worker -o jsonpath="{range .items[*]}{.status.addresses[?(@.type=='InternalIP')].address}{'\n'}{end}"

如果你的集群主节点有单独的角色标签,也可以用!排除,比如参数改成-l '!node-role.kubernetes.io/master'即可排除所有主节点。

方案2:基于节点名称字符串匹配(Go模板实现)

kubectl的原生JSONPath没有内置字符串包含匹配能力,你可以改用Go模板格式输出,Go模板内置了contains函数可以实现你的需求:

排除名称包含-master-的节点

kubectl get nodes -o go-template='{{range .items}}{{if not (contains .metadata.name "-master-")}}{{range .status.addresses}}{{if eq .type "InternalIP"}}{{.address}}{{"\n"}}{{end}}{{end}}{{end}}{{end}}'

仅保留名称包含-worker-的节点

把上面命令的判断条件改成正匹配即可:

kubectl get nodes -o go-template='{{range .items}}{{if contains .metadata.name "-worker-"}}{{range .status.addresses}}{{if eq .type "InternalIP"}}{{.address}}{{"\n"}}{{end}}{{end}}{{end}}{{end}}'

方案3:管道过滤(逻辑更直观,易修改)

如果你更熟悉Linux命令行工具,也可以先输出节点名+IP的组合,再用管道工具过滤提取:

kubectl get nodes -o jsonpath="{range .items[*]}{.metadata.name}{' '}{.status.addresses[?(@.type=='InternalIP')].address}{'\n'}{end}" | grep -v "-master-" | awk '{print $2}'

如果要仅保留worker节点,把grep -v "-master-"改成grep "-worker-"即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 17:36:03