Por que as operações do mestre do cluster falham devido a um webhook com falha?

Nuvem privada virtual Infraestrutura clássica

Este tópico de resolução de problemas não é para a resolução de problemas gerais do webhook Consulte Depurando webhooks para problemas de webhook não relacionados à atualização do cluster principal.

Resolva problemas relacionados a webhooks com falha que interferem nas operações do mestre do cluster.

Durante uma operação principal, como atualizar sua versão de cluster, o cluster teve um aplicativo de webhook quebrado.

Agora as operações principais não podem ser concluídas. Você verá um erro semelhante ao seguinte:

Cannot complete cluster master operations because the cluster has a broken webhook application. For more information, see the troubleshooting docs: 'https://ibm.biz/master_webhook'

Seu cluster possui recursos de webhook do Kubernetes configuráveis, webhooks de admissão de validação ou de mutação, que podem interceptar e modificar solicitações de vários serviços no cluster para o servidor da API no cluster mestre.

Como os webhooks podem mudar ou rejeitar solicitações, os webhooks quebrados podem impactar a funcionalidade do cluster de várias formas, como impedir que você atualize a versão mestre ou outras operações de manutenção. Para obter mais informações, consulte o Controle de admissão dinâmica na documentação do Kubernetes.

As causas potenciais para webhooks quebradas incluem:

  • O recurso subjacente que emite a solicitação está ausente ou não funcional, como um serviço, terminal ou pod do Kubernetes.
  • O webhook faz parte de um complemento ou outro aplicativo de plug-in que não foi instalado corretamente ou não está funcional.
  • Seu cluster pode ter um problema de conectividade de rede que impeça que o webhook se comunique com o servidor de API do Kubernetes no cluster mestre.

Execute os seguintes comandos para criar um pod de teste e obter um erro que identifique o webhook quebrado. Se o teste for bem-sucedido, a falha pode ter sido temporária e pode ser repetida.

  1. Execute os seguintes comandos para criar o pod de teste e rotular o ibm-system namespace.

    oc run webhook-test --image us.icr.io/armada-master/pause:3.10 -n ibm-system
    oc delete pod -n ibm-system webhook-test --ignore-not-found
    oc label ns ibm-system ibm-cloud.kubernetes.io/webhook-test-at="$(date -u +%FT%H_%M_%SZ)" --overwrite
    

    A mensagem de erro pode ter o nome do webhook quebrado. Na saída do exemplo a seguir, o webhook é trust.hooks.securityenforcement.admission.cloud.ibm.com.

    Error from server (InternalError): Internal error occurred: failed calling webhook "trust.hooks.securityenforcementadmission.cloud.ibm.com": Post https://ibmcloud-image-enforcement.ibm-system.svc:443/mutating-pods?timeout=30s: dialtcp 172.21.xxx.xxx:443: connect: connection timed out
    
  2. Obtenha o nome do webhook quebrado.

    • Se a mensagem de erro tiver um webhook quebrado, substitua trust.hooks.securityenforcement.admission.cloud.ibm.com pelo webhook quebrado que você identificou anteriormente.
        oc get mutatingwebhookconfigurations,validatingwebhookconfigurations -o jsonpath='{.items[?(@.webhooks[*].name=="trust.hooks.securityenforcement.admission.cloud.ibm.com")].metadata.name}{"\n"}'
        ```
        Saída de exemplo
        ```sh {: pre}
        image-admission-config
        ```
    *   Se o erro não tiver um webhook quebrado, liste todos os webhooks do seu cluster e verifique suas configurações nas etapas a seguir.
    ```sh {: pre}
        oc get mutatingwebhookconfigurations,validatingwebhookconfigurations
        ```
    
  3. Revise os detalhes de serviço e localização da configuração do webhook de mutação ou validação na seção clientConfig na saída do comando a seguir. Substitua image-admission-config com o nome que você identificou anteriormente. Se o webhook existir fora do cluster, entre em contato com o proprietário do cluster para verificar o status do webhook.

    oc get mutatingwebhookconfiguration image-admission-config -o yaml
    
    oc get validatingwebhookconfigurations image-admission-config -o yaml
    

    Saída de exemplo

      clientConfig:
        caBundle: <redacted>
        service:
            name: <name>
            namespace: <namespace>
            path: /inject
            port: 443
    
  4. Opcional: Faça backup dos webhooks, especialmente se você não souber como reinstalar o webhook ou não tiver as permissões necessárias para criar webhooks.

    oc get mutatingwebhookconfiguration <name> -o yaml > mutatingwebhook-backup.yaml
    
    oc get validatingwebhookconfiguration <name> -o yaml > validatingwebhook-backup.yaml
    
  5. Verifique o status do serviço e dos pods relacionados do webhook.

    1. Verifique os campos de serviço Tipo, Seletor e Terminal.
        oc describe service -n <namespace> <service_name>
        ```
    2. Se o tipo de serviço for **ClusterIP**, verifique se o pod Konnectivity está no status **“Running”** para que o webhook possa se conectar com segurança à API do Kubernetes no mestre do cluster. Se o pod não estiver funcional, verifique os eventos de pod, logs, funcionamento dodo trabalhador e outros componentes para solucionar problemas.
    
        * Verifique os pods do agente de Konnectivity
            ```sh {: pre}
            oc describe pods -n kube-system -l app=konnectivity-agent
            ```
    
    1. Se o serviço não tiver um terminal, verifique o funcionamento dos recursos de apoio, como uma implementação ou um pod. Se o recurso não estiver funcional, verifique os eventos de pod, logs, funcionamento dodo trabalhador e outros componentes para solucionar problemas. Para obter mais informações, consulte [Depurando implementações de aplicativos](/docs/openshift?topic=openshift-debug_apps).
    ```sh {: pre}
        oc get all -n my-service-namespace -l <key=value>
        ```
    1. Se o serviço não tiver recursos de backup ou se a solução de problemas nos pods não resolver a questão, remova a configuração do webhook de mutação ou validação identificada anteriormente.
    ```sh {: pre}
        oc delete validatingwebhookconfiguration NAME
        ```
        ```sh {: pre}
        oc delete mutatingwebhookconfiguration NAME
        ```
    
  6. Tente novamente a operação do cluster mestre, como atualizar o cluster.

  7. Se você ainda vir o erro, talvez tenha problemas de conectividade do nó do trabalhador ou da rede.

    • Resolução de problemas do nó do trabalhador.
    • Certifique-se de que o webhook possa se conectar ao servidor de API do Kubernetes no cluster mestre. Por exemplo, se você usar políticas de rede do Calico, grupos de segurança ou algum outro tipo de firewall, configure seu cluster clássico ou de VPC com o acesso apropriado.
    • Se o webhook for gerenciado por um complemento que você instalou, desinstale o complemento. Os complementos comuns que causam problemas de webhook incluem o seguinte:
  8. Recrie o webhook ou reinstale o complemento.

  9. Se o problema persistir, entre em contato com o suporte. Abrir um caso de suporte. Nos detalhes do caso, certifique-se de incluir todos os arquivos de registro, mensagens de erro ou saídas de comando relevantes.