Resolva problemas de CRDs com um pacote de AC inválido


As definições de recursos personalizados (CRDs) são ferramentas poderosas para expandir as capacidades do Kubernetes. No entanto, se um CRD contiver um pacote de Autoridade de certificação (CA) 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. Isto pode manifestar-se como erros durante a criação, as atualizações ou as eliminações de recursos. O Google Kubernetes Engine (GKE) monitoriza os seus clusters e usa o serviço Recommender para fornecer orientações sobre como pode otimizar a sua utilização da plataforma.

Para ajudar a garantir que o cluster permanece estável e com bom desempenho, consulte as recomendações do GKE para CRDs que funcionam, mas têm um pacote de CA inválido. Use estas orientações para verificar os CRDs potencialmente configurados incorretamente e atualizá-los, se necessário. Para saber como gerir as estatísticas e as recomendações dos Recommenders, consulte o artigo Otimize a sua utilização do GKE com estatísticas e recomendações.

Identifique os clusters afetados

Para receber estatísticas que identificam clusters afetados por CRDs com pacotes de AC 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 as CRDs estarem configuradas 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

  1. 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.

  2. 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.caBundle
    

    A 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:

  1. 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.yaml
    
  2. Elimine o CRD existente:

      kubectl delete crd <crd-name>
    
  3. Certifique-se de que o campo caBundle do 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.

  4. Modifique a definição YAML do CRD, atualizando o campo spec.conversion.webhook.clientConfig.caBundle com 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>
    
  5. Aplique a CRD corrigida:

        kubectl apply -f <corrected-crd-file.yaml>
    
  6. Restaure os seus recursos personalizados:

        kubectl apply -f backup.yaml
    

O que se segue?