Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este artigo explica como gerenciar e girar certificados em clusters AKS (Serviço de Kubernetes do Azure) para manter a comunicação segura entre componentes e garantir a conformidade.
Pré-requisitos
- CLI do Azure versão 2.0.77 ou posterior. Verifique sua versão usando o
az --versioncomando. Para instalar ou atualizar, consulte Instalar CLI do Azure.
Verificar a data de validade do certificado da AC (autoridade de certificação) do cluster
Verifique a data de validade do certificado CA do 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 seguinte curl comando:
curl https://{apiserver-fqdn} -k -v 2>&1 | grep expire
Verificar a data de validade do certificado do nó do agente do VMSS
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 <node-resource-group> \
--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"
Verificar a data de expiração do certificado da VM independente
Verifique a data de validade de uma VM autônoma usando o az vm run-command invoke comando.
az vm run-command invoke \
--resource-group <resource-group> \
--name <vm-name> \
--command-id RunShellScript \
--scripts "openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -enddate" \
--query "value[0].message"
Fazer a rotação manual dos certificados de AC do cluster
Quando você rotaciona o certificado da AC do cluster, os seguintes certificados derivados também são renovados:
- Tokens de conta de serviço (SA)
- Certificados de servidor de API
- Certificados de cliente kubelet
- Certificados do servidor Kubelet (se a rotação de certificado de serviço kubelet estiver habilitada no cluster)
Aviso
Fazer a rotação dos seus certificados ao usar az aks rotate-certs recria todos os seus nós, conjuntos de dimensionamento de máquinas virtuais e discos. Esse processo pode causar até 30 minutos de tempo de inatividade para o cluster do AKS. Se o comando falhar antes de ser concluído, use o comando az aks show para verificar se o status do cluster mostra Certificate Rotating. Se o cluster estiver em um estado de falha, execute az aks rotate-certs novamente para girar seus certificados outra vez.
Conecte-se ao seu cluster usando o comando
az aks get-credentials.az aks get-credentials --resource-group <resource-group> --name <cluster-name>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 <cluster-name>Verifique se os certificados antigos não são mais válidos usando qualquer comando
kubectl, comokubectl get nodes.kubectl get nodesSe você não atualizou os certificados usados pelo
kubectl, você verá um erro semelhante como a seguinte saída de exemplo: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")
Atualizar kubectl certificados do cliente
Atualize o certificado de cliente
kubectlusando o comandoaz aks get-credentialscom a opção--overwrite-existing.az aks get-credentials --resource-group <resource-group> --name <cluster-name> --overwrite-existingVerifique se os certificados são atualizados usando o
kubectl getcomando.kubectl get nodesNote
Se você tiver serviços que sejam executados com base no AKS, poderá ser necessário atualizar os certificados relacionados a eles.
Verificar se a rotação de certificado de serviço kubelet está habilitada
Cada nó com o recurso habilitado recebe automaticamente o rótulo kubernetes.azure.com/kubelet-serving-ca=cluster. Verifique se os rótulos estão definidos usando o kubectl get nodes -L kubernetes.azure.com/kubelet-serving-ca comando.
kubectl get nodes -L kubernetes.azure.com/kubelet-serving-ca
Verificar se o kubelet passa pelo processo de inicialização do TLS
Quando você habilita esse recurso, cada kubelet que executa seus nós passa 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 em uso estão no estado Approved,Issued, o que indica que a CSR foi aprovada e que um certificado assinado foi emitido. As CSRs de serviço têm o nome de signatário kubernetes.io/kubelet-serving. Por exemplo:
NAME AGE SIGNERNAME REQUESTOR REQUESTEDDURATION CONDITION
csr-1ab2c 113s kubernetes.io/kube-apiserver-client-kubelet system:bootstrap:abcd1e none Approved,Issued
csr-defgh 111s kubernetes.io/kubelet-serving system:node:akswinp1000000 none Approved,Issued
csr-ij3kl 46m kubernetes.io/kubelet-serving system:node:akswinp2000000 none Approved,Issued
csr-mn4op 46m kubernetes.io/kube-apiserver-client-kubelet system:bootstrap:ab1cde none Approved,Issued
Verificar se o kubelet está usando um certificado obtido da inicialização TLS do servidor
Confirme se o kubelet do nó está usando um certificado de servidor assinado pela AC do cluster, usando o comando [kubectl debug][kubectl-debug] para examinar o conteúdo do diretório 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 kubelet-server-current.pem link simbólico, o kubelet faz o bootstrap e renova seu próprio certificado de servidor por meio do processo de bootstrap de TLS, e esse certificado é assinado pela CA do cluster.
Desabilitar a rotação de certificado de serviço do kubelet
Desative a rotação do certificado de atendimento do kubelet atualizando o pool de nós usando o comando
az aks nodepool updatee especificando a tagaks-disable-kubelet-serving-certificate-rotation=true.az aks nodepool update \ --cluster-name <cluster-name> \ --resource-group <resource-group> \ --name <node-pool-name> \ --tags aks-disable-kubelet-serving-certificate-rotation=trueRefaça a imagem dos nós usando uma atualização de imagem de nó ou dimensionando o pool para instâncias zero e, em seguida, aumentando novamente até o valor desejado.
Conteúdo relacionado
Para obter mais informações sobre segurança do AKS, consulte os seguintes artigos: