Implementé Apache Airflow en el servicio Elastic Kubernetes de AWS utilizando el gráfico Stable Helm de Airflow. Mi objetivo es crear un Ingress para permitir que otros accedan a la interfaz de usuario del servidor web Airflow a través de su navegador. Vale la pena mencionar que estoy implementando en EKS usando AWS Fargate. Mi experiencia con Kubernetes es algo limitada, y nunca antes había establecido un Ingress.
Actualmente, puedo conectarme al pod del servidor web Airflow a través del reenvío de puertos (como kubectl port-forward airflow-web-pod 8080:8080 ). He intentado configurar el ingreso a través del gráfico de Helm (documentadoaquí ). Después de lo cual:
Ejecutando kubectl get ingress -n dp-airflow obtuve:
NAME CLASS HOSTS ADDRESS PORTS AGE airflow-flower <none> foo.bar.com 80 3m46s airflow-web <none> foo.bar.com 80 3m46s Luego, al ejecutar kubectl describe ingress airflow-web -n dp-airflow obtengo:
Name: airflow-web Namespace: dp-airflow Address: Default backend: default-http-backend:80 (<error: endpoints "default-http-backend" not found>) Rules: Host Path Backends ---- ---- -------- foo.bar.com /airflow airflow-web:web (<redacted_ip>:8080) Annotations: meta.helm.sh/release-name: airflow meta.helm.sh/release-namespace: dp-airflow No estoy seguro de qué necesitaba poner en el navegador, así que intenté usar http://foo.bar.com/airflow , así como el punto de conexión/ip del clúster sin éxito.
Así es como se ve el servicio web airflow: Al ejecutar kubectl get services -n dp-airflow , obtengo:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE airflow-web ClusterIP <redacted_ip> <none> 8080/TCP 28mHe intentado crear un Ingress sin el gráfico de Helm (estoy usando Terraform), como:
resource "kubernetes_ingress" "airflow_ingress" { metadata { name = "ingress" } spec { backend { service_name = "airflow-web" service_port = 8080 } rule { http { path { backend { service_name = "airflow-web" service_port = 8080 } path = "/airflow" } } } } }Sin embargo, todavía no pude conectarme a la interfaz de usuario web. ¿Cuáles son los pasos que debo seguir para configurar un Ingress? ¿Qué dirección necesito usar en mi navegador para conectarme a la interfaz de usuario web?
Estoy feliz de proporcionar más detalles si es necesario.
Parece que ha creado recursos de Ingress . Ese es un buen paso. Pero para que esos recursos de Ingress tengan algún efecto, también necesita un controlador de Ingress que pueda realizar su Ingress en un balanceador de carga real.
En un entorno de AWS, debe consultar el controlador del balanceador de carga de AWS que crea un balanceador de carga de aplicaciones de AWS que se configura de acuerdo con sus recursos de ingreso.
¿Ingreso para conectarse a un servicio ClusterIP?
En primer lugar, el balanceador de carga predeterminado es el balanceador de carga clásico , pero probablemente desee usar el Balanceador de carga de aplicaciones más nuevo para sus recursos de Ingress, por lo que en sus recursos de Ingress agregue esta anotación:
annotations: kubernetes.io/ingress.class: alb De manera predeterminada, sus servicios deben ser del tipo NodePort , pero si lo solicita, también es posible usar los servicios de ClusterIP , cuando en su recurso de Ingress también agregue esta anotación (para el modo de tráfico):
alb.ingress.kubernetes.io/target-type: ipConsulte la documentación de ALB Ingress para obtener más información al respecto.