As definições de recursos personalizados (CRDs) são ferramentas eficazes para expandir as capacidades do Kubernetes.
No entanto, se um CRD contiver um pacote de Autoridade de certificação (AC) inválido ou com formato incorreto na respetiva configuração do webhook de conversãospec.conversion.webhook.clientConfig.caBundle, pode interromper as operações do cluster. Este problema pode manifestar-se como erros durante a criação, as atualizações ou as eliminações de recursos, afetando a estabilidade e o desempenho do seu cluster.
Para evitar este problema, o Google Kubernetes Engine (GKE) deteta automaticamente CRDs com conjuntos de ACs inválidos e gera uma recomendação. Use este documento para encontrar a recomendação, identificar os CRDs configurados incorretamente e atualizá-los.
Estas informações são importantes para administradores e operadores da plataforma e outros utilizadores que gerem CRDs e recursos personalizados no GKE.
Identifique clusters afetados
Para obter estatísticas que identifiquem clusters afetados por CRDs com pacotes de ACs inválidos, siga as instruções para ver estatísticas e recomendações para o subtipo K8S_CRD_WITH_INVALID_CA_BUNDLE. Pode obter estatísticas das
seguintes formas:
- Use a Google Cloud consola.
- Use a Google Cloud CLI ou a API Recommender, filtrando com o subtipo
K8S_CRD_WITH_INVALID_CA_BUNDLE.
Depois de identificar os CRDs através das estatísticas, siga as instruções para resolver problemas do pacote de ACs configurado incorretamente.
Quando o GKE deteta CRDs com configuração incorreta
O GKE gera uma estatística e uma recomendação com o subtipo K8S_CRD_WITH_INVALID_CA_BUNDLE se o cluster do GKE tiver um ou mais CRDs a comunicar um caBundle mal configurado para a configuração do cliente webhook em spec.conversion.webhook.clientConfig.
Siga as instruções para verificar CRDs com o pacote de AC mal configurado.
Resolva os problemas dos CRDs detetados
As secções seguintes contêm instruções para resolver problemas com os CRDs que o GKE detetou como potencialmente configurados incorretamente.
Depois de implementar as instruções e os CRDs estarem configurados corretamente, a recomendação é resolvida no prazo de 24 horas e deixa de aparecer na consola. Se tiver passado menos de 24 horas desde que implementou as orientações da recomendação, pode marcar a recomendação como resolvida. Se não quiser implementar a recomendação, pode ignorá-la.
Identifique CRDs afetados num cluster
Veja estatísticas e recomendações para o subtipo
K8S_CRD_WITH_INVALID_CA_BUNDLE, escolhendo uma estatística de cada vez para resolver problemas. O GKE gera uma estatística por cluster que tem um CRD danificado.Execute o seguinte comando para descrever o serviço e encontrar CRDs com conjuntos de AC potencialmente problemáticos:
kubectl get crd -o custom-columns=NAME:.metadata.name,CABUNDLE:.spec.conversion.webhook.clientConfig.caBundleA saída inclui o seguinte:
- Nome: o nome do CRD.
- CaBundle: o pacote de AC associado ao webhook de conversão do CRD, se estiver presente. Examine o resultado. Se a coluna caBundle estiver vazia para um CRD que sabe que usa um webhook de conversão, isto indica um potencial problema com o caBundle.
Recrie a CRD
Para resolver este erro, recrie o CRD afetado com um pacote de ACs válido:
Faça uma cópia de segurança dos recursos personalizados existentes associados a este CRD problemático, se tiver algum. Execute o seguinte comando para exportar os recursos existentes:
kubectl get <crd-name> -o yaml > backup.yamlElimine o CRD existente:
kubectl delete crd <crd-name>Certifique-se de que o campo
caBundledo CRD contém um certificado PEM bem formado e codificado em base-64. Pode fazê-lo editando diretamente o CRD ou contactando os respetivos autores.Modifique a definição YAML do CRD, atualizando o campo
spec.conversion.webhook.clientConfig.caBundlecom os dados do pacote de AC válidos. O resultado deve ter um aspeto semelhante ao seguinte:spec: conversion: webhook: clientConfig: caBundle: <base64-encoded-ca-bundle>Aplique a CRD corrigida:
kubectl apply -f <corrected-crd-file.yaml>Restaure os seus recursos personalizados:
kubectl apply -f backup.yaml