我正在使用GKE运行应用程序。它工作正常,但我无法弄清楚如何以机器可读的格式获得服务的外部IP。
所以我正在搜索gcloud或kubectl命令,它只给我外部IP或格式http://192.168.0.2:80
的网址,以便我可以删除IP。
答案 0 :(得分:3)
也许不是GKE,因为我的集群在AWS上,但我认为逻辑类似。当您kubectl get svc
时,您可以选择输出格式,它会显示更多,然后只显示"正常"得到。对我来说,使用基于ELB的服务来获得LB主机名,它足以运行ie。 kubectl -n kube-system get svc cluster-nginx-ingress-controller -o json | jq .status.loadBalancer.ingress.hostname
答案 1 :(得分:1)
您可以使用jsonpath输出类型直接获取数据,而无需其他jq
处理json:
kubectl get services --namespace ingress-nginx nginx-ingress-controller --output jsonpath='{.status.loadBalancer.ingress[0].ip}'
(请确保分别用您的名称空间和服务名称替换。)
答案 2 :(得分:0)
在我的案例中,“ kubectl获取服务”返回一组项,但不仅返回一项服务。
所以这样的jsonpath对我来说很好:
static int findTrailingZeros(int n)
{
// Initialize result
int count = 0;
// Keep dividing n by powers
// of 5 and update count
for (int i = 5; n / i >= 1; i *= 5)
count += n / i;
return count;
}
答案 3 :(得分:0)
以上答案未提供用户要求的输出。正确的命令是:
kubectl -n $namespace get svc $ingressServiceName -o json | jq -r .status.loadBalancer.ingress[].hostname
答案 4 :(得分:0)
...还有另一种方法...这将列出所有“负载均衡器”服务
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控制器。
答案 5 :(得分:0)
以前的所有解决方案对我都不再适用(在 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}"