我有一项服务,我想从其规格中获取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?
使用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}}