Как выставить сервис kube-dns для запросов вне кластера?
Я пытаюсь сделать так, чтобы сервис "kube-dns" был доступен для запроса вне кластера Kubernetes. Чтобы сделать это, я отредактировал определение "Сервис", чтобы изменить "тип" с "ClusterIP" на "NodePort", который, казалось, работал нормально.
Тем не менее, когда я пытаюсь сделать запрос на порт узла, я могу получить сеанс TCP (тестирование с помощью Telnet), но не могу получить ответ от DNS-сервера (тестирование с помощью dig).
Я просматривал логи каждого из контейнеров на Pod "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: {}
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.