Flannel: Kubernetes no funciona con DNS: no hay comunicación entre el pod y el mundo exterior

Creado en 19 abr. 2018  ·  5Comentarios  ·  Fuente: coreos/flannel

Probablemente tengo un problema con el DNS de kubernetes ya que mi servicio no puede comunicarse con el mundo exterior (bitbucker.org).
De hecho encontré esta página:
https://kubernetes.io/docs/tasks/administer-cluster/dns-depuración-resolución/

y validarlo en mi clúster (sin minikube):

```
zordon @megazord :~$ kubectl exec busybox cat /etc/resolv.conf
servidor de nombres 10.96.0.10
buscar predeterminado.svc.cluster.local svc.cluster.local cluster.local
puntos de opciones: 5

and:

zordon<strong i="17">@megazord</strong>:~$ kubectl exec -ti busybox -- nslookup kubernetes.default
Server:    10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local

nslookup: can't resolve 'kubernetes.default'
command terminated with exit code 1
Any idea how can I resolve to be able connect from inside pod to outside world ?

This probably is related to Flannel, as connectivity from image run only by docker is avalible.
Whant to mention that I have run my cluster with this example: https://blog.alexellis.io/kubernetes-in-10-minutes/

I have also modify https://github.com/coreos/flannel/blob/master/Documentation/kube-flannel.yml
and pass argument --iface with my wifi card which has acces to internet but then kube-flannel-ds cannot start
from:

args:
        - --ip-masq
        - --kube-subnet-mgr
to:

argumentos:
- --ip-masq
- --kube-subnet-mgr
- --iface=wlan0ec5


zordon @megazord :~$ kubectl obtener pods -n kube-system
NOMBRE LISTO ESTADO REINICIA EDAD
etcd-megazord 1/1 Correr 1 21m
kube-apiserver-megazord 1/1 Correr 1 21m
kube-controller-manager-megazord 1/1 Ejecución 1 22m
kube-dns-86f4d74b45-8gh6q 3/3 En ejecución 5 22m
kube-flannel-ds-2wqqr 1/1 Correr 1 17m
kube-flannel-ds-59txb 1/1 Correr 1 15m
kube-proxy-bdxb4 1/1 Ejecución 1 15m
kube-proxy-mg44x 1/1 En ejecución 1 22m
kube-scheduler-megazord 1/1 Correr 1 22m
zordon @megazord :~$ kubectl obtener svc -n kube-system
NOMBRE TIPO CLÚSTER-IP IP EXTERNA PUERTO(S) EDAD
kube-dns ClusterIP 10.96.0.1053/UDP, 53/TCP 23m


zordon @megazord :~$ kubectl describe el servicio kube-dns -n kube-system
Nombre: kube-dns
Espacio de nombres: sistema kube
Etiquetas: k8s-app=kube-dns
kubernetes.io/cluster-service=true
kubernetes.io/name=KubeDNS
Anotaciones:
Selector: k8s-app=kube-dns
Tipo: IP de clúster
IP: 10.96.0.10
Puerto: dns 53/UDP
Puerto de destino: 53/UDP
Puntos finales: 10.244.0.27:53
Puerto: dns-tcp 53/TCP
Puerto de destino: 53/TCP
Puntos finales: 10.244.0.27:53
Afinidad de sesión: ninguna
Eventos:


zordon @megazord :~$ kubectl logs --namespace=kube-system $(kubectl get pods --namespace=kube-system -l k8s-app=kube-dns -o nombre) -c kubedns
I0419 17:40:11.473047 1 dns.go:48] versión: 1.14.8
I0419 17:40:11.473975 1 server.go:71] Uso de lectura de configuración del directorio: /kube-dns-config con período 10s
I0419 17:40:11.474024 1 server.go:119] BANDERA: --alsologtostderr="false"
I0419 17:40:11.474032 1 server.go:119] BANDERA: --config-dir="/kube-dns-config"
I0419 17:40:11.474037 1 server.go:119] BANDERA: --config-map=""
I0419 17:40:11.474041 1 server.go:119] BANDERA: --config-map-namespace="kube-system"
I0419 17:40:11.474044 1 server.go:119] BANDERA: --config-period="10s"
I0419 17:40:11.474049 1 server.go:119] BANDERA: --dns-bind-address="0.0.0.0"
I0419 17:40:11.474053 1 servidor.go:119] BANDERA: --dns-port="10053"
I0419 17:40:11.474058 1 server.go:119] BANDERA: --domain="cluster.local".
I0419 17:40:11.474063 1 servidor.go:119] BANDERA: --federaciones=""
I0419 17:40:11.474067 1 server.go:119] BANDERA: --healthz-port="8081"
I0419 17:40:11.474071 1 server.go:119] BANDERA: --initial-sync-timeout="1m0s"
I0419 17:40:11.474074 1 server.go:119] BANDERA: --kube-master-url=""
I0419 17:40:11.474079 1 server.go:119] BANDERA: --kubecfg-file=""
I0419 17:40:11.474082 1 server.go:119] BANDERA: --log-backtrace-at=":0"
I0419 17:40:11.474087 1 server.go:119] BANDERA: --log-dir=""
I0419 17:40:11.474091 1 server.go:119] BANDERA: --log-flush-frequency="5s"
I0419 17:40:11.474094 1 server.go:119] BANDERA: --logtostderr="true"
I0419 17:40:11.474098 1 server.go:119] BANDERA: --nameservers=""
I0419 17:40:11.474101 1 server.go:119] BANDERA: --stderrthreshold="2"
I0419 17:40:11.474104 1 servidor.go:119] BANDERA: --v="2"
I0419 17:40:11.474107 1 server.go:119] BANDERA: --version="false"
I0419 17:40:11.474113 1 servidor.go:119] BANDERA: --vmodule=""
I0419 17:40:11.474190 1 server.go:201] Iniciando servidor SkyDNS (0.0.0.0:10053)
I0419 17:40:11.488125 1 server.go:220] Métricas Skydns habilitadas (/metrics:10055)
I0419 17:40:11.488170 1 dns.go:146] Puntos finales de inicioControlador
I0419 17:40:11.488180 1 dns.go:149] Iniciando serviceController
I0419 17:40:11.488348 1 logs.go:41] skydns: listo para consultas en cluster.local. para tcp://0.0.0.0:10053 [caché 0]
I0419 17:40:11.488407 1 logs.go:41] skydns: listo para consultas en cluster.local. para udp://0.0.0.0:10053 [caché 0]
I0419 17:40:11.988549 1 dns.go:170] Servicios inicializados y puntos finales de apiserver
I0419 17:40:11.988609 1 server.go:135] Configuración del controlador Healthz (/preparación)
I0419 17:40:11.988641 1 server.go:140] Configuración del controlador de caché (/cache)
I0419 17:40:11.988649 1 servidor.go:126] Estado Puerto HTTP 8081


zordon @megazord :~$ kubectl logs --namespace=kube-system $(kubectl get pods --namespace=kube-system -l k8s-app=kube-dns -o nombre) -c dnsmasq
I0419 17:44:35.785171 1 main.go:76] opciones: {{/usr/sbin/dnsmasq [-k --cache-size=1000 --no-negcache --log-facility=- --server=/ clúster.local/127.0.0.1#10053 --server=/in-addr.arpa/127.0.0.1#10053 --server=/ip6.arpa/127.0.0.1#10053] verdadero} /etc/k8s/dns/dnsmasq -niñera 10000000000}
I0419 17:44:35.785336 1 nanny.go:94] Iniciando dnsmasq [-k --cache-size=1000 --no-negcache --log-facility=- --server=/cluster.local/127.0.0.1# 10053 --servidor=/en-addr.arpa/127.0.0.1#10053 --servidor=/ip6.arpa/127.0.0.1#10053]
I0419 17:44:35.876534 1 niñera.go:119]
W0419 17:44:35.876572 1 nanny.go:120] Obtuve EOF de stdout
I0419 17:44:35.876578 1 nanny.go:116] dnsmasq[26]: iniciado, versión 2.78 tamaño de caché 1000
I0419 17:44:35.876615 1 nanny.go:116] dnsmasq[26]: opciones de tiempo de compilación: IPv6 GNU-getopt no-DBus no-i18n no-IDN DHCP DHCPv6 no-Lua TFTP no-conntrack ipset auth no-DNSSEC loop -detectar innotificar
I0419 17:44:35.876632 1 nanny.go:116] dnsmasq[26]: usando el servidor de nombres 127.0.0.1#10053 para el dominio ip6.arpa
I0419 17:44:35.876642 1 nanny.go:116] dnsmasq[26]: usando el servidor de nombres 127.0.0.1#10053 para el dominio in-addr.arpa
I0419 17:44:35.876653 1 nanny.go:116] dnsmasq[26]: usando el servidor de nombres 127.0.0.1#10053 para el dominio cluster.local
I0419 17:44:35.876666 1 nanny.go:116] dnsmasq[26]: leyendo /etc/resolv.conf
I0419 17:44:35.876677 1 nanny.go:116] dnsmasq[26]: usando el servidor de nombres 127.0.0.1#10053 para el dominio ip6.arpa
I0419 17:44:35.876691 1 nanny.go:116] dnsmasq[26]: usando el servidor de nombres 127.0.0.1#10053 para el dominio in-addr.arpa
I0419 17:44:35.876701 1 nanny.go:116] dnsmasq[26]: usando el servidor de nombres 127.0.0.1#10053 para el dominio cluster.local
I0419 17:44:35.876709 1 nanny.go:116] dnsmasq[26]: usando el servidor de nombres 127.0.0.53#53
I0419 17:44:35.876717 1 nanny.go:116] dnsmasq[26]: leer /etc/hosts - 7 direcciones


zordon @megazord :~$ kubectl logs --namespace=kube-system $(kubectl get pods --namespace=kube-system -l k8s-app=kube-dns -o nombre) -c sidecar
I0419 17:45:06.726670 1 main.go:51] Versión v1.14.8
I0419 17:45:06.726781 1 server.go:45] Iniciando servidor (opciones {DnsMasqPort:53 DnsMasqAddr:127.0.0.1 DnsMasqPollIntervalMs:5000 Probes:[{Label:kubedns Server:127.0.0.1:10053 Name:kubernetes.default.svc .cluster.local. Intervalo:5s Tipo:33} {Etiqueta:dnsmasq Servidor:127.0.0.1:53 Nombre:kubernetes.default.svc.cluster.local.Intervalo:5s Tipo:33}] PrometheusAddr:0.0.0.0 PrometheusPort: 10054 PrometheusPath:/metrics PrometheusNamespace:kubedns})
I0419 17:45:06.726842 1 dnsprobe.go:75] Iniciando dnsProbe {Etiqueta:servidor kubedns:127.0.0.1:10053 Nombre:kubernetes.default.svc.cluster.local. Intervalo:5s Tipo:33}
I0419 17:45:06.726927 1 dnsprobe.go:75] Inicio de dnsProbe {Etiqueta:dnsmasq Server:127.0.0.1:53 Nombre:kubernetes.default.svc.cluster.local. Intervalo:5s Tipo:33}

**Master node:**

zordon @megazord :~$ ip -d ruta
unidifusión predeterminada a través de 192.168.1.1 dev wlp32s0 proto static scope global metric 600
unicast 10.244.0.0/24 dev cni0 proto kernel scope link src 10.244.0.1
unicast 10.244.1.0/24 a través de 10.244.1.0 dev flannel.1 proto boot scope global onlink
unicast 169.254.0.0/16 dev wlp32s0 proto boot scope link metric 1000
unicast 172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1
unicast 192.168.1.0/24 dev wlp32s0 proto kernel scope link src 192.168.1.110 métrica 600
zordon @megazord :~$ ip un
1: lo:mtu 65536 qdisc estado sin cola grupo DESCONOCIDO predeterminado qlen 1000
enlace/bucle invertido 00:00:00:00:00:00 brd 00:00:00:00:00:00
host de alcance inet 127.0.0.1/8 bajo
válido_lft para siempre preferido_lft para siempre
inet6 :: host de alcance 1/128
válido_lft para siempre preferido_lft para siempre
2: enp30s0:mtu 1500 qdisc pfifo_fast estado ABAJO grupo predeterminado qlen 1000
enlace/éter 4c:cc:6a:f8:7e:4b brd ff:ff:ff:ff:ff:ff
3: wlp32s0:mtu 1500 qdisc noqueue state UP grupo predeterminado qlen 1000
enlace/éter ec:08:6b:0c:9c:27 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.110/24 brd 192.168.1.255 alcance global wlp32s0
válido_lft para siempre preferido_lft para siempre
inet6 fe80::f632:2f08:9caa:2c82/64 enlace de alcance
válido_lft para siempre preferido_lft para siempre
4: ventana acoplable0:mtu 1500 qdisc noqueue state UP grupo predeterminado
enlace/éter 02:42:32:19:f7:5a brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 ámbito docker0 global
válido_lft para siempre preferido_lft para siempre
inet6 fe80::42:32ff:fe19:f75a/64 enlace de alcance
válido_lft para siempre preferido_lft para siempre
6: vethf9de74d @if5 :mtu 1500 qdisc noqueue master docker0 state UP grupo predeterminado
enlace/éter ba:af:58:a0:4a:74 brd ff:ff:ff:ff:ff:ff enlace-netnsid 0
inet6 fe80::b8af:58ff:fea0:4a74/64 enlace de alcance
válido_lft para siempre preferido_lft para siempre
7: franela.1:mtu 1450 qdisc noqueue estado DESCONOCIDO grupo predeterminado
enlace/éter a6:d1:45:73:c3:31 brd ff:ff:ff:ff:ff:ff
inet 10.244.0.0/32 ámbito global flannel.1
válido_lft para siempre preferido_lft para siempre
inet6 fe80::a4d1:45ff:fe73:c331/64 enlace de alcance
válido_lft para siempre preferido_lft para siempre
8: cni0:mtu 1450 qdisc noqueue state UP grupo predeterminado qlen 1000
enlace/éter 0a:58:0a:f4:00:01 brd ff:ff:ff:ff:ff:ff
inet 10.244.0.1/24 ámbito global cni0
válido_lft para siempre preferido_lft para siempre
inet6 fe80::24f5:4cff:fee9:a32d/64 enlace de alcance
válido_lft para siempre preferido_lft para siempre
9: veth58367f89 @if3 :mtu 1450 qdisc noqueue master cni0 state UP grupo predeterminado
enlace/éter 7a:29:e9:c8:bf:3f brd ff:ff:ff:ff:ff:ff enlace-netnsid 1
inet6 fe80::7829:e9ff:fec8:bf3f/64 enlace de alcance
válido_lft para siempre preferido_lft para siempre

**Node worker:**

zordon@k8s-minion-one:~$ ip -d ruta
unidifusión predeterminada a través de 192.168.1.1 dev enp0s25 proto dhcp scope global src 192.168.1.111 métrica 100
unicast 10.244.0.0/24 a través de 10.244.0.0 dev flannel.1 proto boot scope global onlink
unicast 10.244.1.0/24 dev cni0 proto kernel scope link src 10.244.1.1 linkdown
unicast 172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown
unicast 192.168.1.0/24 dev enp0s25 proto kernel scope link src 192.168.1.111
unicast 192.168.1.1 dev enp0s25 proto dhcp scope link src 192.168.1.111 métrica 100
zordon@k8s-minion-one:~$ ip a
1: lo:mtu 65536 qdisc estado sin cola grupo DESCONOCIDO predeterminado qlen 1000
enlace/bucle invertido 00:00:00:00:00:00 brd 00:00:00:00:00:00
host de alcance inet 127.0.0.1/8 bajo
válido_lft para siempre preferido_lft para siempre
inet6 :: host de alcance 1/128
válido_lft para siempre preferido_lft para siempre
2: enp0s25:mtu 1500 qdisc pfifo_fast state UP grupo predeterminado qlen 1000
enlace/éter 18:03:73:45:75:71 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.111/24 brd 192.168.1.255 alcance global enp0s25
válido_lft para siempre preferido_lft para siempre
inet6 fe80::1a03:73ff:fe45:7571/64 enlace de alcance
válido_lft para siempre preferido_lft para siempre
3: ventana acoplable0:mtu 1500 qdisc noqueue state DOWN grupo predeterminado
enlace/éter 02:42:38:3e:a3:94 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 ámbito docker0 global
válido_lft para siempre preferido_lft para siempre
inet6 fe80::42:38ff:fe3e:a394/64 enlace de alcance
válido_lft para siempre preferido_lft para siempre
4: franela.1:mtu 1450 qdisc noqueue estado DESCONOCIDO grupo predeterminado
enlace/éter 7a:d0:2a:b4:73:43 brd ff:ff:ff:ff:ff:ff
inet 10.244.1.0/32 ámbito global flannel.1
válido_lft para siempre preferido_lft para siempre
inet6 fe80::78d0:2aff:feb4:7343/64 enlace de alcance
válido_lft para siempre preferido_lft para siempre
5: cni0:mtu 1500 qdisc noqueue state DOWN grupo predeterminado qlen 1000
enlace/éter 0a:58:0a:f4:01:01 brd ff:ff:ff:ff:ff:ff
inet 10.244.1.1/24 ámbito global cni0
válido_lft para siempre preferido_lft para siempre
inet6 fe80::7440:12ff:fefa:f55/64 enlace de alcance
válido_lft para siempre preferido_lft para siempre
```

Entorno:

  • Maestro de clúster: Ubuntu 17.1.0 (ufw deshabilitado)
  • Nodo de clúster: servidor Ubuntu 16.10 (ufw deshabilitado)

Comentario más útil

Encontré el problema que existe en DNS (las direcciones IP funcionan bien. Me ayudó a configurar el mapa para dns:

apiVersion: v1
kind: ConfigMap
metadata:
  name: kube-dns
  namespace: kube-system
  labels:
    addonmanager.kubernetes.io/mode: EnsureExists
data:
  upstreamNameservers: |-
    ["8.8.8.8", "8.8.4.4"]

Todos 5 comentarios

Encontré el problema que existe en DNS (las direcciones IP funcionan bien. Me ayudó a configurar el mapa para dns:

apiVersion: v1
kind: ConfigMap
metadata:
  name: kube-dns
  namespace: kube-system
  labels:
    addonmanager.kubernetes.io/mode: EnsureExists
data:
  upstreamNameservers: |-
    ["8.8.8.8", "8.8.4.4"]

Estoy atascado en el mismo lugar exacto, intenté dar google dns y corp dns todavía falla. Alguna sugerencia ?

Este mismo problema nos ocurre con minikube 0.23.0, Kubernetes 1.7.5 y Ubuntu 18 (bionic). Los nombres DNS no se resuelven. La solución para poner upstreamNameservers en el mapa de configuración ayudó. Gracias @lukaszpy !

Todavía tenemos que encontrar una manera de modificar nuestras configuraciones de minikube para aplicar esta solución alternativa hasta que se solucione.

Desde el interior de la cápsula de busybox después de aplicar la configuración de upstreamServer @lukaszpy mencionada anteriormente, obtengo lo siguiente para nslookups externos (minikube v0.28.1 en ubuntu 18.04):

/ # nslookup 8.8.8.8
Servidor: 10.96.0.10
Dirección: 10.96.0.10:53

Respuesta no autorizada:
8.8.8.8.in-addr.arpa nombre = google-public-dns-a.google.com

/ # nslookup google.com
Servidor: 10.96.0.10
Dirección: 10.96.0.10:53

Respuesta no autorizada:
Nombre: google.com
Dirección: 172.217.5.238

* No puedo encontrar google.com: Sin respuesta

/ #

Cuando intento kubernetes.default, obtengo esto:
/ # nslookup kubernetes.predeterminado
Servidor: 10.96.0.10
Dirección: 10.96.0.10:53

** el servidor no puede encontrar kubernetes.predeterminado: NXDOMAIN

* No se puede encontrar kubernetes.predeterminado: Sin respuesta

/ #

Experimento el mismo problema, aunque mis YAML se ven diferentes al fragmento proporcionado. ¿Todavía puedo aplicar la solución alternativa de alguna manera?

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

TLmaK0 picture TLmaK0  ·  3Comentarios

jwerak picture jwerak  ·  6Comentarios

benmoss picture benmoss  ·  6Comentarios

eyakubovich picture eyakubovich  ·  6Comentarios

bboreham picture bboreham  ·  4Comentarios