![](/img/trans.png)
[英]Kubernetes LoadBalancer service not getting ELB external IP address
[英]How do I get the External IP of a Kubernetes service as a raw value?
我正在使用 GKE 運行應用程序。 它工作正常,但我不知道如何以機器可讀格式獲取服務的外部 IP。 所以我正在搜索 gcloud 或 kubectl 命令,它只給我外部 IP 或格式http://192.168.0.2:80
的 url,這樣我就可以刪除 IP。
也許不是 GKE,因為我的集群在 AWS 上,但我認為邏輯會相似。 當您kubectl get svc
您可以選擇輸出格式,它會顯示比“正常”獲取更多的內容。 對我來說,使用基於 ELB 的服務來處理 LB 主機名就足以運行即。 kubectl -n kube-system get svc cluster-nginx-ingress-controller -o json | jq .status.loadBalancer.ingress.hostname
可以使用jsonpath輸出類型直接獲取數據,不需要額外的jq
來處理json:
kubectl get services --namespace ingress-nginx nginx-ingress-controller --output jsonpath='{.status.loadBalancer.ingress[0].ip}'
(請務必將命名空間和服務名稱分別替換為您的名稱。)
在我的情況下,“ kubectl get services ”返回項目數組,但不僅僅是一項服務。
那么這樣的 jsonpath 對我來說很好用:
kubectl get services -l component=controller,app=nginx-ingress -o jsonpath="{.items[0].status.loadBalancer.ingress[0].ip}"
要在 GCP 上獲取外部 IP,我可以使用:
kubectl get services --namespace=<your-namespace> -o jsonpath="{.items[0].status.loadBalancer.ingress[0].ip}"
上面的答案沒有提供用戶要求的輸出。 正確的命令是: kubectl -n $namespace get svc $ingressServiceName -o json | jq -r .status.loadBalancer.ingress[].hostname
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 使用的網絡插件,可能會直接暴露在 external-ip 上。 但這也會發現在集群中運行的 Ingress 控制器。
所有以前的解決方案對我都不再適用(在 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公開您的相關服務。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.