Kubernetes coredns недоступен из пода

У меня есть модуль, развернутый с именем «sample_pod» в кластере Rancher с контейнером с именем «sample_container». В образце модуля есть служба под названием «тест». Внутри sample_container, если я пытаюсь разрешить доменные имена кластера с помощью команды «host», «dig» или «nslookup», я всегда получаю отказ в соединении; никакие серверы не могут быть достигнуты.

У меня есть модули coredns, работающие внутри моего кластера.

user@abc$ kubectl get pods -n kube-system
NAME                                       READY   STATUS      RESTARTS   AGE
calico-kube-controllers-7fbff695b4-f7vxc   1/1     Running     0          21h
canal-928m6                                2/2     Running     0          21h
canal-d7vjr                                2/2     Running     0          20h
coredns-6f85d5fb88-9txmx                   1/1     Running     0          21h
coredns-autoscaler-79599b9dc6-ndgfj        1/1     Running     0          21h
kube-multus-ds-769n6                       1/1     Running     0          20h
metrics-server-8449844bf-jz66w             1/1     Running     0          21h
rke-coredns-addon-deploy-job-dlvlh         0/1     Completed   0          21h
rke-ingress-controller-deploy-job-jcj6w    0/1     Completed   0          21h
rke-metrics-addon-deploy-job-wnhbq         0/1     Completed   0          21h
rke-network-plugin-deploy-job-wzqfb        0/1     Completed   0          21h
whereabouts-p6vcc                          1/1     Running     0          20h

Я не касаюсь основного файла coredns по умолчанию.

Corefile:
.:53 {
  log
  errors
  health {
    lameduck 5s
  }
  ready
  kubernetes cluster.local in-addr.arpa ip6.arpa {
    pods insecure
    fallthrough in-addr.arpa ip6.arpa
  }
  prometheus :9153
  forward . "/etc/resolv.conf"
  cache 30
  loop
  reload
  loadbalance
}

/etc/hosts файл sample_container:

[root@sample_container]# cat /etc/hosts
# Kubernetes-managed hosts file.
127.0.0.1       localhost
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
fe00::0 ip6-mcastprefix
fe00::1 ip6-allnodes
fe00::2 ip6-allrouters
10.42.1.18      sample_pod      

# Entries added by HostAliases.
127.0.0.1       localhost
10.94.66.8      netboot.com 

/etc/resolv.conf из sample_container:

[root@sample_container]# cat /etc/resolv.conf
nameserver 10.43.0.10
search default.svc.cluster.local svc.cluster.local cluster.local openstacklocal
options ndots:5

Команду host или dig я использовал для разрешения следующих доменов и получил ошибку:

[root@sample_container]# ping 10.43.0.10
PING 10.43.0.10 (10.43.0.10) 56(84) bytes of data.
^C
--- 10.43.0.10 ping statistics ---
99 packets transmitted, 0 received, 100% packet loss, time 98003ms

[root@sample_container]# host kube-dns.kube-system
;; connection timed out; no servers could be reached

[root@sample_container]#  host localhost
;; connection timed out; no servers could be reached

I tried to resolve test service in the default namespace (where sample_container, sample_pod resides in same namespace) 
[root@sample_container]# host test
;; connection timed out; no servers could be reached


dig or nslookup command also returns same
[root@sample_container]# nslookup localhost
;; connection timed out; no servers could be reached

[root@sample_container]# dig localhost

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.8 <<>> localhost
;; global options: +cmd
;; connection timed out; no servers could be reached

Дополнительная информация об IP пода и сервисном IP:

root@user$ kubectl get all -o wide
NAME           READY   STATUS    RESTARTS   AGE    IP           NODE                      NOMINATED NODE   READINESS GATES
pod/sample_pod       1/1     Running   0          177m   10.42.1.18   dsc-worker-node    <none>           <none>

NAME                 TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)                           AGE    SELECTOR
service/test           ClusterIP   10.43.19.85   <none>        80/TCP,443/TCP                 177m   role=test

Примечание. Я развернул этот модуль таким образом, что некоторые контейнеры будут иметь доступ к базовой машине для выполнения своих задач. И мне нужно добиться переадресации определенных доменных имен на этот baremetal-сервер, который ответит на этот DNS-запрос. Также я знаю о прямом плагине, который выполняет эту работу. Но, не касаясь Corefile, я не могу получить доступ к coredns для самих доменных имен кластера.

Может ли кто-нибудь помочь мне решить эту проблему? Это было бы очень полезно для меня. Заранее спасибо!!!

Попробуйте запустить команду systemctl запустить kube-proxy

Chandra Kiran Pasumarti 03.04.2022 22:59
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
0
1
59
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я решил эту проблему после изменения маршрута. По умолчанию DNS-запросы отправляются на сервер имен kubernetes через частный интерфейс, а не через шлюз по умолчанию (общедоступный интерфейс). После изменения маршрута для отправки DNS-запросов через шлюз по умолчанию проблема была решена.

Другие вопросы по теме