Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Este artigo explica como gerir e rodar certificados em clusters Azure Kubernetes Service (AKS) para manter uma comunicação segura entre componentes e garantir a conformidade.
Pré-requisitos
- CLI do Azure versão 2.0.77 ou posterior. Verifica a tua versão usando o
az --versioncomando. Para instalar ou atualizar, consulte Install CLI do Azure.
Verifique a data de expiração do certificado da autoridade certificadora (CA) do cluster
Verifique a data de expiração do certificado de CA do cluster usando o kubectl config view comando.
kubectl config view --raw -o jsonpath="{.clusters[?(@.name == '')].cluster.certificate-authority-data}" | base64 -d | openssl x509 -text | grep -A2 Validity
Verifique a data de expiração do certificado do servidor de API
Verifique a data de expiração do certificado do servidor API usando o seguinte curl comando:
curl https://{apiserver-fqdn} -k -v 2>&1 | grep expire
Verifique a data de expiração do certificado do nó do agente VMSS
Verifique a data de expiração do certificado do nó do agente do conjunto de escala da máquina virtual usando o az vmss run-command invoke comando.
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"
Verifique a data de expiração do certificado de 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"
Efetuar manualmente a rotação dos certificados de CA do cluster
Quando efetua a rotação do certificado da AC do cluster, os seguintes certificados subordinados também são atualizados:
- Tokens da conta de serviço (SA)
- Certificados de servidor API
- Certificados de cliente Kubelet
- Certificados de servidor Kubelet (se a rotação de certificados de serviço Kubelet estiver ativada no cluster)
Warning
A rotação dos teus certificados com az aks rotate-certs recria todos os teus nós, conjuntos de dimensionamento de máquinas virtuais e discos. Este processo pode causar até 30 minutos de indisponibilidade para o seu cluster AKS. Se o comando falhar antes de estar concluído, use o comando az aks show para verificar se o estado do cluster aparece como Certificate Rotating. Se o cluster estiver em um estado de falha, execute az aks rotate-certs novamente para girar seus certificados novamente.
Conecte-se ao cluster usando o
az aks get-credentialscomando.az aks get-credentials --resource-group <resource-group> --name <cluster-name>Gire todos os certificados, CAs e SAs no cluster usando o
az aks rotate-certscomando.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
kubectlcomando, comokubectl get nodes.kubectl get nodesSe não atualizou os certificados usados por
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")
Atualizar kubectl certificados do cliente
Atualize o
kubectlcertificado do cliente usando oaz aks get-credentialscomando com a--overwrite-existingbandeira.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 algum serviço executado em cima do AKS, talvez seja necessário atualizar seus certificados.
Verifique se a rotação do certificado de serviço kubelet está ativada
Cada nó com o recurso ativado recebe automaticamente o rótulo kubernetes.azure.com/kubelet-serving-ca=cluster. Verifique se as etiquetas estão definidas usando o kubectl get nodes -L kubernetes.azure.com/kubelet-serving-ca comando.
kubectl get nodes -L kubernetes.azure.com/kubelet-serving-ca
Verifique se o kubelet passa pelo processo de inicialização TLS
Quando ativa esta funcionalidade, cada kubelet em execução nos seus nós passa pelo processo de inicialização TLS de serviço.
Verifica se o processo de bootstrapping está a decorrer usando o kubectl get comando para obter os objetos CSR atuais dentro do teu cluster.
kubectl get csr --field-selector=spec.signerName=kubernetes.io/kubelet-serving
Todos os CSRs ativos estão no estado Approved,Issued, o que indica que o CSR foi aprovado e que foi emitido um certificado assinado. As CSRs de serviço têm um nome de signatário de 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
Verifique se o kubelet está usando um certificado obtido da inicialização do servidor TLS
Confirme se o kubelet do nó está a usar um certificado de servidor assinado pela autoridade de certificação (CA) do cluster, utilizando 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 uma kubelet-server-current.pem ligação simbólica, o kubelet inicializa e renova o seu próprio certificado de servidor através do processo de arranque TLS, e esse certificado é assinado pela AC do cluster.
Desativar a rotação do certificado de serviço kubelet
Desative a rotação do certificado de servidor do kubelet atualizando o conjunto de nós utilizando 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=trueReimagina os teus nós usando uma atualização de imagem de nós ou escalando o pool para zero instâncias e depois volta ao valor desejado.
Conteúdo relacionado
Para mais informações sobre a segurança do AKS, consulte os seguintes artigos: