【问题标题】:How to expose kube-dns service for queries outside cluster?如何为集群外的查询公开 kube-dns 服务?
【发布时间】:2016-09-23 18:22:05
【问题描述】:

我正在尝试公开“kube-dns”服务,以便在 Kubernetes 集群之外进行查询。为此,我编辑了“服务”定义,将“类型”从“ClusterIP”更改为“NodePort”,这似乎工作正常。

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

我查看了“kube-dns”Pod 上每个容器的日志,但没有发现任何不妥之处。此外,从集群内(从正在运行的容器)查询 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: {}

【问题讨论】:

    标签: dns kubernetes kube-dns


    【解决方案1】:

    你查询的是tcp端口还是udp端口?

    我将 kube-dns 更改为 NodePort 服务:

    $ 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
    

    目前,Kubernetes 不允许 NodePort 服务为 tcp 和 udp 共享相同的端口(请参阅问题 #20092)。这对于 DNS 之类的东西来说有点奇怪。

    编辑:该错误已在 Kubernetes 1.3 中修复。

    【讨论】:

    • 确实,查询 UDP 端口按预期工作。谢谢你!有趣的错误。
    • 是的。设计 NodePort 服务时被忽视的一个案例。很高兴这对你有用。
    • 该错误已在 Kubernetes 1.3 中修复。
    猜你喜欢
    • 2021-12-21
    • 2020-04-25
    • 2017-02-13
    • 2019-01-05
    • 2020-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-21
    相关资源
    最近更新 更多