如何为集群外的查询公开kube dns服务?

如何为集群外的查询公开kube dns服务?,dns,kubernetes,kube-dns,Dns,Kubernetes,Kube Dns,我试图公开“kube dns”服务,以便在Kubernetes集群之外查询。为了做到这一点,我编辑了“服务”定义,将“类型”从“ClusterIP”更改为“NodePort”,这似乎很好 但是,当我尝试在节点端口上进行查询时,我能够获得TCP会话(使用Telnet进行测试),但似乎无法从DNS服务器获得任何响应(使用dig进行测试) 我已经查看了“kube dns”吊舱上每个容器的日志,但没有发现任何不好的地方。此外,从集群内(从正在运行的容器)查询DNS似乎没有任何问题 以前有人试图公开kub

我试图公开“kube dns”服务,以便在Kubernetes集群之外查询。为了做到这一点,我编辑了“服务”定义,将“类型”从“ClusterIP”更改为“NodePort”,这似乎很好

但是,当我尝试在节点端口上进行查询时,我能够获得TCP会话(使用Telnet进行测试),但似乎无法从DNS服务器获得任何响应(使用dig进行测试)

我已经查看了“kube dns”吊舱上每个容器的日志,但没有发现任何不好的地方。此外,从集群内(从正在运行的容器)查询DNS似乎没有任何问题

以前有人试图公开kube dns服务吗?如果是这样,是否有其他设置步骤,或者您是否有任何调试建议

服务定义如下:

$ kubectl get service kube-dns -o yaml --namespace kube-system
apiVersion: v1
kind: Service
metadata:
...
spec:
  clusterIP: 10.0.0.10
  ports:
  - name: dns
    nodePort: 31257
    port: 53
    protocol: UDP
    targetPort: 53
  - name: dns-tcp
    nodePort: 31605
    port: 53
    protocol: TCP
    targetPort: 53
  selector:
    k8s-app: kube-dns
  sessionAffinity: None
  type: NodePort
status:
  loadBalancer: {}

您是在查询tcp端口还是udp端口

我将kube dns更改为节点端口服务:

$ 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
然后从集群外部查询udp端口,一切似乎都正常:

$ 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
$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台服务器)
;; 全局选项:+cmd
;; 得到答案:

;; ->>headerindect,查询UDP端口按预期工作。谢谢你!有趣的虫子。是的。设计NodePort服务时被忽略的一个案例。很高兴这对您有效。该错误已在Kubernetes 1.3中修复。