如何使用Helm在EKS上安装Traefik并使用ALB替代ELB
核心配置问题
- 注解配置对象错误:你使用的
alb.ingress.kubernetes.io/*系列注解是给Kubernetes原生Ingress资源识别的,你将它写到了Traefik自定义的IngressRoute CRD资源上,aws-load-balancer-controller不会识别IngressRoute资源,自然不会生成ALB。 - Traefik服务默认配置问题:Traefik官方Helm Chart默认的Service类型为LoadBalancer,AWS默认会为该类服务自动创建ELB,这就是你当前看到的ELB来源。
调整步骤
步骤1:修改values.yaml配置
你需要调整两个核心配置块:将Traefik服务改为ClusterIP类型,新增原生Ingress资源配置并加上ALB相关注解,修改后的示例如下:
# 原有ingressClass配置保留 ingressClass: enabled: true isDefaultClass: false fallbackApiVersion: "" # 修改Service配置,关闭默认LoadBalancer service: type: ClusterIP # 新增原生K8s Ingress配置,供aws-load-balancer-controller识别 ingress: enabled: true annotations: kubernetes.io/ingress.class: alb alb.ingress.kubernetes.io/scheme: internet-facing alb.ingress.kubernetes.io/target-type: ip # 多SSL证书配置,替换为你ACM中对应证书的ARN即可 alb.ingress.kubernetes.io/certificate-arn: "arn:aws:acm:eu-west-1:你的AWS账号ID:cert/证书1ID,arn:aws:acm:eu-west-1:你的AWS账号ID:cert/证书2ID" alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":443}, {"HTTP":80}]' # 可选配置:自动将HTTP请求跳转至HTTPS alb.ingress.kubernetes.io/ssl-redirect: "443" paths: - path: / pathType: Prefix # 可按需添加你需要匹配的域名 hosts: - host: "*.yourdomain.com" paths: - path: / pathType: Prefix # 原有dashboard的IngressRoute配置可保留,不影响ALB生成 ingressRoute: dashboard: enabled: true labels: {}
步骤2:重新安装Traefik
先卸载已部署的Traefik实例:
helm uninstall traefik
使用修改后的配置重新安装:
helm install traefik traefik/traefik --values values.yaml --set="additionalArguments={--log.level=DEBUG}"
步骤3:验证资源
安装完成后等待1-2分钟,执行如下命令验证,此时可以看到traefik ingress的ADDRESS字段显示ALB域名,Traefik的Service类型变为ClusterIP:
kubectl get ingress kubectl get svc traefik
内容的提问来源于stack exchange,提问作者DevOpsdonut
相关产品推荐
相关产品推荐

