Are you querying on the tcp port or the udp port?
I changed my kube-dns to be a NodePort service:
$ kubectl describe services kube-dns --namespace kube-system
Name: kube-dns
Namespace: kube-system
Labels: k8s-app=kube-dns
kubernetes.io/cluster-service=true
kubernetes.io/name=KubeDNS
Selector: k8s-app=kube-dns
Type: NodePort
IP: 10.171.240.10
Port: dns 53/UDP
NodePort: dns 30100/UDP
Endpoints: 10.168.0.6:53
Port: dns-tcp 53/TCP
NodePort: dns-tcp 30490/TCP
Endpoints: 10.168.0.6:53
Session Affinity: None
and then queried on the udp port from outside of the cluster and everything appeared to work:
$ dig -p 30100 @10.240.0.4 kubernetes.default.svc.cluster.local
; <<>> DiG 9.9.5-9+deb8u6-Debian <<>> -p 30100 @10.240.0.4 kubernetes.default.svc.cluster.local
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 45472
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;kubernetes.default.svc.cluster.local. IN A
;; ANSWER SECTION:
kubernetes.default.svc.cluster.local. 30 IN A 10.171.240.1
;; Query time: 3 msec
;; SERVER: 10.240.0.4#30100(10.240.0.4)
;; WHEN: Thu May 26 18:27:32 UTC 2016
;; MSG SIZE rcvd: 70
Right now, Kubernetes does not allow NodePort services to share the same port for tcp & udp (see Issue #20092). That makes this a little funky for something like DNS.
EDIT: The bug was fixed in Kubernetes 1.3.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…