Как вы разрешаете как публичные, так и частные зоны в DNS с разделенным горизонтом (с использованием GCP Cloud DNS)?

Мы используем GCP и Cloud DNS для управления нашим доменом, и я пытаюсь решить следующие варианты использования:

  1. Имейте личные записи для таких вещей, как базы данных, которые можно разрешить только в сети компании (наш VPC).
  2. Замените общедоступные записи частными IP-адресами для альтернативной маршрутизации внутри сети компании.
  3. Уметь отправлять запросы DNS01 и разрешать записи в нашей сети и публично. Нам это нужно из-за того, как работает cert-manager (который мы используем для выдачи сертификатов с помощью letsencrypt).

Я пробовал решить эту проблему с помощью общедоступной и частной зоны (также известной как DNS с разделенным горизонтом), однако это решение решает только варианты использования 1 и 2. И оно решает вариант использования 2 только в том случае, если мы обеспечим, чтобы в частной зоне была копия все записи в публичной зоне (если нет приватного аналога).

Вариант использования 3 не реализуется этим решением, поскольку наш сервер диспетчера сертификатов создает записи в общедоступной зоне, а затем не может разрешить их в общедоступной зоне. Из-за особенностей нашей настройки настройка диспетчера сертификатов для разрешения обеих зон через некоторую локальную конфигурацию не идеальна. Также будет сложно создать записи в обеих зонах, так что это опять же не идеальное решение.

Я бы хотел, чтобы частная зона перенаправляла запросы в общедоступную, если в ней нет записи для конкретного запроса. Есть ли способ сделать это, в частности, с помощью GCPCloud DNS?

Идеалnslookup -> private zone -> public zone

В настоящее время у нас естьnslookup -> private zone -> error (NXDOMAIN) if no record

Например,

      # While on my laptop
> nslookup ws1.example.com
...
Name:   ws1.example.com
Address: 34.111.111.111           # Public IP for web server

# While on the GCP network
> nslookup db.example.com
...
Name:   db.example.com
Address: 10.10.0.2                # Private IP for a database
> nslookup ws1.example.com
...
Name:   ws1.example.com
Address: 10.0.0.10                # Private IP (from private zone) for web server

Это отлично работает для вариантов использования 1 и 2, но когда мы пытаемся разрешить запись, которая существует только в общедоступной зоне...

      # While on my laptop
> nslookup ws1.example.com
...
Name:   ws1.example.com
Address: 34.111.111.111           # Public IP for web server
> nslookup ws2.example.com        # We only have this record in the public zone
...
Name:   ws2.example.com
Address: 34.111.111.112           # Public IP for another web server

# While in the GCP VPC
> nslookup ws1.example.com
...
Name:   ws1.example.com
Address: 10.0.0.1                 # Private IP (override) for web server
> nslookup ws2.example.com        # We only have this record in the public zone
...
** server can't find ws2.example.com: NXDOMAIN    # Fails to resolve. Should look at private then public zone and resolve to 34.111.111.112.

Какие-либо предложения?

В качестве обходного пути на данный момент мы перешли на использование вызовов HTTP01 для диспетчера сертификатов, но мы бы предпочли использовать DNS01, если это возможно.

1 ответ

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

Недавно мы столкнулись с аналогичной проблемой с DNS с разделенным горизонтом и решили ее, реализовав запускаемую Eventarc облачную функцию, которая реплицирует все изменения в общедоступной зоне в частную зону, поэтому нам не нужно делать это вручную.

Отказ от ответственности: наше решение может не работать конкретно для случая использования диспетчера сертификатов, но его должно быть достаточно для большинства других случаев использования.

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