У меня есть модуль, развернутый с именем «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 для самих доменных имен кластера.
Может ли кто-нибудь помочь мне решить эту проблему? Это было бы очень полезно для меня. Заранее спасибо!!!
Я решил эту проблему после изменения маршрута. По умолчанию DNS-запросы отправляются на сервер имен kubernetes через частный интерфейс, а не через шлюз по умолчанию (общедоступный интерфейс). После изменения маршрута для отправки DNS-запросов через шлюз по умолчанию проблема была решена.
Попробуйте запустить команду systemctl запустить kube-proxy