Поделиться через


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

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

Предпосылки

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

Подсказка

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

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

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

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

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

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

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

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

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

Примечание.

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

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

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

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

  • Создайте кластер AKS с авторизованными диапазонами IP-адресов для сервера API, используя команду az aks create с параметром --api-server-authorized-ip-ranges. В следующем примере создается кластер с именем 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
    
  • Создайте кластер AKS с авторизованными диапазонами IP-адресов сервера API, включенными с помощью командлета с параметром New-AzAksCluster-ApiServerAccessAuthorizedIpRange . В следующем примере создается кластер с именем myAKSCluster в группе ресурсов с именем myResourceGroup, которому разрешен доступ к серверу API из диапазона IP-адресов 73.140.245.0/24.

    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 уровня "Стандартный"

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

  • Создайте кластер AKS, включив диапазоны разрешённых IP-адресов для сервера API, и укажите исходящие IP-адреса для балансировщика нагрузки SKU стандарта "Standard" с помощью параметра --load-balancer-outbound-ips. В следующем примере создается кластер с именем myAKSCluster в группе ресурсов с именем myResourceGroup, определяется диапазон IP-адресов 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-адрес стандартного балансировщика нагрузки

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

    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
    
  • Создайте кластер AKS с включенными диапазонами разрешенных IP-адресов сервера API и разрешайте только исходящий общедоступный IP-адрес подсистемы балансировки нагрузки SKU уровня "Стандартный" с помощью -ApiServerAccessAuthorizedIpRange параметра. В следующем примере создается кластер с именем myAKSCluster в группе ресурсов с именем myResourceGroup с включенными диапазонами IP-адресов сервера API и разрешен только исходящий общедоступный IP-адрес подсистемы балансировки нагрузки SKU уровня "Стандартный".

    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 в существующем кластере

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

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

Разрешить несколько диапазонов IP-адресов

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

  • Обновите авторизованные диапазоны IP-адресов для существующего кластера, чтобы разрешить несколько диапазонов, с помощью команды az aks update и параметра --api-server-authorized-ip-ranges. В следующем примере обновляются авторизованные диапазоны IP-адресов сервера API в кластере с именем myAKSCluster в группе ресурсов с именем myResourceGroup и разрешены несколько диапазонов IP-адресов:

    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
    
  • Обновите разрешенные диапазоны IP-адресов существующего кластера с помощью командлета Set-AzAksCluster, используя параметр -ApiServerAccessAuthorizedIpRange. В следующем примере обновляется диапазон разрешенных IP-адресов сервера API в кластере myAKSCluster в группе ресурсов myResourceGroup, и диапазон IP-адресов обновляется на 73.140.245.0/24.

    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

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

    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-адресов сервера API перечислены в разделе "Параметры ресурса".

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

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

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

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

Примечание.

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

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

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

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

    # Retrieve your IP address
    CURRENT_IP=$(dig +short "myip.opendns.com" "@resolver1.opendns.com")
    
  2. Добавьте ваш IP-адрес в утвержденный список, используя командлет Set-AzAksCluster с параметром -ApiServerAccessAuthorizedIpRange. Следующий пример добавляет текущий IP-адрес в существующий диапазон разрешенных IP-адресов сервера API в кластере с именем myAKSCluster в группе ресурсов с именем myResourceGroup:

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

Другим вариантом является использование следующей команды в системах Windows для получения общедоступного IPv4-адреса:

Invoke-RestMethod http://ipinfo.io/json | Select -exp ip

Вы также можете выполнить действия, описанные в разделе "Поиск IP-адреса " или поиск по моему IP-адресу? в браузере Интернета.

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