Kubeadm: Nouveau déploiement avec CoreDNS ne résolvant aucune recherche DNS

Créé le 14 août 2018  ·  22Commentaires  ·  Source: kubernetes/kubeadm

Merci d'avoir signalé un problème! Avant d'appuyer sur le bouton, veuillez répondre à ces questions.

S'agit-il d'un rapport de bogue ou d'une demande de fonctionnalité?

RAPPORT D'ERREUR

Versions

version kubeadm (utilisez 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"
  }
}

Environnement :

  • Version Kubernetes (utilisez 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"
  }
}
  • Fournisseur de cloud ou configuration matérielle :
    Machine virtuelle CentosOS 7
  • OS (par exemple à partir de / etc / os-release):
    CentOS Linux version 7.5.1804 (Core)
  • Noyau (par exemple uname -a ):
    Linux K8S-master 3.10.0-862.9.1.el7.x86_64 # 1 SMP Mon Jul 16 16:29:36 UTC 2018 x86_64 x86_64 x86_64 GNU / Linux
  • Autres :
    Réseautage avec flanelle
$ 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

Que s'est-il passé?

J'ai créé un service pour qu'un pod puisse boucler un autre pod, mais le nom n'est jamais résolu.
Exécution dans le pod:

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

Dans une ancienne installation où kube-dns était la valeur par défaut, je me souviens d'un service avec l'IP 10.96.0.10 avec le nom "kube-dns". Cette installation ne dispose pas d'un tel service.

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

À quoi vous attendiez-vous?

La recherche DNS devrait résoudre

Comment le reproduire (le plus minimal et le plus précisément possible)?

Nouvelle installation avec kubeadm et flannel, CentOS 7 avec un nœud et un maître faisant également office de nœud.
Créez un pod et un service, essayez de boucler le pod à l'intérieur d'un pod.

Y a-t-il autre chose que nous devons savoir?

L'adresse IP que je vois dans /etc/resolv.conf (10.96.0.10) est la même que j'avais avec kube-dns, mais cette fois je ne vois rien dans 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

Commentaire le plus utile

Veuillez vérifier la variable clusterDNS dans /var/lib/kubelet/config.yaml . Pour notre configuration, cela a été défini (incorrectement) sur 10.96.0.10 alors qu'il aurait dû être 10.244.240.10 (c'est ce avec quoi nous avons amorcé notre cluster). Changer cela et redémarrer kubelet a résolu le problème pour nous. Votre kilométrage peut cependant varier.

Tous les 22 commentaires

Pour une raison quelconque, il n'y a pas de service kube-dns sur votre cluster.
Vous devrez d'abord recréer cela à la main pour réparer les choses. Ensuite, nous pouvons essayer de comprendre comment il a disparu.

Vous pouvez utiliser ce yaml pour créer le service avec 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

Remarque: il est contre-intuitif que le nom du service CoreDNS soit toujours nommé "kube-dns", mais il sélectionne les pods coredns (qui utilisent le libellé de sélecteur "kube-dns ').

J'ai le même problème que OP, et la description et le cas d'utilisation sont à peu près les mêmes: kubeadm sur Centos 7.5 avec un maître qui fonctionne également en tant que nœud de travail. J'ai le même problème et je le service existe:

λ 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

À partir des pods CoreDNS, je n'arrive pas à faire des recherches vers le monde extérieur, ce qui semble étrange:

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

Pour moi, cela signifie que le pod CoreDNS ne peut pas voir son serveur de noms en amont, qui est 192.168.1.254, l'adresse IP du réseau hôte. Suis-je sur la bonne voie?

Mais, ce qui est encore plus étrange, c'est qu'un pod fonctionnant sur ce nœud maître PEUT atteindre cette adresse IP très bien:

λ 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

Pouvez-vous essayer avec dig ?

dig google.com @192.168.1.254

En général, les systèmes avec une configuration ipv6 valide essaieront également de résoudre d'abord avec ce résolveur ipv6. Si cela échoue, ces systèmes appellent cela un échec. Jetez un coup d'œil à la commande dig d'abord si cela fonctionne, je regarderais pour voir si le système est configuré avec ipv4 ipv6 double pile ou non.

Merci encore à @mauilion d'avoir passé autant de temps à m'aider à diagnostiquer ce problème aujourd'hui!

Ma solution (bien que ce soit assez terrible pour le moment) consistait simplement à désactiver le service firewalld sur mon OS hôte:

sudo systemctl stop firewalld
sudo systemctl disable firewalld

Gardez à l'esprit ce que fait réellement cette commande. Faites-le à vos risques et périls.

J'ai rencontré le même problème avec kubernetes 1.11.2 et flannel 0.10.0 déployés sur une machine virtuelle CentOS 7 via kubeadm avec un kube-proxy configuré pour utiliser iptables. Ce que j'ai remarqué, c'est que je n'avais pas de communication pod à pod ou pod à service après le déploiement initial. En regardant la chaîne FORWARD sur iptables, kube-proxy a mis en place une chaîne KUBE-FORWARD comme première règle qui devrait, après inspection, gérer tout le trafic que j'ai décrit ci-dessus. Flannel a ajouté deux règles après les règles DROP et REJECT qui sont par défaut dans la chaîne CentOS 7 FORWARD. J'ai remarqué que lorsque j'ai supprimé la règle REJECT, les règles ajoutées par Flannel traiteraient le trafic et mes pods pouvaient communiquer avec d'autres pods et avec des ips de service.

Puisque kube-proxy surveille le changement de KUBE-FORWARD et l'empêche de changer, j'ai ajouté deux règles après la règle KUBE-FORWARD qui a ajouté le ctstate de NEW. Une fois que j'ai ajouté ces règles, le trafic interne serait traité comme je m'y attendais.

rules

Veuillez vérifier la variable clusterDNS dans /var/lib/kubelet/config.yaml . Pour notre configuration, cela a été défini (incorrectement) sur 10.96.0.10 alors qu'il aurait dû être 10.244.240.10 (c'est ce avec quoi nous avons amorcé notre cluster). Changer cela et redémarrer kubelet a résolu le problème pour nous. Votre kilométrage peut cependant varier.

@pkeuter , 10.244.0.0/16 est la valeur par défaut du _pod_ cidr pour la flanelle. Si tel est le cas dans votre cas, alors 10.244.240.10 serait une adresse IP de pod, que vous ne devriez pas utiliser comme paramètre IP de cluster-dns (re: cela pourrait changer, pas d'équilibrage de charge).

Ce n'est pas:
image

Nous avons amorcé le cluster avec: --pod-network-cidr=10.244.0.0/16 --service-cidr=10.244.240.0/20 , mais comme je le vois maintenant, il y a un chevauchement, que je devrais quand même changer :-) Alors merci pour ça @chrisohaver!

Veuillez vérifier la variable clusterDNS dans /var/lib/kubelet/config.yaml . Pour notre configuration, cela a été défini (incorrectement) sur 10.96.0.10 alors qu'il aurait dû être 10.244.240.10 (c'est ce avec quoi nous avons amorcé notre cluster). Changer cela et redémarrer kubelet a résolu le problème pour nous. Votre kilométrage peut cependant varier.

Merci pour cela - cela m'a aidé à déterminer pourquoi mes requêtes DNS internes ne se résolvaient pas.

Pour référence, j'ai dû définir ma valeur clusterDNS sur 192.168.0.10 lorsque j'initialise kubeadm avec --service-cidr = 192.168.0.0 / 16 et mon service kube-dns l'a comme adresse IP externe.

Notez également que le simple fait de redémarrer kubelet n'était pas suffisant - j'ai dû redémarrer mes pods pour que /etc/resolv.conf soit mis à jour. Les demandes qui ont été traitées se résolvent comme prévu.

Il y avait un certain nombre de problèmes contradictoires sur coreDNS qui ont depuis été résolus. Compte tenu de l'ensemble surchargé de problèmes, je vais fermer celui-ci.

S'il y a des repro spécifiques sur 1.12+, n'hésitez pas à ouvrir et nous nous en occuperons dès que possible.

Veuillez vérifier la variable clusterDNS dans /var/lib/kubelet/config.yaml . Pour notre configuration, cela a été défini (incorrectement) sur 10.96.0.10 alors qu'il aurait dû être 10.244.240.10 (c'est ce avec quoi nous avons amorcé notre cluster). Changer cela et redémarrer kubelet a résolu le problème pour nous. Votre kilométrage peut cependant varier.

super, et j'utilise calico quelle adresse clusterDNS dois-je définir?

J'ai fait la même chose mais face à la même erreur, mes pods coredns ne commencent pas à donner un état d'erreur

J'ai changé mon ClusterDNS mais toujours aucun effet @justlooks

+1 Face au même problème dans CentOS 7 et kubeadm 1.11

@timothysc

L'ajout de iptables -p FORWARD ACCEPT résolu le problème

+1 Face au même problème dans CentOS 7 et kubeadm 1.12

trouvé la résolution du problème.
Suppression de la limite de ressources sur le contrôleur de démon DNS principal car il atteignait la limite du processeur. ce qui le faisait redémarrer.

Peut-être que le problème de la flanelle, dans mon cas, le vagabond a une interface réseau mutil, il faut donc spécifier l'interface lors du déploiement de la flanelle: - --iface=eth1 , sinon le même problème DNS va se produire ...

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

vim https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml modifié comme suit:

......
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
......

Merci @pkeuter , cela a résolu le problème et j'ai dû supprimer les pods coredns et les laisser le recréer.

Cette page vous a été utile?
0 / 5 - 0 notes