Разрешение DNS-пода Kubernetes

Разрешение DNS-пода Kubernetes

В настоящее время могу разрешить все службы в IP-адреса и telnet и пинговать их. Не могу разрешить pods в IP-адреса. Хотя могу искать IP-адреса pod с помощью kubectl и telnet и пинговать их. Как мне настроить DNS для разрешения pods в Kubernetes 1.9.6, dns-controller:1.9.1.

решение1

С ответом @mk_sta немного легче работать. Вы можете запустить эту однострочную команду для проверки своего DNS:

kubectl run busybox --image=busybox --rm --attach --command -- sh -c "cat /etc/resolv.conf; nslookup $POD.$NAMESPACE.pod.cluster.local"

Пример вывода:

If you don't see a command prompt, try pressing enter.

Server:         100.64.0.10
Address:        100.64.0.10:53


*** Can't find $POD.$NAMESPACE.pod.cluster.local: No answer

deployment.apps "busybox" deleted

Бонусом является то, что он удаляет развертывание/модули после запуска.


Для меня проблема была в том, что мои pod находятся в statefulset и поэтому разрешение DNS Pod немного отличается. Вам нужно использовать (например):

web-{0..N-1}.nginx.default.svc.cluster.local

pod-N.$GOVERNING_STATEFULSET.$NAMESPACE.svc.cluster.local

https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/

Это то, что может пойти не так. Возможно, вам захочется предоставить больше информации о вашем конкретном случае.

решение2

Вы можете создать тестовый Pod, busyboxчтобы проверить функцию разрешения DNS и устранить проблему:

apiVersion: v1
kind: Pod
metadata:
  name: busybox
  namespace: default
spec:
  containers:
  - image: busybox
    command:
      - sleep
      - "3600"
    imagePullPolicy: IfNotPresent
    name: busybox
  restartPolicy: Always

Проверьте /etc/resolv.confфайл на busyboxPod:

kubectl exec busybox cat /etc/resolv.conf

Содержание должно быть таким:

search default.svc.cluster.local svc.cluster.local cluster.local .....
nameserver 10.0.0.10
options ndots:5

Сделайте запрос на поиск целевого Pod в вашем кластере:

kubectl exec -ti busybox -- nslookup XXX-XX-XX-XX.default.pod.cluster.local

Если DNS-имя Pods не было разрешено, вы можете проверить журналы компонентов DNS с помощью kubectl logsкоманды:

kubectl logs --namespace=kube-system $(kubectl get pods --namespace=kube-system -l k8s-app=kube-dns -o name) -c kubedns
kubectl logs --namespace=kube-system $(kubectl get pods --namespace=kube-system -l k8s-app=kube-dns -o name) -c dnsmasq
kubectl logs --namespace=kube-system $(kubectl get pods --namespace=kube-system -l k8s-app=kube-dns -o name) -c healthz

решение3

Лучший способ решения этой проблемы, который я видел, — это создание Jump Pod.

Шаг 1. Создайте модуль с помощью файла спецификаций.

cat << ENDL >> jumpod.yml
apiVersion: v1
kind: Pod
metadata:
  name: jumpod
  namespace: default
spec:
  containers:
  - name: busybox
    image: busybox:1.28
    command:
      - sleep
      - "3600"
    imagePullPolicy: IfNotPresent
  restartPolicy: Always
ENDL

Шаг 2. Эфир примените или создайте pod в кластере и на узле. Обратите внимание, что он будет расположен в пространстве имен по умолчанию.

kubectl apply -f jumpod.yml

Теперь вы можете использовать этот модуль для получения DNS модуля или службы.

Например:

Под nslookup Шаг 3. Получите IP-адрес нужного вам модуля.

kubectl get pods -o wide

Шаг 4. Используйте Jump Pod для выполнения nslookup

kubectl exec -it jumpod ping 10.244.0.149

Служба nslookup Шаг 5. Найдите IP-адрес службы, которую вы, возможно, захотите использовать.

kubectl get services --all-namespaces

Шаг 6. Теперь используйте Jump Pod, чтобы выполнить nslookup по IP-адресу службы.

kubectl exec -it jumpod nslookup 10.245.150.103

Ниже приведен пример того, как основной кластер, использующий nslookup, не будет работать и как будет работать busybox (он же jump pod).

$ kubectl exec -it jumpod nslookup 10.245.150.103
Server:    10.245.0.10
Address 1: 10.245.0.10 kube-dns.kube-system.svc.cluster.local
Name:      10.245.150.103
Address 1: 10.245.150.103 hello.develop.svc.cluster.local
$ nslookup 10.245.150.103
Server:     8.8.8.8
Address:    8.8.8.8#53
** server can't find 103.150.245.10.in-addr.arpa: NXDOMAIN

Надеюсь это поможет!

P.S. Если вам случайно понадобится экспортировать DNS-файл, созданный вами в модуле, вы можете воспользоваться этим.

kubectl cp default/POD_NAME:bin/FILE_NAME /Users/username/FILE_NAME

или просто используйте >, чтобы экспортировать его в файл.

Связанный контент