如何设置 Ingress 以连接到 ClusterIP 服务?
How can I set up an Ingress to connect to a ClusterIP service?
Objective
我已经使用 Airflow 的 Stable Helm 图表部署了 Apache Airflow on AWS' Elastic Kubernetes Service。我的目标是创建一个 Ingress 以允许其他人通过他们的浏览器访问 airflow 网络服务器 UI。值得一提的是,我正在使用 AWS Fargate 在 EKS 上进行部署。我对 Kubernetes 的使用经验有些有限,之前也没有自己设置过 Ingress
我尝试过的事情
我目前能够通过端口转发(如 kubectl port-forward airflow-web-pod 8080:8080
)连接到 airflow 网络服务器 pod。我已经尝试通过 Helm 图表设置 Ingress(已记录 here)。之后:
运行 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
以及集群 endpoint/ip 但没有成功。
这是 airflow webservice 服务的样子:
运行 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"
}
}
}
}
}
但是我仍然无法连接到网络 UI。设置 Ingress 需要执行哪些步骤?我需要在浏览器中使用哪个地址才能连接到网络 UI?
如果需要,我很乐意提供更多详细信息。
听起来您已经创建了 Ingress resources. That is a good step. But for those Ingress resources to have any effect, you also need an Ingress Controller 而不是 实现 您对实际 负载均衡器 的 Ingress。
在AWS环境中,您应该查看根据您的Ingress资源配置的AWS Load Balancer Controller that creates an AWS Application Load Balancer。
Ingress to connect to a ClusterIP service?
首先,默认负载均衡器是 经典负载均衡器,但您可能希望使用较新的 Application Load Balancer对于您的 Ingress 资源,因此在您的 Ingress 资源上添加此注释:
annotations:
kubernetes.io/ingress.class: alb
默认情况下,您的服务类型应为 NodePort
,但根据您的要求,也可以使用 ClusterIP
服务,当您在 Ingress 资源上也添加此注释(对于交通模式):
alb.ingress.kubernetes.io/target-type: ip
有关此内容的更多信息,请参阅 ALB Ingress documentation。
Objective
我已经使用 Airflow 的 Stable Helm 图表部署了 Apache Airflow on AWS' Elastic Kubernetes Service。我的目标是创建一个 Ingress 以允许其他人通过他们的浏览器访问 airflow 网络服务器 UI。值得一提的是,我正在使用 AWS Fargate 在 EKS 上进行部署。我对 Kubernetes 的使用经验有些有限,之前也没有自己设置过 Ingress
我尝试过的事情
我目前能够通过端口转发(如 kubectl port-forward airflow-web-pod 8080:8080
)连接到 airflow 网络服务器 pod。我已经尝试通过 Helm 图表设置 Ingress(已记录 here)。之后:
运行 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
以及集群 endpoint/ip 但没有成功。
这是 airflow webservice 服务的样子:
运行 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"
}
}
}
}
}
但是我仍然无法连接到网络 UI。设置 Ingress 需要执行哪些步骤?我需要在浏览器中使用哪个地址才能连接到网络 UI?
如果需要,我很乐意提供更多详细信息。
听起来您已经创建了 Ingress resources. That is a good step. But for those Ingress resources to have any effect, you also need an Ingress Controller 而不是 实现 您对实际 负载均衡器 的 Ingress。
在AWS环境中,您应该查看根据您的Ingress资源配置的AWS Load Balancer Controller that creates an AWS Application Load Balancer。
Ingress to connect to a ClusterIP service?
首先,默认负载均衡器是 经典负载均衡器,但您可能希望使用较新的 Application Load Balancer对于您的 Ingress 资源,因此在您的 Ingress 资源上添加此注释:
annotations:
kubernetes.io/ingress.class: alb
默认情况下,您的服务类型应为 NodePort
,但根据您的要求,也可以使用 ClusterIP
服务,当您在 Ingress 资源上也添加此注释(对于交通模式):
alb.ingress.kubernetes.io/target-type: ip
有关此内容的更多信息,请参阅 ALB Ingress documentation。