kube-dns не может найти api-сервер

Я настраиваю кубернеты на GKE, как описано в статье Келси Хайтауэрс https://github.com/kelseyhightower/kubernetes-the-hard-way/

Все работает нормально, кроме настройки DNS ClusterAddon https://github.com/kelseyhightower/kubernetes-the-hard-way/blob/master/docs/12-dns-addon.md

Когда я запускаю kube-dns вот так:

kubectl create -f https://storage.googleapis.com/kubernetes-the-hard-way/kube-dns.yaml.

Я получаю ожидаемый результат:

 serviceaccount "kube-dns" created 
 configmap "kube-dns" created 
 service "kube-dns" 
 created deployment "kube-dns" created

Но проверяя состояние подов и вывод контейнера kube-dns, я вижу ошибки:

kubectl get po -n kube-system
NAME                        READY     STATUS             RESTARTS   AGE
kube-dns-6c857864fb-cpvvr   2/3       CrashLoopBackOff   63         2h

и в журнале контейнера:

I0115 13:22:35.272492       1 dns.go:173] Waiting for services and endpoints to be initialized from apiserver...
I0115 13:22:35.772476       1 dns.go:173] Waiting for services and endpoints to be initialized from apiserver...
I0115 13:22:36.272406       1 dns.go:173] Waiting for services and endpoints to be initialized from apiserver...
I0115 13:22:36.772356       1 dns.go:173] Waiting for services and endpoints to be initialized from apiserver...
I0115 13:22:37.272386       1 dns.go:173] Waiting for services and endpoints to be initialized from apiserver...
E0115 13:22:37.273178       1 reflector.go:201] k8s.io/dns/pkg/dns/dns.go:147: Failed to list *v1.Endpoints: Get https://10.32.0.1:443/api/v1/endpoints?resourceVersion=0: dial tcp 10.32.0.1:443: i/o timeout
E0115 13:22:37.273340       1 reflector.go:201] k8s.io/dns/pkg/dns/dns.go:150: Failed to list *v1.Service: Get https://10.32.0.1:443/api/v1/services?resourceVersion=0: dial tcp 10.32.0.1:443: i/o timeout

URL https://10.32.0.1:443 в журнале контейнера кажется неправильным, но я не могу найти любое место, где я могу указать другой URL-адрес, и ни одно место, где этот URL-адрес установлен в файле конфигурации https://storage.googleapis.com/kubernetes-the-hard-way/kube-dns.yaml


person christian    schedule 15.01.2018    source источник


Ответы (2)


URL-адрес поступает из внутренней информации kubernetes (токен учетной записи службы), и все должно быть в порядке (он должен указывать на первый IP-адрес в диапазоне, назначенном для служебной сети, и это должна быть служба kubernetes.default. Вам нужно проверить, является ли ваш модуль -to-pod network и kube-proxy (он реализует сервис ClusterIPs) работают должным образом.

Если вы сделаете kubectl get svc kubernetes -o yaml, вы должны увидеть службу kubernetes с этим 10.32.0.1 IP, поэтому также подтвердите это (apiserver регистрирует свой собственный IP для этого svc, поэтому выполнение ksp get endpoints kubernetes должно предоставить вам API IP / PORT)

person Radek 'Goblin' Pieczonka    schedule 15.01.2018
comment
Спасибо, kubectl get svc kubernetes -o yaml показывает именно то, что вы ожидали. сеть pod-to-pod работает найти (я могу пинговать pod с разных узлов. проверка kube-proxy далее - person christian; 16.01.2018
comment
kube-proxy имеет авт. проблемы: 15 января, 22:05:48 worker-2 kube-proxy [2920]: E0115 22: 05: 48.880162 2920 refctor.go: 205] k8s.io/kubernetes/pkg/client/informers/informers_generated/internalversion/factory. go: 85: не удалось перечислить * core.Endpoints: конечные точки запрещены: пользовательская система: анонимный не может перечислить конечные точки в области кластера - person christian; 16.01.2018
comment
Я проверил свой файл kubeconfig, и пользовательский раздел был пуст. как ты сказал. моя вина. Благодарность! - person christian; 16.01.2018
comment
@christian, какой именно файл и какой раздел вы исправили, чтобы это исправить? - person bstpierre; 16.02.2018

Я использовал kubespray (выпуск v2.5.0), чтобы попытаться настроить кластер kubernetes (версия 1.10.4) на Openstack, и у меня возникла проблема с точно такими же сообщениями об ошибках. Google привел меня сюда, но не дал решения этой проблемы.

Мое последнее решение - изменить параметр kube_proxy_mode в inventory / mycluster / group_vars / kube-cluster.yml со значения по умолчанию iptables на ipvs:

# Kube-proxy proxyMode configuration.
# Can be ipvs, iptables
kube_proxy_mode: ipvs

После этого повторно запустите команду ansible playbook, тогда эта проблема исчезнет, ​​и все службы / поды будут работать должным образом. Надеюсь, это будет полезно для тех, кто пытается с той же цепочкой инструментов настроить кластер кубернетов.

person Edward Zhang    schedule 09.07.2018
comment
ты случайно использовал бязь? - person oz123; 27.07.2018