Связь между абонентами с именем DNS не работает в Куберне - PullRequest
0 голосов
/ 14 апреля 2020

Я установил Kubernetes (1.17.3) на одном сервере (не на виртуальной машине) с фланелью (v0.11.0-amd64), используя kubeadm. Затем я установил grafana и prometheus и могу получить доступ к обоим на NodePort http://<serverip>:31000

Теперь, когда я пытаюсь получить доступ к сервису prometheus из grafana, возникает ошибка его выдачи Could not resolve host: prometheus-server;

Я начинаю устранять неполадки и выполняю следующие шаги

  • проверено, что podsCIDR настроен

    kubectl get nodes -o jsonpath='{.items[*].spec.podCIDR}' 10.244.0.0/24

  • Завиток IP-адресов и DNS Имя службы

    # curl 10.244.0.33:9090 <a href="/prometheus/graph">Found</a>

    # curl 10.109.215.27:9090 <a href="/prometheus/graph">Found</a>

    # curl http://prometheus-server:9090 curl: (6) Could not resolve host: prometheus-server; Unknown error

  • Мой /etc/resolv.conf был пуст, и я добавил запись ниже, но все еще безуспешно

    search cluster.local nameserver <IP of Server>

  • Ниже выводятся журналы CoreDNS

    kubectl logs -f coredns-6955765f44-cnhtz -n kube-system .:53 [INFO] plugin/reload: Running configuration MD5 = 4e235fcc3696966e76816bcd9034ebc7 CoreDNS-1.6.5 linux/amd64, go1.13.4, c2fd1b2 [ERROR] plugin/errors: 2 2339874627451903403.2757028323724952357. HINFO: read udp 10.244.0.13:38879->8.8.4.4:53: read: no route to host [ERROR] plugin/errors: 2 2339874627451903403.2757028323724952357. HINFO: read udp 10.244.0.13:53266->8.8.4.4:53: i/o timeout [ERROR] plugin/errors: 2 2339874627451903403.2757028323724952357. HINFO: read udp 10.244.0.13:37289->8.8.8.8:53: i/o timeout [ERROR] plugin/errors: 2 2339874627451903403.2757028323724952357. HINFO: read udp 10.244.0.13:44281->8.8.4.4:53: read: no route to host

Update1:

В ответ на @KoopaKiller я запускаю curl http://prometheus-server: 9090 ? от хоста и от графана-стручка (от графены-стручка на самом деле не отвечает на IP-адреса). Я установил Прометей и Графану с манифестом, и оба они находятся в одном и том же пространстве имен.

kubectl get pods -A
NAMESPACE              NAME                                             READY   STATUS          
kube-system            coredns-6955765f44-cnhtz                         1/1     Running         
kube-system            coredns-6955765f44-d9wrj                         1/1     Running         
kube-system            kube-flannel-ds-amd64-rbsbv                      1/1     Running         
kube-system            kube-proxy-nblnq                                 1/1     Running         
monitoring-logging     grafana-b57ccddf9-p7w2q                          1/1     Running                 
monitoring-logging     prometheus-server-65d7dc7999-frd8k               2/2     Running 

Еще одна вещь, которую я заметил в событиях cornns, касается отсутствующего файла "/run/flannel/subnet.env" но файл доступен, похоже, он воссоздается при каждой перезагрузке, и CoreDNS находит его очень поздно.

Events:
  Type     Reason                   Message
  ----     ------                   -------
  Warning  FailedCreatePodSandBox   Failed to create pod sandbox: rpc error: code = Unknown desc = failed to set up sandbox container "d69af6411310ae3c4865a3ddce0667a40092b0dcf55eb5f8ddb642e503dcc0c5" network for pod "coredns-6955765f44-d9wrj": networkPlugin cni failed to set up pod "coredns-6955765f44-d9wrj_kube-system" network: open /run/flannel/subnet.env: no such file or directory
  Warning  FailedCreatePodSandBox   Failed to create pod sandbox: rpc error: code = Unknown desc = failed to set up sandbox container "b6199b3ce4a769c0ccfef6f247763beb1ca0231de52f6309d2b2f122844746ee" network for pod "coredns-6955765f44-d9wrj": networkPlugin cni failed to set up pod "coredns-6955765f44-d9wrj_kube-system" network: open /run/flannel/subnet.env: no such file or directory
  Normal   SandboxChanged           Pod sandbox changed, it will be killed and re-created.
  Warning  FailedCreatePodSandBox   Failed to create pod sandbox: rpc error: code = Unknown desc = failed to set up sandbox container "097dbf97858d8ea3510e8337eb9b0bc8baf966ab51a2a56971e8ae54c5b516a6" network for pod "coredns-6955765f44-d9wrj": networkPlugin cni failed to set up pod "coredns-6955765f44-d9wrj_kube-system" network: open /run/flannel/subnet.env: no such file or directory
  Normal   Pulled                   Container image "k8s.gcr.io/coredns:1.6.5" already present on machine
  Normal   Created                  Created container coredns
  Normal   Started                  Started container coredns

Update2: Я перешел по ссылке на отладочный DNS, и он показывает результат для

kubectl exec -ti dnsutils -- nslookup kubernetes.default
kubectl exec dnsutils cat /etc/resolv.conf

Затем я добавил плагин журнала в конфигурацию CoreDNS и понял, что CoreDNS не получает DNS-запросов, отключил мой firewalld, и все начало работать как ожидалось, но почему он не работает с firewalld, мои открытые порты следуют , он имеет порты для фланели тоже

firewall-cmd --list-ports
6443/tcp 2379-2380/tcp 10250/tcp 10251/tcp 10252/tcp 30000-32767/tcp 8080/tcp 8443/tcp 8285/udp 8472/udp 502/tcp

1 Ответ

1 голос
/ 16 апреля 2020

Чтобы это работало без отключения firewalld, я должен добавить приведенное ниже правило, и все начинает работать с dnsnames

firewall-cmd --add-masquerade --permanent
firewall-cmd --reload
systemctl restart firewalld

Я получил подсказку по ссылке ниже, но рассмотрим более подробно, зачем нам это нужно?

Как я могу использовать фланель, не отключая firewalld (Kubernetes)

...