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

Я настраиваю набор с отслеживанием состояния, развертывающий 2 узла Jira DataCenter. В результате набора состояний получается 2 модуля. Кажется, все в порядке, пока 2 модуля не попытаются подключиться друг к другу. Они делают это со своим коротким именем хоста, равным jira-0 и jira-1.

Модуль jira-1 сообщает об исключении UnknownHostException при подключении к jira-0. Имя хоста не может быть разрешено.

Я читал о добавлении автономной службы, которой у меня еще не было. После добавления этого я могу разрешить полное доменное имя, но с коротким именем все еще не повезло.

Затем я прочитал эту страницу: DNS для служб и модулей и добавил:

      dnsConfig:
        searches:
          - jira.default.svc.cluster.local

Это решает мою проблему, но я думаю, что нет необходимости добавлять это?

Дополнительная информация:

  • Кластер на AKS с CoreDNS
  • Kubernetes v1.19.9
  • Сетевой плагин: Кубенет
  • Сетевая политика: нет

Мой полный файл yaml:

apiVersion: v1
kind: Service
metadata:
  name: jira
  labels:
    app: jira
spec:
  clusterIP: None
  selector:
    app: jira
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: jira
spec:
  serviceName: jira
  replicas: 0
  selector:
    matchLabels:
      app: jira
  template:
    metadata:
      labels:
        app: jira
    spec:
      containers:
      - name: jira
        image: atlassian/jira-software:8.12.2-jdk11
        readinessProbe:
          httpGet:
            path: /jira/status
            port: 8080
          initialDelaySeconds: 120
          periodSeconds: 10
        livenessProbe:
          httpGet:
            path: /jira/
            port: 8080
          initialDelaySeconds: 600
          periodSeconds: 10
        envFrom:
          – configMapRef:
              name: jira-config
        ports:
        - containerPort: 8080
      dnsConfig:
        searches:
          - jira.default.svc.cluster.local

person Charlie    schedule 27.04.2021    source источник


Ответы (1)


Это решает мою проблему, но я думаю, что нет необходимости добавлять это?

Из документации StatefulSet:

В настоящее время StatefulSets требует, чтобы служба Headless отвечала за сетевую идентификацию модулей. Вы несете ответственность за создание этой Службы.

В приведенном выше примере будут созданы три модуля с именами web-0, web-1, web-2. StatefulSet может использовать Headless Service для управления доменом своих модулей.

Идентификатор модуля будет поддоменом управляющей службы, например. в вашем случае это будет например:

jira-0.jira.default.svc.cluster.local
jira-1.jira.default.svc.cluster.local
person Jonas    schedule 27.04.2021
comment
Спасибо за ваш ответ, но я имел в виду dnsConfig, а не безголовый сервис - person Charlie; 27.04.2021
comment
Ага, должен ли я создавать отдельные безголовые службы для каждого модуля в наборе состояний? Я создал только 1 под названием jira, как вы можете видеть в верхней части yaml - person Charlie; 27.04.2021
comment
Хм, это далеко не идеально. Каждый раз, когда количество реплик увеличивается, необходимо создавать новую службу. Только на kubernetes.io/docs/concepts/workloads/controllers/statefulset Используется 1 безголовый сервис. Но они не упоминают разрешение DNS для короткого имени хоста. Поэтому я думаю, что решение, которое я использую с dnsConfig, в конце концов, не так уж и плохо. - person Charlie; 27.04.2021
comment
Вы правы, я обновил свой ответ. Поды будут поддоменом основной службы. Вам не нужно вручную добавлять конфиги DNS. - person Jonas; 27.04.2021
comment
Также остерегайтесь кеширования DNS, описанного на kubernetes.io/docs/ концепции / рабочие нагрузки / контроллеры / statefulset / - person Jonas; 27.04.2021