Как вы разрешаете как публичные, так и частные зоны в DNS с разделенным горизонтом (с использованием GCP Cloud DNS)?
Мы используем GCP и Cloud DNS для управления нашим доменом, и я пытаюсь решить следующие варианты использования:
- Имейте личные записи для таких вещей, как базы данных, которые можно разрешить только в сети компании (наш VPC).
- Замените общедоступные записи частными IP-адресами для альтернативной маршрутизации внутри сети компании.
- Уметь отправлять запросы 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 облачную функцию, которая реплицирует все изменения в общедоступной зоне в частную зону, поэтому нам не нужно делать это вручную.
Отказ от ответственности: наше решение может не работать конкретно для случая использования диспетчера сертификатов, но его должно быть достаточно для большинства других случаев использования.