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

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

У этих подов есть несколько имен хостов, например:

  • буровая установка-75cddd789-kbzsq
  • буровая установка-75cddd789-amsrj

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

Я пробовал устанавливать различные 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

1 ответ

Решение

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

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

  • У стручков есть hostname поле
  • У стручков есть subdomain поле
  • Существует безголовый сервис (в том же пространстве имен), который выбирает поды
  • Название безголовой службы равно subdomain поле стручков

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

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
Другие вопросы по тегам