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

alt*_*-f4 1 amazon-web-services amazon-elb kubernetes kubernetes-ingress amazon-eks

客观的

我已经使用 Airflow 的 Stable Helm 图表在 AWS 的Elastic Kubernetes 服务上部署了Apache Airflow。我的目标是创建一个 Ingress 以允许其他人通过他们的浏览器访问气流网络服务器 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
Run Code Online (Sandbox Code Playgroud)

然后运行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
Run Code Online (Sandbox Code Playgroud)

我不确定我需要在浏览器中放入什么,所以我尝试使用http://foo.bar.com/airflow以及集群端点/ip 没有成功。

这就是airflow webservice 服务的样子: Running kubectl get services -n dp-airflow,我得到:

NAME          TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
airflow-web   ClusterIP   <redacted_ip>   <none>        8080/TCP   28m
Run Code Online (Sandbox Code Playgroud)

我尝试过的其他事情

我尝试在没有 Helm 图表的情况下创建 Ingress(我使用的是 Terraform),例如:

NAME             CLASS    HOSTS                      ADDRESS   PORTS   AGE
airflow-flower   <none>   foo.bar.com             80      3m46s
airflow-web      <none>   foo.bar.com             80      3m46s
Run Code Online (Sandbox Code Playgroud)

但是我仍然无法连接到 Web UI。设置 Ingress 需要采取哪些步骤?我需要在浏览器中使用哪个地址才能连接到 Web UI?

如果需要,我很乐意提供更多详细信息。

Jon*_*nas 5

听起来您已经创建了Ingress资源。这是一个很好的步骤。但是为了让这些 Ingress 资源产生任何效果,您还需要一个Ingress Controller实现您的 Ingress 到实际的负载均衡器

在 AWS 环境中,您应该查看AWS 负载均衡器控制器,该控制器创建了一个根据您的入口资源配置的AWS 应用程序负载均衡器

连接到 ClusterIP 服务的入口?

首先,默认负载均衡器是经典负载均衡器,但您可能希望使用较新的应用程序负载均衡器来用于您的 Ingress 资源,因此在您的 Ingress 资源上添加此注释:

annotations:
    kubernetes.io/ingress.class: alb
Run Code Online (Sandbox Code Playgroud)

默认情况下,您的服务应该是 type NodePort,但根据您的要求,也可以使用ClusterIP服务,当您在 Ingress 资源上也添加此注释(用于流量模式)时:

alb.ingress.kubernetes.io/target-type: ip
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅ALB Ingress 文档