Согласованный DNS между Kubernetes и docker-compose

Насколько мне известно, это скорее вопрос разработки, чем вопрос о сервере, но он лежит на грани двух, поэтому не стесняйтесь переходить на serverfault.com, если это общее мнение).

У меня есть служба, давайте назовем это webи объявлено в docker-compose.yml файл следующим образом:

  web:
    image: webimage
    command: run start
    build:
      context: ./web
      dockerfile: Dockerfile

Перед этим у меня есть обратный прокси-сервер под управлением Apache Traffic Server. В конфигурационном файле переназначения URL есть простое правило отображения

map / http://web/

Таким образом, все входящие запросы отображаются на web Сервис описан выше. Это работает просто peachily в docker-composeОднако, когда я перевожу сервис в kubernetes со следующим описанием сервиса:

apiVersion: v1
kind: Service
metadata:
  labels:
    io.kompose.service: web
  name: web
spec:
  clusterIP: None
  ports:
  - name: headless
    port: 55555
    targetPort: 0
  selector:
    io.kompose.service: web
status:
  loadBalancer: {}

... сервер трафика жалуется, потому что не может разрешить имя DNS web,

Я могу решить эту проблему, слегка изменив поведение DNS сервера трафика со следующим изменением конфигурации:

CONFIG proxy.config.dns.search_default_domains INT 1

(см. https://docs.trafficserver.apache.org/en/7.1.x/admin-guide/files/records.config.en.html).

Это изменение конфигурации описывается следующим образом:

Traffic Server может попытаться разрешить неквалифицированные имена хостов путем расширения до локального домена. Например, если клиент отправляет запрос неквалифицированному хосту (например, host_x), а локальным доменом Traffic Server является y.com, то Traffic Server расширит имя хоста до host_x.y.com.

Теперь все работает просто отлично в kubernetes.

Тем не менее, когда работает в docker-compose, Traffic-сервер жалуется на невозможность разрешить web,

Итак, я могу заставить все работать на обеих платформах, но для этого требуются изменения конфигурации. Я мог бы запустить скрипт запуска для сервера трафика, чтобы определить, работаем ли мы в kube или docker, и написать строку конфигурации выше в зависимости от того, где мы работаем, но в идеале я хотел бы, чтобы DNS был согласованным на разных платформах., Мое понимание DNS (и в частности DNS-доменов по умолчанию / локальных доменов) неоднозначно.

Есть указатели? В идеале, локальный домен для docker-compose кажется подходящим вариантом.

2 ответа

По умолчанию локальный домен kubernetes является

default.svc.cluster.local

Это означает, что полное имя web сервис под кубернетесом есть web.default.svc.cluster.local

Итак, в docker-compose файл, в разделе конфигурации сервера трафика, я могу создать псевдоним для web как web.default.svc.cluster.local со следующим docker-compose.yml синтаксис:

version: "3"
services:
  web:
    # ...
  trafficserver:
    # ...
    links:
      - "web:web.default.svc.cluster.local"

и обновите конфигурацию сопоставления на сервере трафика:

map / http://web.default.svc.cluster.local/

а теперь web услуга доступна с использованием одного и того же доменного имени через docker-compose а также kubernetes,

Я нашел ту же проблему, но решил ее по-другому, после очень мучительной отладки.

С CONFIG proxy.config.dns.search_default_domains INT 1 Apache Traffic Server добавит имена, найденные в search в /etc/resolve.conf по одному, пока не получит удар.

В моем случае resol.conf указывает на company.intra чтобы я мог назвать свои сервисы (все сервисы, используемые с Apache Traffic Server) в соответствии с этим

version: '3.2'
services:
   # this hack is ugly but we need to name this 
   # (and all other service called from ats), with 
   # the same name as found under search in /etc/resolve.conf)
   web.company.intra:
      image: web-image:1.0.0

С этим изменением мне вообще не нужно вносить какие-либо изменения в remap.config, используемый URL-адрес по-прежнему может быть только "веб", поскольку он расширяется до имени, которое соответствует обеим средам,
web.company.intra в docker.compose
web.default.svc.local.cluster в Куберне

Другие вопросы по тегам