如何延长Kubernetes Nginx Ingress基础认证的会话时长?
结论:Nginx Ingress基础HTTP认证无法实现跨浏览器重启的持久会话
你的判断是对的——Nginx Ingress官方的基础HTTP认证(auth-type: basic)机制本身,没办法把登录会话延长到浏览器重启之后,哪怕配置了粘性会话相关注解也没用,原因如下:
- 基础HTTP认证的本质是浏览器将用户输入的账号密码编码成
Authorization请求头,这个凭证仅存在当前浏览器会话的内存中,浏览器默认不会将其持久化保存(比如写入Cookie)。一旦浏览器重启,这个请求头就会消失,必须重新输入账号密码。 - 你配置的
affinity: cookie等粘性会话注解,作用是让用户请求固定到同一个后端Pod,和认证会话完全无关。你看到的带6个月过期时间的Cookie,是用来维持后端服务会话的,并非认证凭证,所以浏览器重启后,即便这个Cookie还在,认证的Authorization头已经不存在,还是需要重新登录。
替代方案
如果需要实现持久化的登录会话,需要放弃基础HTTP认证,改用以下方式:
- 应用层Cookie认证:在后端应用内实现登录逻辑,生成带过期时间的加密认证Cookie,Ingress仅负责转发请求即可。
- 对接外部认证服务:用Nginx Ingress的
nginx.ingress.kubernetes.io/auth-url注解对接OIDC、Keycloak等认证服务,这类服务会生成持久化的认证Cookie,支持自定义过期时间。 - 自定义Nginx规则(复杂度较高):通过
nginx.ingress.kubernetes.io/configuration-snippet添加自定义配置,当用户通过基础认证后,设置一个自定义认证Cookie,后续请求优先检查这个Cookie来跳过认证。但这种方式需要自行处理Cookie的签名、过期验证等安全逻辑,维护成本较高。
你的Ingress配置
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: kubernetes.io/ingress.class: nginx kubernetes.io/tls-acme: "true" meta.helm.sh/release-name: doc-mycompany-com meta.helm.sh/release-namespace: doc-mycompany-com nginx.ingress.kubernetes.io/affinity: cookie nginx.ingress.kubernetes.io/affinity-mode: persistent nginx.ingress.kubernetes.io/auth-realm: Authentication Required! nginx.ingress.kubernetes.io/auth-secret: basic-auth nginx.ingress.kubernetes.io/auth-type: basic nginx.ingress.kubernetes.io/proxy-body-size: 20M nginx.ingress.kubernetes.io/session-cookie-expires: "15552000" nginx.ingress.kubernetes.io/session-cookie-max-age: "15552000" nginx.ingress.kubernetes.io/session-cookie-name: doc-mycompany-com-session creationTimestamp: "2023-04-14T12:26:28Z" generation: 1 labels: app.kubernetes.io/managed-by: Helm name: doc-mycompany-com namespace: doc-mycompany-com resourceVersion: "280693994" uid: 39889b30-96d1-4983-9ed2-af69cdc1d272 spec: rules: - host: doc.mycompany.com http: paths: - backend: service: name: doc-mycompany-com port: name: http path: / pathType: Prefix status: loadBalancer: ingress: - ip: 10.235.74.63
内容的提问来源于stack exchange,提问作者Volodymyr Nabok
相关产品推荐
相关产品推荐

