在EKS中部署Airflow Helm Chart时如何复用现有AWS ELB作为Ingress?
在EKS上复用现有ELB部署Airflow Ingress的方案
明确结论:可以复用已有AWS ELB来创建Airflow的Ingress,官方Helm Chart本身没有直接配置项,但可通过Kubernetes Ingress/Service的自定义注解实现,同时能避免删除Helm Release时误删ELB,具体方案如下:
一、复用已有ELB的核心配置方式
AWS Load Balancer Controller(原ALB Ingress Controller)支持通过注解绑定已有负载均衡器,分两种ELB类型处理:
1. 复用已有Application Load Balancer(ALB)
直接在Ingress资源中通过注解指定已有ALB的ARN,步骤如下:
- 先禁用Airflow Helm Chart自带的Ingress创建:
在values.yaml中设置:ingress: enabled: false - 通过Chart的
extraObjects字段注入自定义Ingress,绑定已有ALB:extraObjects: - apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: airflow-ingress annotations: # 绑定已有ALB的ARN alb.ingress.kubernetes.io/load-balancer-arn: arn:aws:elasticloadbalancing:us-west-2:123456789012:loadbalancer/app/my-existing-alb/abcdef123456 alb.ingress.kubernetes.io/scheme: internet-facing # 按需添加其他ALB配置注解,比如安全组、监听协议等 spec: ingressClassName: alb # 确保使用AWS Load Balancer Controller的IngressClass rules: - host: airflow.your-domain.com http: paths: - path: / pathType: Prefix backend: service: name: airflow-webserver port: number: 8080
2. 复用已有Network Load Balancer(NLB)或Classic Load Balancer(CLB)
需先创建绑定已有LB的Service,再让Ingress指向该Service:
- 同样先禁用Chart自带Ingress,然后通过
extraObjects注入自定义Service和Ingress:extraObjects: # 绑定已有NLB/CLB的Service - apiVersion: v1 kind: Service metadata: name: airflow-external-lb-service annotations: service.beta.kubernetes.io/aws-load-balancer-arn: arn:aws:elasticloadbalancing:us-west-2:123456789012:loadbalancer/net/my-existing-nlb/abcdef123456 spec: type: LoadBalancer selector: app: airflow-webserver ports: - port: 80 targetPort: 8080 # 指向该Service的Ingress - apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: airflow-ingress spec: rules: - host: airflow.your-domain.com http: paths: - path: / pathType: Prefix backend: service: name: airflow-external-lb-service port: number: 80
二、避免删除Helm Release时删除ELB
- 若采用上述绑定已有ELB的方式,该ELB并非由Helm创建的资源,删除Release时Kubernetes不会触发ELB删除操作。
- 若之前是通过Chart自动创建ELB、现在需要保留它:
- 导出当前Ingress/Service的YAML配置,移除Helm管理标签(如
app.kubernetes.io/managed-by: Helm) - 重新应用该资源,使其脱离Helm管控
- 修改Helm的
values.yaml禁用自动创建Ingress/Service,改用自定义资源绑定已有ELB
- 导出当前Ingress/Service的YAML配置,移除Helm管理标签(如
注意事项
- 确保EKS集群已正确部署AWS Load Balancer Controller,且控制器拥有访问目标ELB的IAM权限
- 已有ELB的安全组、子网配置需允许集群节点与ELB通信,端口规则需与Ingress/Service配置匹配
- 复用ALB时,需确认已有ALB的监听配置与Ingress的路径规则兼容
内容的提问来源于stack exchange,提问作者Atif
相关产品推荐
相关产品推荐

