es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Las pruebas de serenidad de Kubernetes no funcionan con Ingress en localhost.

Actualmente estoy trabajando en pruebas de extremo a extremo en local.

Configuración:

  • Mi máquina Windows
  • Cluster de Kubernetes en funcionamiento
  • Servicios implementados
  • Entradas de etc/host
  • Pruebas de Selenium con Cucumber

Por claridad y porque usaremos diferentes etapas, queremos cambiar los finales de la URL de redireccionamiento de “testing” a “localhost” en todos nuestros proyectos de extremo a extremo.

Entrada de archivo de hosts:

Actual:

[MI DIRECCIÓN IP] e2e.myproject.testing

Debería ser:

[MI DIRECCIÓN IP] e2e.myproject.localhost


apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  labels:
    app: my-webclient
  name: my-webclient
  namespace: somenamespace
  annotations:
    nginx.ingress.kubernetes.io/proxy-body-size: "100m"
    nginx.ingress.kubernetes.io/app-root: "/app/"
spec:
  rules:
  - host: e2e.myproject.localhost
    http:
      paths:
      - backend:
          serviceName: my-myproject
          servicePort: 8080
        pathType: ImplementationSpecific

status:
  loadBalancer:
    ingress:
    - hostname: localhost

Dato curioso:
Si ejecuto mis pruebas con el sufijo “testing”, “foobar”, “deadbeef” o cualquier cosa en la URL y los archivos de implementación, todo funciona bien. Si lo reemplazo con “localhost”, no funciona y recibo un error de conexión.

Teoría:
Si se usa cualquier cosa, además de “localhost” para las URL de redireccionamiento en el archivo de hosts, el “ingress” apunta a la dirección IP de mi máquina. Pero si uso “localhost”, el “ingress” o las implementaciones apuntan a la dirección IP de la máquina virtual en la que se están ejecutando.

¿Alguien puede verificar eso y saber una solución? También podría resolver algunos problemas relacionados que tenemos 🙂

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Solución para cambiar el final de las URL de redirección en proyectos E2E

    Como experto en TI con experiencia en Selenium, Kubernetes, localhost y Serenity-BDD, aquí hay una solución para cambiar el final de las URL de redirección en proyectos E2E.

    Configuración:

    La configuración implica trabajar con una máquina Windows, un clúster de Kubernetes implementado, servicios implementados, entradas hosts, y pruebas Selenium con Cucumber.

    Cambiar el final de las URL de redirección:

    Por motivos de claridad y porque usaremos diferentes etapas, queremos cambiar el final de las URL de redireccionamiento de “testing” a “localhost” en todos nuestros proyectos E2E. Para hacer esto, cambiaremos la entrada del archivo etc/hosts.

    La entrada actual del archivo etc/hosts es:

    [Mi dirección IP] e2e.myproject.testing
    

    Para cambiarla, reemplazaremos “testing” con “localhost”, de esta manera:

    [Mi dirección IP] e2e.myproject.localhost
    

    Después de cambiar la entrada del archivo hosts, debemos actualizar el archivo YAML del Ingress, así:

    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress
    metadata:
      labels:
        app: my-webclient
      name: my-webclient
      namespace: somenamespace
      annotations:
        nginx.ingress.kubernetes.io/proxy-body-size: "100m"
        nginx.ingress.kubernetes.io/app-root: "/app/"
    spec:
      rules:
      - host: e2e.myproject.localhost
        http:
          paths:
          - backend:
              serviceName: my-myproject
              servicePort: 8080
            pathType: ImplementationSpecific
    
    status:
      loadBalancer:
        ingress:
        - hostname: localhost
    

    Es interesante destacar que si ejecutamos pruebas con un sufijo distinto a “localhost”, como “foobar” o “deadbeef”, todo funciona correctamente. Sin embargo, usar “localhost” hace que los despliegues o el Ingress apunten a la dirección IP de la máquina virtual en la que se están ejecutando, lo que resulta en un error de conexión.

    Solución:

    Para resolver este problema, debemos asegurarnos de usar un nombre de dominio completo (FQDN) en el archivo YAML del Ingress. Esto se debe a que Kubernetes no reconocerá “localhost” como un FQDN válido. Por lo tanto, debemos usar un FQDN que resuelva a la dirección IP de nuestra máquina. Por ejemplo:

    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress
    metadata:
      labels:
        app: my-webclient
      name: my-webclient
      namespace: somenamespace
      annotations:
        nginx.ingress.kubernetes.io/proxy-body-size: "100m"
        nginx.ingress.kubernetes.io/app-root: "/app/"
    spec:
      rules:
      - host: e2e.myproject.example.com
        http:
          paths:
          - backend:
              serviceName: my-myproject
              servicePort: 8080
            pathType: ImplementationSpecific
    
    status:
      loadBalancer:
        ingress:
        - hostname: localhost
    

    Aquí, usamos “e2e.myproject.example.com” como FQDN, que apunta a la dirección IP de nuestra máquina. Podemos actualizar nuestro archivo etc/hosts para reflejar este cambio.

    En conclusión, usar un FQDN resuelve el problema que surge cuando cambiamos el final de las URL de redireccionamiento de “testing” a “localhost” en todos nuestros proyectos E2E.

Comments are closed.