k8s ingress no puede llegar al servicio

Instalé ingresos nginx en k8s cluster, sucedió un problema inigualable en la ruta de entrada.

Hay 3 backend de servicio en k8s cluster : 2 servicio nginx un servicio de 1 neo4j.

Mi ingress describe la información sigue :

[root@es3 cafe_ingress]# kubectl describe ingress cafe-ingress
Name:             cafe-ingress
Namespace:        default
Address:          192.168.59.155
Default backend:  default-http-backend:80 ()
TLS:
  cafe-secret terminates cafe.example.com
Rules:
  Host              Path  Backends
  ----              ----  --------
  cafe.example.com
                    /tea      tea-svc:80 (10.244.0.25:80,10.244.1.11:80,10.244.2.15:80)
                    /coffee   coffee-svc:80 (10.244.0.24:80,10.244.2.14:80)
                    /neo4j    neo4j-v1-service:7474 (10.244.0.29:7474)
Annotations:        Events:
  Type              Reason  Age               From                      Message
  ----              ------  ----              ----                      -------
  Normal            CREATE  22m               nginx-ingress-controller  Ingress default/cafe-ingress
  Normal            UPDATE  5s (x3 over 22m)  nginx-ingress-controller  Ingress default/cafe-ingress

Y, tengo acceso tea o coffee servicio , esta entrada en la ruta coffee o tea, funciona correctamente, puedo obtener respuesta del servicio tea o coffee en el navegador : enter image description hereenter image description here

Sin embargo, donde el acceso neo4j, no puedo conseguir respuesta : enter image description here

De pod nginx-ingress-controller Mensajes de salida de registro, con 404 código , seguir :

2020-12-17T07:28:10.861510393Z 10.244.0.0 - - [17/Dec/2020:07:28:10 +0000] "GET /neo4j HTTP/1.1" 404 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36" 480 0.004 [default-neo4j-v1-service-7474] [] 10.244.0.29:7474 0 0.005 404 17a02ccd8a65d5ff396c78e819f3c4cc

Sin embargo, cuando accedo al neo4j service , ejecutar línea de comando curl 10.244.0.29:7474 (pod url) o curl 10.0.0.100:7474( url de servicio), puedo obtener respuesta :

[root@es3 cafe_ingress]# curl 10.244.0.29:7474
{
  "bolt_routing" : "neo4j://10.244.0.29:7687",
  "transaction" : "http://10.244.0.29:7474/db/{databaseName}/tx",
  "bolt_direct" : "bolt://10.244.0.29:7687",
  "neo4j_version" : "4.2.1",
  "neo4j_edition" : "community"
}[root@es3 cafe_ingress]# curl 10.0.0.100:7474
{
  "bolt_routing" : "neo4j://10.0.0.100:7687",
  "transaction" : "http://10.0.0.100:7474/db/{databaseName}/tx",
  "bolt_direct" : "bolt://10.0.0.100:7687",
  "neo4j_version" : "4.2.1",
  "neo4j_edition" : "community"
}

¿Cómo puedo solucionar este problema? ¡Espera tu ayuda, gracias!

Pregunta hecha hace 3 años, 4 meses, 29 días - Por scriptsculptor


3 Respuestas:

  • El problema ha sido resuelto. La razón del problema es el servicio de backend neo4j recurso perdido en el camino /neo4j. Hay el problema de mi ingreso:

    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: cafe-ingress
    spec:
      rules:
      - host: cafe.example.com
        http:
          paths:
          - path: /tea
            backend:
              serviceName: tea-svc
              servicePort: 80
          - path: /coffee
            backend:
              serviceName: coffee-svc
              servicePort: 80
          - path: /neo4j
            backend:
              serviceName: neo4j-v1-service
              servicePort: 7474
    

    Y luego , reconfig it , haciendo que tiene su dominio propietario , punto / al servicio de neo4j , Funciona correctamente .

    El nuevo config de la ingresividad sigue:

    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: cafe-ingress
    spec:
    #  tls:
    #  - hosts:
    #    - cafe.example.com
    #    secretName: cafe-secret
      rules:
      - host: cafe.example.com
        http:
          paths:
          - path: /tea
            backend:
              serviceName: tea-svc
              servicePort: 80
          - path: /coffee
            backend:
              serviceName: coffee-svc
              servicePort: 80
      - host: neo4j.xxx.com
        http:
          paths:
          - path: /
            backend:
              serviceName: neo4j-v1-service
              servicePort: 7474
    
    

    Respondida el Dec 17, 2020 a las 07:44 - por htmlhelix

    Votos positivos: 0 | Votos negativos: 0

  • El problema que estás experimentando parece estar relacionado con la configuración de tu Ingress en Kubernetes para el servicio de neo4j. Parece que la solicitud no se está enroutando correctamente al backend de neo4j.

    Aquí tienes algunas sugerencias para solucionar el problema:

    • Verifica la Configuración del Path en el Ingress:
    - Asegúrate de que la ruta /neo4j está configurada correctamente en el Ingress para apuntar al servicio de neo4j. Revisa la configuración del Ingress para confirmar que la ruta y el backend están correctamente definidos.

    • Prueba Accediendo Directamente al Servicio de neo4j:
    - Si puedes acceder al servicio de neo4j directamente utilizando curl, entonces el problema probablemente esté en la configuración del Ingress. Si no, verifica la configuración y la red del servicio de neo4j.

    • Verifica los Logs del Ingress Controller:
    - Revisa los logs del pod del nginx-ingress-controller para ver si hay algún error o mensaje relevante que pueda indicar por qué las solicitudes a neo4j están fallando. El error 404 que muestras en el log indica que la ruta no se está encontrando.

    • Prueba Acceder al Servicio de neo4j por IP Directa:
    - Intenta acceder al servicio de neo4j directamente a través de su dirección IP en lugar de usar el Ingress para ver si la comunicación funciona correctamente. Esto puede ayudarte a aislar si el problema está en la configuración del Ingress o en el servicio de neo4j.

    • Revisa las Reglas de Firewall o Seguridad:
    - Asegúrate de que no haya reglas de firewall o configuraciones de seguridad que estén bloqueando las solicitudes al servicio de neo4j desde el Ingress. Verifica las reglas de red en tu entorno para asegurarte de que el tráfico pueda llegar al servicio correctamente.

    Espero que estas sugerencias te ayuden a identificar y solucionar el problema con tu Ingress y el acceso al servicio de neo4j en Kubernetes. ¡Buena suerte! Si necesitas más ayuda, no dudes en hacerme saber.

    Respondida el Dec 18, 2020 a las 07:47 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Posibles causas y soluciones:

    1. Verificación de la regla de entrada:

    Comprueba que la regla de entrada para el servicio neo4j tenga la ruta correcta (/neo4j) y el puerto de destino correcto (7474). Asegúrate de que el protocolo del servicio neo4j esté configurado como HTTP o HTTPS, según corresponda.

    2. Salud del servicio de destino:

    Verifica que el servicio neo4j esté activo y en ejecución con endpoints saludables. Intenta acceder al servicio neo4j directamente desde un pod o desde fuera del clúster para confirmar su disponibilidad.

    3. Enrutamiento de red:

    Comprueba que haya una ruta de red clara entre el controlador de ingreso nginx y el servicio neo4j. Ejecuta el comando traceroute desde el pod del controlador de ingreso nginx al servicio neo4j para verificar la ruta.

    4. Control de acceso:

    Asegúrate de que el usuario o el servicio que intenta acceder al servicio neo4j tenga los permisos necesarios (por ejemplo, el rol ingress-nginx). Comprueba los registros del controlador de ingreso nginx para detectar errores relacionados con la autorización.

    5. Comprobaciones de capa de aplicación:

    Examina los registros del servicio neo4j para detectar errores o advertencias relacionadas con las solicitudes HTTP (por ejemplo, encabezados mal formados). Intenta acceder al servicio neo4j utilizando una herramienta de depuración HTTP (por ejemplo, cURL o Postman) para obtener detalles más específicos sobre los errores.

    6. Reinstalación del controlador de ingreso nginx:

    Como último recurso, intenta reinstalar el controlador de ingreso nginx. Esto restablecerá la configuración y potencialmente resolverá cualquier problema de configuración subyacente.

    Pasos adicionales:

    Comprueba los eventos del clúster utilizando kubectl get events para detectar errores o advertencias relacionadas con el ingreso nginx o el servicio neo4j. Habilita el nivel de registro de depuración para el controlador de ingreso nginx y el servicio neo4j para obtener más información sobre el comportamiento. Examina los archivos de configuración (por ejemplo, nginx.conf y ingress.yaml) para detectar posibles errores de sintaxis o configuración.

    Respondida el Dec 18, 2020 a las 07:53 - por Gemini

    Votos positivos: 0 | Votos negativos: 0