You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法通过Classic Load Balancer暴露Airflow UI问题求助

EKS中Airflow WebServer LoadBalancer访问超时问题排查

环境信息

在EKS集群通过Helm部署Airflow实例,所有Pod状态均为Running,手动创建了LoadBalancer Service暴露WebServer,但访问LB端点时出现超时。相关资源状态及Service配置如下:

Pod状态

NAME                                     READY   STATUS    RESTARTS   AGE   LABELS
pod/airflow-postgresql-0                 1/1     Running   0          59m   app.kubernetes.io/component=primary,app.kubernetes.io/instance=airflow,app.kubernetes.io/managed-by=Helm,app.kubernetes.io/name=postgresql,app.kubernetes.io/version=16.1.0,apps.kubernetes.io/pod-index=0,controller-revision-hash=airflow-postgresql-59f5bcc96d,helm.sh/chart=postgresql-13.2.24,statefulset.kubernetes.io/pod-name=airflow-postgresql-0
pod/airflow-redis-0                      1/1     Running   0          59m   apps.kubernetes.io/pod-index=0,component=redis,controller-revision-hash=airflow-redis-5fd5d95c95,release=airflow,statefulset.kubernetes.io/pod-name=airflow-redis-0,tier=airflow
pod/airflow-scheduler-7fbb64bf55-svssq   2/2     Running   0          59m   component=scheduler,pod-template-hash=7fbb64bf55,release=airflow,tier=airflow
pod/airflow-statsd-6df8564664-tq6dm      1/1     Running   0          59m   component=statsd,pod-template-hash=6df8564664,release=airflow,tier=airflow
pod/airflow-triggerer-0                  2/2     Running   0          59m   apps.kubernetes.io/pod-index=0,component=triggerer,controller-revision-hash=airflow-triggerer-d48d9dc45,release=airflow,statefulset.kubernetes.io/pod-name=airflow-triggerer-0,tier=airflow
pod/airflow-webserver-69cb8b99f-rzckw    1/1     Running   0          59m   component=webserver,pod-template-hash=69cb8b99f,release=airflow,tier=airflow
pod/airflow-worker-0                     2/2     Running   0          59m   apps.kubernetes.io/pod-index=0,component=worker,controller-revision-hash=airflow-worker-5b7cf8dc95,release=airflow,statefulset.kubernetes.io/pod-name=airflow-worker-0,tier=airflow

Service配置

apiVersion: v1
kind: Service
metadata:
  name: airflow-webserver-lb
  namespace: airflow
  labels:
    release: airflow
    component: webserver
  annotations:
    service.beta.kubernetes.io/aws-load-balancer-subnets: subnet-04fdde0fa39e75951,subnet-043ffb9be25ec2ea7,subnet-0ab770df112e5e70b
spec:
  type: LoadBalancer
  selector:
    component: webserver
    release: airflow
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080

排查步骤

1. 确认Service Endpoint关联状态

执行以下命令检查Service是否正确关联到WebServer Pod:

kubectl get endpoints airflow-webserver-lb -n airflow
  • 正常情况下,ENDPOINTS列应显示WebServer Pod的IP地址(如10.0.XX.XX:8080)
  • 如果显示<none>,需重新核对Pod标签与Service的spec.selector,同时确认资源所属namespace是否统一

2. 检查节点安全组规则

CLB通过NodePort(31185,从Service状态80:31185/TCP可知)转发流量到节点,需确保节点安全组允许:

  • 入站规则:允许CLB的安全组(或CLB的公网IP段)访问TCP 31185端口
  • 出站规则:允许节点向Pod所在IP段转发TCP 8080端口流量

3. 验证Pod内部WebServer服务可用性

进入WebServer Pod,直接访问内部端口确认服务是否正常:

# 测试本地访问
kubectl exec -it airflow-webserver-69cb8b99f-rzckw -n airflow -- curl localhost:8080
# 查看Pod日志排查启动异常
kubectl logs airflow-webserver-69cb8b99f-rzckw -n airflow
  • 如果curl命令返回Airflow UI的HTML内容,说明Pod内部服务正常;若超时或报错,需排查WebServer启动配置问题

4. 检查CLB健康检查状态

登录AWS控制台,找到对应CLB,查看目标组的健康检查状态:

  • 默认健康检查路径可能为/,而Airflow WebServer的/会跳转到登录页,可能导致健康检查失败
  • 将健康检查路径修改为Airflow专用健康端点/health,调整后等待健康检查状态变为健康

5. 确认子网NACL规则

检查指定子网的网络访问控制列表(NACL):

  • 入站规则:允许TCP 80端口(来自任意IP)
  • 出站规则:允许TCP 31185端口(到CLB IP)和TCP 8080端口(到Pod IP段)
  • NACL为双向规则,需确保入站和出站的相关端口均被允许

6. 验证kube-proxy状态

kube-proxy负责节点流量转发到Pod,确认集群中kube-proxy Pod正常运行:

kubectl get pods -n kube-system | grep kube-proxy
  • 所有kube-proxy Pod应处于Running状态,若有异常,查看日志排查:
kubectl logs <kube-proxy-pod-name> -n kube-system

内容的提问来源于stack exchange,提问作者Konstantin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 22:37:02