目标
我已经使用Airflow的Stable Helm图表在AWS的Elastic Kubernetes服务上部署了Apache Airflow。我的目标是创建一个Ingress,允许其他人通过浏览器访问airflow Web服务器UI。值得一提的是,我正在使用AWS Fargate在EKS上进行部署。我使用Kubernetes的经验有点有限,而且我自己以前也没有设置过Ingress。
我试图做的事情
我目前可以通过端口转发(如kubectl port-forward airflow-web-pod 8080:8080
)连接到气流网络服务器吊舱。我已经尝试过通过Helm图表设置Ingress(此处记录)。之后:
运行kubectl get ingress -n dp-airflow
我得到:
NAME CLASS HOSTS ADDRESS PORTS AGE
airflow-flower <none> foo.bar.com 80 3m46s
airflow-web <none> foo.bar.com 80 3m46s
然后运行kubectl describe ingress airflow-web -n dp-airflow
,我得到:
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
我不确定我需要在浏览器中放入什么,所以我尝试使用http://foo.bar.com/airflow
和集群端点/ip,但没有成功。
以下是气流网络服务的外观:运行kubectl get services -n dp-airflow
,我得到:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
airflow-web ClusterIP <redacted_ip> <none> 8080/TCP 28m
我尝试过的其他事情
我尝试过创建一个没有Helm图表的Ingress(我使用的是Terraform),比如:
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"
}
}
}
}
}
然而,我仍然无法连接到web UI。设置Ingress需要采取哪些步骤?我需要在浏览器中使用哪个地址才能连接到web UI?
如果需要,我很乐意提供更多细节。
听起来您已经创建了Ingress资源。这是一个很好的步骤。但是,为了让这些Ingress资源发挥任何作用,您还需要一个Ingress控制器,该控制器可以将您的Ingress实现为实际的负载均衡器。
在AWS环境中,您应该查看AWS负载均衡器控制器,该控制器创建根据Ingress资源配置的AWS应用程序负载均衡器。
连接到ClusterIP服务的入口?
首先,默认负载平衡器是经典负载平衡器,但您可能希望使用较新的应用程序负载平衡器来用于Ingress资源,因此在Ingress资源上添加以下注释:
annotations:
kubernetes.io/ingress.class: alb
默认情况下,您的服务类型应该是NodePort
,但根据您的请求,也可以使用ClusterIP
服务,当您在Ingress资源上添加此注释(用于流量模式)时:
alb.ingress.kubernetes.io/target-type: ip
有关此方面的更多信息,请参阅ALB Ingress文档。