Kubeadm: Новое развертывание с CoreDNS не разрешает поиск DNS

Созданный на 14 авг. 2018  ·  22Комментарии  ·  Источник: kubernetes/kubeadm

Спасибо за сообщение о проблеме! Прежде чем нажимать кнопку, ответьте на эти вопросы.

Это ОТЧЕТ ОБ ОШИБКЕ или ЗАПРОС О ФУНКЦИОНИРОВАНИИ?

ОТЧЕТ ОБ ОШИБКЕ

Версии

версия kubeadm (используйте kubeadm version ):

{
  "clientVersion": {
    "major": "1",
    "minor": "11",
    "gitVersion": "v1.11.2",
    "gitCommit": "bb9ffb1654d4a729bb4cec18ff088eacc153c239",
    "gitTreeState": "clean",
    "buildDate": "2018-08-07T23:14:39Z",
    "goVersion": "go1.10.3",
    "compiler": "gc",
    "platform": "linux/amd64"
  }
}

Окружающая среда :

  • Версия Kubernetes (используйте kubectl version ):
{
  "clientVersion": {
    "major": "1",
    "minor": "11",
    "gitVersion": "v1.11.2",
    "gitCommit": "bb9ffb1654d4a729bb4cec18ff088eacc153c239",
    "gitTreeState": "clean",
    "buildDate": "2018-08-07T23:17:28Z",
    "goVersion": "go1.10.3",
    "compiler": "gc",
    "platform": "linux/amd64"
  },
  "serverVersion": {
    "major": "1",
    "minor": "11",
    "gitVersion": "v1.11.2",
    "gitCommit": "bb9ffb1654d4a729bb4cec18ff088eacc153c239",
    "gitTreeState": "clean",
    "buildDate": "2018-08-07T23:08:19Z",
    "goVersion": "go1.10.3",
    "compiler": "gc",
    "platform": "linux/amd64"
  }
}
  • Облачный провайдер или конфигурация оборудования :
    CentosOS 7 ВМ
  • ОС (например, из / etc / os-release):
    CentOS Linux версии 7.5.1804 (Core)
  • Ядро (например, uname -a ):
    Linux K8S-master 3.10.0-862.9.1.el7.x86_64 # 1 SMP Пн, 16 июля, 16:29:36 UTC 2018 x86_64 x86_64 x86_64 GNU / Linux
  • Другие :
    Нетворкинг с фланелью
$ kubectl get all --all-namespaces 
NAMESPACE     NAME                                     READY     STATUS    RESTARTS   AGE
kube-system   pod/coredns-78fcdf6894-bvtcg             1/1       Running   2          3h
kube-system   pod/coredns-78fcdf6894-lq7st             1/1       Running   2          3h
kube-system   pod/etcd-k8s-master                      1/1       Running   1          3h
kube-system   pod/kube-apiserver-k8s-master            1/1       Running   1          3h
kube-system   pod/kube-controller-manager-k8s-master   1/1       Running   1          3h
kube-system   pod/kube-flannel-ds-6tgqf                1/1       Running   2          3h
kube-system   pod/kube-flannel-ds-cn4ql                1/1       Running   1          3h
kube-system   pod/kube-proxy-cjlvz                     1/1       Running   1          3h
kube-system   pod/kube-proxy-w7ts7                     1/1       Running   1          3h
kube-system   pod/kube-scheduler-k8s-master            1/1       Running   1          3h

NAMESPACE   NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
default     service/kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   3h

NAMESPACE     NAME                             DESIRED   CURRENT   READY     UP-TO-DATE   AVAILABLE   NODE SELECTOR                   AGE
kube-system   daemonset.apps/kube-flannel-ds   2         2         2         2            2           beta.kubernetes.io/arch=amd64   3h
kube-system   daemonset.apps/kube-proxy        2         2         2         2            2           beta.kubernetes.io/arch=amd64   3h

NAMESPACE     NAME                      DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
kube-system   deployment.apps/coredns   2         2         2            2           3h

NAMESPACE     NAME                                 DESIRED   CURRENT   READY     AGE
kube-system   replicaset.apps/coredns-78fcdf6894   2         2         2         3h

Что случилось?

Я создал сервис, чтобы модуль мог скручивать другой модуль, но имя никогда не разрешается.
Выполнение в модуле:

# cat /etc/resolv.conf 
nameserver 10.96.0.10
search default.svc.cluster.local svc.cluster.local cluster.local
options ndots:5

В более старой установке, где по умолчанию использовался kube-dns, я помню службу с IP 10.96.0.10 с именем «kube-dns». В данной установке такой услуги нет.

curl my-service 
curl: (6) Could not resolve host: my-service

curl my-service.default.svc.cluster.local 
curl: (6) Could not resolve host: my-service.default.svc.cluster.local

curl www.google.com
curl: (6) Could not resolve host: www.google.com

Чего вы ожидали?

Поиск DNS должен разрешить

Как это воспроизвести (максимально минимально и точно)?

Свежая установка с kubeadm и flannel, CentOS 7 с одним узлом и мастером, также выступающим в качестве узла.
Создайте контейнер и сервис, попробуйте свернуть контейнер внутри контейнера.

Что еще нам нужно знать?

IP-адрес, который я вижу внутри /etc/resolv.conf (10.96.0.10), тот же, что и у меня с kube-dns, но на этот раз я ничего не вижу в 10.96.0.10.

$ kubectl logs -f --namespace=kube-system coredns-78fcdf6894-bvtcg 
.:53
CoreDNS-1.1.3
linux/amd64, go1.10.1, b0fd575c
2018/08/14 15:34:06 [INFO] CoreDNS-1.1.3
2018/08/14 15:34:06 [INFO] linux/amd64, go1.10.1, b0fd575c
2018/08/14 15:34:06 [INFO] plugin/reload: Running configuration MD5 = 2a066f12ec80aeb2b92740dd74c17138
^C
$ kubectl logs -f --namespace=kube-system coredns-78fcdf6894-lq7st 
.:53
2018/08/14 15:34:06 [INFO] CoreDNS-1.1.3
2018/08/14 15:34:06 [INFO] linux/amd64, go1.10.1, b0fd575c
2018/08/14 15:34:06 [INFO] plugin/reload: Running configuration MD5 = 2a066f12ec80aeb2b92740dd74c17138
CoreDNS-1.1.3
linux/amd64, go1.10.1, b0fd575c
help wanted prioritawaiting-more-evidence

Самый полезный комментарий

Пожалуйста, проверьте переменную clusterDNS в /var/lib/kubelet/config.yaml . Для нашей конфигурации это было установлено (неправильно) на 10.96.0.10 тогда как это должно было быть 10.244.240.10 (это то, с чем мы загрузили наш кластер). Изменение этого параметра и перезапуск kubelet устранили проблему для нас. Однако ваш пробег может отличаться.

Все 22 Комментарий

По какой-то причине в вашем кластере нет службы kube-dns .
Сначала вам нужно будет воссоздать это вручную, чтобы исправить ситуацию. Затем мы можем попытаться выяснить, как он исчез.

Вы можете использовать этот yaml для создания службы с kubectl apply -f ...

apiVersion: v1
kind: Service
metadata:
  name: kube-dns
  namespace: kube-system
  annotations:
    prometheus.io/port: "9153"
    prometheus.io/scrape: "true"
  labels:
    k8s-app: kube-dns
    kubernetes.io/cluster-service: "true"
    kubernetes.io/name: "CoreDNS"
spec:
  selector:
    k8s-app: kube-dns
  clusterIP: 10.96.0.10
  ports:
  - name: dns
    port: 53
    protocol: UDP
  - name: dns-tcp
    port: 53
    protocol: TCP

Примечание. Это нелогично, что имя службы CoreDNS по-прежнему называется «kube-dns», но оно выбирает модули coredns (которые используют метку селектора «kube-dns»).

У меня та же проблема, что и у OP, и описание и вариант использования примерно такие же: kubeadm на Centos 7.5 с одним мастером, который также работает как рабочий узел. У меня такая же проблема, и у меня есть услуга:

λ k get all --all-namespaces
NAMESPACE        NAME                                                READY     STATUS             RESTARTS   AGE
default          pod/busybox                                         0/1       Error              0          28m
default          pod/gitlab-gitlab-fd8b9fb85-26mkz                   0/1       CrashLoopBackOff   6          50m
default          pod/gitlab-minio-7fb7886d94-2zsff                   1/1       Running            0          50m
default          pod/gitlab-postgresql-8684bb6656-ltxjm              1/1       Running            0          50m
default          pod/gitlab-redis-785447c586-84x4c                   1/1       Running            0          50m
default          pod/ldap-79bb8c66b9-68v9f                           1/1       Running            0          2d
default          pod/local-volume-provisioner-dkxm9                  1/1       Running            0          2d
kube-system      pod/coredns-78fcdf6894-2t8tv                        1/1       Running            0          2d
kube-system      pod/coredns-78fcdf6894-wvq26                        1/1       Running            0          2d
kube-system      pod/etcd-server1.stitches.tech                      1/1       Running            0          2d
kube-system      pod/kube-apiserver-server1.domain            1/1       Running            0          2d
kube-system      pod/kube-controller-manager-server1.domain   1/1       Running            0          2d
kube-system      pod/kube-flannel-ds-m9cz5                           1/1       Running            0          2d
kube-system      pod/kube-proxy-qhr8p                                1/1       Running            0          2d
kube-system      pod/kube-scheduler-server1.domain            1/1       Running            0          2d
kube-system      pod/kubernetes-dashboard-6948bdb78-qnp4b            1/1       Running            0          2d
kube-system      pod/tiller-deploy-56c4cf647b-64w8v                  1/1       Running            0          2d
metallb-system   pod/controller-9c57dbd4-fqhzb                       1/1       Running            0          2d
metallb-system   pod/speaker-tngv7                                   1/1       Running            0          2d

NAMESPACE     NAME                           TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)                                   AGE
default       service/gitlab-gitlab          LoadBalancer   10.102.204.34   192.168.1.201   22:32208/TCP,80:32194/TCP,443:31370/TCP   50m
default       service/gitlab-minio           ClusterIP      None            <none>          9000/TCP                                  50m
default       service/gitlab-postgresql      ClusterIP      10.108.66.88    <none>          5432/TCP                                  50m
default       service/gitlab-redis           ClusterIP      10.97.59.57     <none>          6379/TCP                                  50m
default       service/kubernetes             ClusterIP      10.96.0.1       <none>          443/TCP                                   2d
default       service/ldap-service           LoadBalancer   10.101.250.10   192.168.1.200   389:32231/TCP                             2d
kube-system   service/kube-dns               ClusterIP      10.96.0.10      <none>          53/UDP,53/TCP                             2d
kube-system   service/kubernetes-dashboard   NodePort       10.104.132.52   <none>          443:30924/TCP                             2d
kube-system   service/tiller-deploy          ClusterIP      10.96.67.163    <none>          44134/TCP                                 2d

NAMESPACE        NAME                                      DESIRED   CURRENT   READY     UP-TO-DATE   AVAILABLE   NODE SELECTOR                   AGE
default          daemonset.apps/local-volume-provisioner   1         1         1         1            1           <none>                          2d
kube-system      daemonset.apps/kube-flannel-ds            1         1         1         1            1           beta.kubernetes.io/arch=amd64   2d
kube-system      daemonset.apps/kube-proxy                 1         1         1         1            1           beta.kubernetes.io/arch=amd64   2d
metallb-system   daemonset.apps/speaker                    1         1         1         1            1           <none>                          2d

NAMESPACE        NAME                                   DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
default          deployment.apps/gitlab-gitlab          1         1         1            0           50m
default          deployment.apps/gitlab-minio           1         1         1            1           50m
default          deployment.apps/gitlab-postgresql      1         1         1            1           50m
default          deployment.apps/gitlab-redis           1         1         1            1           50m
default          deployment.apps/ldap                   1         1         1            1           2d
kube-system      deployment.apps/coredns                2         2         2            2           2d
kube-system      deployment.apps/kubernetes-dashboard   1         1         1            1           2d
kube-system      deployment.apps/tiller-deploy          1         1         1            1           2d
metallb-system   deployment.apps/controller             1         1         1            1           2d

NAMESPACE        NAME                                             DESIRED   CURRENT   READY     AGE
default          replicaset.apps/gitlab-gitlab-fd8b9fb85          1         1         0         50m
default          replicaset.apps/gitlab-minio-7fb7886d94          1         1         1         50m
default          replicaset.apps/gitlab-postgresql-8684bb6656     1         1         1         50m
default          replicaset.apps/gitlab-redis-785447c586          1         1         1         50m
default          replicaset.apps/ldap-79bb8c66b9                  1         1         1         2d
kube-system      replicaset.apps/coredns-78fcdf6894               2         2         2         2d
kube-system      replicaset.apps/kubernetes-dashboard-6948bdb78   1         1         1         2d
kube-system      replicaset.apps/tiller-deploy-56c4cf647b         1         1         1         2d
kube-system      replicaset.apps/tiller-deploy-64c9d747bd         0         0         0         2d
metallb-system   replicaset.apps/controller-9c57dbd4              1         1         1         2d

Из модулей CoreDNS я не могу выполнять поиск во внешнем мире, что кажется странным:

root on server1 at 11:45:48 AM in /internal/gitlab
λ k exec -it coredns-78fcdf6894-2t8tv /bin/sh -n kube-system
/ # cat /etc/resolv.conf
nameserver 192.168.1.254
nameserver 2600:1700:c540:64c0::1
search attlocal.net domain
/ # host gitlab
;; connection timed out; no servers could be reached
/ # host google.com
;; connection timed out; no servers could be reached

Для меня это означает, что модуль CoreDNS не может видеть свой вышестоящий сервер имен, который является 192.168.1.254, IP-адресом сети хоста. Я на правильном пути?

Но что еще более странно, так это то, что модуль, работающий на этом главном узле, МОЖЕТ легко достичь этого IP-адреса:

λ kubectl run -it --rm --restart=Never --image=infoblox/dnstools:latest dnstools
If you don't see a command prompt, try pressing enter.
dnstools# ping 192.168.1.254
PING 192.168.1.254 (192.168.1.254): 56 data bytes
64 bytes from 192.168.1.254: seq=0 ttl=63 time=1.102 ms

Можете ли вы попробовать с dig ?

dig google.com @192.168.1.254

Также обычно системы с допустимой конфигурацией ipv6 сначала пытаются выполнить разрешение с помощью этого преобразователя ipv6. Если это не удается, эти системы называют это отказом. Сначала взгляните на команду dig, если она работает, я бы посмотрел, настроена ли система с двойным стеком ipv4 ipv6 или нет.

Еще раз спасибо

Мое решение (хотя на данный момент оно довольно ужасное) заключалось в том, чтобы просто отключить службу firewalld в моей ОС:

sudo systemctl stop firewalld
sudo systemctl disable firewalld

Помните, что на самом деле делает эта команда. Делайте это на свой страх и риск.

Я столкнулся с той же проблемой с kubernetes 1.11.2 и flannel 0.10.0, развернутыми на виртуальной машине CentOS 7 через kubeadm с kube-proxy, настроенным на использование iptables. Что я заметил, так это то, что у меня не было модуля для модуля или модуля для обслуживания связи после первоначального развертывания. Глядя на цепочку FORWARD в iptables, kube-proxy устанавливает цепочку KUBE-FORWARD в качестве первого правила, которое после проверки должно обрабатывать весь трафик, описанный выше. Фланель добавила два правила после правил DROP и REJECT, которые используются по умолчанию в цепочке CentOS 7 FORWARD. Я заметил, что когда я удалил правило REJECT, правила, добавленные Flannel, обрабатывали трафик, и мои модули могли взаимодействовать с другими модулями и с IP-адресами служб.

Поскольку kube-proxy отслеживает изменение KUBE-FORWARD и предотвращает его изменение, я добавил два правила после правила KUBE-FORWARD, которое добавило ctstate NEW. Как только я добавлю эти правила, внутренний трафик будет обрабатываться так, как я ожидал.

rules

Пожалуйста, проверьте переменную clusterDNS в /var/lib/kubelet/config.yaml . Для нашей конфигурации это было установлено (неправильно) на 10.96.0.10 тогда как это должно было быть 10.244.240.10 (это то, с чем мы загрузили наш кластер). Изменение этого параметра и перезапуск kubelet устранили проблему для нас. Однако ваш пробег может отличаться.

@pkeuter , 10.244.0.0/16 - это cidr _pod_ по умолчанию для фланели. Если это так в вашем случае, тогда 10.244.240.10 будет IP-адресом модуля, который вы не должны использовать в качестве настройки IP-адреса cluster-dns (re: он может измениться, без балансировки нагрузки).

Нет:
image

Мы загрузили кластер с помощью: --pod-network-cidr=10.244.0.0/16 --service-cidr=10.244.240.0/20 , но, как я теперь вижу, есть некоторые совпадения, которые я все равно должен изменить :-) Так что спасибо за этот @chrisohaver!

Пожалуйста, проверьте переменную clusterDNS в /var/lib/kubelet/config.yaml . Для нашей конфигурации это было установлено (неправильно) на 10.96.0.10 тогда как это должно было быть 10.244.240.10 (это то, с чем мы загрузили наш кластер). Изменение этого параметра и перезапуск kubelet устранили проблему для нас. Однако ваш пробег может отличаться.

Спасибо за это - это помогло мне отследить, почему мои внутренние DNS-запросы не разрешались.

Для справки, мне пришлось установить значение clusterDNS на 192.168.0.10, когда я инициализирую kubeadm с --service-cidr = 192.168.0.0 / 16, и моя служба kube-dns имеет это как внешний IP-адрес.

Также следует отметить, что простого перезапуска kubelet было недостаточно - мне пришлось перезапустить свои поды, поэтому /etc/resolv.conf был обновлен. Один из выполненных запросов разрешается, как и ожидалось.

На coreDNS возник ряд проблем, которые с тех пор были решены. Учитывая перегруженный набор проблем, я собираюсь закрыть эту.

Если есть конкретные репро на версии 1.12+, не стесняйтесь открывать, и мы рассмотрим их как можно скорее.

Пожалуйста, проверьте переменную clusterDNS в /var/lib/kubelet/config.yaml . Для нашей конфигурации это было установлено (неправильно) на 10.96.0.10 тогда как это должно было быть 10.244.240.10 (это то, с чем мы загрузили наш кластер). Изменение этого параметра и перезапуск kubelet устранили проблему для нас. Однако ваш пробег может отличаться.

отлично, и я использую calico, какой адрес clusterDNS мне следует установить?

Я сделал то же самое, но столкнулся с той же ошибкой, что мои стручки coredns не начали выдавать состояние ошибки

Я изменил свой ClusterDNS, но все еще без эффекта @justlooks

+1 Та же проблема в CentOS 7 и kubeadm 1.11

@timothysc

Добавление iptables -p FORWARD ACCEPT устранило проблему.

+1 Та же проблема в CentOS 7 и kubeadm 1.12

нашел решение проблемы.
удален лимит ресурсов на основном контроллере демона DNS, поскольку он достиг лимита процессора. что заставляло его перезапускаться.

Возможно, проблема с фланелью, в моем случае у бродяги есть интерфейс mutil, поэтому при развертывании фланели необходимо указать интерфейс: - --iface=eth1 , иначе возникнет та же проблема с DNS ...

https://github.com/kubernetes/kubernetes/issues/39701

vim https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml изменено следующим образом:

......
containers:
      - name: kube-flannel
        image: quay.io/coreos/flannel:v0.11.0-amd64
        command:
        - /opt/bin/flanneld
        args:
        - --ip-masq
        - --kube-subnet-mgr
        - --iface=eth1
......

Спасибо @pkeuter ,

Была ли эта страница полезной?
0 / 5 - 0 рейтинги