Melhoria da segurança do token da conta de serviço
Em clusters anteriores à v1.21, um token é obtido montando o segredo da conta de serviço em um pod. Os tokens obtidos dessa maneira são permanentes. Essa abordagem não é mais recomendada a partir da versão 1.21. As contas de serviço interromperão a criação automática de segredos em clusters a partir da versão 1.25.
Em clusters da versão 1.21 ou posterior, você pode usar a API TokenRequest para obter o token e usar o volume projetado para montar o token no pod. Tais tokens são válidos por um período fixo (uma hora por padrão). Antes da expiração, o Kubelet atualiza o token para garantir que o pod sempre use um token válido. Quando o pod de montagem é excluído, o token se torna automaticamente inválido. Essa abordagem é implementada pelo recurso BoundServiceAccountTokenVolume para melhorar a segurança do token da conta de serviço. Clusters da v1.21 ou posterior habilitam essa abordagem por padrão.
Para uma transição suave, a comunidade estende o período de validade do token para um ano por padrão. Após um ano, o token se torna inválido e os clientes que não suportam o recarregamento de certificados não podem acessar o servidor da API. Recomenda-se que os clientes de versões anteriores sejam atualizados o mais rápido possível. Caso contrário, podem ocorrer falhas de serviço.
Se você usar um cliente do Kubernetes de uma versão a ser desatualizada, o recarregamento do certificado poderá falhar. As versões das bibliotecas de cliente de Kubernetes oficialmente suportadas capazes de recarregar tokens são as seguintes:
- Go: >= v0.15.7
- Python: >= v12.0.0
- Java: >= v9.0.0
- Javascript: >= v0.10.3
- Ruby: master branch
- Haskell: v0.3.0.0
- C#: >= 7.0.5
Para mais detalhes, visite https://github.com/kubernetes/enhancements/tree/master/keps/sig-auth/1205-bound-service-account-tokens.
Se você precisar de um token que nunca expire, também poderá gerenciar manualmente segredos para contas de serviço. Embora um token de conta de serviço permanente possa ser criado manualmente, é aconselhável usar um token de curta duração chamando a API TokenRequest para maior segurança.
Diagnóstico
Execute as seguintes etapas para verificar os clusters de CCE v1.21 ou posterior:
- Verifique as versões de complemento.
- Se você estiver usando o complemento prometheus v2.23.34 ou anterior, atualize-o para v2.23.34 ou posterior.
- Se você estiver usando o complemento npd v1.15.0 ou anterior, atualize-o para a versão mais recente.
- Use o kubectl para conectar-se ao cluster e execute o comando kubectl get --raw "/metrics" | grep stale para obter as métricas. Verifique a métrica chamada serviceaccount_stale_tokens_total.
Se o valor for maior que 0, algumas cargas de trabalho no cluster podem estar usando uma versão de client-go anterior. Nesse caso, verifique se esse problema ocorre nas aplicações implementados. Se sim, atualize o client-go para a versão especificada pela comunidade o mais rápido possível. A versão deve ser pelo menos duas versões principais do cluster do CCE. Por exemplo, se a versão do cluster for 1.23, a versão da biblioteca de dependência do Kubernetes deve ser pelo menos 1.19.