INTEGRITY Документация

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) на конечной точке, когда:

Оставьте 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 запись.

  1. На панели управления Cloudflare перейдите к разделу Load Balancing страницу.

    Перейдите в Load Balancing ↗
  2. Выберите Пулы на вкладке.

  3. В пуле, который содержит эту конечную точку, выберите Изменить.

  4. В Конечные точки раздела найдите эндпоинт, который нужно изменить.

  5. Включите Flatten CNAME выключить.

  6. Выберите 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

Поскольку ответ зависит от того, какую конечную точку выбирает политика распределения трафика, повторные dig запросы к одному и тому же балансировщику нагрузки могут закономерно чередоваться между CNAME и A/AAAA ответы, если пул сочетает эндпоинты по имени хоста с flatten_cname: false и IP-эндпоинты.

Health monitors

Мониторы работоспособности эндпоинтов не зависят от этого параметра. Cloudflare всегда разрешает имя хоста эндпоинта в IP-адрес и проверяет работу базового сервиса с помощью некэшированного DNS-запроса. Отключение сглаживания влияет только на то, что возвращается клиенту при DNS-запросе: статус работоспособности по-прежнему отражает реальную доступность бэкенда.

Аналитика

Данные о количестве запросов и решениях маршрутизации по каждой конечной точке остаются доступны в аналитика балансировки нагрузки, с ключом по имени конечной точки. Это позволяет отслеживать, как распределяется трафик между CNAME-возвращающие конечные точки.

Ограничения