我在GKE上遇到库伯内特斯的问题。我无法按名称解析服务。我有一个连接到单个pod的drone-server
服务正在运行。连接到服务的入口正在成功连接,但是当尝试从busyboxpod执行例如nslookup
时,它无法解析主机名。
服务:
$ k get services -n drone
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
drone-server ClusterIP 10.39.242.23 <none> 80/TCP 2d
drone-vault ClusterIP 10.39.248.166 <none> 80/TCP 40m
Busybox nslookup:
$ kubectl exec -ti busybox -- nslookup drone-server
Server: 10.39.240.10
Address 1: 10.39.240.10 kube-dns.kube-system.svc.cluster.local
nslookup: can't resolve 'drone-server'
当我尝试查找kubernetes. default
时,我是否得到了一个本地地址:
$ kubectl exec -ti busybox -- nslookup kubernetes.default
Server: 10.39.240.10
Address 1: 10.39.240.10 kube-dns.kube-system.svc.cluster.local
Name: kubernetes.default
Address 1: 10.39.240.1 kubernetes.default.svc.cluster.local
解决配置:
似乎配置正确(名称服务器正在匹配库贝-dns服务集群ip)。
$ kubectl exec -ti busybox -- cat /etc/resolv.conf
nameserver 10.39.240.10
search default.svc.cluster.local svc.cluster.local cluster.local europe-west3-a.c.cluster-a8e6d9e252b63e03.internal c.cluster-a8e6d9e252b63e03.internal google.internal
options ndots:5
您的drone-server
服务位于drone
命名空间中,您正在尝试从默认命名空间进行nslookup。您还需要在命令中提供命名空间,如下所示:
kubectl exec -ti busybox -- nslookup drone-server.drone
这是因为您的busybox在默认命名空间中,它试图在同一命名空间中查找drone-server。