kubectl 输出格式化:寻找特定的列

kubectl output formatted : looking for a specific column

我希望通过我最初的 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 最重要的是,它的特定子列之一

"match":"Host('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

我也试过了

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

如果我没理解错的话,你需要

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

您可以在此处找到更多示例:kubectl Cheat Sheet

经过多次试验,这个有效

kubectl --context oam-ska-yo_jonnylee -n ebz get -o=custom-columns=.spec.routes[0].match ingressroute zz-oamtoto
  • 如果您正在寻找专栏,选项 custom-columns 应该可以为您提供调整。

  • 对于第一列,您的目标是,您需要在 .spec 后跟一个点和列名,例如 .spec.column_name

  • 在那里,routes 列部分,在这个例子中,是一个数组。因此,您需要放置 [],然后是编号,然后是子名称,此处为 match。它给你 .spec.routes[0].match

注意:我在最初的 kubectly 查询中使用了 svc。打错了,没用。