Autoridade de certificação (CA) personalizada no Serviço Kubernetes do Azure (AKS) (visualização)
O AKS gera e usa os seguintes certificados, Autoridades de Certificação (CAs) e Contas de Serviço (SAs):
- O servidor de API do AKS cria uma autoridade de certificação chamada CA de cluster.
- O servidor de API tem uma CA de Cluster, que assina certificados para comunicação unidirecional do servidor de API para kubelets.
- Cada kubelet também cria uma Solicitação de Assinatura de Certificado (CSR), que é assinada pela CA do Cluster, para comunicação do kubelet com o servidor de API.
- O agregador de API usa a CA de cluster para emitir certificados para comunicação com outras APIs. O agregador de API também pode ter sua própria autoridade de certificação para emitir esses certificados, mas atualmente usa a autoridade de certificação de cluster.
- Cada nó usa um token SA, que é assinado pela autoridade de certificação do cluster.
- O
kubectl
cliente tem um certificado para se comunicar com o cluster AKS.
Você também pode criar autoridades de certificação personalizadas, que permitem estabelecer confiança entre seus clusters do Serviço Kubernetes do Azure (AKS) e cargas de trabalho, como registros privados, proxies e firewalls. Um segredo do Kubernetes armazena as informações da autoridade de certificação e, em seguida, é passado para todos os nós no cluster. Esse recurso é aplicado por pool de nós, portanto, você precisa habilitá-lo em pools de nós novos e existentes.
Este artigo mostra como criar CAs personalizadas e aplicá-las aos seus clusters AKS.
Pré-requisitos
- Uma subscrição do Azure. Se não tiver uma subscrição do Azure, crie uma conta gratuita.
- CLI do Azure instalada (versão 2.43.0 ou superior).
- Uma cadeia de caracteres de certificado codificada em base64 ou um arquivo de texto com certificado.
Limitações
- Atualmente, esse recurso não é suportado para pools de nós do Windows.
Instalar a extensão da CLI do aks-preview
Azure
Importante
Os recursos de visualização do AKS estão disponíveis em uma base de autosserviço e opt-in. 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 visualizações do AKS são parcialmente cobertas pelo suporte ao cliente com base no melhor esforço. Como tal, estas funcionalidades não se destinam a utilização em produção. Para obter mais informações, consulte os seguintes artigos de suporte:
Instale a extensão aks-preview usando o
az extension add
comando.az extension add --name aks-preview
Atualize para a versão mais recente da extensão usando o
az extension update
comando.az extension update --name aks-preview
Registrar o sinalizador de CustomCATrustPreview
recurso
Registre o
CustomCATrustPreview
sinalizador de recurso usando oaz feature register
comando.az feature register --namespace "Microsoft.ContainerService" --name "CustomCATrustPreview"
Leva alguns minutos para que o status mostre Registrado.
Verifique o status do registro usando o
az feature show
comando.az feature show --namespace "Microsoft.ContainerService" --name "CustomCATrustPreview"
Quando o status refletir Registrado, atualize o registro do provedor de recursos Microsoft.ContainerService usando o
az provider register
comando.az provider register --namespace Microsoft.ContainerService
Instalação personalizada de CA em pools de nós AKS
Instalar CAs em pools de nós AKS
Se seu ambiente exigir que suas CAs personalizadas sejam adicionadas ao armazenamento confiável do nó para o provisionamento correto, você precisará passar um arquivo de texto contendo até 10 certificados separados por linha em branco durante
az aks create
as operações ouaz aks update
operações. Exemplo de arquivo de texto:-----BEGIN CERTIFICATE----- cert1 -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- cert2 -----END CERTIFICATE-----
Instalar CAs durante a criação do pool de nós
Instale CAs durante a criação do pool de nós usando o
az aks create
comando e especificando seu arquivo de texto para o--custom-ca-trust-certificates
parâmetro.az aks create \ --resource-group <resource-group-name> \ --name <cluster-name> \ --node-count 2 \ --enable-custom-ca-trust \ --custom-ca-trust-certificates pathToFileWithCAs \ --generate-ssh-keys
Rotação da autoridade de certificação para disponibilidade durante a inicialização do pool de nós
Atualize as CAs passadas para o cluster durante a inicialização usando o comando e especificando o
az aks update
arquivo de texto para o--custom-ca-trust-certificates
parâmetro.az aks update \ --resource-group <resource-group-name> \ --name <cluster-name> \ --custom-ca-trust-certificates pathToFileWithCAs
Nota
Essa operação dispara uma atualização de modelo, garantindo que os novos nós tenham as CAs mais recentes necessárias para o provisionamento correto. O AKS cria nós adicionais, drena os existentes, exclui-os e os substitui por nós que têm o novo conjunto de CAs instalado.
Instalar CAs após a criação do pool de nós
Se seu ambiente puder ser provisionado com êxito sem suas CAs personalizadas, você poderá fornecê-las implantando um segredo no kube-system
namespace. Essa abordagem permite a rotação de certificados sem a necessidade de recriação de nós.
Crie um manifesto YAML secreto do Kubernetes com sua cadeia de caracteres de certificado codificada em base64 no
data
campo.apiVersion: v1 kind: Secret metadata: name: custom-ca-trust-secret namespace: kube-system type: Opaque data: ca1.crt: | {base64EncodedCertStringHere} ca2.crt: | {anotherBase64EncodedCertStringHere}
Os dados desse segredo são usados para atualizar CAs em todos os nós. Verifique se o segredo é nomeado
custom-ca-trust-secret
e criado nokube-system
namespace. A instalação de autoridades de certificação usando o segredo no namespace permite akube-system
rotação da autoridade de certificação sem a necessidade de recriação do nó. Para atualizar ou remover uma autoridade de certificação, você pode editar e aplicar o manifesto YAML. O cluster pesquisa alterações e atualiza os nós de acordo. Pode demorar alguns minutos até que as alterações sejam aplicadas.Nota
a reinicialização em contêiner no nó pode ser necessária para que as autoridades de certificação sejam captadas corretamente. Se parecer que as CAs não foram adicionadas corretamente ao armazenamento confiável do nó, você pode disparar uma reinicialização usando o seguinte comando do shell do nó:
systemctl restart containerd
Configurar um novo cluster AKS para usar uma autoridade de certificação personalizada
Configure um novo cluster AKS para usar uma autoridade de certificação personalizada usando o
az aks create
comando com o--enable-custom-ca-trust
parâmetro.az aks create \ --resource-group <resource-group-name> \ --name <cluster-name> \ --node-count 2 \ --enable-custom-ca-trust \ --generate-ssh-keys
Configurar um novo cluster AKS para usar uma CA personalizada com CAs instaladas antes da inicialização do nó
Configure um novo cluster AKS para usar CAs personalizadas com CAs instaladas antes que o nó seja inicializado usando o
az aks create
comando com os--enable-custom-ca-trust
parâmetros e--custom-ca-trust-certificates
.az aks create \ --resource-group <resource-group-name> \ --name <cluster-name> \ --node-count 2 \ --enable-custom-ca-trust \ --custom-ca-trust-certificates pathToFileWithCAs \ --generate-ssh-keys
Configurar um cluster AKS existente para ter CAs personalizadas instaladas antes da inicialização do nó
Configure um cluster AKS existente para que suas CAs personalizadas sejam adicionadas ao armazenamento confiável do nó antes que ele seja inicializado usando o
az aks update
comando com o--custom-ca-trust-certificates
parâmetro.az aks update \ --resource-group <resource-group-name> \ --name <cluster-name> \ --custom-ca-trust-certificates pathToFileWithCAs
Configurar um novo pool de nós para usar uma autoridade de certificação personalizada
Configure um novo pool de nós para usar uma autoridade de certificação personalizada usando o
az aks nodepool add
comando com o--enable-custom-ca-trust
parâmetro.az aks nodepool add \ --cluster-name <cluster-name> \ --resource-group <resource-group-name> \ --name <node-pool-name> \ --enable-custom-ca-trust \ --os-type Linux
Se não existirem outros pools de nós com o recurso habilitado, o cluster terá que reconciliar suas configurações para que as alterações entrem em vigor. Esta operação acontece automaticamente como parte do loop de reconciliação do AKS. Antes da operação, o conjunto de daemon e os pods não aparecem no cluster. Você pode acionar uma operação de reconciliação imediata usando o
az aks update
comando. O conjunto de daemon e os pods aparecem após a conclusão da atualização.
Configurar um pool de nós existente para usar uma autoridade de certificação personalizada
Configure um pool de nós existente para usar uma autoridade de certificação personalizada usando o
az aks nodepool update
comando com o--enable-custom-ca-trust
parâmetro.az aks nodepool update \ --resource-group <resource-group-name> \ --cluster-name <cluster-name> \ --name <node-pool-name> \ --enable-custom-ca-trust
Se não existirem outros pools de nós com o recurso habilitado, o cluster terá que reconciliar suas configurações para que as alterações entrem em vigor. Esta operação acontece automaticamente como parte do loop de reconciliação do AKS. Antes da operação, o conjunto de daemon e os pods não aparecem no cluster. Você pode acionar uma operação de reconciliação imediata usando o
az aks update
comando. O conjunto de daemon e os pods aparecem após a conclusão da atualização.
Desabilitar a autoridade de certificação personalizada em um pool de nós
Desative o recurso de autoridade de certificação personalizada em um pool de nós existente usando o
az aks nodepool update
comando com o--disable-custom-ca-trust
parâmetro.az aks nodepool update \ --resource-group <resource-group-name> \ --cluster-name <cluster-name> \ --name <node-pool-name> \ --disable-custom-ca-trust
Resolução de Problemas
O recurso está habilitado e o segredo com CAs é adicionado, mas as operações estão falhando com o erro de certificado X.509 assinado por autoridade desconhecida
Certificados formatados incorretamente passados no segredo
O AKS requer que os certificados passados no segredo criado pelo usuário sejam formatados corretamente e codificados em base64. Verifique se as autoridades de certificação aprovadas estão codificadas corretamente em base64 e se os arquivos com autoridades de certificação não têm quebras de linha CRLF.
Os certificados passados para --custom-ca-trust-certificates
não devem ser codificados em base64.
containerd não pegou novos certificados
A partir do shell do nó, execute systemctl restart containerd
. Depois que o contêiner é reiniciado, os novos certificados são coletados corretamente pelo tempo de execução do contêiner.
Próximos passos
Para obter mais informações sobre as práticas recomendadas de segurança do AKS, consulte Práticas recomendadas para segurança de cluster e atualizações no Serviço Kubernetes do Azure (AKS).
Azure Kubernetes Service