我正在使用GKE运行一个应用程序。它工作得很好,但我无法弄清楚如何以机器可读的格式获取服务的外部IP。
因此,我正在寻找一个gcloud或kubectl命令,只给我外部IP或格式为http://192.168.0.2:80
的URL,以便我可以剪切IP。
我正在使用GKE运行一个应用程序。它工作得很好,但我无法弄清楚如何以机器可读的格式获取服务的外部IP。
因此,我正在寻找一个gcloud或kubectl命令,只给我外部IP或格式为http://192.168.0.2:80
的URL,以便我可以剪切IP。
jq
处理json:kubectl get services \
--namespace ingress-nginx \
nginx-ingress-controller \
--output jsonpath='{.status.loadBalancer.ingress[0].ip}'
请务必将命名空间和服务名称替换为您自己的。
也许不是GKE,因为我的集群在AWS上,但我认为逻辑会类似。当你执行 kubectl get svc
命令时,你可以选择输出格式,它会显示比“普通”获取更多信息。对于我来说,对于基于ELB的服务,只需运行命令 kubectl -n kube-system get svc cluster-nginx-ingress-controller -o json | jq .status.loadBalancer.ingress.hostname
就足够获取负载均衡器主机名了。
kubectl get services -l component=controller,app=nginx-ingress -o jsonpath="{.items[0].status.loadBalancer.ingress[0].ip}"
kubectl -n $namespace get svc $ingressServiceName -o json | jq -r .status.loadBalancer.ingress[].hostname
。另一种方法是使用以下命令,列出所有“负载均衡器”服务:
kubectl get services --all-namespaces -o json | jq -r '.items[] | { name: .metadata.name, ns: .metadata.namespace, ip: .status.loadBalancer?|.ingress[]?|.ip }'
根据您的集群使用的网络插件,服务/ Pod 可能直接在外部 IP 上公开。但这也将查找在集群中运行的 Ingress 控制器。
在GCP上获取外部IP,我可以使用以下命令:
kubectl get services --namespace=<your-namespace> -o jsonpath="{.items[0].status.loadBalancer.ingress[0].ip}"
所有以前的解决方案在我(在GCP上)不再起作用。
获取IP的方法:
kubectl get ingress <YOUR_INGRESS_NAME> -o jsonpath="{.status.loadBalancer.ingress[0].ip}"
获取主机名:
kubectl get ingress <YOUR_INGRESS_NAME> -o jsonpath="{.spec.rules[0].host}"
类型
minikube tunnel
或者
kubectl cluster-info
您可以获取相关服务的公共暴露IP。
jsonpath
。kubectl get services -l component=controller,app=nginx-ingress -o jsonpath="{.items[0].status.loadBalancer.ingress[0].hostname}"
。 - vikas027无法使用字符串"hostname"索引数组
,相反我使用了jq -r ".status.loadBalancer.ingress | .[].ip"
。 - Chris Stryczynski