Поддержка прокси-сервера HTTP в Служба Azure Kubernetes (AKS)

Из этой статьи вы узнаете, как настроить кластеры Служба Azure Kubernetes (AKS) для использования HTTP-прокси для исходящего доступа к Интернету.

Кластеры AKS, развернутые в управляемых или пользовательских виртуальных сетях, имеют определенные исходящие зависимости, необходимые для правильной работы, что создало проблемы в средах, требующих перенаправления доступа к Интернету через прокси-серверы HTTP. Узлы не имели возможности провести начальную загрузку конфигурации, переменных среды и сертификатов, необходимых им для доступа к службам Интернета.

Функция прокси-сервера HTTP добавляет поддержку HTTP-прокси в кластеры AKS, предоставляя простой интерфейс, который можно использовать для защиты сетевого трафика, необходимого ДЛЯ AKS, в средах, зависящих от прокси-сервера. С помощью этой функции узлы AKS и модули pod настроены для использования прокси-сервера HTTP. Эта функция также позволяет установить доверенный центр сертификации на узлах при начальной загрузке кластера. Более сложные решения могут потребовать создания цепочки доверия для обеспечения безопасного взаимодействия в сети.

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

Следующие сценарии не поддерживаются:

  • Разные конфигурации прокси-сервера для разных пулов узлов
  • Аутентификация по имени пользователя и паролю
  • Пользовательские центры сертификации (ЦС) для взаимодействия с сервером API
  • Кластеры под управлением Windows
  • Пулы узлов с использованием групп доступности виртуальных машин (VMAS)
  • Использование * как дикий карта присоединен к суффиксу домена для noProxy

httpProxy, httpsProxyи trustedCa не имеет значения по умолчанию. Модули pod внедряются со следующими переменными среды:

  • HTTP_PROXY
  • http_proxy
  • HTTPS_PROXY
  • https_proxy
  • NO_PROXY
  • no_proxy

Чтобы отключить внедрение переменных среды прокси-сервера, необходимо отметить модуль Pod с "kubernetes.azure.com/no-http-proxy-vars":"true"помощью.

Подготовка к работе

  • Вам потребуется последняя версия Azure CLI. Запустите az --version, чтобы определить версию и запустите az upgrade для обновления версии. Если вам необходимо выполнить установку или обновление, см. статью Установка Azure CLI 2.0.
  • Проверьте наличие доступных обновлений кластера AKS, чтобы убедиться, что вы используете последнюю версию AKS. Если вам нужно обновить кластер AKS, ознакомьтесь с разделом "Обновление кластера AKS".
  • Файлы ОС, необходимые для обновлений конфигурации прокси-сервера, можно обновлять только во время процесса обновления образа узла. После настройки прокси-сервера необходимо обновить образ узла, чтобы применить изменения. Дополнительные сведения см. в статье Об обновлении образов узлов AKS.

Настройка прокси-сервера HTTP с помощью Azure CLI

Кластер AKS можно настроить с прокси-сервером HTTP во время создания кластера с помощью az aks create команды и передачи конфигурации в виде JSON-файла.

Схема файла конфигурации выглядит следующим образом:

{
  "httpProxy": "string",
  "httpsProxy": "string",
  "noProxy": [
    "string"
  ],
  "trustedCa": "string"
}
  • httpProxy: URL-адрес прокси-сервера, который будет использоваться для создания HTTP-соединений за пределами кластера. Схема URL-адреса должна быть http.
  • httpsProxy: URL-адрес прокси-сервера, который будет использоваться для создания HTTPS-соединений за пределами кластера. Если это не указано, httpProxy используется для подключений HTTP и HTTPS.
  • noProxy: список доменов назначения, доменов, IP-адресов или других сетевых CIDR для исключения прокси-сервера.
  • trustedCa: строка, содержащая альтернативное содержимое сертификата ЦС base64 encoded. В настоящее время поддерживается только PEM формат.

Внимание

Для совместимости с компонентами Go, которые входят в систему Kubernetes, сертификат должен поддерживаться Subject Alternative Names(SANs) вместо устаревших сертификатов common Name.

Существуют различия в приложениях о том, как соответствовать переменной http_proxyсреды , https_proxyи no_proxy. Curl и Python не поддерживают CIDR, no_proxyно Ruby делает.

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

Примечание.

Сертификат ЦС должен быть строкой в кодировке Base64 содержимого сертификата формата PEM.

{
  "httpProxy": "http://myproxy.server.com:8080/", 
  "httpsProxy": "https://myproxy.server.com:8080/", 
  "noProxy": [
    "localhost",
    "127.0.0.1"
  ],
  "trustedCA": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUgvVENDQmVXZ0F3SUJB...b3Rpbk15RGszaWFyCkYxMFlscWNPbWVYMXVGbUtiZGkvWG9yR2xrQ29NRjNURHg4cm1wOURCaUIvCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0="
}

Создайте файл и укажите значения для httpProxy, httpsProxyи noProxy. Если для вашей среды требуется, укажите значение для trustedCa. Затем можно развернуть кластер с помощью az aks create команды с параметром, --http-proxy-config заданным для созданного файла. Кластер должен инициализировать с помощью прокси-сервера HTTP, настроенного на узлах.

az aks create --name $clusterName --resource-group $resourceGroup --http-proxy-config aks-proxy-config.json

Настройка прокси-сервера HTTP с помощью шаблона Azure Resource Manager (ARM)

Кластер AKS можно развернуть с помощью прокси-сервера HTTP с помощью шаблона ARM. Та же схема, используемая для развертывания CLI, существует в Microsoft.ContainerService/managedClusters определении "properties"ниже, как показано в следующем примере:

"properties": {
    ...,
    "httpProxyConfig": {
        "httpProxy": "string",
        "httpsProxy": "string",
        "noProxy": [
            "string"
        ],
        "trustedCa": "string"
    }
}

В шаблоне укажите значения для httpProxy, httpsProxyи noProxy. При необходимости укажите значение для trustedCa. Затем можно развернуть шаблон. Кластер должен инициализировать с помощью прокси-сервера HTTP, настроенного на узлах.

Обновление конфигурации прокси-сервера

Примечание.

При переключении на новый прокси-сервер новый прокси-сервер должен уже существовать для успешного обновления. После завершения обновления можно удалить старый прокси-сервер.

Конфигурацию прокси-сервера в кластере можно обновить с помощью az aks update команды с --http-proxy-config параметром, установленным на новый JSON-файл с обновленными значениями для httpProxy, httpsProxynoProxyи trustedCa при необходимости. Обновление внедряет новые переменные среды в модули pod с новыми значениями или noProxy новыми httpProxyhttpsProxyзначениями. Модули pod должны быть вращаются для того, чтобы приложения выбрали его, так как значения переменных среды внедряются модулятивным веб-перехватчиком. Для компонентов в Kubernetes, таких как контейнеры и сам узел, это не вступают в силу до тех пор, пока не будет выполнено обновление образа узла.

Например, предположим, что вы создали новый файл с строкой в кодировке Base64 нового сертификата ЦС с именем aks-proxy-config-2.json. Конфигурацию прокси-сервера в кластере можно обновить с помощью следующей команды:

az aks update --name $clusterName --resource-group $resourceGroup --http-proxy-config aks-proxy-config-2.json

Обновление образов узлов AKS

После настройки прокси-сервера необходимо обновить образ узла, чтобы применить изменения. Процесс обновления образа узла — единственный способ обновить файлы ОС, необходимые для обновлений конфигурации прокси-сервера. Процесс обновления образа узла — это последовательное обновление, которое обновляет образ ОС на каждом узле в пуле узлов. Плоскость управления AKS обрабатывает процесс обновления, который не является неразрывным для запуска приложений.

Сведения об обновлении образов узлов AKS см. в статье об обновлении образов узлов Служба Azure Kubernetes (AKS).

Мониторинг конфигурации надстройки

HTTP-прокси с надстройкой мониторинга поддерживает следующие конфигурации:

  • Исходящий прокси-сервер без аутентификации
  • Исходящий прокси-сервер с использованием имени пользователя и проверки подлинности паролей
  • Исходящий прокси-сервер с доверенным сертификатом для конечной точки Log Analytics

Следующие конфигурации не поддерживаются:

  • Пользовательские метрики и рекомендуемые функции оповещений при использовании прокси-сервера с доверенными сертификатами

Следующие шаги

Дополнительные сведения о требованиях к сети кластеров AKS см. в разделе "Управление исходящим трафиком" для узлов кластера в AKS.