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


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

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

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

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

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

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

  • Разные конфигурации прокси-сервера для разных пулов узлов
  • Аутентификация по имени пользователя и паролю
  • Пользовательские удостоверяющие центры (ЦС) для связи с API-сервером
  • Кластеры AKS с пулами узлов 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".

Перед началом работы

Создание файла конфигурации со значениями прокси-сервера 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-прокси во время его создания.

  1. az aks create Используйте команду и передайте конфигурацию в виде JSON-файла.

    az aks create \
        --name $clusterName \
        --resource-group $resourceGroup \
        --http-proxy-config aks-proxy-config.json \
        --generate-ssh-keys
    

    Кластер должен инициализироваться с настроенным на узлах HTTP-прокси.

  2. Убедитесь, что конфигурация прокси-сервера 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

  1. Включите или обновите конфигурации прокси-сервера 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 во время повторного просмотра.

  1. Убедитесь, что конфигурация прокси-сервера 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 расширения

  1. aks-preview Установите расширение Azure CLI с помощью az extension add команды.

    Внимание

    Предварительные версии функций AKS доступны на условиях самообслуживания и добровольного выбора. Предварительные версии предоставляются "как есть" и "при наличии". На них не распространяются соглашения об уровне обслуживания и ограниченная гарантия. Предварительные версии AKS сопровождаются частичной поддержкой клиентов на основе принципа лучших усилий. Как таковые, эти функции не предназначены для использования в производстве. Для получения дополнительной информации ознакомьтесь со следующими статьями поддержки:

    az extension add --name aks-preview
    
  2. Обновите до последней версии расширения с помощью az extension update команды. Для отключения прокси-сервера HTTP требуется не менее 18.0.0b13.

    az extension update --name aks-preview
    

Регистрация DisableHTTPProxyPreview флага компонента

  1. Зарегистрируйте флаг функции DisableHTTPProxyPreview с помощью команды az feature register.

    az feature register --namespace Microsoft.ContainerService --name DisableHTTPProxyPreview
    
  2. Проверьте состояние регистрации с помощью az feature show команды. Через несколько минут отобразится состояние Registered (Зарегистрировано).

    az feature show --namespace Microsoft.ContainerService --name DisableHTTPProxyPreview
    
  3. Когда состояние отражает зарегистрировано, обновите регистрацию поставщика ресурсов Microsoft.ContainerService с помощью az provider register команды.

    az provider register --namespace Microsoft.ContainerService
    

Обновление кластера для отключения прокси-сервера HTTP (предварительная версия)

  1. Обновите кластер, чтобы отключить 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 во время повторного просмотра.

  1. Убедитесь, что прокси-сервер 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.

  1. Проверьте требования к каждому параметру:

    • 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 поддерживает.

  2. Создайте шаблон с параметрами прокси-сервера HTTP. В шаблоне укажите значения для httpProxy, httpsProxyи noProxy. При необходимости укажите значение для trustedCa. Та же схема, используемая для развертывания CLI, присутствует в Microsoft.ContainerService/managedClusters разделе определения в "properties", как показано в следующем примере:

    "properties": {
        ...,
        "httpProxyConfig": {
          "enabled": "true",
            "httpProxy": "string",
            "httpsProxy": "string",
            "noProxy": [
                "string"
            ],
            "trustedCa": "string"
        }
    }
    
  3. Разверните шаблон ARM с конфигурацией HTTP-прокси. Кластер должен инициализироваться с настроенным на узлах прокси-сервером HTTP.

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

Конфигурации прокси-сервера HTTP можно обновить в существующих кластерах, в том числе:

  • Обновление существующего кластера для включения прокси-сервера HTTP и добавления новой конфигурации прокси-сервера HTTP.
  • Обновление существующего кластера для изменения конфигурации прокси-сервера HTTP.

Рекомендации по обновлению прокси-сервера HTTP

При необходимости параметр --http-proxy-config должен быть установлен на новый JSON-файл с обновленными значениями для httpProxy, httpsProxy, noProxy и trustedCa. Обновление вводит новые переменные среды в модули pod с новыми значениями httpProxy, httpsProxy или noProxy. Pod'ы должны перезапускаться, чтобы приложения их приняли, так как значения переменных среды внедряются мутирующим веб-перехватчиком.

Примечание.

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

Обновление шаблона ARM для настройки HTTP-прокси-сервера

  1. В шаблоне укажите новые значения для httpProxy, httpsProxyа также noProxy. При необходимости укажите значение для trustedCa.

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

    "properties": {
        ...,
        "httpProxyConfig": {
            "enabled": "true",
            "httpProxy": "string",
            "httpsProxy": "string",
            "noProxy": [
                "string"
            ],
            "trustedCa": "string"
        }
    }
    
  2. Разверните шаблон ARM с обновленной конфигурацией прокси-сервера HTTP.

Осторожность

AKS автоматически перезаписывает образы всех пулов узлов в кластере при обновлении конфигурации прокси-сервера на вашем кластере с помощью команды az aks update. Вы можете использовать бюджеты нарушений pod (PDB) для защиты критически важных модулей pod во время повторного просмотра.

  1. Убедитесь, что конфигурация прокси-сервера 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 расширения

  1. aks-preview Установите расширение Azure CLI с помощью az extension add команды.

    Внимание

    Предварительные версии функций AKS доступны на условиях самообслуживания и добровольного выбора. Предварительные версии предоставляются "как есть" и "при наличии". На них не распространяются соглашения об уровне обслуживания и ограниченная гарантия. Предварительные версии AKS сопровождаются частичной поддержкой клиентов на основе принципа лучших усилий. Как таковые, эти функции не предназначены для использования в производстве. Для получения дополнительной информации ознакомьтесь со следующими статьями поддержки:

    az extension add --name aks-preview
    
  2. Обновите до последней версии расширения с помощью az extension update команды. Для отключения прокси-сервера HTTP требуется не менее 18.0.0b13.

    az extension update --name aks-preview
    

Регистрация DisableHTTPProxyPreview флага компонента

  1. Зарегистрируйте флаг функции DisableHTTPProxyPreview с помощью команды az feature register.

    az feature register --namespace Microsoft.ContainerService --name DisableHTTPProxyPreview
    
  2. Проверьте состояние регистрации с помощью az feature show команды. Через несколько минут отобразится состояние Registered (Зарегистрировано).

    az feature show --namespace Microsoft.ContainerService --name DisableHTTPProxyPreview
    
  3. Когда состояние отражает зарегистрировано, обновите регистрацию поставщика ресурсов Microsoft.ContainerService с помощью az provider register команды.

    az provider register --namespace Microsoft.ContainerService
    

Обновление кластера для отключения прокси-сервера HTTP

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

    "properties": {
        ...,
        "httpProxyConfig": {
           "enabled": "false",
        }
    }
    
  2. Разверните шаблон ARM с отключенным HTTP-прокси.

Осторожность

AKS автоматически перезаписывает образы всех пулов узлов в кластере при обновлении конфигурации прокси-сервера на вашем кластере с помощью команды az aks update. Вы можете использовать бюджеты нарушений pod (PDB) для защиты критически важных модулей pod во время повторного просмотра.

  1. Убедитесь, что прокси-сервер 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
  1. Создайте файл и укажите значения для PROXY_IP и PROXY_PORT.

  2. Вы можете развернуть запись службы с использованием:

    kubectl apply -f service_proxy.yaml
    

Мониторинг конфигурации дополнения

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

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

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

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

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

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