Compartilhar via


Suporte a proxy HTTP no Serviço de Kubernetes do Azure (AKS)

Neste artigo, você aprenderá a configurar clusters do Serviço de Kubernetes do Azure (AKS) para usar um proxy HTTP para acesso à Internet de saída.

Os clusters do AKS implantados em redes virtuais gerenciadas ou personalizadas têm determinadas dependências de saída necessárias para funcionar corretamente, o que criou problemas em ambientes que exigem que o acesso à Internet seja roteado por meio de proxies HTTP. Os nós não tinham como inicializar a configuração, as variáveis de ambiente e os certificados necessários para acessar os serviços da Internet.

O recurso de proxy HTTP adiciona suporte a proxy HTTP a clusters do AKS, expondo uma interface simples que você pode usar para proteger o tráfego de rede necessário para o AKS em ambientes dependentes de proxy. Com este recurso, nós e pods do AKS são configurados para usar o proxy HTTP. O recurso também permite a instalação de uma autoridade de certificação confiável nos nós como parte da inicialização de um cluster. Soluções mais complexas podem exigir a criação de uma cadeia de confiança para estabelecer comunicações seguras em toda a rede.

Limitações e considerações

Os cenários a seguir não têm suporte:

  • Configurações de proxy diferentes por pool de nós
  • Autenticação de usuário/senha
  • ACs (autoridades de certificação) personalizadas para comunicação do servidor de API
  • Clusters do AKS com pools de nós do Windows
  • Pools de nós que usam os VMAS (Conjuntos de Disponibilidade de Máquinas Virtuais)
  • Usar * como curinga junto a um sufixo de domínio para noProxy

httpProxy, httpsProxy e trustedCa não têm nenhum valor por padrão. Os pods são injetados com as seguintes variáveis de ambiente:

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

Para desabilitar a injeção das variáveis de ambiente proxy, você precisa anotar o pod com "kubernetes.azure.com/no-http-proxy-vars":"true".

Antes de começar

Criar um arquivo de configuração com valores de proxy HTTP

Crie um arquivo e forneça valores para httpProxy, httpsProxy e noProxy. Se o ambiente exigir, forneça um valor para trustedCa.

O esquema para o arquivo de configuração tem a seguinte aparência:

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

Examine os requisitos para cada parâmetro:

  • httpProxy: uma URL de proxy a ser usada para criar conexões HTTP fora do cluster. O esquema de URL deve ser http.
  • httpsProxy: uma URL de proxy a ser usada para criar conexões HTTPS fora do cluster. Se não for especificado, httpProxy será usado para conexões HTTP e HTTPS.
  • noProxy: uma lista de nomes de domínio de destino, domínios, endereços IP ou outros CIDRs de rede para excluir o proxy.
  • trustedCa: uma cadeia de caracteres que contém o conteúdo alternativo do certificado de autoridade de certificação base64 encoded. Atualmente, há suporte apenas para o formato PEM.

Importante

Para a compatibilidade com os componentes baseados em Go que fazem parte do sistema Kubernetes, o certificado deverá dar suporteSubject Alternative Names(SANs), em vez dos certificados de Nome Comum preteridos.

Há diferenças entre os aplicativos quanto à conformidade com as variáveis de ambiente http_proxy, https_proxy, e no_proxy. O Curl e o Python não dão suporte a CIDR em no_proxy, mas o Ruby dá.

Entrada de exemplo:

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

Criar um cluster com uma configuração de proxy HTTP usando a CLI do Azure

Você pode configurar um cluster do AKS com uma configuração de proxy HTTP durante a criação do cluster.

  1. Use o comando az aks create e transmita a configuração como um arquivo JSON.

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

    O cluster deve ser inicializado com o proxy HTTP configurado nos nós.

  2. Verifique se a configuração de proxy HTTP está nos pods e nós verificando se as variáveis de ambiente contêm os valores apropriados para http_proxy, https_proxy e no_proxy usando o comando kubectl describe pod.

    kubectl describe {any pod} -n kube-system
    

    Para validar se as variáveis de proxy estão definidas em pods, verifique as variáveis de ambiente presentes nos nós.

    kubectl get nodes
    kubectl node-shell {node name}
    cat /etc/environment
    

Atualizar uma configuração de proxy HTTP

Você pode atualizar as configurações de proxy HTTP nos clusters existentes, incluindo:

  • Atualizar um cluster existente para habilitar o proxy HTTP e adicionar uma nova configuração de proxy HTTP.
  • Atualizar um cluster existente para alterar uma configuração de proxy HTTP.

Considerações sobre a atualização de proxy HTTP

O --http-proxy-config parâmetro deve ser definido como um novo arquivo JSON com valores atualizados parahttpProxy, httpsProxye noProxytrustedCa se necessário. A atualização injeta novas variáveis de ambiente em pods com os novos valores httpProxy, httpsProxy ou noProxy. Os pods devem ser girados para que os aplicativos os capturem, pois os valores da variável de ambiente são injetados por um webhook de admissão mutável.

Observação

Se mudar para um novo proxy, ele já deverá existir para que a atualização seja bem-sucedida. Depois que a atualização for concluída, você poderá excluir o proxy antigo.

Atualizar um cluster para atualizar ou habilitar o proxy HTTP

  1. Habilite ou atualize as configurações de proxy HTTP em um cluster existente usando o comando az aks update.

    Por exemplo, digamos que você criou um novo arquivo com a cadeia de caracteres codificada em base64 do novo certificado de AC chamado aks-proxy-config-2.json. Você pode atualizar a configuração de proxy em seu cluster com o seguinte comando:

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

Cuidado

O AKS recria automaticamente a imagem de todos os pools de nós no cluster quando você atualiza a configuração de proxy no cluster por meio do comando az aks update. Você pode usar PDBs (orçamentos de interrupção do pod) para proteger a interrupção em pods críticos durante a recriação da imagem.

  1. Verifique se a configuração de proxy HTTP está nos pods e nós verificando se as variáveis de ambiente contêm os valores apropriados para http_proxy, https_proxy e no_proxy usando o comando kubectl describe pod.

    kubectl describe {any pod} -n kube-system
    

    Para validar se as variáveis de proxy estão definidas em pods, verifique as variáveis de ambiente presentes nos nós.

    kubectl get nodes
    kubectl node-shell {node name}
    cat /etc/environment
    

Desabilitar o proxy HTTP em um cluster existente (versão prévia)

Instalar aks-preview extensão

  1. Instale a extensão aks-preview da CLI do Azure usando o comando az extension add.

    Importante

    As funcionalidades em versão preliminar do AKS estão disponíveis de forma optativa e por autoatendimento. As versões prévias são fornecidas “no estado em que se encontram” e “conforme disponíveis” e são excluídas dos contratos de nível de serviço e da garantia limitada. As versões prévias do AKS são parcialmente cobertas pelo suporte ao cliente em uma base de melhor esforço. Dessa forma, esses recursos não são destinados ao uso em produção. Para obter mais informações, consulte os seguintes artigos:

    az extension add --name aks-preview
    
  2. Atualize para a última versão da extensão usando o comando az extension update. A desabilitação do proxy HTTP exige, no mínimo, a versão 18.0.0b13.

    az extension update --name aks-preview
    

Registrar o sinalizador de recurso DisableHTTPProxyPreview

  1. Registre o sinalizador de recurso DisableHTTPProxyPreview usando o comando az feature register.

    az feature register --namespace Microsoft.ContainerService --name DisableHTTPProxyPreview
    
  2. Verifique o status do registro usando o comando az feature show. Demora alguns minutos para o status mostrar Registrado.

    az feature show --namespace Microsoft.ContainerService --name DisableHTTPProxyPreview
    
  3. Quando o status reflete Registrado, atualize o registro do provedor de recursos Microsoft.ContainerService usando o comando az provider register.

    az provider register --namespace Microsoft.ContainerService
    

Atualizar o cluster para desabilitar o proxy HTTP (versão prévia)

  1. Atualize o cluster para desabilitar o proxy HTTP usando o comando az aks update com o sinalizador --disable-http-proxy.

    az aks update --name $clusterName --resource-group $resourceGroup --disable-http-proxy
    

Cuidado

O AKS recria automaticamente a imagem de todos os pools de nós no cluster quando você atualiza a configuração de proxy no cluster por meio do comando az aks update. Você pode usar PDBs (orçamentos de interrupção do pod) para proteger a interrupção em pods críticos durante a recriação da imagem.

  1. Verifique se o proxy HTTP está desabilitado validando se a configuração de proxy HTTP não está definida nos pods e nós usando o comando kubectl describe pod.

    kubectl describe {any pod} -n kube-system
    

    Para validar se as variáveis de proxy não estão definidas em pods, verifique as variáveis de ambiente presentes nos nós.

    kubectl get nodes
    kubectl node-shell {node name}
    cat /etc/environment
    

Habilitar novamente o proxy HTTP em um cluster existente

Quando você cria um cluster, o proxy HTTP é habilitado por padrão. Depois que você desabilitar o proxy HTTP em um cluster, a configuração de proxy será salva no banco de dados, mas as variáveis de proxy serão removidas dos pods e nós.

Para habilitar novamente o proxy HTTP em um cluster existente, use o comando az aks update com o sinalizador --enable-http-proxy.

az aks update --name $clusterName --resource-group $resourceGroup --enable-http-proxy

Cuidado

O AKS recria automaticamente a imagem de todos os pools de nós no cluster quando você atualiza a configuração de proxy no cluster por meio do comando az aks update. Você pode usar PDBs (orçamentos de interrupção do pod) para proteger a interrupção em pods críticos durante a recriação da imagem.

Importante

Se você tiver uma configuração de proxy HTTP no cluster antes da desabilitação, a configuração de proxy HTTP existente será aplicada automaticamente quando você reabilitar o proxy HTTP nesse cluster. Recomendamos verificar a configuração para garantir que ela atenda aos seus requisitos atuais antes de continuar. Se você quiser alterar a configuração de proxy HTTP depois de reabilitar o proxy HTTP, siga as etapas para Atualizar a configuração de proxy HTTP em um cluster existente.

Configurar uma configuração de proxy HTTP usando um modelo do ARM (Azure Resource Manager)

Você pode implantar um cluster do AKS com um proxy HTTP usando um modelo do ARM.

  1. Examine os requisitos para cada parâmetro:

    • httpProxy: uma URL de proxy a ser usada para criar conexões HTTP fora do cluster. O esquema de URL deve ser http.
    • httpsProxy: uma URL de proxy a ser usada para criar conexões HTTPS fora do cluster. Se não for especificado, httpProxy será usado para conexões HTTP e HTTPS.
    • noProxy: uma lista de nomes de domínio de destino, domínios, endereços IP ou outros CIDRs de rede para excluir o proxy.
    • trustedCa: uma cadeia de caracteres que contém o conteúdo alternativo do certificado de autoridade de certificação base64 encoded. Atualmente, há suporte apenas para o formato PEM.

    Importante

    Para a compatibilidade com os componentes baseados em Go que fazem parte do sistema Kubernetes, o certificado deverá dar suporteSubject Alternative Names (SANs), em vez dos certificados de Nome Comum preteridos.

    Há diferenças entre os aplicativos quanto à conformidade com as variáveis de ambiente http_proxy, https_proxy, e no_proxy. O Curl e o Python não dão suporte a CIDR em no_proxy, mas o Ruby dá.

  2. Crie um modelo com parâmetros de proxy HTTP. Em seu modelo, forneça valores para httpProxy, httpsProxy e noProxy. Se necessário, forneça um valor para trustedCa. O mesmo esquema usado para implantação da CLI existe na definição Microsoft.ContainerService/managedClusters abaixo de "properties", conforme mostrado no exemplo a seguir:

    "properties": {
        ...,
        "httpProxyConfig": {
          "enabled": "true",
            "httpProxy": "string",
            "httpsProxy": "string",
            "noProxy": [
                "string"
            ],
            "trustedCa": "string"
        }
    }
    
  3. Implante o modelo do ARM com a configuração de proxy HTTP. O cluster deve ser inicializado com o proxy HTTP configurado nos nós.

Atualizar uma configuração de proxy HTTP

Você pode atualizar as configurações de proxy HTTP nos clusters existentes, incluindo:

  • Atualizar um cluster existente para habilitar o proxy HTTP e adicionar uma nova configuração de proxy HTTP.
  • Atualizar um cluster existente para alterar uma configuração de proxy HTTP.

Considerações sobre a atualização de proxy HTTP

O --http-proxy-config parâmetro deve ser definido como um novo arquivo JSON com valores atualizados parahttpProxy, httpsProxye noProxytrustedCa se necessário. A atualização injeta novas variáveis de ambiente em pods com os novos valores httpProxy, httpsProxy ou noProxy. Os pods devem ser girados para que os aplicativos os capturem, pois os valores da variável de ambiente são injetados por um webhook de admissão mutável.

Observação

Se mudar para um novo proxy, ele já deverá existir para que a atualização seja bem-sucedida. Depois que a atualização for concluída, você poderá excluir o proxy antigo.

Atualizar um modelo do ARM para configurar o proxy HTTP

  1. No modelo, forneça novos valores para httpProxy, httpsProxy e noProxy. Se necessário, forneça um valor para trustedCa.

    O mesmo esquema usado para implantação da CLI existe na definição Microsoft.ContainerService/managedClusters abaixo de "properties", conforme mostrado no exemplo a seguir:

    "properties": {
        ...,
        "httpProxyConfig": {
            "enabled": "true",
            "httpProxy": "string",
            "httpsProxy": "string",
            "noProxy": [
                "string"
            ],
            "trustedCa": "string"
        }
    }
    
  2. Implante o modelo do ARM com a configuração atualizada do Proxy HTTP.

Cuidado

O AKS recria automaticamente a imagem de todos os pools de nós no cluster quando você atualiza a configuração de proxy no cluster por meio do comando az aks update. Você pode usar PDBs (orçamentos de interrupção do pod) para proteger a interrupção em pods críticos durante a recriação da imagem.

  1. Verifique se a configuração de proxy HTTP está nos pods e nós verificando se as variáveis de ambiente contêm os valores apropriados para http_proxy, https_proxy e no_proxy usando o comando kubectl describe pod.

    kubectl describe {any pod} -n kube-system
    

    Para validar se as variáveis de proxy estão definidas em pods, verifique as variáveis de ambiente presentes nos nós.

    kubectl get nodes
    kubectl node-shell {node name}
    cat /etc/environment
    

Desabilitar o proxy HTTP em um cluster existente usando um modelo do ARM (versão prévia)

Instalar aks-preview extensão

  1. Instale a extensão aks-preview da CLI do Azure usando o comando az extension add.

    Importante

    As funcionalidades em versão preliminar do AKS estão disponíveis de forma optativa e por autoatendimento. As versões prévias são fornecidas “no estado em que se encontram” e “conforme disponíveis” e são excluídas dos contratos de nível de serviço e da garantia limitada. As versões prévias do AKS são parcialmente cobertas pelo suporte ao cliente em uma base de melhor esforço. Dessa forma, esses recursos não são destinados ao uso em produção. Para obter mais informações, consulte os seguintes artigos:

    az extension add --name aks-preview
    
  2. Atualize para a última versão da extensão usando o comando az extension update. A desabilitação do proxy HTTP exige, no mínimo, a versão 18.0.0b13.

    az extension update --name aks-preview
    

Registrar o sinalizador de recurso DisableHTTPProxyPreview

  1. Registre o sinalizador de recurso DisableHTTPProxyPreview usando o comando az feature register.

    az feature register --namespace Microsoft.ContainerService --name DisableHTTPProxyPreview
    
  2. Verifique o status do registro usando o comando az feature show. Demora alguns minutos para o status mostrar Registrado.

    az feature show --namespace Microsoft.ContainerService --name DisableHTTPProxyPreview
    
  3. Quando o status reflete Registrado, atualize o registro do provedor de recursos Microsoft.ContainerService usando o comando az provider register.

    az provider register --namespace Microsoft.ContainerService
    

Atualizar o cluster para desabilitar o proxy HTTP

  1. Atualize o modelo do ARM do cluster para desabilitar o proxy HTTP definindo enabled como false. O mesmo esquema usado para implantação da CLI existe na definição Microsoft.ContainerService/managedClusters abaixo de "properties", conforme mostrado no exemplo a seguir:

    "properties": {
        ...,
        "httpProxyConfig": {
           "enabled": "false",
        }
    }
    
  2. Implante o modelo do ARM com o proxy HTTP desabilitado.

Cuidado

O AKS recria automaticamente a imagem de todos os pools de nós no cluster quando você atualiza a configuração de proxy no cluster por meio do comando az aks update. Você pode usar PDBs (orçamentos de interrupção do pod) para proteger a interrupção em pods críticos durante a recriação da imagem.

  1. Verifique se o proxy HTTP está desabilitado validando se a configuração do proxy HTTP não está definida nos pods e nós usando o comando kubectl describe pod.

    kubectl describe {any pod} -n kube-system
    

    Para validar se as variáveis de proxy não estão definidas em pods, verifique as variáveis de ambiente presentes nos nós.

    kubectl get nodes
    kubectl node-shell {node name}
    cat /etc/environment
    

Habilitar novamente o proxy HTTP em um cluster existente

Quando você cria um cluster, o proxy HTTP é habilitado por padrão. Depois de desabilitar o proxy HTTP em um cluster, você não poderá mais adicionar configurações de proxy HTTP a esse cluster.

Se você quiser habilitar novamente o proxy HTTP, siga as etapas para Atualizar uma configuração de proxy HTTP usando um modelo do ARM.


Proxy HTTP do complemento do Istio para serviços externos

Se você estiver usando o complemento de malha de serviço baseado em Istio para AKS, crie uma entrada de serviço para permitir que os aplicativos na malha acessem recursos que não são do cluster ou externos por meio do proxy HTTP.

Por exemplo:

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. Crie um arquivo e forneça valores para PROXY_IP e PROXY_PORT.

  2. Você pode implantar a Entrada de Serviço usando:

    kubectl apply -f service_proxy.yaml
    

Monitoramento da configuração do complemento

O proxy HTTP com o complemento de monitoramento dá suporte às seguintes configurações:

  • Proxy de saída sem autenticação
  • Proxy externo com certificado confiável para endpoint do Log Analytics

Não há suporte para a seguinte configuração:

  • Métricas personalizadas e recursos de alertas recomendados ao usar um proxy com certificados confiáveis

Próximas etapas

Para obter mais informações sobre os requisitos de rede de clusters do AKS, confira Controlar o tráfego de saída para nós de cluster no AKS.