Compartilhar via


Giro de certificados no AKS (Serviço de Kubernetes do Azure)

O AKS (Serviço de Kubernetes do Azure) usa certificados para autenticação com muitos de seus componentes. Os clusters com controle de acesso baseado em função (RBAC) do Azure que foram criados após março de 2022 têm a rotação automática de certificados habilitada. Talvez seja necessário girar periodicamente esses certificados por motivos de segurança ou política. Por exemplo, você pode ter uma política para alternar todos os seus certificados a cada 90 dias.

Observação

A rotação automática de certificado é habilitada por padrão apenas para clusters AKS habilitados para RBAC.

Este artigo mostra como o giro de certificados funciona no cluster do AKS.

Antes de começar

Este artigo exige a CLI do Azure versão 2.0.77 ou posterior. Execute az --version para encontrar a versão. Se você precisa instalar ou atualizar, veja Instalar a CLI do Azure.

Certificados AKS, Autoridades de Certificação e Contas de Serviço

O AKS gera e usa os seguintes certificados, AC (Autoridades de Certificação) e SA (Contas de Serviço):

  • O servidor de API do AKS cria uma AC chamada AC do cluster.
  • O servidor de API tem uma AC do cluster, que assina certificados para uma comunicação unidirecional do servidor de API para kubelets.
  • Cada kubelet cria uma CSR (Solicitação de Autenticação de Certificado), que a AC do cluster assina, para comunicação do kubelet com o servidor de API.
  • O agregador de API usa a AC do cluster para emitir certificados para comunicação com outras APIs. O agregador de API também pode ter sua própria AC para emitir esses certificados, mas atualmente usa a AC do cluster.
  • Cada nó usa um token SA, que é assinado pela AC do cluster.
  • O kubectl cliente tem um certificado para comunicação com o cluster do AKS.

A Microsoft mantém todos os certificados mencionados nesta seção, exceto o certificado do cluster.

Observação

  • Os clusters do AKS criados antes de maio de 2019 têm certificados que expiram após dois anos.
  • Os clusters do AKS criados depois de maio de 2019 têm certificados da AC do cluster que expiram após 30 anos.

Você pode verificar quando o cluster foi criado usando o comando kubectl get nodes, que mostra a Idade dos pools de nós.

Verificar as datas de validade do certificado

Verifique a data de validade do certificado do cluster

  • Verifique a data de validade do certificado de cluster usando o comando kubectl config view.

    kubectl config view --raw -o jsonpath="{.clusters[?(@.name == '')].cluster.certificate-authority-data}" | base64 -d | openssl x509 -text | grep -A2 Validity
    

Verificar a data de validade do certificado do servidor de API

  • Verifique a data de validade do certificado do servidor de API usando o comando curl a seguir.

    curl https://{apiserver-fqdn} -k -v 2>&1 | grep expire
    

Verificar a data de validade do certificado de nó do agente VMAS

  • Verifique a data de validade do certificado de nó do agente VMAS usando o comando az vm run-command invoke.

    az vm run-command invoke --resource-group MC_rg_myAKSCluster_region --name vm-name --command-id RunShellScript --query 'value[0].message' -otsv --scripts "openssl x509 -in /etc/kubernetes/certs/apiserver.crt -noout -enddate"
    

Verificar a validade do certificado para o nó do agente do conjunto de dimensionamento de máquinas virtuais

  • Verifique a data de validade do certificado de nó do agente do conjunto de dimensionamento de máquinas virtuais usando o comando az vmss run-command invoke.

    az vmss run-command invoke --resource-group "MC_rg_myAKSCluster_region" --name "vmss-name" --command-id RunShellScript --instance-id 1 --scripts "openssl x509 -in  /var/lib/kubelet/pki/kubelet-client-current.pem -noout -enddate" --query "value[0].message"
    

Rotação automática de certificado

Para o AKS girar automaticamente os certificados não AC, o cluster precisa ter a inicialização de TLS, que é habilitada por padrão em todas as regiões do Azure.

Observação

  • Se você tiver um cluster existente, precisará atualizar esse cluster para habilitar o Giro Automático de Certificado.
  • Não desabilite a inicialização para manter o giro automático habilitado.
  • Se o cluster estiver em um estado parado durante o giro automático do certificado, somente os certificados do painel de controle serão girados. Nesse caso, você deve recriar o pool de nós após o giro do certificado para iniciar o giro do certificado do pool de nós.

Para todos os clusters do AKS criados ou atualizados após março de 2022, o Serviço de Kubernetes do Azure gira automaticamente os certificados não AC nos nós do agente e painel de controle dentro de 80% do tempo válido do certificado do cliente, antes de expirarem e sem tempo de inatividade para o cluster.

Como verificar se o pool de nós do agente atual está habilitado para inicialização de TLS?

  1. Verifique se o cluster tem Inicialização de TLS habilitada navegando até um dos seguintes caminhos:

    • Em um nó do Linux: /var/lib/kubelet/bootstrap-kubeconfig ou /host/var/lib/kubelet/bootstrap-kubeconfig
    • Em um nó do Windows: C:\k\bootstrap-config

    Para obter mais informações, confira Conecte os nós de cluster do AKS (Serviço de Kubernetes do Azure) para manutenção ou solução de problemas.

    Observação

    O caminho do arquivo pode ser alterado à medida que as versões do Kubernetes evoluem.

  2. Depois que uma região estiver configurada, crie um novo cluster ou atualize um cluster existente para definir o giro automático do certificado de cluster. Você precisa atualizar o painel de controle e o pool de nós para habilitar esse recurso.

Gire manualmente os certificados do cluster

Aviso

Girar seus certificados usando az aks rotate-certs recria todos os seus nós, conjuntos de dimensionamento de máquinas virtuais e discos e pode causar até 30 minutos de tempo de inatividade para o cluster do AKS.

  1. Conecte-se ao seu cluster usando o comando az aks get-credentials.

    az aks get-credentials --resource-group $RESOURCE_GROUP_NAME --name $CLUSTER_NAME
    
  2. Gire todos os certificados, CAs e SAs em seu cluster usando o comando az aks rotate-certs.

    az aks rotate-certs --resource-group $RESOURCE_GROUP_NAME --name $CLUSTER_NAME
    

    Importante

    Isso pode levar até 30 minutos para az aks rotate-certs ser concluído. Se o comando falhar antes de concluir, use az aks show para verificar se o status do cluster é Certificado girando. Se o cluster estiver em um estado de falha, execute az aks rotate-certs novamente para girar seus certificados outra vez.

  3. Verifique se os certificados antigos não são mais válidos usando qualquer comando kubectl, como kubectl get nodes.

    kubectl get nodes
    

    Se você não atualizou os certificados usados pelo kubectl, verá um erro semelhante ao seguinte exemplo de saída:

    Unable to connect to the server: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "ca")
    
  4. Atualize o certificado usado por kubectl usando o comando az aks get-credentials com o sinalizador --overwrite-existing.

    az aks get-credentials --resource-group $RESOURCE_GROUP_NAME --name $CLUSTER_NAME --overwrite-existing
    
  5. Verifique se os certificados foram atualizados usando o comando kubectl get.

    kubectl get nodes
    

    Observação

    Se você tiver serviços que sejam executados com base no AKS, poderá ser necessário atualizar os certificados relacionados a eles.

Rotação de certificado de serviço do kubelet

A rotação de certificado de serviço do kubelet permite que o AKS utilize a inicialização de TLS do servidor do kubelet para inicialização e rotação de certificado de serviço assinados pela AC do cluster.

Limitações

  • Com suporte no Kubernetes versão 1.27 e superior.
  • Não há suporte quando o pool de nós está usando um instantâneo do pool de nós com base em uma imagem de nó mais antiga que 202501.12.0.
  • Esse recurso não pode ser habilitado manualmente. Os pools de nós existentes terão a rotação de certificado de serviço do kubelet habilitada por padrão quando executarem a primeira atualização para qualquer Kubernetes versão 1.27 ou superior. Novos pools de nós na versão 1.27 ou superior do Kubernetes terão a rotação de certificado de serviço do kubelet habilitada por padrão. Para saber se a rotação de certificado de serviço do kubelet foi habilitada na sua região, veja Versões do AKS.

Verificar se a rotação de certificado de serviço do kubelet foi habilitada

Cada nó com o recurso habilitado recebe automaticamente o rótulo kubernetes.azure.com/kubelet-serving-ca=cluster. Verifique se os rótulos foram definidos usando o comando kubectl get nodes -L kubernetes.azure.com/kubelet-serving-ca.

kubectl get nodes -L kubernetes.azure.com/kubelet-serving-ca

Verificar se o kubelet passa pelo processo de inicialização do TLS

Com esse recurso habilitado, cada kubelet que executa seus nós deve passar pelo processo de inicialização do TLS de serviço.

Verifique se o processo de inicialização está ocorrendo usando o kubectl get comando para obter os objetos CSR atuais em seu cluster.

kubectl get csr --field-selector=spec.signerName=kubernetes.io/kubelet-serving

Todas as CSRs de serviço devem estar no estado Approved,Issued, o que indica que a CSR foi aprovada e emitiu um certificado assinado. As CSRs de serviço têm o nome de signatário kubernetes.io/kubelet-serving.

   NAME        AGE    SIGNERNAME                                    REQUESTOR                    REQUESTEDDURATION   CONDITION
csr-8mx4w   113s   kubernetes.io/kube-apiserver-client-kubelet   system:bootstrap:uoxr9r      none              Approved,Issued
csr-bchlj   111s   kubernetes.io/kubelet-serving                 system:node:akswinp7000000   none              Approved,Issued
csr-sb4wz   46m    kubernetes.io/kubelet-serving                 system:node:akswinp6000000   none              Approved,Issued
csr-zc4wt   46m    kubernetes.io/kube-apiserver-client-kubelet   system:bootstrap:ho7zyu      none              Approved,Issued

Verificar se o kubelet está usando um certificado obtido da inicialização TLS do servidor

Para confirmar se o kubelet do nó está usando um certificado de serviço assinado pela AC do cluster, use [kubectl debug][kubectl-debug] para analisar o conteúdo do diretório de PKI do kubelet.

kubectl debug node/<node> -ti --image=mcr.microsoft.com/azurelinux/base/core:3.0 -- ls -l /host/var/lib/kubelet/kubelet-server-current.pem

Se existir um symlink kubelet-server-current.pem, o kubelet terá inicializado/girado o próprio certificado de serviço por meio do processo de inicialização do TLS e será assinado pela AC do cluster.

Desabilitar a rotação de certificado de serviço do kubelet

Você pode desabilitar a rotação de certificado de serviço do kubelet atualizando o pool de nós usando o comando az aks nodepool update para especificar a marca aks-disable-kubelet-serving-certificate-rotation=true e, em seguida, recriar a imagem dos nós. Uma recriação da imagem do nó pode ser feita por meio de uma atualização da imagem do nó ou uma escala do pool para 0 instância e, em seguida, fazer backup com o valor desejado.

az aks nodepool update --cluster-name myCluster --resource-group myResourceGroup --name mynodepool --tags aks-disable-kubelet-serving-certificate-rotation=true

Próximas etapas

Este artigo mostrou como girar manualmente e automaticamente seus certificados de cluster, CAs e SAs. Para obter mais informações, veja Melhores práticas para segurança de cluster e atualizações no AKS (Serviço de Kubernetes do Azure).