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
- Não há suporte para a configuração de clusters AKS existentes com um proxy HTTP; o recurso de proxy HTTP deve ser habilitado no momento da criação do cluster.
- 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
, httpsProxy
e 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 executeaz 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 serhttp
.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 debase64 encoded
autoridade de certificação alternativo. Atualmente, apenas oPEM
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_proxy
de 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
, httpsProxy
e noProxy
. Se o seu ambiente exigir, forneça um valor para trustedCa
o . 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 \
--generate-ssh-keys
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
, httpsProxy
e 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.
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 externos ou não clusterizados 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
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
, noProxy
e trustedCa
se necessário. A atualização injeta novas variáveis de ambiente em pods com os novos httpProxy
valores , 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. 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.
Azure Kubernetes Service