Поддержка прокси-сервера HTTP в Служба Azure Kubernetes (AKS)
Из этой статьи вы узнаете, как настроить кластеры Служба Azure Kubernetes (AKS) для использования HTTP-прокси для исходящего доступа к Интернету.
Кластеры AKS, развернутые в управляемых или пользовательских виртуальных сетях, имеют определенные исходящие зависимости, необходимые для правильной работы, что создало проблемы в средах, требующих перенаправления доступа к Интернету через прокси-серверы HTTP. Узлы не имели возможности провести начальную загрузку конфигурации, переменных среды и сертификатов, необходимых им для доступа к службам Интернета.
Функция прокси-сервера HTTP добавляет поддержку HTTP-прокси в кластеры AKS, предоставляя простой интерфейс, который можно использовать для защиты сетевого трафика, необходимого ДЛЯ AKS, в средах, зависящих от прокси-сервера. С помощью этой функции узлы AKS и модули pod настроены для использования прокси-сервера HTTP. Эта функция также позволяет установить доверенный центр сертификации на узлах при начальной загрузке кластера. Более сложные решения могут потребовать создания цепочки доверия для обеспечения безопасного взаимодействия в сети.
Рекомендации и ограничения
Следующие сценарии не поддерживаются:
- Разные конфигурации прокси-сервера для разных пулов узлов
- Аутентификация по имени пользователя и паролю
- Пользовательские центры сертификации (ЦС) для взаимодействия с сервером API
- Настройка существующих кластеров AKS с помощью прокси-сервера HTTP не поддерживается; Компонент прокси-сервера HTTP должен быть включен во время создания кластера.
- Кластеры под управлением 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 \
--generate-ssh-keys
Настройка прокси-сервера 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, настроенного на узлах.
Прокси-сервер HTTP надстройки Istio для внешних служб
Если вы используете надстройку сетки сетки на основе Istio для AKS, необходимо создать запись службы, чтобы разрешить приложениям в сетке получать доступ к некластонным или внешним ресурсам через прокси-сервер 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
Обновление конфигурации прокси-сервера
Примечание.
При переключении на новый прокси-сервер новый прокси-сервер должен уже существовать для успешного обновления. После завершения обновления можно удалить старый прокси-сервер.
Конфигурацию прокси-сервера в кластере можно обновить с помощью az aks update
команды с --http-proxy-config
параметром, установленным на новый JSON-файл с обновленными значениями для httpProxy
, httpsProxy
noProxy
и trustedCa
при необходимости. Обновление внедряет новые переменные среды в модули pod с новыми значениями или noProxy
новыми httpProxy
httpsProxy
значениями. Модули 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.
Azure Kubernetes Service