DNS-поиск не работает должным образом в кластере Kubernetes - PullRequest
0 голосов
/ 19 апреля 2020

Я раскручиваю кластер с помощью мини-куба, затем применяю это фиктивное развертывание / службу

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      run: nginx-label
  replicas: 2
  template:
    metadata:
      labels:
        run: nginx-label
    spec:
      containers:
      - name: nginx-container
        image: nginx
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
  labels:
    run: nginx-label
spec:
  ports:
  - port: 1234
    targetPort: 80
    protocol: TCP
  selector:
    run: nginx-label

Затем я создаю фиктивный модуль для скручивания для проверки внутренней сети со следующими

kubectl run curl --image=radial/busyboxplus:curl -i --tty

Внутри этот экземпляр curl, я могу получить доступ к nginx с $NGINX_SERVICE_SERVICE_HOST:$NGINX_SERVICE_SERVICE_PORT или nginx-service.default:1234, но не с nginx-service:1234, даже если эти модули принадлежат одному и тому же пространству имен.

ubuntu:~$ kubectl get pods --namespace=default
NAME                                READY   STATUS    RESTARTS   AGE
curl-69c656fd45-d7w8t               1/1     Running   1          29m
nginx-deployment-58595d65fc-9ln25   1/1     Running   0          29m
nginx-deployment-58595d65fc-znkqp   1/1     Running   0          29m

Есть идеи, что может вызвать это? Ниже приведен результат nslookup

[ root@curl-69c656fd45-d7w8t:/ ]$ nslookup nginx-service
Server:    10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local

Name:      nginx-service
Address 1: 23.202.231.169 a23-202-231-169.deploy.static.akamaitechnologies.com
Address 2: 23.217.138.110 a23-217-138-110.deploy.static.akamaitechnologies.com
[ root@curl-69c656fd45-d7w8t:/ ]$ nslookup nginx-service.default
Server:    10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local

Name:      nginx-service.default
Address 1: 10.103.69.73 nginx-service.default.svc.cluster.local
[ root@curl-69c656fd45-d7w8t:/ ]$ 

Обновление: вот содержимое /etc/resolv.conf

[ root@curl-69c656fd45-d7w8t:/ ]$ cat /etc/resolv.conf 
nameserver 10.96.0.10
search default.svc.cluster.local svc.cluster.local cluster.local attlocal.net
options ndots:5
[ root@curl-69c656fd45-d7w8t:/ ]$ 

1 Ответ

0 голосов
/ 21 апреля 2020

Nslookup, за которым следует имя домена, отобразит «A-запись» (IP-адрес) домена - в вашем случае для службы nginx -сервис вывод:

[ root@curl-69c656fd45-d7w8t:/ ]$ nslookup nginx-service
Server:    10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local

Name:      nginx-service
Address 1: 23.202.231.169 a23-202-231-169.deploy.static.akamaitechnologies.com
Address 2: 23.217.138.110 a23-217-138-110.deploy.static.akamaitechnologies.com

Ваш сервер имен возвратил две записи: 23.202.231.169 с именем a23-202-231-169.deploy.stati c .akamaitechnologies.com и 23.217.138.110 с именем a23-217-138-110.deploy.stati c .akamaitechnologies.com .

Это указывает на то, что nginx -service использует циклическую настройку для распределения нагрузки на сервер. При доступе к nginx -сервису вы можете быть перенаправлены на любой из этих серверов, и ваши пакеты будут направлены в правильный пункт назначения. Обратите внимание, что эти записи не распознаются списком поиска для поиска имени хоста (resolv.conf). В этом файле нет таких доменов, как: deploy.static.akamaitechnologies.com, static.akamaitechnologies.com и akamaitechnologies.com. Вот почему вы не можете получить прямой доступ к nginx-service:1234.

Пока вы обращаетесь к nginx -service.default:

[ root@curl-69c656fd45-d7w8t:/ ]$ nslookup nginx-service.default
Server:    10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local

Name:      nginx-service.default
Address 1: 10.103.69.73 nginx-service.default.svc.cluster.local

Ваш сервер имен вернул одну запись, 10.103. 69,73 с именем nginx -service.default.sv c .cluster.local . Имя nginx -service.default.sv c .cluster.local распознается в списке поиска - домен svc.cluster.local.

Как работает поиск в файле resolv.conf

Посмотрите на ваш resolv.conf файл:

[ root@curl-69c656fd45-d7w8t:/ ]$ cat /etc/resolv.conf 
nameserver 10.96.0.10
search default.svc.cluster.local svc.cluster.local cluster.local attlocal.net
options ndots:5

Если вы хотите использовать директиву поиска для разрешения коротких имен хостов - например, test.
Так что если у вас есть следующее в /etc/resolv.conf:

search default.svc.cluster.local svc.cluster.local cluster.local

, тогда ваш компьютер попытается разрешить test.default.svc.cluster.local с последующим test.svc.cluster.local и test.cluster.local. Он вернет первый успешный запрос.

Посмотрите: resolv.conf , nslookup .

РЕДАКТИРОВАТЬ:

Отвечая на ваш вопрос в комментариях. Вы сравниваете неправильные строки. Вы должны прочитать строки под полем: name в файле nslookup, как я сказал для хоста nginx-service:

Name:      nginx-service
Address 1: 23.202.231.169 a23-202-231-169.deploy.static.akamaitechnologies.com
Address 2: 23.217.138.110 a23-217-138-110.deploy.static.akamaitechnologies.com

для nginx-service.default:

Name:      nginx-service.default
Address 1: 10.103.69.73 nginx-service.default.svc.cluster.local

поток - это: executing command ns lookup -> checking entrypoints(line below host with adress and hostname)-> comparing entrypoints and its domains to domain listed in /etc/resolv.conf файл, если он не совпадает, это означает, что мы не можем достичь указанного c хоста. Ваш nginx-service "хит" a23-202-231-169.deploy.static.akamaitechnologies.com НЕ nginx-service.default.svc.cluster.local, но nginx-service.default хит nginx-service.default.svc.cluster.local.

10.96.0.10 - это адрес сервера доменных имен нашей системы с именем kube-dns.kube-system.svc.cluster.local. Это сервер, на котором ваша система настроена для преобразования доменных имен в IP-адреса.

Говоря о домене deploy.static.akamaitechnologies.com Akamai - это сеть доставки контента, используемая Symante c (и многими другими компаниями). Kubernetes - это сервис облачных вычислений, который используется большим количеством компаний также для содержимого inte rnet. Эти услуги необходимы для предоставления контента при посещении определенных веб-сайтов и для доставки таких вещей, как обновления продукта. Нормально видеть подключения к этим сайтам, когда вы посещаете определенные другие сайты или у вас установлены определенные продукты, такие как Norton. По сути, они предоставляют серверы, необходимые для быстрого распространения больших объемов данных в различные регионы мира, обеспечивая балансировку inte rnet traffi c, чтобы не перегружать отдельные местоположения серверов.

Более подробную информацию вы можете найти здесь: nslookup , akamai .

Последняя часть "Как работает поиск в файле resolv.conf" была простым объяснением того, как анализировать список поиска в файле /etc/resolv.conf.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...