如何通过ExternalDNS EKS插件创建Route53指向ALB的双栈别名?
解决ExternalDNS生成Route53双栈A记录的问题
核心问题拆解
你添加alb.ingress.kubernetes.io/ip-address-type: dualstack注解后仅生成AAA记录,根源在于两点:
- ALB的IP类型创建后无法直接修改,旧的IPv4单栈ALB不会自动切换为双栈,必须重建
- ExternalDNS默认优先选择IPv4的ALB端点,不会主动指向双栈地址
具体解决步骤
1. 重建双栈模式的ALB
先确认Ingress配置已添加双栈注解,然后删除旧Ingress触发ALB重建:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: s1-automation-dev-{{.Chart.Name}} annotations: alb.ingress.kubernetes.io/scheme: internal alb.ingress.kubernetes.io/target-type: ip kubernetes.io/ingress.class: alb alb.ingress.kubernetes.io/ip-address-type: dualstack # 明确指定双栈类型 alb.ingress.kubernetes.io/load-balancer-name: 's1-{{.Chart.Name}}' external-dns.alpha.kubernetes.io/hostname: ui-dataexplorer.mydomain.com spec: rules: - http: paths: - path: /* pathType: ImplementationSpecific backend: service: name: {{.Chart.Name}} port: number: {{ .Values.service.port }}
执行重建命令:
kubectl delete ingress s1-automation-dev-{{.Chart.Name}} kubectl apply -f your-ingress-config.yaml
重建后可以通过AWS控制台或CLI确认ALB的IP地址类型已变为dualstack。
2. 配置ExternalDNS优先使用双栈端点
修改ExternalDNS的Deployment,添加--aws-prefer-dualstack参数,让它优先选择双栈ALB地址作为A记录的别名目标:
containers: - name: external-dns image: k8s.gcr.io/external-dns/external-dns:v0.13.4 # 替换为你使用的镜像版本 args: - --source=ingress - --provider=aws - --aws-prefer-dualstack # 新增该参数,强制优先双栈端点 - --registry=txt - --txt-owner-id=your-cluster-unique-id # 替换为你的集群唯一标识
更新Deployment:
kubectl apply -f external-dns-deployment.yaml
3. 验证结果
等待ExternalDNS同步完成后,查看Route53记录:
- A记录的别名目标会变成
dualstack.xxx.elb.amazonaws.com格式的双栈ALB地址 - AAA记录会对应ALB的IPv6地址
此时你的域名即可同时通过IPv4和IPv6访问双栈ALB
内容的提问来源于stack exchange,提问作者Georgi Koemdzhiev
相关产品推荐
相关产品推荐

