Как разрешить имена хостов модулей из других модулей?

  • У меня есть 2 модуля, работающих на 2 узлах, каждый модуль работает на другом узле.
  • Эти узлы находятся в одной подсети и сами могут использовать протоколы TCP/UDP/ICMP.

Эти модули получили несколько имен хостов, например:

  • дрель-постановка-75cddd789-kbzsq
  • дрель-постановка-75cddd789-amsrj

Из pod Drill-staging-75cddd789-kbzsq я не могу разрешить имя хоста для Drill-staging-75cddd789-amsrj и наоборот. Разрешение собственного имени pod работает.

Я попытался установить различные dnsPolicies:

  • ClusterFirst: не повезло
  • По умолчанию: не повезло
  • ClusterFirstWithHostNet: не повезло, и это событие не смогло разрешить имя хоста своего собственного узла
  • Нет: не пробовал (не думаю, что это хороший способ)
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ include "app.name" . }}
  namespace: {{ .Values.global.namespace }}
spec:
  replicas: 2
  selector:
    matchLabels:
      app: {{ include "app.name" . }}
  template:
    metadata:
      labels:
        app: {{ include "app.name" . }}
    spec:
      containers:
      - name: {{ include "app.name" . }}
        image: ...
        resources:
          ...
        ports:
          ...
        imagePullPolicy: Always
      restartPolicy: Always

person rudolfdobias    schedule 09.12.2019    source источник
comment
Отвечает ли это на ваш вопрос? как использовать Kubernetes DNS для модулей?   -  person David Maze    schedule 10.12.2019
comment
Я думаю, вам нужно явно использовать podname.namespace.pod.cluster.local. В большинстве случаев использование Сервиса является лучшей практикой.   -  person David Maze    schedule 10.12.2019
comment
@DavidMaze Ну, может быть, я неправильно задал вопрос. Я пытаюсь создать кластер для Apache Drill. Каждая буровая капсула регистрируется в зоопарке под своим собственным именем хоста. Имя хоста внутри модуля не является полным доменным именем, поэтому они регистрируются с неразрешимым адресом. Но им нужно разрешать и общаться друг с другом ... В основном было бы достаточно, если бы имя хоста могло быть установлено на полное доменное имя в yaml. К сожалению, у самого Drill нет такой конфигурации. Есть ли какое-нибудь другое решение для таких случаев?   -  person rudolfdobias    schedule 10.12.2019
comment
kubernetes.io/docs/concepts/workloads/controllers/statefulset   -  person Tummala Dhanvi    schedule 10.12.2019


Ответы (1)


Обычно только Службы получают DNS имена, а не поды. Таким образом, по умолчанию вы не можете обращаться к другому поду напрямую по доменному имени, только по его IP-адресу.

Поды получают DNS-имена только при определенных условиях, которые включают безголовую службу, как объяснено в документации. В частности, условия:

  • В модулях есть поле hostname
  • В модулях есть поле subdomain
  • Существует безголовая служба (в том же пространстве имен), которая выбирает поды.
  • Имя безголовой службы равно полю subdomain подов.

В этом случае каждый под получает полное доменное имя следующего вида:

my-hostname.my-subdomain.default.svc.cluster.local

Где my-hostname — поле hostname модуля, а my-subdomain — поле subdomain модуля.

Примечание. DNS-имя создается для «имени хоста» пода, а не для «имени» пода.

Вы можете проверить это с помощью следующей настройки:

apiVersion: v1
kind: Service
metadata:
  name: my-subdomain
spec:
  selector:
    name: my-test
  clusterIP: None
---
apiVersion: v1
kind: Pod
metadata:
  name: my-pod-1
  labels:
    name: my-test
spec:
  hostname: my-hostname-1
  subdomain: my-subdomain
  containers:
  - image: weibeld/ubuntu-networking
    command: [sleep, "3600"]
    name: ubuntu-networking
---
apiVersion: v1
kind: Pod
metadata:
  name: my-pod-2
  labels:
    name: my-test
spec:
  hostname: my-hostname-2
  subdomain: my-subdomain
  containers:
  - image: weibeld/ubuntu-networking
    command: [sleep, "3600"]
    name: ubuntu-networking

После применения этого вы можете запустить один из модулей:

kubectl exec -ti my-pod-1 bash

И вы должны иметь возможность разрешать полные доменные имена двух модулей:

host my-hostname-1.my-subdomain.default.svc.cluster.local
host my-hostname-2.my-subdomain.default.svc.cluster.local

Поскольку вы делаете запросы из того же пространства имен, что и целевые поды, вы можете сократить доменное имя до:

host my-hostname-1.my-subdomain
host my-hostname-2.my-subdomain
person weibeld    schedule 10.12.2019