我需要服务 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 种:
转发 IP 范围工作节点使用 DNS 连接到您的客户端设备,例如使用类似
sshuttle
ping
从工作节点运行命令。部署另一个容器(最好在不同的容器中
namespace
)并从那里进行 ping 操作。
答案2
有更漂亮的方法,但这给了你答案
kubectl get services -o json | grep kubernetes.fqdn