如何获取 Kubernetes 中服务的主机名?

如何获取 Kubernetes 中服务的主机名?

我需要服务 lenspostgres-postgresql 的主机名,但是出现错误:

$ kubectl get services -n default                                                                                              
NAME                                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)    AGE
kubernetes                           ClusterIP   ........     <none>        443/TCP    20m
lensespostgres-postgresql            ClusterIP   ........     <none>        5432/TCP   14m
lensespostgres-postgresql-headless   ClusterIP   None         <none>        5432/TCP   14m
$ ping lensespostgres-postgresql.default.svc.cluster.local
ping: lensespostgres-postgresql.default.svc.cluster.local: Name or service not known

为什么?

答案1

看来这里存在着多重误解。

首先,您kubectl从哪里运行该命令,因此该ping命令从哪里运行?

最可能出现的两种情况是客户端设备(例如笔记本电脑)或基础/主节点。在这两种情况下,如果没有某种网络转发,它们将无法访问通常ClusterIP可从工作节点访问的同一网络。

因此,您选择的服务的 FQDN 是正确的,只是您ping从错误的地方运行。您的选择有 3 种:

  1. 转发 IP 范围工作节点使用 DNS 连接到您的客户端设备,例如使用类似sshuttle

  2. ping从工作节点运行命令。

  3. 部署另一个容器(最好在不同的容器中namespace)并从那里进行 ping 操作。

答案2

有更漂亮的方法,但这给了你答案

kubectl get services -o json | grep kubernetes.fqdn

相关内容