Назад | Перейти на главную страницу

Невозможно получить доступ к виртуальному IP-адресу кластера из модулей, но может быть получен с рабочих узлов

У меня проблемы с модулями, которые не могут «разговаривать» с IP-адресами кластера (виртуальные IP-адреса, выходящие на модули) в моем кластере Kubernetes.

Я следил за «Трудным путем Kubernetes» Келси Хайтауэр, однако я преобразовал все это для запуска инфраструктуры в AWS.

У меня почти все работает, за исключением того, что у меня проблема, когда мои модули не могут разговаривать с виртуальными IP-адресами clusterIP.

Сначала я пробовал использовать как CoreDNS, так и Kube-dns, думая, что это может быть проблема на этом уровне, однако с тех пор я диагностировал тот факт, что я не могу разговаривать с IP-адресами сервисного кластера из подов, а с фактическим рабочим узлов, я действительно могу разговаривать с IP-адресами кластера.

Я подтвердил это kube-proxy работает как положено. Я использую это в iptables mode и вы можете видеть, как он правильно записывает правила iptables на рабочих узлах. Я даже пробовал перейти на ipvs режим и в этом режиме он также правильно выписал правила.

Если я выполняю nslookup внутри тестового модуля (например, busybox 1.28) и позволяю ему использовать стандартную настройку сервера имен, указывающую на мою установку coredns, он не сможет разрешить google.com or the clusterkubernetes.default`. Однако, если я скажу nslookup использовать IP-адрес POD модуля coredns, он будет работать нормально.

пример

Это не работает:

kubectl exec -it busybox -- nslookup google.com               
Server:    10.32.0.10
Address 1: 10.32.0.10

nslookup: can't resolve 'google.com'
command terminated with exit code 1

Это работает (указывая nslookup на IP-адрес контейнера coredns, а не на IP-адрес кластера):

kubectl exec -it busybox -- nslookup google.com 10.200.2.2                   
Server:    10.200.2.2
Address 1: 10.200.2.2 kube-dns-67d45fcb87-2h2dz

Name:      google.com
Address 1: 2607:f8b0:4004:810::200e iad23s63-in-x0e.1e100.net
Address 2: 172.217.164.142 iad30s24-in-f14.1e100.net

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

В моих экземплярах AWS EC2 отключена проверка источника / назначения. Вся моя конфигурация и настройки взяты из официального репозитория kubernetes-the-hard-way, но я обновил кое-что для работы на AWS. Источник со всей моей конфигурацией / настройками и т. Д. Вот

Изменить: предоставление /etc/resolv.conf что мои поды получают от kube-dns / coredns для информации (хотя это выглядит абсолютно нормально):

# cat /etc/resolv.conf
search kube-system.svc.cluster.local svc.cluster.local cluster.local ec2.internal
nameserver 10.32.0.10
options ndots:5

Я могу пинговать IP-адрес pod'а kube-dns напрямую из pod'ов, но IP-адрес кластера для kube-dns не работает для ping или чего-либо еще. (то же самое для других сервисов с IP-адресами кластера). Например.

me@mine ~/Git/kubernetes-the-hard-way/test kubectl get pods -n kube-system -o wide
NAME                                READY   STATUS    RESTARTS   AGE    IP            NODE             NOMINATED NODE   READINESS GATES
hello-node1-55cc74b4b8-2hh4w        1/1     Running   2          3d1h   10.200.2.14   ip-10-240-0-22   <none>           <none>
hello-node2-66b5494599-cw8hx        1/1     Running   2          3d1h   10.200.2.12   ip-10-240-0-22   <none>           <none>
kube-dns-67d45fcb87-2h2dz           3/3     Running   6          3d1h   10.200.2.11   ip-10-240-0-22   <none>           <none>

 me@mine ~/Git/kubernetes-the-hard-way/test kubectl exec -it hello-node1-55cc74b4b8-2hh4w sh
Error from server (NotFound): pods "hello-node1-55cc74b4b8-2hh4w" not found
 me@mine ~/Git/kubernetes-the-hard-way/test kubectl -n kube-system exec -it hello-node1-55cc74b4b8-2hh4w sh
# ping 10.200.2.11
PING 10.200.2.11 (10.200.2.11) 56(84) bytes of data.
64 bytes from 10.200.2.11: icmp_seq=1 ttl=64 time=0.080 ms
64 bytes from 10.200.2.11: icmp_seq=2 ttl=64 time=0.044 ms
64 bytes from 10.200.2.11: icmp_seq=3 ttl=64 time=0.045 ms
^C
--- 10.200.2.11 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1998ms
rtt min/avg/max/mdev = 0.044/0.056/0.080/0.017 ms

# ip route get 10.32.0.10
10.32.0.10 via 10.200.2.1 dev eth0  src 10.200.2.14
    cache
#

Я упустил что-то очевидное?

Попробуйте добавить в kube-dns ConfigMap следующее

data:
  upstreamNameservers: |
    [“8.8.8.8”, “8.8.4.4”]