Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Из этой статьи вы узнаете, как настроить кластеры Служба Azure Kubernetes (AKS) для использования HTTP-прокси для исходящего доступа к Интернету.
Кластеры AKS, развернутые в управляемых или пользовательских виртуальных сетях, имеют определенные исходящие зависимости, необходимые для правильной работы, что создало проблемы в средах, требующих перенаправления доступа к Интернету через прокси-серверы HTTP. Узлы не имели возможности провести начальную загрузку конфигурации, переменных среды и сертификатов, необходимых им для доступа к службам Интернета.
Функция прокси-сервера HTTP добавляет поддержку HTTP-прокси в кластеры AKS, предоставляя простой интерфейс, который можно использовать для защиты сетевого трафика, необходимого ДЛЯ AKS, в средах, зависящих от прокси-сервера. С помощью этой функции узлы AKS и модули pod настроены для использования прокси-сервера HTTP. Эта функция также позволяет установить доверенный центр сертификации на узлах при начальной загрузке кластера. Более сложные решения могут потребовать создания цепочки доверия для обеспечения безопасного взаимодействия в сети.
Рекомендации и ограничения
Следующие сценарии не поддерживаются:
- Разные конфигурации прокси-сервера для разных пулов узлов
- Аутентификация по имени пользователя и паролю
- Пользовательские удостоверяющие центры (ЦС) для связи с API-сервером
- Кластеры AKS с пулами узлов Windows
- Пулы узлов с использованием групп доступности виртуальных машин (VMAS)
- Использование * в качестве подстановочного знака, присоединенного к суффиксу домена для noProxy
httpProxy, httpsProxyи trustedCa не имеет значения по умолчанию. Модули pod внедряются со следующими переменными среды:
HTTP_PROXYhttp_proxyHTTPS_PROXYhttps_proxyNO_PROXYno_proxy
Чтобы отключить внедрение переменных среды прокси-сервера, необходимо отметить Pod с помощью "kubernetes.azure.com/no-http-proxy-vars":"true".
Перед началом работы
Используйте среду Bash в Azure Cloud Shell. Дополнительные сведения см. в статье "Начало работы с Azure Cloud Shell".
Если вы предпочитаете запускать справочные команды CLI локально, установите Azure CLI. Если вы работаете в Windows или macOS, подумайте о запуске Azure CLI в контейнере Docker. Дополнительные сведения см. в статье Как запустить Azure CLI в контейнере Docker.
Если вы используете локальную установку, войдите в Azure CLI с помощью команды az login . Чтобы завершить процесс аутентификации, следуйте шагам, отображаемым в вашем терминале. Сведения о других параметрах входа см. в статье "Проверка подлинности в Azure с помощью Azure CLI".
Когда вас попросят, установите расширение Azure CLI при первом использовании. Дополнительные сведения о расширениях см. в статье Использование расширений и управление ими с помощью Azure CLI.
Выполните команду az version, чтобы узнать установленную версию и зависимые библиотеки. Чтобы обновиться до последней версии, выполните команду az upgrade.
Создание файла конфигурации со значениями прокси-сервера HTTP
Создайте файл и укажите значения для httpProxy, httpsProxyи noProxy. Если в вашей среде это необходимо, укажите значение для trustedCa.
Схема файла конфигурации выглядит следующим образом:
{
"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 поддерживает.
Пример входных данных:
{
"httpProxy": "http://myproxy.server.com:8080",
"httpsProxy": "https://myproxy.server.com:8080",
"noProxy": [
"localhost",
"127.0.0.1"
],
"trustedCA": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUgvVENDQmVXZ0F3SUJB...S0tLS0="
}
Создание кластера с конфигурацией прокси-сервера HTTP с помощью Azure CLI
Можно настроить кластер AKS с конфигурацией HTTP-прокси во время его создания.
az aks createИспользуйте команду и передайте конфигурацию в виде JSON-файла.az aks create \ --name $clusterName \ --resource-group $resourceGroup \ --http-proxy-config aks-proxy-config.json \ --generate-ssh-keysКластер должен инициализироваться с настроенным на узлах HTTP-прокси.
Убедитесь, что конфигурация прокси-сервера HTTP сконфигурирована в pod и на узлах, проверяя, содержат ли переменные среды соответствующие значения для
http_proxy,https_proxyиno_proxyс помощью командыkubectl describe pod.kubectl describe {any pod} -n kube-systemЧтобы проверить, заданы ли переменные прокси-сервера в подах, можно проверить переменные среды, присутствующие на узлах.
kubectl get nodes kubectl node-shell {node name} cat /etc/environment
Обновление конфигурации прокси-сервера HTTP
Конфигурации прокси-сервера HTTP можно обновить в существующих кластерах, в том числе:
- Обновление существующего кластера для включения прокси-сервера HTTP и добавления новой конфигурации прокси-сервера HTTP.
- Обновление существующего кластера для изменения конфигурации прокси-сервера HTTP.
Рекомендации по обновлению прокси-сервера HTTP
При необходимости параметр --http-proxy-config должен быть установлен на новый JSON-файл с обновленными значениями для httpProxy, httpsProxy, noProxy и trustedCa. Обновление вводит новые переменные среды в модули pod с новыми значениями httpProxy, httpsProxy или noProxy. Pod'ы должны перезапускаться, чтобы приложения их приняли, так как значения переменных среды внедряются мутирующим веб-перехватчиком.
Примечание.
При переключении на новый прокси-сервер новый прокси-сервер должен уже существовать для успешного обновления. После завершения обновления можно удалить старый прокси-сервер.
Обновление кластера для обновления или включения прокси-сервера HTTP
Включите или обновите конфигурации прокси-сервера HTTP в существующем кластере
az aks updateс помощью команды.Например, предположим, что вы создали новый файл с строкой в кодировке Base64 нового сертификата ЦС с именем aks-proxy-config-2.json. Конфигурацию прокси-сервера в кластере можно обновить с помощью следующей команды:
az aks update --name $clusterName --resource-group $resourceGroup --http-proxy-config aks-proxy-config-2.json
Осторожность
AKS автоматически перезаписывает образы всех пулов узлов в кластере при обновлении конфигурации прокси-сервера на вашем кластере с помощью команды az aks update. Вы можете использовать бюджеты нарушений pod (PDB) для защиты критически важных модулей pod во время повторного просмотра.
Убедитесь, что конфигурация прокси-сервера HTTP сконфигурирована в pod и на узлах, проверяя, содержат ли переменные среды соответствующие значения для
http_proxy,https_proxyиno_proxyс помощью командыkubectl describe pod.kubectl describe {any pod} -n kube-systemЧтобы проверить, заданы ли переменные прокси-сервера в подах, можно проверить переменные среды, присутствующие на узлах.
kubectl get nodes kubectl node-shell {node name} cat /etc/environment
Отключение прокси-сервера HTTP в существующем кластере (предварительная версия)
Установка aks-preview расширения
aks-previewУстановите расширение Azure CLI с помощьюaz extension addкоманды.Внимание
Предварительные версии функций AKS доступны на условиях самообслуживания и добровольного выбора. Предварительные версии предоставляются "как есть" и "при наличии". На них не распространяются соглашения об уровне обслуживания и ограниченная гарантия. Предварительные версии AKS сопровождаются частичной поддержкой клиентов на основе принципа лучших усилий. Как таковые, эти функции не предназначены для использования в производстве. Для получения дополнительной информации ознакомьтесь со следующими статьями поддержки:
az extension add --name aks-previewОбновите до последней версии расширения с помощью
az extension updateкоманды. Для отключения прокси-сервера HTTP требуется не менее 18.0.0b13.az extension update --name aks-preview
Регистрация DisableHTTPProxyPreview флага компонента
Зарегистрируйте флаг функции
DisableHTTPProxyPreviewс помощью командыaz feature register.az feature register --namespace Microsoft.ContainerService --name DisableHTTPProxyPreviewПроверьте состояние регистрации с помощью
az feature showкоманды. Через несколько минут отобразится состояние Registered (Зарегистрировано).az feature show --namespace Microsoft.ContainerService --name DisableHTTPProxyPreviewКогда состояние отражает зарегистрировано, обновите регистрацию поставщика ресурсов Microsoft.ContainerService с помощью
az provider registerкоманды.az provider register --namespace Microsoft.ContainerService
Обновление кластера для отключения прокси-сервера HTTP (предварительная версия)
Обновите кластер, чтобы отключить HTTP прокси, с помощью команды с флагом
az aks update--disable-http-proxy.az aks update --name $clusterName --resource-group $resourceGroup --disable-http-proxy
Осторожность
AKS автоматически перезаписывает образы всех пулов узлов в кластере при обновлении конфигурации прокси-сервера на вашем кластере с помощью команды az aks update. Вы можете использовать бюджеты нарушений pod (PDB) для защиты критически важных модулей pod во время повторного просмотра.
Убедитесь, что прокси-сервер HTTP отключен, проверив, что конфигурация прокси-сервера HTTP не задана в pod'ах и на узлах, с помощью команды
kubectl describe pod.kubectl describe {any pod} -n kube-systemЧтобы проверить, что переменные прокси-сервера не заданы в модулях pods, можно проверить переменные среды, присутствующие на узлах.
kubectl get nodes kubectl node-shell {node name} cat /etc/environment
Повторно включите прокси-сервер HTTP в существующем кластере
При создании кластера прокси-сервер HTTP включен по умолчанию. После отключения HTTP-прокси в кластере конфигурация прокси-сервера сохраняется в базе данных, но переменные прокси-сервера удаляются из модулей pod и узлов.
Чтобы повторно включить HTTP-прокси в существующем кластере, используйте az aks update команду с флагом --enable-http-proxy .
az aks update --name $clusterName --resource-group $resourceGroup --enable-http-proxy
Осторожность
AKS автоматически перезаписывает образы всех пулов узлов в кластере при обновлении конфигурации прокси-сервера на вашем кластере с помощью команды az aks update. Вы можете использовать бюджеты нарушений pod (PDB) для защиты критически важных модулей pod во время повторного просмотра.
Внимание
Если у вас есть конфигурация прокси-сервера HTTP в кластере перед отключением, существующая конфигурация прокси-сервера HTTP автоматически применяется при повторном включении прокси-сервера HTTP в этом кластере. Перед продолжением мы рекомендуем проверить конфигурацию, чтобы убедиться, что она соответствует вашим текущим требованиям. Если вы хотите изменить конфигурацию прокси-сервера HTTP после повторного включения прокси-сервера HTTP, выполните действия по обновлению конфигурации прокси-сервера HTTP в существующем кластере.
Настройка конфигурации прокси-сервера HTTP с помощью шаблона Azure Resource Manager (ARM)
Кластер AKS можно развернуть с помощью HTTP-прокси с использованием шаблона ARM.
Проверьте требования к каждому параметру:
-
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 поддерживает.-
Создайте шаблон с параметрами прокси-сервера HTTP. В шаблоне укажите значения для
httpProxy,httpsProxyиnoProxy. При необходимости укажите значение дляtrustedCa. Та же схема, используемая для развертывания CLI, присутствует вMicrosoft.ContainerService/managedClustersразделе определения в"properties", как показано в следующем примере:"properties": { ..., "httpProxyConfig": { "enabled": "true", "httpProxy": "string", "httpsProxy": "string", "noProxy": [ "string" ], "trustedCa": "string" } }Разверните шаблон ARM с конфигурацией HTTP-прокси. Кластер должен инициализироваться с настроенным на узлах прокси-сервером HTTP.
Обновление конфигурации прокси-сервера HTTP
Конфигурации прокси-сервера HTTP можно обновить в существующих кластерах, в том числе:
- Обновление существующего кластера для включения прокси-сервера HTTP и добавления новой конфигурации прокси-сервера HTTP.
- Обновление существующего кластера для изменения конфигурации прокси-сервера HTTP.
Рекомендации по обновлению прокси-сервера HTTP
При необходимости параметр --http-proxy-config должен быть установлен на новый JSON-файл с обновленными значениями для httpProxy, httpsProxy, noProxy и trustedCa. Обновление вводит новые переменные среды в модули pod с новыми значениями httpProxy, httpsProxy или noProxy. Pod'ы должны перезапускаться, чтобы приложения их приняли, так как значения переменных среды внедряются мутирующим веб-перехватчиком.
Примечание.
При переключении на новый прокси-сервер новый прокси-сервер должен уже существовать для успешного обновления. После завершения обновления можно удалить старый прокси-сервер.
Обновление шаблона ARM для настройки HTTP-прокси-сервера
В шаблоне укажите новые значения для
httpProxy,httpsProxyа такжеnoProxy. При необходимости укажите значение дляtrustedCa.Та же схема, используемая для развертывания CLI, присутствует в
Microsoft.ContainerService/managedClustersразделе определения в"properties", как показано в следующем примере:"properties": { ..., "httpProxyConfig": { "enabled": "true", "httpProxy": "string", "httpsProxy": "string", "noProxy": [ "string" ], "trustedCa": "string" } }Разверните шаблон ARM с обновленной конфигурацией прокси-сервера HTTP.
Осторожность
AKS автоматически перезаписывает образы всех пулов узлов в кластере при обновлении конфигурации прокси-сервера на вашем кластере с помощью команды az aks update. Вы можете использовать бюджеты нарушений pod (PDB) для защиты критически важных модулей pod во время повторного просмотра.
Убедитесь, что конфигурация прокси-сервера HTTP сконфигурирована в pod и на узлах, проверяя, содержат ли переменные среды соответствующие значения для
http_proxy,https_proxyиno_proxyс помощью командыkubectl describe pod.kubectl describe {any pod} -n kube-systemЧтобы проверить, заданы ли переменные прокси-сервера в подах, можно проверить переменные среды, присутствующие на узлах.
kubectl get nodes kubectl node-shell {node name} cat /etc/environment
Отключение прокси-сервера HTTP в существующем кластере с помощью шаблона ARM (предварительная версия)
Установка aks-preview расширения
aks-previewУстановите расширение Azure CLI с помощьюaz extension addкоманды.Внимание
Предварительные версии функций AKS доступны на условиях самообслуживания и добровольного выбора. Предварительные версии предоставляются "как есть" и "при наличии". На них не распространяются соглашения об уровне обслуживания и ограниченная гарантия. Предварительные версии AKS сопровождаются частичной поддержкой клиентов на основе принципа лучших усилий. Как таковые, эти функции не предназначены для использования в производстве. Для получения дополнительной информации ознакомьтесь со следующими статьями поддержки:
az extension add --name aks-previewОбновите до последней версии расширения с помощью
az extension updateкоманды. Для отключения прокси-сервера HTTP требуется не менее 18.0.0b13.az extension update --name aks-preview
Регистрация DisableHTTPProxyPreview флага компонента
Зарегистрируйте флаг функции
DisableHTTPProxyPreviewс помощью командыaz feature register.az feature register --namespace Microsoft.ContainerService --name DisableHTTPProxyPreviewПроверьте состояние регистрации с помощью
az feature showкоманды. Через несколько минут отобразится состояние Registered (Зарегистрировано).az feature show --namespace Microsoft.ContainerService --name DisableHTTPProxyPreviewКогда состояние отражает зарегистрировано, обновите регистрацию поставщика ресурсов Microsoft.ContainerService с помощью
az provider registerкоманды.az provider register --namespace Microsoft.ContainerService
Обновление кластера для отключения прокси-сервера HTTP
Обновите шаблон ARM кластера, чтобы отключить прокси-сервер HTTP, установив для параметра
enabledзначениеfalse. Та же схема, используемая для развертывания CLI, присутствует вMicrosoft.ContainerService/managedClustersразделе определения в"properties", как показано в следующем примере:"properties": { ..., "httpProxyConfig": { "enabled": "false", } }Разверните шаблон ARM с отключенным HTTP-прокси.
Осторожность
AKS автоматически перезаписывает образы всех пулов узлов в кластере при обновлении конфигурации прокси-сервера на вашем кластере с помощью команды az aks update. Вы можете использовать бюджеты нарушений pod (PDB) для защиты критически важных модулей pod во время повторного просмотра.
Убедитесь, что прокси-сервер HTTP отключен, проверяя, что конфигурация прокси-сервера HTTP не задана в подах и узлах, используя команду
kubectl describe pod.kubectl describe {any pod} -n kube-systemЧтобы проверить, что переменные прокси-сервера не заданы в модулях pods, можно проверить переменные среды, присутствующие на узлах.
kubectl get nodes kubectl node-shell {node name} cat /etc/environment
Повторно включите прокси-сервер HTTP в существующем кластере
При создании кластера прокси-сервер HTTP включен по умолчанию. После отключения ПРОКСИ-сервера HTTP в кластере больше не удается добавить конфигурации прокси-сервера HTTP в этот кластер.
Если вы хотите повторно включить HTTP-прокси, выполните действия по обновлению конфигурации прокси-сервера HTTP с помощью шаблона ARM.
Прокси-сервер HTTP надстройки Istio для внешних служб
Если вы используете надстройку сетевой сетки на основе Istio для AKS, необходимо создать Service Entry, чтобы приложения в сетке могли получать доступ к некластерным или внешним ресурсам через HTTP-прокси.
Например:
apiVersion: networking.istio.io/v1
kind: ServiceEntry
metadata:
name: proxy
spec:
hosts:
- my-company-proxy.com # ignored
addresses:
- $PROXY_IP/32
ports:
- number: $PROXY_PORT
name: tcp
protocol: TCP
location: MESH_EXTERNAL
Создайте файл и укажите значения для
PROXY_IPиPROXY_PORT.Вы можете развернуть запись службы с использованием:
kubectl apply -f service_proxy.yaml
Мониторинг конфигурации дополнения
HTTP-прокси с надстройкой мониторинга поддерживает следующие конфигурации:
- Исходящий прокси-сервер без аутентификации
- Исходящий прокси-сервер с доверенным сертификатом для конечной точки Log Analytics
Следующая конфигурация не поддерживается:
- Пользовательские метрики и рекомендуемые функции оповещений при использовании прокси-сервера с доверенными сертификатами
Следующие шаги
Дополнительные сведения о требованиях к сети кластеров AKS см. в разделе "Управление исходящим трафиком" для узлов кластера в AKS.