← Cloudflare Load Balancing / load-balancing / additional-options
CNAME flattening для конечных точек
Когда DNS-only (серое облако) балансировщик нагрузки выбирает конечный узел, адрес которого указан в виде имени хоста (например origin.example.com), Cloudflare разрешает это имя хоста в IP-адрес и возвращает A/AAAA запись клиенту. Это CNAME flattening, и это соответствует тому, как Как CNAME flattening работает в Cloudflare DNS.
В некоторых сценариях, например при использовании сторонних конечных точек с собственной DNS-маршрутизацией, требуется, чтобы балансировщик нагрузки возвращал CNAME саму запись, а не преобразованный IP-адрес. Эта flatten_cname свойство конечного узла пула позволяет отключить flattening для отдельных конечных узлов.
Когда это использовать
Включите flatten_cname выключено (flatten_cname: false) на конечной точке, когда:
- Вы хотите, чтобы клиенты получали
CNAMEответ, указывающий на стороннего поставщика SaaS или облачный эндпоинт (например,origin-b.example.com). - Конечная точка преобразуется в адреса, которые ниже по цепочке являются динамическими, учитывающими геолокацию или клиента.
- Вы переключаетесь между двумя конечными точками с именами хостов и хотите, чтобы клиент напрямую разрешал имя хоста каждого провайдера.
Оставьте flatten_cname включено (flatten_cname: true, значение по умолчанию) для обычных конечных точек на основе IP-адреса или имени хоста, где нужен просто быстрый A/AAAA ответ.
Где это применяется
flatten_cname изменяет результат работы резолвера только при выполнении всех следующих условий:
| Условие | Обязательное значение |
|---|---|
| Балансировщик нагрузки режим прокси | DNS-only (серое облако). Proxied балансировщики нагрузки должны возвращать anycast IP-адреса Cloudflare, поэтому эта настройка игнорируется. |
| Адрес конечной точки | Имя хоста (целевой CNAME). Для необработанных адресов конечных точек IPv4/IPv6 этот параметр не действует. |
| Имя хоста балансировщика нагрузки | Не является корневым доменом зоны. CNAME записи на апексе зоны не допускаются, поэтому балансировщик нагрузки переходит к flattening на апексе. |
| Выбранная конечная точка | Маршрутизация выбрала именно эту конечную точку. Установка параметра flatten_cname: false на конечном узле A не имеет эффекта, если балансировка нагрузки выбирает конечный узел B в том же пуле. |
Если у выбранной конечной точки есть flatten_cname: false но не выполняется хотя бы одно из условий, перечисленных в предыдущей таблице, балансировщик нагрузки разворачивает CNAME и возвращает A/AAAA записи так, как если бы переключатель был включён.
Настройте CNAME flattening
flatten_cname настраивается для каждого конечного узла в пуле, наряду с name, address, weight, и других полей конечной точки. Вы можете задать это в дашборде Cloudflare, через API или Terraform.
В дашборде этот параметр отображается как Flatten CNAME переключатель для каждого эндпоинта в пуле. Отключите переключатель, чтобы возвращать имя хоста эндпоинта в виде CNAME запись.
-
На панели управления Cloudflare перейдите к разделу Load Balancing страницу.
Перейдите в Load Balancing ↗ -
Выберите Пулы на вкладке.
-
В пуле, который содержит эту конечную точку, выберите Изменить.
-
В Конечные точки раздела найдите эндпоинт, который нужно изменить.
-
Включите Flatten CNAME выключить.
-
Выберите Save.
Flatten CNAME доступен только для конечных узлов, адрес которых указан в виде имени хоста. Конечные узлы, использующие IP-адрес, не могут отключить эту функцию.
Используйте Создание пула или Редактирование пула и задайте flatten_cname на каждом конечном узле в origins массив.
Необходимые разрешения API-токена
Хотя бы одно из следующих права доступа токена требуется:Load Balancing: Monitors and Pools Write
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/load_balancers/pools" \
--request POST \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--json '{
"name": "primary-pool",
"origins": [
{
"name": "origin-a",
"address": "origin-a.example.com",
"enabled": true,
"weight": 1,
"flatten_cname": false
},
{
"name": "origin-b",
"address": "origin-b.example.com",
"enabled": true,
"weight": 1,
"flatten_cname": false
},
{
"name": "fallback-ip",
"address": "203.0.113.10",
"enabled": true,
"weight": 1
}
]
}'flatten_cname по умолчанию равно true при отсутствии значения, сохраняя текущее поведение для существующих пулов и эндпоинтов.
Задайте атрибут для каждой конечной точки внутри cloudflare_load_balancer_pool ресурс.
resource "cloudflare_load_balancer_pool" "primary" {
account_id = var.account_id
name = "primary-pool"
origins = [
{
name = "origin-a"
address = "origin-a.example.com"
enabled = true
weight = 1
flatten_cname = false
},
{
name = "origin-b"
address = "origin-b.example.com"
enabled = true
weight = 1
flatten_cname = false
},
{
name = "fallback-ip"
address = "203.0.113.10"
enabled = true
weight = 1
}
]
}Проверить
Выполните запрос к имени хоста балансировщика нагрузки с помощью dig:
dig lb.example.com A +short- Если при маршрутизации была выбрана конечная точка, для которой
flatten_cnameэтоfalse, раздел ответа содержитCNAMEзапись, указывающая на адрес эндпоинта (например,origin-a.example.com.). Клиент (или его резолвер) отвечает за разрешение этогоCNAMEдалее. - Если при маршрутизации была выбрана конечная точка, для которой
flatten_cnameэтоtrue(или эндпоинт, адрес которого является IP-адресом), ответ содержит разрешённыйA/AAAAзаписи.
Поскольку ответ зависит от того, какую конечную точку выбирает политика распределения трафика, повторные dig запросы к одному и тому же балансировщику нагрузки могут закономерно чередоваться между CNAME и A/AAAA ответы, если пул сочетает эндпоинты по имени хоста с flatten_cname: false и IP-эндпоинты.
Health monitors
Мониторы работоспособности эндпоинтов не зависят от этого параметра. Cloudflare всегда разрешает имя хоста эндпоинта в IP-адрес и проверяет работу базового сервиса с помощью некэшированного DNS-запроса. Отключение сглаживания влияет только на то, что возвращается клиенту при DNS-запросе: статус работоспособности по-прежнему отражает реальную доступность бэкенда.
Аналитика
Данные о количестве запросов и решениях маршрутизации по каждой конечной точке остаются доступны в аналитика балансировки нагрузки, с ключом по имени конечной точки. Это позволяет отслеживать, как распределяется трафик между CNAME-возвращающие конечные точки.
Ограничения
- Проксируемые балансировщики нагрузки (с оранжевым облаком):
flatten_cnameигнорируется. Проксируемые балансировщики нагрузки должны разрешаться в anycast IP-адреса Cloudflare, чтобы обеспечить функции HTTP/HTTPS-прокси Cloudflare. - Балансировщики нагрузки на апексе зоны:
flatten_cnameигнорируется, так какCNAMEзаписи не допускаются на апексе зоны. - Конечные точки IP:
flatten_cnameне действует, так как отсутствуетCNAMEдля flattening или возврата. - Кеширование на DNS-резолвере: как и у любого балансировщика нагрузки в режиме DNS-only, нижестоящие резолверы могут кешировать возвращённую запись на время TTL. Клиенты, игнорирующие TTL, могут продолжать использовать ранее закешированный
CNAMEилиAответ. - Требование к тарифу: доступно клиентам Enterprise при наличии дополнения Load Balancing.
См. также
- DNS CNAME flattening , аналогичная функция для DNS записей, не связанных с балансировкой нагрузки.
- Режимы прокси , когда использовать балансировку нагрузки DNS-only, а когда proxied.
- Распространённые конфигурации , например конфигурации active-active failover, которые выигрывают от конечных точек, возвращающих CNAME.