Partilhar via


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

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

Os clusters AKS implantados em redes virtuais gerenciadas ou personalizadas têm certas dependências de saída que são 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 aos clusters AKS, expondo uma interface simples que se pode usar para proteger o tráfego de rede necessário para o AKS em ambientes dependentes de proxy. Com esse recurso, tanto os nós AKS quanto os pods 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 seguintes cenários não são suportados:

  • Diferentes configurações de proxy por pool de nós
  • Autenticação de usuário/senha
  • Autoridades de certificação (CAs) personalizadas para comunicação com o servidor de API
  • Clusters AKS com conjuntos de nós do Windows
  • Pools de nós que utilizam Conjuntos de Disponibilidade de Máquinas Virtuais (VMAS)
  • Usando * como coringa anexado a um sufixo de domínio para noProxy

httpProxy, httpsProxye trustedCa não têm 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 desativar 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, httpsProxye noProxy. Se o seu ambiente exigir, forneça um valor para trustedCa.

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

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

Rever 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, será httpProxy 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 proxy.
  • trustedCa: Uma cadeia de caracteres que contém o conteúdo do certificado de base64 encoded autoridade de certificação alternativo. Atualmente, apenas o PEM formato é suportado.

Importante

Para compatibilidade com componentes baseados em Go que fazem parte do sistema Kubernetes, o certificado deve suportar Subject Alternative Names(SANs) em vez dos certificados de Nome Comum preteridos.

Existem diferenças nas aplicações sobre como cumprir com a variável http_proxyde ambiente , https_proxy, e no_proxy. Curl e Python não suportam CIDR no no_proxy, mas Ruby sim.

Exemplo de entrada:

{
  "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 AKS com uma configuração de proxy HTTP durante a criação do cluster.

  1. Use o az aks create comando e passe sua 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 do proxy HTTP está nos pods e nos 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 que as variáveis proxy são definidas em pods, você pode verificar 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 em 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 atualização de proxy HTTP

O --http-proxy-config parâmetro deve ser definido como um novo arquivo JSON com valores atualizados para httpProxy, httpsProxy, noProxye trustedCa se necessário. A atualização injeta variáveis de ambiente nos pods com os novos valores httpProxy, httpsProxy ou noProxy. Os pods devem ser girados para que os aplicativos o recebam, porque os valores das variáveis de ambiente são injetados por um webhook de admissão mutante.

Nota

Se mudar para um novo proxy, o novo proxy já deve 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 az aks update comando.

    Por exemplo, digamos que tu criaste um novo ficheiro com a string codificada em base64 do novo certificado CA chamado aks-proxy-config-2.json. Você pode atualizar a configuração de proxy no cluster com o seguinte comando:

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

Atenção

AKS reconfigura automaticamente todos os pools de nós no cluster quando se atualiza a configuração de proxy no cluster usando o comando az aks update. Você pode usar Pod Disruption Budgets (PDBs) para proteger contra a interrupção de pods críticos durante a reimagem.

  1. Verifique se a configuração do proxy HTTP está nos pods e nos 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 que as variáveis proxy são definidas em pods, você pode verificar as variáveis de ambiente presentes nos nós.

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

Desabilitar proxy HTTP em um cluster existente (Visualização)

Instalar aks-preview extensão

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

    Importante

    Os recursos de pré-visualização do AKS estão disponíveis numa base de autosserviço e adesão voluntária. As visualizações prévias são fornecidas "como estão" e "conforme disponíveis" e são excluídas dos contratos de nível de serviço e da garantia limitada. As versões de teste do AKS são parcialmente cobertas pelo suporte ao cliente numa base de melhor esforço. Assim sendo, estas funcionalidades não se destinam ao uso em produção. Para obter mais informações, consulte os seguintes artigos de suporte:

    az extension add --name aks-preview
    
  2. Atualize para a versão mais recente da extensão usando o az extension update comando. Desativar Proxy HTTP requer um mínimo de 18.0.0b13.

    az extension update --name aks-preview
    

Registrar sinalizador de funcionalidade DisableHTTPProxyPreview

  1. Registe o sinalizador de funcionalidade DisableHTTPProxyPreview com o comando az feature register.

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

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

    az provider register --namespace Microsoft.ContainerService
    

Atualizar cluster a fim de desativar o proxy HTTP (pré-visualização)

  1. Atualize o seu cluster para desativar o proxy HTTP usando o comando az aks update com a flag --disable-http-proxy.

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

Atenção

AKS reconfigura automaticamente todos os pools de nós no cluster quando se atualiza a configuração de proxy no cluster usando o comando az aks update. Você pode usar Pod Disruption Budgets (PDBs) para proteger contra a interrupção de pods críticos durante a reimagem.

  1. Verifique se o proxy HTTP está desativado, certificando-se de que a configuração do proxy HTTP não está ativada nos pods e nós usando o comando kubectl describe pod.

    kubectl describe {any pod} -n kube-system
    

    Para validar que as variáveis de proxy não estão definidas nos pods, pode-se verificar as variáveis de ambiente presentes nos nós.

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

Reativar 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, a configuração de proxy é salva no banco de dados, mas as variáveis de proxy são removidas dos pods e nós.

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

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

Atenção

AKS reconfigura automaticamente todos os pools de nós no cluster quando se atualiza a configuração de proxy no cluster usando o comando az aks update. Você pode usar Pod Disruption Budgets (PDBs) para proteger contra a interrupção de pods críticos durante a reimagem.

Importante

Se você tinha uma configuração de proxy HTTP no cluster antes de desabilitar, a configuração de proxy HTTP existente se aplica automaticamente quando você reativa o proxy HTTP nesse cluster. Recomendamos verificar a configuração para garantir que ela atenda aos seus requisitos atuais antes de prosseguir. Se você quiser alterar sua configuração de proxy HTTP depois de reativar 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 Azure Resource Manager (ARM)

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

  1. Rever 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, será httpProxy 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 proxy.
    • trustedCa: Uma cadeia de caracteres que contém o conteúdo do certificado de base64 encoded autoridade de certificação alternativo. Atualmente, apenas o PEM formato é suportado.

    Importante

    Para compatibilidade com componentes baseados em Go que fazem parte do sistema Kubernetes, o certificado deve suportar Subject Alternative Names (SANs) em vez dos certificados de Nome Comum preteridos.

    Existem diferenças nas aplicações sobre como cumprir com a variável http_proxyde ambiente , https_proxy, e no_proxy. Curl e Python não suportam CIDR no no_proxy, mas Ruby sim.

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

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

Atualizar uma configuração de proxy HTTP

Você pode atualizar as configurações de proxy HTTP em 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 atualização de proxy HTTP

O --http-proxy-config parâmetro deve ser definido como um novo arquivo JSON com valores atualizados para httpProxy, httpsProxy, noProxye trustedCa se necessário. A atualização injeta variáveis de ambiente nos pods com os novos valores httpProxy, httpsProxy ou noProxy. Os pods devem ser girados para que os aplicativos o recebam, porque os valores das variáveis de ambiente são injetados por um webhook de admissão mutante.

Nota

Se mudar para um novo proxy, o novo proxy já deve 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 ARM para configurar o proxy HTTP

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

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

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

Atenção

AKS reconfigura automaticamente todos os pools de nós no cluster quando se atualiza a configuração de proxy no cluster usando o comando az aks update. Você pode usar Pod Disruption Budgets (PDBs) para proteger contra a interrupção de pods críticos durante a reimagem.

  1. Verifique se a configuração do proxy HTTP está nos pods e nos 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 que as variáveis proxy são definidas em pods, você pode verificar as variáveis de ambiente presentes nos nós.

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

Desabilitar proxy HTTP em um cluster existente usando um modelo ARM (Visualização)

Instalar aks-preview extensão

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

    Importante

    Os recursos de pré-visualização do AKS estão disponíveis numa base de autosserviço e adesão voluntária. As visualizações prévias são fornecidas "como estão" e "conforme disponíveis" e são excluídas dos contratos de nível de serviço e da garantia limitada. As versões de teste do AKS são parcialmente cobertas pelo suporte ao cliente numa base de melhor esforço. Assim sendo, estas funcionalidades não se destinam ao uso em produção. Para obter mais informações, consulte os seguintes artigos de suporte:

    az extension add --name aks-preview
    
  2. Atualize para a versão mais recente da extensão usando o az extension update comando. Desativar Proxy HTTP requer um mínimo de 18.0.0b13.

    az extension update --name aks-preview
    

Registrar sinalizador de funcionalidade DisableHTTPProxyPreview

  1. Registe o sinalizador de funcionalidade DisableHTTPProxyPreview com o comando az feature register.

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

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

    az provider register --namespace Microsoft.ContainerService
    

Atualizar cluster para desativar proxy HTTP

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

    "properties": {
        ...,
        "httpProxyConfig": {
           "enabled": "false",
        }
    }
    
  2. Implante seu modelo ARM com o Proxy HTTP desativado.

Atenção

AKS reconfigura automaticamente todos os pools de nós no cluster quando se atualiza a configuração de proxy no cluster usando o comando az aks update. Você pode usar Pod Disruption Budgets (PDBs) para proteger contra a interrupção de pods críticos durante a reimagem.

  1. Verifique se o proxy HTTP está desativado 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 que as variáveis de proxy não estão definidas nos pods, pode-se verificar as variáveis de ambiente presentes nos nós.

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

Reativar 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 reativar o proxy HTTP, siga as etapas para Atualizar uma configuração de proxy HTTP usando um modelo ARM.


Istio add-on HTTP proxy para serviços externos

Se você estiver usando o complemento de malha de serviço baseado em Istio para AKS, deverá criar uma Entrada de Serviço para permitir que seus aplicativos na malha acessem recursos não relacionados ao 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
    

Monitorando a configuração do complemento

O proxy HTTP com o complemento de monitoramento suporta as seguintes configurações:

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

A seguinte configuração não é suportada:

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

Próximos passos

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