簡體   English   中英

如何獲取 Kube.netes 服務的外部 IP 作為原始值?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM