Suporte a 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 a clusters AKS, expondo uma interface simples que você pode usar para proteger o tráfego de rede necessário pelo 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 baseados no Windows
  • Pools de nós usando conjuntos de disponibilidade de máquina virtual (VMAS)
  • Usando * como curinga 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

  • Você precisa da versão mais recente da CLI do Azure. Execute az --version para localizar a versão e execute az upgrade para atualizar a versão. Se precisar de instalar ou atualizar, veja Install Azure CLI (Instalar o Azure CLI).
  • Verifique se há atualizações de cluster AKS disponíveis para garantir que você esteja executando a versão mais recente do AKS. Se precisar de atualizar, consulte Atualizar um cluster AKS.
  • Os arquivos do sistema operacional necessários para atualizações de configuração de proxy só podem ser atualizados durante o processo de atualização da imagem do nó. Depois de configurar o proxy, você deve atualizar a imagem do nó para aplicar as alterações. Para obter mais informações, consulte Atualizar imagens do nó AKS.

Configurar um proxy HTTP usando a CLI do Azure

Você pode configurar um cluster AKS com um proxy HTTP durante a criação do cluster usando o comando e passando a az aks create configuração como um arquivo JSON.

O esquema para o arquivo de configuração tem esta 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 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:

Nota

O certificado da autoridade de certificação deve ser a cadeia de caracteres codificada em base64 do conteúdo do certificado do 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, httpsProxye noProxy. Se o seu ambiente exigir, forneça um valor para trustedCao . Em seguida, você pode implantar o cluster usando o az aks create comando com o --http-proxy-config parâmetro definido para o arquivo criado. O cluster deve ser inicializado com o proxy HTTP configurado nos nós.

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

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

Você pode implantar um cluster AKS com um proxy HTTP usando um modelo ARM. 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": {
        "httpProxy": "string",
        "httpsProxy": "string",
        "noProxy": [
            "string"
        ],
        "trustedCa": "string"
    }
}

No modelo, forneça valores para httpProxy, httpsProxye noProxy. Se necessário, forneça um valor para trustedCa. Em seguida, você pode implantar o modelo. O cluster deve ser inicializado com o proxy HTTP configurado nos nós.

Atualizar configuração de proxy

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.

Você pode atualizar a configuração de proxy em seu cluster usando o az aks update comando com o --http-proxy-config parâmetro definido para um novo arquivo JSON com valores atualizados para httpProxy, httpsProxy, noProxye trustedCa se necessário. A atualização injeta novas variáveis de ambiente em pods com os novos httpProxyvalores , httpsProxyou 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. Para componentes no Kubernetes, como containerd e o próprio nó, isso não terá efeito até que uma atualização de imagem de nó seja executada.

Por exemplo, digamos que você criou um novo arquivo com a cadeia de caracteres codificada base64 do novo certificado de autoridade de certificação 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

Atualizar imagens de nó AKS

Depois de configurar o proxy, você deve atualizar a imagem do nó para aplicar as alterações. O processo de atualização da imagem do nó é a única maneira de atualizar os arquivos do sistema operacional necessários para atualizações de configuração de proxy. O processo de atualização da imagem do nó é uma atualização contínua que atualiza a imagem do sistema operacional em cada nó do pool de nós. O plano de controle AKS lida com o processo de atualização, que não causa interrupções na execução de aplicativos.

Para atualizar imagens de nó AKS, consulte Atualizar imagens de nó do Serviço Kubernetes do Azure (AKS).

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 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 seguintes configurações não são suportadas:

  • 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.