如何设置Ingress以连接到ClusterIP服务



目标

我已经使用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文档。

最新更新