Terraform资源kubernetes_ingress_v1是否有use-annotation等效配置?
kubernetes_ingress_v1 迁移时SSL重定向配置方案
复现原有use-annotation行为的方法
不需要找特殊字段替代use-annotation,按照以下规则配置即可:
- 对于注解中通过
alb.ingress.kubernetes.io/actions.ssl-redirect定义的自定义重定向动作,在v1版本Ingress的path配置中,service.port.number字段填写任意合法TCP端口值即可,生产环境通常填443。 - 原理:AWS Load Balancer Controller 识别到后端service名称与注解中
actions.后缀的自定义动作名(此处为ssl-redirect)完全匹配时,会直接读取注解内的动作配置生成ALB转发规则,完全不会使用你填写的port字段值。这个port字段仅为了满足Kubernetes Ingress v1 API的schema强制校验要求,没有实际生效逻辑。
对应配置片段参考:
path { path = "/*" backend { service { name = "ssl-redirect" port { number = 443 # 任意合法端口均可,控制器不会实际引用该值 } } } }
注意:请确保集群中不存在同名的真实Service资源,避免控制器错误匹配真实后端。
更简便的SSL重定向实现方式
不需要手动维护自定义动作注解和重定向路径规则,直接使用AWS Load Balancer Controller原生提供的全局SSL重定向注解即可:
- 在原有annotations块中新增
"alb.ingress.kubernetes.io/ssl-redirect" = "443"配置 - 移除原有
alb.ingress.kubernetes.io/actions.ssl-redirect注解 - 移除所有path块中指向
ssl-redirect服务的重定向配置
控制器会自动为80端口的HTTP监听器生成全局301重定向规则,将所有HTTP请求转发到443端口的HTTPS服务,不会漏配任何路径。
精简后的annotations参考:
annotations = { "kubernetes.io/ingress.class" = "alb" "alb.ingress.kubernetes.io/scheme" = "internet-facing" "alb.ingress.kubernetes.io/certificate-arn" = var.create_acm_certificate ? aws_acm_certificate.eks_domain_cert[0].id : var.aws_acm_certificate_arn "alb.ingress.kubernetes.io/listen-ports" = "[{\"HTTP\": 80}, {\"HTTPS\":443}]" "alb.ingress.kubernetes.io/ssl-redirect" = "443" # 新增这行即可实现全局跳转 "alb.ingress.kubernetes.io/ssl-policy" = "ELBSecurityPolicy-TLS-1-2-Ext-2018-06" "alb.ingress.kubernetes.io/healthcheck-path" = "/healthz" }
这种方式的优势:
- 减少大量重复的重定向路径配置,代码更简洁
- 完全规避v1 Ingress API对port字段的格式校验问题
- 不会出现漏配路径导致部分HTTP请求不跳转的问题
- 重定向逻辑由控制器官方维护,兼容性比自定义动作更稳定
内容的提问来源于stack exchange,提问作者D-Wire
相关产品推荐
相关产品推荐

