2016-05-25 8 views
5

"kube-dns"サービスがKubernetesクラスタの外で照会できるように公開しようとしています。これを行うために、 "Service"定義を編集して "type"を "ClusterIP"から "NodePort"に変更しました。クラスタ外のクエリに対してkube-dnsサービスを公開するにはどうすればよいですか?

しかし、ノードポートでクエリを実行しようとすると、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: {} 

答えて

2

あなたはTCPポートまたはUDPポートを照会していますか?

私はNodePortサービスであることを私のKUBE-dnを変更:

$ 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のようなもののためにこれを少しファンキーにします。

EDIT:Kubernetes 1.3で修正されました。

+0

実際、UDPポートの照会は期待どおりに機能します。有難うございます!興味深いバグ。 – srkiNZ84

+0

NodePortサービスが設計された際に見落とされたケース。それはあなたのために働いてうれしい。 –

+0

Kubernetes 1.3でバグが修正されました。 – iTayb

関連する問題