使用ALB Ingress注解配置流量重定向失效问题排查
解决AWS ALB Ingress重定向app.dev.net/mobile.dev.net到app.ops.test.com的配置问题
正确的Ingress配置清单
直接使用以下完整的Ingress资源配置,确保所有参数符合AWS ALB Ingress Controller的要求:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: redirect-ingress annotations: kubernetes.io/ingress.class: alb alb.ingress.kubernetes.io/scheme: internet-facing # 定义重定向动作 alb.ingress.kubernetes.io/actions.redirect-to-app: | { "Type": "redirect", "RedirectConfig": { "Protocol": "HTTPS", "Port": "443", "Host": "app.ops.test.com", "Path": "/$1", "Query": "$query", "StatusCode": "HTTP_301" } } # 启用访问日志(可选但建议开启) alb.ingress.kubernetes.io/access-log-enabled: "true" alb.ingress.kubernetes.io/access-log-s3-bucket: "your-access-log-bucket" alb.ingress.kubernetes.io/access-log-s3-prefix: "alb-logs" spec: rules: - host: app.dev.net http: paths: - path: /(.*) pathType: ImplementationSpecific backend: service: name: redirect-to-app port: name: use-annotation - host: mobile.dev.net http: paths: - path: /(.*) pathType: ImplementationSpecific backend: service: name: redirect-to-app port: name: use-annotation
关键配置说明
- 重定向动作注解:
alb.ingress.kubernetes.io/actions.redirect-to-app需严格遵循JSON格式:Host必须明确设置为目标域名app.ops.test.comPath使用/$1可保留原请求的路径部分(比如原请求app.dev.net/user/123会重定向到app.ops.test.com/user/123)StatusCode可选HTTP_301(永久重定向)或HTTP_302(临时重定向),按需选择
- Ingress规则:每个需重定向的域名单独配置一条
host规则,路径用/(.*)匹配所有请求路径;后端服务名称必须和注解定义的动作名称一致(此处为redirect-to-app),端口名称固定为use-annotation,表示使用注解中定义的动作而非实际K8s Service - 访问日志配置:确保指定的S3桶存在且ALB拥有写入权限,便于排查流量是否到达ALB
验证与排查步骤
检查Ingress资源状态
执行命令确认Ingress同步状态:kubectl describe ingress redirect-ingress需确保Events中无错误,且ALB的ARN已正确关联
检查ALB规则
登录AWS控制台找到对应ALB,查看监听器规则,确认每个源域名的请求都配置了对应重定向动作,且参数与Ingress注解一致排查流量链路
- DNS解析验证:用
nslookup app.dev.net和nslookup mobile.dev.net确认解析到目标ALB域名 - 安全组检查:确保ALB安全组允许80/443端口的入站流量,客户端IP在允许范围内
- 日志校验:若已开启访问日志,检查S3桶内的日志确认请求是否被ALB接收;若无日志记录,重点排查DNS和安全组
- DNS解析验证:用
常见错误点
- 注解JSON格式错误:比如引号不匹配、逗号遗漏,会导致ALB无法生成正确规则
- 后端服务名称与动作名称不一致:必须严格对应,否则Ingress Controller无法关联重定向动作
- 路径匹配规则错误:若使用
pathType: Exact仅会重定向根路径,需用ImplementationSpecific配合/(.*)匹配所有路径
内容的提问来源于stack exchange,提问作者Robert
相关产品推荐
相关产品推荐

