`kube-dns` получает неправильный адрес конечной точки с причинами фланели Ошибка службы службы POD

robert спросил: 10 мая 2018 в 04:08 в: kubernetes

Я устанавливаю кластер kubernetes (v1.9.3) из 3 узлов на Ubuntu 16.04.

Предварительная настройка. Я очистил правила iptables и выполнил k8s-документы для фланели со следующей командой для инициализации кластера:

# kubeadm init --apiserver-advertise-address 192.168.56.20 --pod-network-cidr=10.244.0.0/16 --kubernetes-version 1.9.3
# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.10.0/Documentation/kube-flannel.yml

Предыдущая команда казалась успешной:

# kubectl -n kube-system -n kube-system get pods
NAME                             READY     STATUS    RESTARTS   AGE
etcd-master                      1/1       Running   0          3m
kube-apiserver-master            1/1       Running   0          2m
kube-controller-manager-master   1/1       Running   0          2m
kube-dns-6f4fd4bdf-4c76v         3/3       Running   0          3m
kube-flannel-ds-wbx97            1/1       Running   0          1m
kube-proxy-x65lv                 1/1       Running   0          3m
kube-scheduler-master            1/1       Running   0          2m 

Но проблема заключается в том, что код kube-dns получил неправильный адрес конечной точки службы, это можно увидеть с помощью следующих команд:

# kubectl get ep kube-dns --namespace=kube-system            
NAME       ENDPOINTS                     AGE
kube-dns   172.17.0.2:53,172.17.0.2:53   3m
root@master:~# kubectl describe service kube-dns -n kube-system           
Name:              kube-dns
Namespace:         kube-system
Labels:            k8s-app=kube-dns
                   kubernetes.io/cluster-service=true
                   kubernetes.io/name=KubeDNS
Annotations:       <none>
Selector:          k8s-app=kube-dns
Type:              ClusterIP
IP:                10.96.0.10
Port:              dns  53/UDP
TargetPort:        53/UDP
Endpoints:         172.17.0.2:53
Port:              dns-tcp  53/TCP
TargetPort:        53/TCP
Endpoints:         172.17.0.2:53
Session Affinity:  None
Events:            <none>

172.17.0.2 - это IP-адрес, назначенный мостом докеров (docker0) для контейнера kube-dns. При работе с сетевой настройкой k8s kube-dns должны иметь конечные точки с адресом из podSubnet (10.244.0.0/16).

Эффект текущей настройки все модули не будут работать с DNS, пока IP-связь в порядке.

Я попытался удалить модуль kube-dns, чтобы увидеть, что новые контейнеры kube-dns могут отображать конечные точки от podSubnet, но они этого не делают.

В журналах запуска 3 kube-dns нет никаких сообщений об ошибках.


1 ответ

robert ответил: 19 мая 2018 в 01:40

Я думаю, что я выяснил причину этого. Это предыдущий kubeadm reset не удалял интерфейсы cni и flannel.1. Таким образом, следующий kubeadm init делает kube-dns считает, что сетевой плагин Kubernetes уже установлен, прежде чем применять фланель yaml.

После проверки и удаления любых виртуальных сетевых адаптеров плагином flannel при разрыве кластера kubernetes, следующий kubeadm init может быть успешно без этой проблемы.

То же самое относится к Weave Net , который требует выполните weave reset, чтобы удалить оставшиеся виртуальные сетевые NIC.

Дополнительное видео по вопросу: `kube-dns` получает неправильный адрес конечной точки с причинами фланели Ошибка службы службы POD

Kubernetes: DNS and Name Discovery

CrashLoopBackoff, Pending, FailedMount and Friends: Debugging Common Kubernetes Cluster

Networking with Kubernetes