Kubernetes не разрешает Pod из другого пространства имен без FQDN - PullRequest
0 голосов
/ 08 марта 2020

Допустим, у нас есть два пространства имен namespace-a и namespace-b.

Pod pod-name, работающие в Deployment и представленные внутри как Service service-name через ClusterIP on namespace-a. Кластер Kubernetes 1.17 имеет доменное имя кластера cluster-domain. cluster-domain не является значением по умолчанию cluster.local.

Другой модуль batman на namespace-b пытается разрешить IP-адрес pod-name.

  1. Следующие работы с batman: ping/telnet pod-name.service-name.namespace-a.svc.cluster-domain
  2. Следующее не не работает с batman: ping/telnet pod-name.service-name.namespace-a.svc

Однако, если batman работает на namespace-a: 3. Следующее работает с batman: ping/telnet pod-name.service-name.namespace-a.svc

Это связано с настройкой DNS? Это как это должно работать? Я не смог найти какой-либо материал конкретно по этой проблеме.

Ответы [ 2 ]

0 голосов
/ 20 марта 2020

Насколько я знаю, именно так оно и должно работать.

Я могу порекомендовать прочитать Разрешение отладки DNS , где вы можете найти Являются ли запросы DNS получено / обработано

Вы можете проверить, принимаются ли запросы CoreDNS, добавив плагин log в конфигурацию CoreDNS (он же Corefile). CoreDNS Corefile хранится в ConfigMap с именем coredns. Чтобы отредактировать его, используйте команду…

kubectl -n kube-system edit configmap coredns

Затем добавьте log в разделе Corefile согласно приведенному ниже примеру.

apiVersion: v1
kind: ConfigMap
metadata:
  name: coredns
  namespace: kube-system
data:
  Corefile: |
    .:53 {
        log
        errors
        health
        kubernetes cluster.local in-addr.arpa ip6.arpa {
          pods insecure
          upstream
          fallthrough in-addr.arpa ip6.arpa
        }
        prometheus :9153
        proxy . /etc/resolv.conf
        cache 30
        loop
        reload
        loadbalance
    }

После сохранения изменений у Kubernetes может потребоваться до минуты или двух, чтобы распространить эти изменения на модули CoreDNS.

Далее выполните несколько запросов и просмотрите журналы в соответствии с разделами, приведенными выше в этом документе. Если модули CoreDNS получают запросы, вы должны увидеть их в журналах.

Вы также можете проверить DNS для служб и модулей и Настройка службы DNS .

0 голосов
/ 08 марта 2020

Если вы хотите иметь cluster.domain вместо значения по умолчанию cluster.local, вам нужно настроить локальный домен в кубеле с флагом --cluster-domain=cluster.domain

Также вам нужно изменить ConfigMap для CoreDNS Corefile для изменения значения по умолчанию

apiVersion: v1
kind: ConfigMap
metadata:
  name: coredns
  namespace: kube-system
data:
  Corefile: |
    .:53 {
        errors
        health {
            lameduck 5s
        }
        ready
        kubernetes cluster.domain in-addr.arpa ip6.arpa {
            pods insecure
            fallthrough in-addr.arpa ip6.arpa
            ttl 30
        }
        prometheus :9153
        forward . /etc/resolv.conf
        cache 30
        loop
        reload
        loadbalance
    }

Чтобы убедиться, что вы проверяете файл /etc/resolve.conf внутри модуля

search default.svc.cluster.domain svc.cluster.domain cluster.domain google.internal c.gce_project_id.internal
nameserver 10.0.0.10
options ndots:5
...