2016-05-25 5 views
5

Próbuję odsłonić usługę "kube-dns", aby była dostępna do odpytania poza klastrem Kubernetes. W tym celu edytowałem definicję "usługi", aby zmienić "typ" z "ClusterIP" na "NodePort", co wydawało się działać dobrze.Jak ujawnić usługę kube-dns dla zapytań poza klastrem?

Jednak, gdy próbuję wykonać zapytanie na porcie węzła, jestem w stanie uzyskać sesję TCP (testowanie za pomocą Telnet), ale nie mogę uzyskać odpowiedzi od serwera DNS (testowanie za pomocą wykopu).

Przejrzałem logi na każdym z pojemników w kapsule "kube-dns", ale nie widziałem nic podejrzanego. Ponadto wydaje się, że wysyłanie zapytań do serwera DNS z poziomu klastra (z uruchomionego kontenera) działa bez żadnych problemów.

Czy ktoś próbował wcześniej ujawnić usługę kube-dns? Jeśli tak, czy są jakieś dodatkowe czynności konfiguracyjne lub czy masz dla mnie jakieś porady dotyczące debugowania?

Definicja usług jest następujący:

$ 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: {} 

Odpowiedz

2

Czy zapytań na porcie TCP lub UDP?

zmieniłem Kube-DNS jako usługa 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 

a następnie zapytał na port UDP spoza klastra i wszystko wydaje się działać:

$ 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 

Teraz , Kubernetes nie zezwala na usługi NodePort na współużytkowanie tego samego portu dla tcp & udp (patrz: wydanie #20092). To sprawia, że ​​jest to trochę zafascynowane czymś takim jak DNS.

EDYCJA: Błąd został naprawiony w Kubernetes 1.3.

+0

Rzeczywiście, zapytanie do portu UDP działa zgodnie z oczekiwaniami. Dziękuję za to! Interesujący błąd. – srkiNZ84

+0

Yup. Przeoczony przypadek, w którym zaprojektowano usługi NodePort. Cieszę się, że pracował dla ciebie. –

+0

Błąd został naprawiony w Kubernetes 1.3. – iTayb

Powiązane problemy