EKS集群Ingress无外部IP,无法访问Flask应用求助
针对你在EKS部署Flask应用时Ingress无外部IP的问题,以下是具体的排查和解决方向:
检查ALB Controller的IAM权限
即便已安装AWS Load Balancer Controller,若其绑定的IAM角色缺少核心权限,会导致无法创建ALB。需确认角色权限包含:- ALB相关操作:
elasticloadbalancing:CreateLoadBalancer、elasticloadbalancing:DescribeLoadBalancers、elasticloadbalancing:CreateTargetGroup等 - VPC资源操作:
ec2:DescribeSubnets、ec2:DescribeSecurityGroups、ec2:CreateSecurityGroup等 - 服务关联角色操作:
iam:CreateServiceLinkedRole
可通过IRSA(IAM Roles for Service Accounts)绑定的角色策略验证权限覆盖范围。
- ALB相关操作:
验证子网标签是否符合要求
ALB Controller依赖子网标签来选择创建ALB的网络环境,公网ALB要求子网添加以下标签:kubernetes.io/cluster/<你的EKS集群名称>: shared(或owned)kubernetes.io/role/elb: 1
若子网无这些标签,Controller无法识别可用子网,ALB将无法创建。
查看Ingress和Controller的日志信息
- 执行
kubectl describe ingress flask-test-ingress,查看Events字段,这里会直接显示Ingress创建失败的具体原因(如权限不足、子网匹配失败等)。 - 查看ALB Controller的Pod日志:
kubectl logs -n kube-system deployment/aws-load-balancer-controller,搜索error或failed关键字,定位ALB创建过程中的异常。
- 执行
确认Service的Endpoints状态
执行kubectl get endpoints hello-world-service,检查输出中是否包含Pod的IP地址。若Endpoints为空,说明Service与Pod的标签不匹配,ALB Controller不会创建对应的Target Group,进而无法生成ALB。调整Target Type与安全组配置
你当前使用alb.ingress.kubernetes.io/target-type: ip,该模式下ALB直接转发流量到Pod IP,此时Service可改为ClusterIP类型(NodePort配置无意义)。同时需确保Pod所在安全组允许ALB的安全组访问5000端口,否则流量无法到达应用。处理Ingress Host配置
你在Ingress中指定了host: testing.somesite.com,这不会阻碍ALB创建。待ALB生成后,将该域名的CNAME记录指向ALB的外部DNS即可实现流量转发。
内容的提问来源于stack exchange,提问作者zerobit

