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
  • Autoridades de certificação (ACs) personalizadas para comunicação do servidor de API
  • Não há suporte para a configuração de clusters do AKS existentes com um proxy do HTTP, o recurso de proxy do HTTP deve ser habilitado no momento da criação do cluster.
  • 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

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

  • Você precisa instalar 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.
  • Verifique se há atualizações de cluster do AKS disponíveis para garantir que você esteja executando a versão mais recente do AKS. Se você precisar atualizar, confira Atualizar um cluster do 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 de nó do AKS.

Configurar um proxy HTTP usando a CLI do Azure

Você pode configurar um cluster do AKS com um proxy HTTP durante a criação do cluster usando o comando az aks create e passando 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 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:

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, você pode implantar o cluster usando o comando az aks create com o parâmetro --http-proxy-config definido para o arquivo que você criou. Seu 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 \
    --generate-ssh-keys

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

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

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

Proxy HTTP do complemento do Istio para serviços externos

Se você estiver usando o complemento de malha de serviço baseado no Istio para AKS, precisará criar uma entrada de serviço para permitir que seus 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

Crie um arquivo e forneça valores para PROXY_IP e PROXY_PORT. Você pode implantar a entrada de serviço usando

kubectl apply -f service_proxy.yaml

Atualizar configuração de proxy

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.

Você pode atualizar a configuração de proxy em seu cluster usando o comando az aks update com o parâmetro --http-proxy-config definido como um novo arquivo JSON com valores atualizados para httpProxy, httpsProxy, noProxy e trustedCa 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. Para componentes no Kubernetes, como o contêiner e o nó em si, isso não terá efeito até que uma atualização de imagem do nó seja executada.

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

Atualizar imagens de nó do AKS

Depois de configurar o proxy, você deve atualizar a imagem do nó para aplicar as alterações. O processo de atualização de 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 de imagem do nó é uma atualização sem interrupção que atualiza a imagem do sistema operacional em cada nó no pool de nós. O painel de controle do AKS manipula o processo de atualização, que causa interrupções nos aplicativos em execução.

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

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:

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