如何通过kubectl的custom-columns格式显示常量值(集群上下文名)
解决Kubernetes多集群Ingress无证书排查时添加集群上下文的问题
你可以通过结合shell文本处理工具,将集群上下文名称注入到每条输出的开头。修改后的命令如下:
k config get-contexts -o name | grep -E 'app(5|3)41.+-admin' | xargs -n1 -I {} sh -c 'kubectl --context {} get ingress -A -o "custom-columns=NS:{.metadata.namespace},NAME:{.metadata.name},CERT:{.spec.tls.*.secretName}" | grep "<none>" | awk -v ctx="{}" "{printf \"%-25s %s\\n\", ctx, \$0}"'
关键修改说明:
- 用
sh -c在xargs的每个循环中串联执行命令,实现集群上下文变量的传递 - 通过
awk -v ctx="{}"把当前集群上下文作为变量传入awk,方便追加到每行开头 - 借助
printf格式化输出,让上下文列对齐,提升整体可读性
修改后的输出示例(格式更规整):
app541-prod-admin argocd argo-cd-argocd-server <none> app341-test-admin reference-app reference-app-netcore-ingress <none> app541-prod-admin test-ingress my-nginx <none>
另一种简洁实现方式
如果希望直接通过kubectl的自定义列输出上下文,可利用shell环境变量传递值:
k config get-contexts -o name | grep -E 'app(5|3)41.+-admin' | xargs -n1 -I {} sh -c 'export CTX={}; kubectl --context $CTX get ingress -A -o "custom-columns=CONTEXT:${CTX},NS:{.metadata.namespace},NAME:{.metadata.name},CERT:{.spec.tls.*.secretName}" | grep "<none>"'
这种方法无需额外文本处理工具,直接将上下文值插入到自定义列中,输出结构更贴近kubectl原生格式。
内容的提问来源于stack exchange,提问作者mark
相关产品推荐
相关产品推荐

