Kubernetes 为什么dig不通过dns名称解析K8s服务,而nslookup没有问题?
以下是复制的步骤:Kubernetes 为什么dig不通过dns名称解析K8s服务,而nslookup没有问题?,kubernetes,nslookup,dig,kube-dns,kubernetes-service,Kubernetes,Nslookup,Dig,Kube Dns,Kubernetes Service,以下是复制的步骤: minikube start kubectl run nginx --image=nginx kubectl expose deployment nginx --port=80 --type=ClusterIP kubectl run -i --tty --rm alpine --image=alpine --restart=Never -- sh apk add --no-cache bind-tools 现在,让我们尝试查询kibe dns以获得nginx服务 使用n
minikube start
kubectl run nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=ClusterIP
kubectl run -i --tty --rm alpine --image=alpine --restart=Never -- sh
apk add --no-cache bind-tools
现在,让我们尝试查询kibe dns以获得nginx
服务
使用nslookup
:
/ # nslookup nginx.default 10.96.0.10
Server: 10.96.0.10
Address: 10.96.0.10#53
Name: nginx.default.svc.cluster.local
Address: 10.97.239.175
用dig
:
dig nginx.default @10.96.0.10 any
; <<>> DiG 9.11.3 <<>> nginx.default @10.96.0.10 any
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 46414
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;nginx.default. IN ANY
;; Query time: 279 msec
;; SERVER: 10.96.0.10#53(10.96.0.10)
;; WHEN: Sun Jun 03 15:31:15 UTC 2018
;; MSG SIZE rcvd: 42
dig nginx.default@10.96.0.10任意
; 挖掘9.11.3 nginx.default@10.96.0.10任何
;; 全局选项:+cmd
;; 得到答案:
;; ->>HEADER需要指出的几点:
始终使用“nginx.default.svc.cluster.local”,不要依赖工具来完成它
运行dig nginx.default.svc.cluster.local NS
您将看到它没有宿主名称服务器。当至少存在一个时,您只能指定一个
有趣的是,我发现alpine中的dig any
实际上不起作用,因此在这种情况下,我担心您必须显式使用A
或将其留空(默认为A)
结论:
改为运行dig nginx.default.svc.cluster.local
或dig nginx.default.svc.cluster.local A
。谢谢。建议的两个选项都为我提供了使用dig
的DNS解析。这个问题实际上是在经历了HaProxy之后出现的。我有一个解析器
部分和后端服务器,使用dns名称而不是网络地址。我试图检查当dns名称第一次停止解析并在一段时间内继续解析时,HaProxy是否继续代理。有趣的是,nginx
在启动时被正确解析。但它无法每隔30秒通过这个“短”名称检查服务器后端。HaProxy解析器也更喜欢nginx.default.svc.cluster.local
,即使它在启动时只能处理nginx
。默认情况下,dig不使用搜索路径。尝试dig+搜索shortname。参考: