¿Por qué el estado de la red muestra un error NHC007 ?

Nube privada virtual

Solución de problemas del error NHC007 en la comprobación del estado de la red.

Cuando compruebe el estado de salud de su clúster ejecutando ibmcloud oc cluster health issues --cluster <CLUSTER_ID>, verá un error similar al del siguiente ejemplo.

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

Si compruebas los detalles de la incidencia, verás a qué resolvers DNS no se puede acceder desde qué nodo trabajador.

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

Esta advertencia indica que el tráfico DNS de ciertos nodos trabajadores está siendo bloqueado, posiblemente debido a políticas restrictivas o configuraciones de IaaS-level.

Compruebe sus recursos Calico HostEndpoint (HEP) y GlobalNetworkPolicy (GNP), así como sus ACL, grupos de seguridad y cualquier otro dispositivo de red que pueda bloquear el tráfico DNS saliente.

  1. Revise los recursos de Calico HostEndpoint (HEP) para obtener una lista de los HEP de Calico y compruebe si alguna configuración de HEP puede aplicar incorrectamente restricciones a las interfaces de su nodo trabajador.

    kubectl get hostendpoints.crd.projectcalico.org
    

    Ejemplo comando para describir un HEP concreto.

    kubectl describe hostendpoints.crd.projectcalico.org <hep-name>
    
  2. Revise Calico GlobalNetworkPolicies (GNP) para ver la lista de GNP.

    kubectl get globalnetworkpolicies.crd.projectcalico.org
    
  3. Inspeccione políticas específicas para reglas DNS restrictivas. Concéntrese en las reglas de egress que afectan al puerto 53 o se aplican a etiquetas/selectores de nodos.

    kubectl get globalnetworkpolicies.crd.projectcalico.org <policy-name> -o yaml
    
  4. Comprueba el acceso al DNS desde un pod de depuración; ejecuta un pod de depuración temporal en el que utilices el nombre de los nodos de trabajo afectados para nodeName. Si el DNS falla aquí, puede deberse a bloqueos a nivel de infraestructura.

    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. Ejecuta los siguientes comandos dentro del pod de depuración.

    nslookup ibm.com
    
    dig ibm.com
    
  6. Comprueba las ACL (listas de control de acceso).

    • En la consola, vaya a VPC > Listas de control de acceso y asegúrese de que las reglas de salida permiten tanto el puerto 53 de UDP como el puerto 53 de TCP.

    • En la CLI inspeccione las ACL ejecutando los siguientes comandos.

        ibmcloud is network-acls
        ```
        ```sh {: pre}
        ibmcloud is network-acl <acl-id>
        ```
    
  7. Inspeccione las reglas de los grupos de seguridad para encontrar los grupos de seguridad asociados a sus nodos trabajadores y, a continuación, ejecútelos para comprobar la configuración de los grupos de seguridad. Asegúrese de que no hay reglas de salida que bloqueen el tráfico DNS ( UDP / TCP puerto 53).

    ibmcloud is security-group-rules <security-group-id>
    
  8. Revise su infraestructura (dispositivos de red, ACL, etc.) y permita el tráfico saliente de los puertos 53 de UDP y TCP

  9. Si el DNS sigue siendo inalcanzable después de revisar estos elementos, póngase en contacto con el servicio de asistencia. Abra un caso de soporte. En los detalles del caso, asegúrese de incluir todos los archivos de registro, mensajes de error o salidas de comando relevantes.