Suporte de Proxy HTTP no Serviço de Kubernetes do Azure

Os clusters do AKS (Serviço de Kubernetes do Azure), independentemente de estarem implantados em uma rede virtual gerenciada ou personalizada, têm determinadas dependências de saída necessárias para um funcionamento correto. Anteriormente, em ambientes que exigiam acesso à Internet para serem roteados por meio de proxies HTTP, isso era um problema. 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.

Este recurso adiciona suporte de proxy HTTP a clusters AKS, expondo uma interface simples que os operadores de cluster podem usar para proteger o tráfego de rede exigido pelo AKS em ambientes dependentes de proxy.

Ambos os nós AKS e Pods serão configurados para usar o proxy HTTP.

Algumas soluções mais complexas podem exigir a criação de uma cadeia de confiança para estabelecer comunicações seguras na rede. 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.

Limitações e outros detalhes

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 baseados no Windows
  • Pools de nós usando VMAS (conjuntos de disponibilidade de máquina virtual)
  • Usar * como curinga anexado a um sufixo de domínio para noProxy

Por padrão, nenhum valor é definido para httpProxy, httpsProxy nem trustedCa.

Os Pods serã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 de proxy, o Pod deve ser anotado com: "kubernetes.azure.com/no-http-proxy-vars":"true"

Pré-requisitos

A versão mais recente da CLI do Azure. Execute az --version para localizar a versão e az upgrade para atualizar a versão. Se você precisa instalar ou atualizar, consulte Instalar a CLI do Azure.

Configurar um proxy HTTP usando a CLI do Azure

O uso do AKS com um proxy HTTP é feito na criação do cluster usando o comando az aks create e transmitindo a configuração como um arquivo JSON.

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

{
  "httpProxy": "string",
  "httpsProxy": "string",
  "noProxy": [
    "string"
  ],
  "trustedCa": "string"
}
  • 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 isso não for especificado, será usado httpProxy para as conexões HTTP e HTTPS.
  • noProxy: uma lista de nomes de domínio, domínios, endereços IP ou outros CIDRs de rede de destino 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 Python não dão suporte ao CIDR no no_proxy, mas o Ruby sim.

Entrada de exemplo:

Observação

O Certificado de Autoridade de Certificação deve ser a cadeia de caracteres codificada em base64 do conteúdo do certificado no formato PEM.

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

Crie um arquivo e forneça valores para httpProxy, httpsProxy e noProxy. Se o ambiente exigir, forneça um valor para trustedCa. Em seguida, implemente um cluster, passando o nome de arquivo usando o sinalizador http-proxy-config.

az aks create -n $clusterName -g $resourceGroup --http-proxy-config aks-proxy-config.json

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

Configurar um proxy HTTP usando modelos do ARM (Azure Resource Manager)

A implantação de um cluster do AKS com um proxy HTTP configurado usando um modelo do ARM é simples. O mesmo esquema usado para implantação da CLI existe na definição Microsoft.ContainerService/managedClusters em Propriedades:

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

No seu modelo, forneça valores para httpProxy, httpsProxy e noProxy. Se necessário, forneça um valor para trustedCa. Implante o modelo e o cluster deve ser inicializado com o proxy HTTP configurado nos nós.

Atualizando configurações de proxy

Observação

Se mudar para um novo proxy, ele já deverá existir para que a atualização seja bem-sucedida. Em seguida, depois que a atualização for concluída, o proxy antigo poderá ser excluído.

Os valores para httpProxy, httpsProxy, trustedCa e NoProxy podem ser alterados e aplicados ao cluster com o comando az aks update. Uma atualização do aks para httpProxy, httpsProxy e/ou NoProxy injetará automaticamente novas variáveis de ambiente em pods com os novos valores httpProxy, httpsProxy ouNoProxy. Os pods devem ser girados para que os aplicativos o retirem, porque os valores da variável de ambiente são injetados no Pod criando por um webhook de admissão mutante. Para componentes do kubernetes, como em contêiner e no próprio nó, isso não terá efeito até que uma atualização de imagem de nó seja executada.

Por exemplo, supondo que um novo arquivo foi criado com a cadeia de caracteres codificada em base64 do novo Certificado de Autoridade de Certificação chamado aks-proxy-config-2.json, a seguinte ação atualizará o cluster. Ou você precisa adicionar novas URLs de ponto de extremidade para seus aplicativos a Nenhum Proxy:

az aks update -n $clusterName -g $resourceGroup --http-proxy-config aks-proxy-config-2.json

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 de saída com autenticação de nome de usuário e senha
  • Proxy de saída com certificado confiável para ponto de extremidade do Log Analytics

As configurações a seguir não são compatíveis:

  • Não há suporte para recursos de métricas personalizadas e alertas recomendados quando você usa um proxy com certificados confiáveis

Próximas etapas

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