Perché lo stato della rete mostra un errore NHC007 ?

Cloud privato virtuale

Risoluzione dei problemi relativi all'errore di controllo dello stato della rete NHC007.

Quando si controlla lo stato di salute del cluster eseguendo ibmcloud oc cluster health issues --cluster <CLUSTER_ID>, si vede un errore simile al seguente esempio.

ID       Component   Severity   Description
NHC007   Network     Warning    One or more DNS resolvers are not reachable from certain worker nodes.

Se si controllano i dettagli del problema, si vedrà quali risolutori DNS non sono accessibili da quale nodo worker.

ibmcloud ks cluster health issue get --cluster <CLUSTER_ID> --issue NHC007

Questo avviso indica che il traffico DNS da alcuni nodi worker viene bloccato, forse a causa di politiche restrittive o di configurazioni di IaaS-level.

Controllate le risorse Calico HostEndpoint (HEP) e GlobalNetworkPolicy (GNP), nonché le ACL, i gruppi di sicurezza e qualsiasi altro dispositivo di rete che possa bloccare il traffico DNS in uscita.

  1. Esaminare le risorse di Calico HostEndpoint (HEP) per elencare gli HEP di Calico e verificare se le configurazioni HEP possono applicare in modo errato le restrizioni alle interfacce del nodo worker.

    kubectl get hostendpoints.crd.projectcalico.org
    

    Comando di esempio per descrivere un HEP specifico.

    kubectl describe hostendpoints.crd.projectcalico.org <hep-name>
    
  2. Rivedere il sito Calico GlobalNetworkPolicies (PNL) per elencare i PNL.

    kubectl get globalnetworkpolicies.crd.projectcalico.org
    
  3. Ispezionare i criteri specifici per le regole DNS restrittive. Concentrarsi sulle regole di egress che riguardano la porta 53 o si applicano alle etichette/selezionatori dei nodi.

    kubectl get globalnetworkpolicies.crd.projectcalico.org <policy-name> -o yaml
    
  4. Verifica l'accessibilità del DNS da un pod di debug; avvia un pod di debug temporaneo, utilizzando il nome dei nodi worker interessati per l' nodeName. Se il DNS fallisce in questo caso, potrebbe essere dovuto a blocchi a livello di infrastruttura.

    kubectl run  -i --tty debug \
      --image=us.icr.io/armada-master/network-alpine:latest \
      --restart=Never \
      --overrides='
    {
      "apiVersion": "v1",
      "spec": {
        "nodeName": "<node-name>"
      }
    }' -- sh
    
  5. Eseguire i seguenti comandi all'interno del pod di debug.

    nslookup ibm.com
    
    dig ibm.com
    
  6. Verificare gli ACL (elenchi di controllo degli accessi).

    • Nella console, navigare in VPC > Elenchi di controllo degli accessi e assicurarsi che le regole in uscita permettano sia la porta 53 di UDP che la porta 53 di TCP.

    • Nella CLI ispezionare le ACL eseguendo i seguenti comandi.

        ibmcloud is network-acls
        ```
        ```sh {: pre}
        ibmcloud is network-acl <acl-id>
        ```
    
  7. Ispezionare le regole dei gruppi di sicurezza per trovare i gruppi di sicurezza associati ai nodi worker e poi eseguire per controllare le impostazioni dei gruppi di sicurezza. Assicurarsi che non vi siano regole in uscita che bloccano il traffico DNS ( UDP / TCP porta 53).

    ibmcloud is security-group-rules <security-group-id>
    
  8. Rivedere l'infrastruttura (dispositivi di rete, ACL e così via) e consentire il traffico in uscita dalla porta 53 di UDP e TCP

  9. Se il DNS è ancora irraggiungibile dopo aver esaminato questi elementi, contattare l'assistenza. Apri un caso di supporto. Nei dettagli del caso, assicurarsi di includere qualsiasi file di registro, messaggio di errore o output di comando pertinente.