Kubernetes kubectl输出格式化:查找特定列

Kubernetes kubectl输出格式化:查找特定列,kubernetes,kubectl,Kubernetes,Kubectl,我希望通过我最初的kubectl命令获得一个特定的列 kubectl --context oam-ska-yo_jonnylee -n ebzz get -o json ingressroute zz-oamtoto 这给了我下面的json { "apiVersion":"traefik.containo.us/v1alpha1", "kind":"IngressRoute", "

我希望通过我最初的kubectl命令获得一个特定的列

kubectl --context oam-ska-yo_jonnylee -n ebzz get -o json ingressroute zz-oamtoto
这给了我下面的json

{
    "apiVersion":"traefik.containo.us/v1alpha1",
    "kind":"IngressRoute",
    "metadata":{
       "annotations":{
          "kubectl.kubernetes.io/last-applied-configuration":"{"sum-up"}\n"
       },
       "creationTimestamp":"2021-02-23T11:17:56Z",
       "generation":1,
       "labels":{
          "instance":"webzz"
       },
       "managedFields":[
          {
             "apiVersion":"traefik.containo.us/v1alpha1",
             "fieldsType":"FieldsV1",
             "fieldsV1":{
                "f:metadata":{
                   "f:annotations":{
                      ".":{
                         
                      },
                      "f:kubectl.kubernetes.io/last-applied-configuration":{
                         
                      }
                   },
                   "f:labels":{
                      ".":{
                         
                      },
                      "f:instance":{
                         
                      }
                   }
                },
                "f:spec":{
                   ".":{
                      
                   },
                   "f:entryPoints":{
                      
                   },
                   "f:routes":{
                      
                   }
                }
             },
             "manager":"kubectl",
             "operation":"Update",
             "time":"2021-02-23T11:17:56Z"
          }
       ],
       "name":"zz-oamtoto",
       "namespace":"ebzz",
       "resourceVersion":"61112315",
       "selfLink":"/apis/traefik.containo.us/v1alpha1/namespaces/ebzz/ingressroutes/zz-oamtoto",
       "uid":"42727XXX-dd9e-45e4-9c7d-1225aea125"
    },
    "spec":{
       "entryPoints":[
          "http"
       ],
       "routes":[
          {
             "kind":"Rule",
             "match":"Host(`ebzz.acme.com`)",
             "middlewares":[
                {
                   "name":"ebzz-ebzz-basicauth"
                }
             ],
             "services":[
                {
                   "kind":"Service",
                   "name":"zz-oamtoto",
                   "port":1234
                }
             ]
          }
       ]
    }
 }
我要看的是找到一个特定的列,
routes
一个,最重要的是,它的一个特定的子列

“匹配”:“主机('
ebzz.acme.com
)”

我试过下面的命令

kubectl --context oam-ska-yo_jonnylee -n ebzz get -o=custom-columns=svc:.spec.routes.-kind ingressroute zz-oamtoto
这就给了我:

 [map[kind:Rule match:Host(`ebzz.acme.com`) middlewares:[map[name:ebzz-ebzz-basicauth]] services:[map[kind:Service name:zz-oamtoto port:1234]]]]
到目前为止我都试过了

kubectl --context oam-ska-yo_jonnylee -n ebzz get -o=custom-columns=svc:.spec.routes[kind] ingressroute zz-oamtoto
它给了我这个

svc
error: invalid array index kind
svc
error: invalid array index kind
我也试过这个

kubectl --context oam-ska-yo_jonnylee -n ebzz get -o=custom-columns=svc:.spec.routes["kind"] ingressroute zz-oamtoto
但它给了我这个

svc
error: invalid array index kind
svc
error: invalid array index kind

如果我理解正确,你需要

kubectl--context oam-ska-yo_jonnylee-n ebz get ingresroute zz oamtoto--output=jsonpath={.spec.routes.match}


在这里你可以找到更多的例子:

经过多次试验,这一个有效

kubectl --context oam-ska-yo_jonnylee -n ebz get -o=custom-columns=.spec.routes[0].match ingressroute zz-oamtoto
  • 如果您正在查找列,则选项
    customcolumns
    应提供调整

  • 对于第一列,您的目标是,您需要放置一个
    .spec
    ,后跟一个点和列名,就像这样
    .spec.column\u name

  • 在本例中,
    路由
    列部分就是一个数组。因此,您需要将
    []
    ,后跟数字,然后再后跟子名称,在这里
    匹配
    。它为您提供
    .spec.routes[0]。匹配


注意:我在最初的kubectly查询中使用svc。这是一个错误,没有任何用处。

Hi@vitalli,我尝试了您的解决方案,但它不起作用,尽管jsontpath是一个好主意。