如何将Kubernetes服务的外部IP作为原始值?

时间:2017-12-25 14:48:05

标签: kubernetes kubectl google-kubernetes-engine

我正在使用GKE运行应用程序。它工作正常,但我无法弄清楚如何以机器可读的格式获得服务的外部IP。 所以我正在搜索gcloud或kubectl命令,它只给我外部IP或格式http://192.168.0.2:80的网址,以便我可以删除IP。

6 个答案:

答案 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}"