web-dev-qa-db-ja.com

クラスタ外のクエリに対してkube-dnsサービスを公開するにはどうすればよいですか?

「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: {}
14
srkiNZ84

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のようなものではこれが少しファンキーになります。

編集:バグはKubernetes1.3で修正されました。

6
CJ Cullen