Perché l'operatore DNS mostra un errore RouteHealthDegraded o can't marshal DNS message ?

Virtual Private Cloud Infrastruttura classica

Imparare a risolvere gli errori dell'operatore DNS relativi a RouteHealthDegraded o can't marshal DNS message.

Viene visualizzato un messaggio di errore simile a uno dei seguenti.

Il seguente messaggio di errore di esempio viene visualizzato quando si installa IBM Cloud Pak for Data dalla console.

XXX.us-south.containers.appdomain.cloud: Get "http://image-registry-openshift-image-registry.ocp-data-privacy-prod-c-XXX.us-south.containers.appdomain.cloud/v2/": dial tcp: lookup image-registry-openshift-image-registry.ocp-data-privacy-prod-c-XXX.us-south.containers.appdomain.cloud on XXX.XX.X.XX:XX: can't marshal DNS message

Errore nslookup di esempio.

# nslookup XXX.XXX.databases.appdomain.cloud
Server:        XXX.XX.X.XX
Address:    XXX.XX.X.XX:XX
Non-authoritative answer:
*** Can't find XXX.XXX.databases.appdomain.cloud: Parse error
Non-authoritative answer:
*** Can't find XXX.XXX.databases.appdomain.cloud: Parse error

La correzione del bug 1953097 ha abilitato le risposte del plugin CoreDNS bufsize di 1232 byte. Alcuni resolver DNS non possono ricevere risposte superiori a 512 byte. Si noti che i resolver DNS che riprovano le ricerche utilizzando TCP, come Dig, non sono interessati. I client DNS che non richiedono che i messaggi DNS UDP superino i 512 byte non sono interessati.

Aggiorna il tuo master cluster e i nodi di lavoro.

  1. Aggiorna il tuo master cluster.

    ibmcloud oc cluster master update --cluster <clusterID> --version <4.6.38_openshift|4.7.19_openshift>
    
  2. Dopo aver aggiornato il tuo master, esegui il comando cluster get per ottenere lo stato e la versione del cluster e verificare che lo stato sia deployed.

    ibmcloud oc cluster get --cluster <clusterID>
    
  3. Aggiorna i tuoi nodi di lavoro.

  4. Ottieni i dettagli della configmap openshift-dns e riesamina bufsize immettendo il seguente comando.

    oc get ConfigMap -n openshift-dns dns-default -o yaml
    
  5. Se bufsize è ancora 1232, ottieni il nome del pod Operatore DNS.

    oc get pods -n openshift-dns-operator
    

    Output di esempio:

    NAME READY STATUS RESTARTS AGE
    dns-operator-111aa1aaab-xxxx1 2/2 Running 0 5h49m
    
  6. Elimina il pod Operatore DNS.

    oc delete pod <dns_operator_pod> -n openshift-dns-operator
    
  7. Attendere il riavvio del pod DNS. Esegui il comando get pods con l'opzione --watch per verificare che il pod sia stato distribuito.

    oc get pods -n openshift-dns --watch
    
  8. Verificare che il pod dell'operatore DNS sia in esecuzione.

    oc get pods -n openshift-dns-operator
    
  9. Ottenere l'YAML ConfigMap e verificare che bufsize sia 512.

    oc get configmap -n openshift-dns dns-default -o yaml
    
  10. Dopo pochi minuti, verifica che la risoluzione DNS funzioni. Se viene visualizzato un errore nslookup, provare a eseguire di nuovo nslookup.

    / # nslookup XXX.XXX.databases.appdomain.cloud
    Server:        XXX.XX.X.XX
    Address:    XXX.XX.X.XX:XX
    Non-authoritative answer:
    XXX.XXX.databases.appdomain.cloud    canonical name = icd-prod-us-south-db-lm0sr.us-south.containers.appdomain.cloud
    icd-prod-us-south-db-lm0sr.us-south.containers.appdomain.cloud    canonical name = icd-prod-us-south-db-lm0sr.XXX.akadns.net
    Non-authoritative answer:
    XXX.XXX.databases.appdomain.cloud    canonical name = icd-prod-us-south-db-lm0sr.us-south.containers.appdomain.cloud
    icd-prod-us-south-db-lm0sr.us-south.containers.appdomain.cloud    canonical name = icd-prod-us-south-db-lm0sr.XXX.akadns.net
    Name:    icd-prod-us-south-db-lm0sr.XXX.akadns.net
    Address: XXX.XX.XXX.XX
    Name:    icd-prod-us-south-db-lm0sr.XXX.akadns.net
    Address: XXX.XX.X.XX
    Name:    icd-prod-us-south-db-lm0sr.XXX.akadns.net
    Address: XXX.XX.XXX.XXX