前言
项目在使用K8S部署中遇到问题,当nginx-ingress配置了https访问之后,浏览器访问了https地址之后,无法切换回http访问,控制台显示307转跳
链接
K8S官网:https://kubernetes.io/
ingress官方文档:https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/configmap/#hsts
解决方案
检查是否关闭强制SSL转跳
在对应pod的ingress配置文件中检查是否关闭强制SSL跳转
nginx.ingress.kubernetes.io/ssl-redirect: "false"
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: #APP_NAME
namespace: #BASE_ENV-env
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/ssl-redirect: "false" //关闭强制SSL跳转
nginx.ingress.kubernetes.io/cors-allow-origin: "*"
nginx-ingress的configmap配置文件禁用HSTS
当出现307状态码时,就是HSTS保护策略拒绝了HTTP请求,这种情况单纯清理缓存无法处理,需要使用无痕窗口测试,当第一次访问http正常,访问过https再切换http出现307时就是HSTS策略问题
查看configmap,寻找ingress配置文件
kubectl get configmap -n kube-system
编辑nginx-ingress的configmap配置文件,添加hsts: "false"
kubectl edit configmap ingress-nginx -n kube-system
# 在data里面添加hsts: "false"
apiVersion: v1
data:
hsts: "false"
重启nginx-ingress服务
找到对应的nginx-ingress服务pod,进行无配置文件更新
# 查找ingress的pod
kubectl get pod -n kube-system
# 重启ingrss服务,分别将所有ingress的pod都执行一边即可
kubectl get pod {podname} -n {namespace} -o yaml | kubectl replace --force -f -
评论区