EKS集群Ingress未显示已创建ALB地址,External-DNS同步Route53异常求助
问题描述
在EKS集群里,我用AWS Load Balancer Controller自动给Ingress资源创建ALB(注解配置没问题,ALB确实创建成功了),但Ingress的ADDRESS字段是空的:
NAMESPACE NAME CLASS HOSTS ADDRESS PORTS AGE test-ns test-ingress <none> *.example.com 8080 1d
同时External-DNS没法同步Route53记录,日志一直刷这些内容:
level=debug msg="No endpoints could be generated from service kube-system/core-dns" level=debug msg="No endpoints could be generated from ingress test-ns/test-ingress" level=debug msg="Refreshing zones list cache" level=debug msg="Considering zone: /hostedzone/123123123123 (domain: example.com)" level=info msg="Applying provider record filter for domains: [example.com]" level=debug msg="Skipping endpoint *.example.com 300 IN CNAME internal-alb-testing.us-west-1.elb.amazonaws.com [] because owner id does not match, found: \"\", required: \"externaldns\"" level=debug msg="Refreshing zones list cache" level=debug msg="Considering zone: /hostedzone/123123123123 (domain: example.com)" level=info msg="All records are already up to date" level=debug msg="Refreshing zones list cache" level=debug msg="Considering zone: /hostedzone/123123123123 (domain: example.com)" level=info msg="All records are already up to date"
解决步骤
1. 先搞定Ingress的ADDRESS为空问题
ADDRESS字段没值,说明AWS Load Balancer Controller没把ALB地址同步到Ingress上,按下面排查:
- 检查Ingress配置:如果是旧版本控制器,确认有
kubernetes.io/ingress.class: alb注解;新版本要确保spec.ingressClassName设为alb,且集群里存在名为alb的IngressClass资源 - 查看AWS Load Balancer Controller的Pod日志,找有没有同步Ingress的报错,比如权限不够、ALB配置冲突这类问题
- 确认ALB状态是
active,关联的目标组里后端Pod已经正常注册 - 如果用的是私有ALB,要确保VPC的DNS解析已经开启,而且控制器有权限获取ALB的DNS名称
2. 处理External-DNS的owner id不匹配问题
日志里说因为owner id不匹配跳过了已有记录,而且没法生成Ingress端点,这么解决:
- 确认External-DNS启动时加了
--txt-owner-id=externaldns参数(和日志里要求的externaldns一致),这个参数是用来标记External-DNS管理的记录,防止误改其他记录 - 如果Route53里已经有
*.example.com的CNAME记录,而且没被External-DNS标记(要么没对应的TXT记录,要么TXT记录里的owner id不对),可以手动删掉这条记录,让External-DNS重新创建;或者修改现有记录的TXT记录,加上owner-id=externaldns - 检查External-DNS的权限,确保它能读取Ingress的
status.loadBalancer.ingress字段(就是ADDRESS对应的后台数据),只有ADDRESS字段有值了,External-DNS才能生成正确的端点
3. 验证结果
- 修复Ingress的ADDRESS字段后等几分钟,看External-DNS日志有没有生成Ingress的端点
- 去Route53里检查,确认
*.example.com的CNAME记录自动创建了,还有对应的TXT记录(标记owner id) - 测试域名解析,确认
*.example.com能指向ALB的DNS地址
内容的提问来源于stack exchange,提问作者mmiara
相关产品推荐
相关产品推荐

