AWS EKS集群Ingress登录时出现403 Forbidden问题求助
排查AWS EKS中Ingress暴露应用登录403 Forbidden问题
以下是针对你的场景的具体排查方向:
检查Ingress的请求头传递配置
Nginx Ingress默认可能会丢失或修改登录相关的请求头(如Cookie、Authorization、X-Forwarded系列头),导致后端应用无法正确处理登录请求。可以尝试给Ingress添加以下annotation,确保必要的请求头被正确传递:annotations: kubernetes.io/ingress.class: nginx nginx.ingress.kubernetes.io/configuration-snippet: | proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Host $host; proxy_set_header Cookie $http_cookie;更新Ingress后重新测试登录。
验证后端服务的登录接口可用性
跳过Ingress直接在集群内测试应用的登录接口,确认问题是否出在Ingress转发环节:- 进入应用Pod内部:
kubectl exec -it <your-app-pod-name> -n ns -- /bin/bash - 调用登录接口:
curl -X POST http://localhost/login -d "username=test&password=test"
如果返回正常,说明问题在Ingress或负载均衡器层面;如果仍返回403,检查应用在K8s环境中的依赖(如数据库、认证服务)是否正常。
- 进入应用Pod内部:
检查Nginx Ingress控制器日志
查看Ingress控制器的请求转发日志,确认登录请求的URI、方法和转发状态:kubectl logs -n kube-system <nginx-ingress-controller-pod-name> | grep "my.website.io"重点关注POST请求的日志,看是否有路径重写错误、头丢失或其他异常。
检查AWS ALB目标组配置
虽然你重建了负载均衡器,仍需确认ALB目标组的以下配置:- 目标组的健康检查是否正常,所有应用Pod都处于健康状态
- 是否开启了会话粘性,导致请求被转发到状态异常的Pod
- 目标组是否允许POST方法(默认是允许的,但需确认无自定义规则限制)
排查NetworkPolicy限制
检查应用命名空间下是否存在NetworkPolicy,限制了Ingress控制器到应用Pod的访问:kubectl get networkpolicy -n ns如果有NetworkPolicy,确认其规则允许Ingress控制器的IP段访问应用服务的80端口,且允许POST方法。
检查Ingress API版本兼容性
你当前使用的Ingress API版本是networking.k8s.io/v1beta1,该版本在K8s 1.22+已被废弃。如果你的EKS集群版本较高,建议升级Ingress配置到networking.k8s.io/v1版本,避免兼容性问题:apiVersion: networking.k8s.io/v1 kind: Ingress metadata: namespace: ns name: example-ingress annotations: kubernetes.io/ingress.class: nginx spec: rules: - host: my.website.io http: paths: - path: / pathType: Prefix backend: service: name: example-service port: number: 80
内容的提问来源于stack exchange,提问作者gundocan
相关产品推荐
相关产品推荐

