使用kubectl get时获得地图的第一个元素…-o模板

问题描述 投票:0回答:1

我有一项服务,我想从其规格中获取IP,使用-o go-template,我可以那样做:

kubectl get service webapp1-loadbalancer-svc -o go-template='{{(index .status.loadBalancer.ingress 0).ip}}'

这将返回我想要的负载均衡器中第一个入口的IP。

但是,我想使用-o go-template而不是-o template。我尝试了多个命令,但无法执行。我最接近的工作是:

kubectl get service webapp1-loadbalancer-svc -o template={{.status.loadBalancer.ingress}}

但是这会返回映射[map[ip:172.17.0.28]],而不仅仅是IP。我试图在同一命令中获取IP的所有操作在执行模板时均返回错误。

是否有一种方法可以使用一个kubectl而不是-o template-o go-template命令从地图获取IP?

kubectl go-templates
1个回答
0
投票

使用Json Path能够如下检索服务集群IP。

ubuntu@k8s-master:~$ kubectl get all -o wide
NAME        READY   STATUS    RESTARTS   AGE    IP               NODE         NOMINATED NODE   READINESS GATES
pod/nginx   1/1     Running   0          129m   192.168.85.226   k8s-node01   <none>           <none>

NAME                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE    SELECTOR
service/kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP   2d2h   <none>
service/nginx        ClusterIP   10.96.184.196   <none>        80/TCP    11m    run=nginx


ubuntu@k8s-master:~$ kubectl get service nginx -o jsonpath='{.spec.clusterIP}'
10.96.184.196

使用JsonPath也可以与LoadBlancer类型一起使用..希望这是您想要使用的。

$ kubectl get all -o wide
NAME        READY   STATUS    RESTARTS   AGE    IP               NODE         NOMINATED NODE   READINESS GATES
pod/nginx   1/1     Running   0          133m   192.168.85.226   k8s-node01   <none>           <none>

NAME                 TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE    SELECTOR
service/kubernetes   ClusterIP      10.96.0.1       <none>        443/TCP        2d2h   <none>
service/nginx        LoadBalancer   10.100.165.17   <pending>     80:30852/TCP   5s     run=nginx
ubuntu@k8s-master:~$



10.100.165.17ubuntu@k8s-master:~$ kubectl get service nginx -o jsonpath='{.spec.type}'
LoadBalancer

ubuntu@k8s-master:~$ kubectl get service nginx -o jsonpath='{.spec.clusterIP}'
10.100.165.17

所以提取端口时,它还会返回如下图

$ kubectl get service nginx -o jsonpath='{.spec.ports}'
[map[nodePort:30852 port:80 protocol:TCP targetPort:80]]

您可以提取nodeProt,将端口和目标分别作为端口,如下所示>>

$ kubectl get service nginx -o jsonpath='{.spec.ports[].targetPort}'
80

ubuntu@k8s-master:~$ kubectl get service nginx -o jsonpath='{.spec.ports[].nodePort}'
30852

ubuntu@k8s-master:~$ kubectl get service nginx -o jsonpath='{.spec.ports[].port}'
80

希望以上示例将帮助您解决查询问题

我认为您应该可以通过此命令执行此操作

kubectl get service webapp1-loadbalancer-svc -o jsonpath={{.status.loadBalancer.ingress[].ip}}
© www.soinside.com 2019 - 2024. All rights reserved.