Безопасный доступ к серверу API с использованием авторизованных диапазонов IP-адресов в Службе Kubernetes Azure (AKS)

В этой статье показано, как использовать диапазоны IP-адресов, авторизованных на сервере API, чтобы ограничить доступ к конечным точкам плоскости управления для рабочих нагрузок в Azure Kubernetes Service (AKS).

Предпосылки

  • Azure CLI версии 2.0.76 или более поздней. Чтобы проверить версию, выполните команду az --version. Если вам необходимо выполнить установку или обновление, см. статью Установка Azure CLI 2.0.
  • Последняя версия Azure PowerShell. Инструкции по установке см. в разделе Install Azure PowerShell.
  • Сведения о том, какие IP-адреса следует включать при интеграции кластера AKS с Azure DevOps, см. в статье "Разрешенные IP-адреса и URL-адреса домена".

Подсказка

На портале Azure используйте Azure Copilot для изменения IP-адресов, которые могут получить доступ к кластеру. Дополнительные сведения см. в статье "Работа с кластерами AKS эффективно с помощью Azure Copilot".

Ограничения и рекомендации

  • AKS поддерживает эту функцию только с подсистемой балансировки нагрузки SKU уровня "Стандартный". AKS больше не поддерживает подсистему балансировки нагрузки SKU уровня "Базовый". Если у вас есть существующий кластер, использующий номер SKU "Базовый", перейдите к номеру SKU уровня "Стандартный". Миграция требует простоя и имеет дополнительные предварительные требования.
  • Эту функцию нельзя использовать с частными кластерами.
  • Для кластеров, использующих общедоступные IP-адреса узла, каждый пул узлов с общедоступными IP-адресами должен использовать префиксы общедоступных IP-адресов. Добавьте эти префиксы в качестве авторизованных диапазонов.
  • Можно указать до 200 разрешенных диапазонов IP-адресов. Чтобы выйти за рамки этого ограничения, рассмотрите возможность использования API Server VNet Integration, который поддерживает до 2000 диапазонов IP-адресов.

Общие сведения о диапазонах разрешенных IP-адресов сервера API

Сервер API Kubernetes предоставляет базовые API Kubernetes. Такие средства управления, как kubectl и панель мониторинга Kubernetes, взаимодействуют с кластером с помощью этого сервера API. AKS предоставляет плоскость управления одним клиентом с выделенным сервером API и назначает серверу общедоступный IP-адрес по умолчанию. Вы можете управлять доступом с помощью управления доступом на основе ролей Kubernetes (Kubernetes RBAC) или Azure RBAC.

Чтобы защитить сервер API уровня управления AKS в противном случае, включите авторизованные диапазоны IP-адресов. Авторизованные диапазоны IP-адресов позволяют взаимодействовать только с определенными диапазонами IP-адресов с сервером API. Сервер API блокирует запросы от IP-адресов, которые не включены в авторизованные диапазоны. Для распространения правил может потребоваться до двух минут. Подождите до двух минут, прежде чем тестировать подключение.

Рекомендуется включить следующие диапазоны IP-адресов в конфигурацию авторизованных диапазонов IP-адресов сервера API:

  • IP-адрес исходящего кластера (брандмауэр, шлюз NAT или другой адрес в зависимости от типа исходящего трафика).
  • Диапазоны IP-адресов для сетей, используемых для администрирования кластера.

Настройка кластера AKS с включенными разрешёнными IP-диапазонами сервера API

Примечание.

При включении авторизованных диапазонов IP-адресов сервера API во время создания кластера AKS добавляет общедоступный IP-адрес сервера API и исходящий общедоступный IP-адрес подсистемы балансировки нагрузки SKU уровня "Стандартный " в список авторизованных диапазонов IP-адресов по умолчанию в дополнение к указанным диапазонам.

Особый случай. 0.0.0.0/32Заполнитель 0.0.0.0/32 сообщает AKS разрешить доступ к серверу API только исходящим общедоступным IP-адресом подсистемы балансировки нагрузки SKU уровня "Стандартный". Заполнитель имеет следующее поведение:

Behavior Description
Дополнительные диапазоны IP-адресов клиента Отключает разрешение дополнительных диапазонов IP-адресов клиента, установленное по умолчанию.
Доступ к серверу API Ограничивает доступ сервера API только к собственному исходящему IP-адресу кластера.
Самоконтроль Позволяет кластеру самостоятельно управлять при блокировке внешнего доступа.

Чтобы создать кластер с включенными диапазонами разрешенных IP-адресов сервера API, укажите список авторизованных диапазонов общедоступных IP-адресов. Для диапазона CIDR используйте сетевой адрес, который является первым IP-адресом в диапазоне. Например, чтобы разрешить диапазон 137.117.106.88137.117.106.95, укажите 137.117.106.88/29.

az aks create Используйте команду с --api-server-authorized-ip-ranges параметром для создания кластера AKS с включенными диапазонами IP-адресов сервера API. В следующем примере создается кластер с именем myAKSCluster в группе ресурсов с именем myResourceGroup, и разрешается диапазону IP-адресов 73.140.245.0/24 доступ к серверу API.

az aks create --resource-group myResourceGroup --name myAKSCluster --vm-set-type VirtualMachineScaleSets --load-balancer-sku standard --api-server-authorized-ip-ranges 73.140.245.0/24 --generate-ssh-keys

Используйте командлет с -ApiServerAccessAuthorizedIpRange параметром New-AzAksCluster для создания кластера AKS с включенными диапазонами IP-адресов сервера API. В следующем примере создается кластер с именем myAKSCluster в группе ресурсов с именем myResourceGroup, и разрешается диапазону IP-адресов 73.140.245.0/24 доступ к серверу API.

New-AzAksCluster -ResourceGroupName myResourceGroup -Name myAKSCluster -NodeVmSetType VirtualMachineScaleSets -LoadBalancerSku Standard -ApiServerAccessAuthorizedIpRange '73.140.245.0/24' -GenerateSshKey
  1. На домашней странице портала Azure выберите "Создать ресурс", "Контейнеры", "Служба Azure Kubernetes (AKS)".
  2. Настройте параметры кластера по мере необходимости.
  3. В разделе "Сеть" в разделе "Общедоступный доступ" выберите "Задать авторизованные диапазоны IP-адресов".
  4. Для указания диапазонов IP-адресов введите диапазоны IP-адресов, которые требуется авторизовать для доступа к серверу API.
  5. Настройте остальные параметры кластера по мере необходимости.
  6. Когда вы будете готовы, нажмите кнопку "Рецензирование" и "Создать">, чтобы создать кластер.

Указание исходящих IP-адресов для подсистемы балансировки нагрузки SKU уровня "Стандартный" с помощью Azure CLI

При создании кластера с разрешенными диапазонами IP-адресов сервера API можно также указать исходящие IP-адреса или префиксы с помощью --load-balancer-outbound-ips параметров или --load-balancer-outbound-ip-prefixes параметров. AKS позволяет использовать эти IP-адреса в дополнение к IP-адресам в параметре --api-server-authorized-ip-ranges .

--load-balancer-outbound-ips Используйте параметр, чтобы создать кластер AKS с включенными диапазонами РАЗРЕШЕНных IP-адресов сервера API и указать исходящие IP-адреса для подсистемы балансировки нагрузки SKU уровня "Стандартный". В следующем примере создается кластер с именем myAKSCluster в группе ресурсов с именем myResourceGroup, можно 73.140.245.0/24 получить доступ к серверу API и указать два исходящих IP-адреса для подсистемы балансировки нагрузки SKU уровня "Стандартный". Замените <public-ip-id-1> и <public-ip-id-2> на идентификаторы ресурсов общедоступных IP-адресов.

az aks create --resource-group myResourceGroup --name myAKSCluster --vm-set-type VirtualMachineScaleSets --load-balancer-sku standard --api-server-authorized-ip-ranges 73.140.245.0/24 --load-balancer-outbound-ips <public-ip-id-1>,<public-ip-id-2> --generate-ssh-keys

Разрешите только исходящий общедоступный IP-адрес стандартного балансировщика нагрузки

--api-server-authorized-ip-ranges Используйте параметр для создания кластера AKS, который позволяет получить доступ к серверу API только исходящий общедоступный IP-адрес подсистемы балансировки нагрузки SKU уровня "Стандартный". В следующем примере создается кластер с именем myAKSCluster в группе ресурсов с именем myResourceGroup:

az aks create --resource-group myResourceGroup --name myAKSCluster --vm-set-type VirtualMachineScaleSets --load-balancer-sku standard --api-server-authorized-ip-ranges 0.0.0.0/32 --generate-ssh-keys

-ApiServerAccessAuthorizedIpRange Используйте параметр для создания кластера AKS, который позволяет получить доступ к серверу API только исходящий общедоступный IP-адрес подсистемы балансировки нагрузки SKU уровня "Стандартный". В следующем примере создается кластер с именем myAKSCluster в группе ресурсов с именем myResourceGroup:

New-AzAksCluster -ResourceGroupName myResourceGroup -Name myAKSCluster -NodeVmSetType VirtualMachineScaleSets -LoadBalancerSku Standard -ApiServerAccessAuthorizedIpRange '0.0.0.0/32' -GenerateSshKey
  1. На домашней странице портала Azure выберите "Создать ресурс", "Контейнеры", "Служба Azure Kubernetes (AKS)".
  2. Настройте параметры кластера по мере необходимости.
  3. В разделе "Сеть" в разделе "Общедоступный доступ" выберите "Задать авторизованные диапазоны IP-адресов".
  4. Для указания диапазонов IP-адресов введите 0.0.0.0/32. Этот параметр позволяет использовать только исходящий общедоступный IP-адрес подсистемы балансировки нагрузки SKU уровня "Стандартный".
  5. Настройте остальные параметры кластера по мере необходимости.
  6. Когда вы будете готовы, нажмите кнопку "Рецензирование" и "Создать">, чтобы создать кластер.

Обновление авторизованных диапазонов IP-адресов сервера API в существующем кластере

az aks update Используйте команду с --api-server-authorized-ip-ranges параметром для обновления авторизованных диапазонов IP-адресов сервера API кластера. Следующий пример задает авторизованный диапазон 73.140.245.0/24 для кластера с именем myAKSCluster в группе ресурсов с именем myResourceGroup:

az aks update --resource-group myResourceGroup --name myAKSCluster --api-server-authorized-ip-ranges 73.140.245.0/24

Разрешить несколько диапазонов IP-адресов с помощью Azure CLI

Чтобы разрешить несколько диапазонов IP-адресов, разделите их запятыми.

Используйте команду с параметром az aks update--api-server-authorized-ip-ranges для авторизации нескольких диапазонов IP-адресов. В следующем примере кластер с именем myAKSCluster в группе ресурсов с именем myResourceGroup:

az aks update --resource-group myResourceGroup --name myAKSCluster --api-server-authorized-ip-ranges 73.140.245.0/24,193.168.1.0/24,194.168.1.0/24

Set-AzAksCluster Используйте командлет с -ApiServerAccessAuthorizedIpRange параметром для обновления авторизованных диапазонов IP-адресов сервера API кластера. Следующий пример задает авторизованный диапазон 73.140.245.0/24 для кластера с именем myAKSCluster в группе ресурсов с именем myResourceGroup:

Set-AzAksCluster -ResourceGroupName myResourceGroup -Name myAKSCluster -ApiServerAccessAuthorizedIpRange '73.140.245.0/24'
  1. Перейдите к портал Azure и выберите кластер AKS, который требуется обновить.
  2. В меню службы в разделе "Параметры" выберите "Сеть".
  3. В разделе "Параметры ресурса" выберите "Управление".
  4. На странице "Авторизованные диапазоны IP-адресов" обновите диапазоны авторизованных IP-адресов по мере необходимости.
  5. По завершении выберите Сохранить.

Отключение авторизованных диапазонов IP-адресов сервера API в существующем кластере

Чтобы отключить авторизованные диапазоны IP-адресов сервера API, используйте az aks update команду и укажите пустой диапазон "" для --api-server-authorized-ip-ranges параметра.

az aks update --resource-group myResourceGroup --name myAKSCluster --api-server-authorized-ip-ranges ""

Чтобы отключить авторизованные диапазоны IP-адресов сервера API, используйте Set-AzAksCluster командлет и укажите пустой диапазон '' для -ApiServerAccessAuthorizedIpRange параметра.

Set-AzAksCluster -ResourceGroupName myResourceGroup -Name myAKSCluster -ApiServerAccessAuthorizedIpRange ''
  1. Перейдите к портал Azure и выберите кластер AKS, который требуется обновить.
  2. В меню службы в разделе "Параметры" выберите "Сеть".
  3. В разделе "Параметры ресурса" выберите "Управление".
  4. На странице "Авторизованные диапазоны IP-адресов" снимите флажок "Задать авторизованные диапазоны IP-адресов".
  5. Выберите Сохранить.

Поиск существующих диапазонов разрешенных IP-адресов сервера API

Чтобы найти существующие диапазоны разрешенных IP-адресов сервера API, используйте az aks show команду с заданным параметром --queryapiServerAccessProfile.authorizedIpRanges.

az aks show --resource-group myResourceGroup --name myAKSCluster --query apiServerAccessProfile.authorizedIpRanges

Пример выходных данных:

[
    "73.140.245.0/24"
]

Чтобы найти существующие диапазоны разрешенных IP-адресов сервера API, используйте Get-AzAksCluster командлет.

Get-AzAksCluster -ResourceGroupName myResourceGroup -Name myAKSCluster | Select-Object -ExpandProperty ApiServerAccessProfile

Пример выходных данных:

AuthorizedIPRanges: {73.140.245.0/24}
...
  1. Перейдите к портал Azure и выберите кластер AKS.

  2. В меню службы в разделе "Параметры" выберите "Сеть".

    В разделе "Параметры ресурса " на странице "Сеть" отображаются настроенные в настоящее время авторизованные диапазоны IP-адресов.

    Снимок экрана: авторизованные диапазоны IP-адресов в разделе

Доступ к серверу API с компьютера разработки, инструментов или автоматизации

Чтобы получить доступ к серверу API с компьютера разработки, средства или системы автоматизации, добавьте его общедоступный IP-адрес в авторизованные диапазоны IP-адресов кластера.

Кроме того, настройте прыжки с необходимым инструментом в отдельной подсети в виртуальной сети брандмауэра и добавьте IP-адреса брандмауэра в авторизованные диапазоны. Если подсеть кластера AKS использует принудительное туннелирование через брандмауэр, можно вместо этого поместить эту подсеть кластера AKS.

Примечание.

В следующем примере сохраняется существующий авторизованный диапазон и добавляется другой IP-адрес. Если опустить существующий IP-адрес, команда заменяет ее новым диапазоном.

  1. Выполните следующую команду, чтобы получить IP-адрес и задать его в качестве переменной среды:

    # Retrieve your IP address
    CURRENT_IP=$(dig +short "myip.opendns.com" "@resolver1.opendns.com")
    
  2. az aks update Используйте команду с параметром--api-server-authorized-ip-ranges, чтобы добавить IP-адрес в авторизованные диапазоны. Следующий пример добавляет текущий IP-адрес в существующие диапазоны кластера с именем myAKSCluster в группе ресурсов с именем myResourceGroup:

    az aks update --resource-group myResourceGroup --name myAKSCluster --api-server-authorized-ip-ranges $CURRENT_IP/32,73.140.245.0/24
    
  1. Выполните следующую команду, чтобы получить IP-адрес и задать его в качестве переменной среды:

    # Retrieve your IP address
    $CURRENT_IP = (Invoke-RestMethod -Uri 'https://ipinfo.io/json').ip
    
  2. Используйте командлет с параметром Set-AzAksCluster-ApiServerAccessAuthorizedIpRange , чтобы добавить IP-адрес в авторизованные диапазоны. Следующий пример добавляет текущий IP-адрес в существующие диапазоны кластера с именем myAKSCluster в группе ресурсов с именем myResourceGroup:

    Set-AzAksCluster -ResourceGroupName myResourceGroup -Name myAKSCluster -ApiServerAccessAuthorizedIpRange "$CURRENT_IP/32", '73.140.245.0/24'
    

Другой способ определить IP-адрес см. в статье "Поиск IP-адреса " или поиск того, что такое IP-адрес? в веб-браузере.

Дополнительные сведения о безопасности в AKS см. в следующих статьях: