以下是复现步骤:
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
现在让我们尝试使用nslookup
查询kibe-dns中的nginx
服务。
/ # 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
如果我将名称nginx.default
替换为nginx
,则不会发生任何更改。
minikube 版本: v0.27.0, k8s 版本: 1.10.0
dig
进行DNS解析。这个问题实际上是在使用HaProxy后出现的。我有一个resolvers
部分和一个带有DNS名称而不是网络地址的后端服务器。我试图检查当DNS名称首次停止解析并在一段时间后继续解析时,HaProxy是否继续代理。有趣的是,nginx
在启动时被正确解析。但是每30秒钟它都无法通过这个“短”名称检查服务器后端。HaProxy解析器也更喜欢nginx.default.svc.cluster.local
,即使它在启动时只能处理nginx
。 - Kirill