nginxinc Ingress Controller 配置HTTP基础认证失效,求可运行示例
Nginx Ingress Controller HTTP基础认证可运行配置方案
原配置失效的核心原因
- 原配置的认证规则仅绑定到
/auth子路径,实际你的业务流量全部走/根路径,请求根本不会走到写了认证规则的location块,自然完全不会触发校验逻辑 - 手动填写的
auth_basic_user_file路径是你本地宿主机的目录,Nginx Ingress控制器运行在独立的Pod容器内,和你的宿主机文件系统是完全隔离的,根本访问不到/home/madhu/auth这个文件,就算触发了认证逻辑也加载不到账号信息 - 没有把认证文件以K8s原生资源的形式接入Ingress体系,硬写本地路径的配置在容器环境下是完全失效的
正确落地步骤
- 用htpasswd工具生成本地的加密认证账号文件,存为
.htpasswd格式,文件内存储加密后的账号密码对,不要使用明文 - 在和Ingress相同的命名空间下,把这个认证文件创建为K8s Secret,执行命令:
kubectl create secret generic basic-auth --from-file=auth=.htpasswd - 修改Ingress配置,使用Nginx Ingress Controller原生支持的认证注解完成配置,不需要手动硬编码认证文件的挂载路径
可正常运行的完整Ingress配置
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: cafe-ingress annotations: kubernetes.io/ingress.class: nginx # 关联存储认证账号的Secret,由控制器自动完成文件挂载与路径配置 nginx.org/http-basic-auth-secret: "basic-auth" # 在服务器块层级配置认证提示文案,对当前域名下所有请求生效 nginx.org/server-snippets: | auth_basic "Administrator’s Area"; spec: ingressClassName: nginx rules: - host: web.mydomain.com http: paths: - path: / pathType: Prefix backend: service: name: web port: number: 80
配置生效验证
- 浏览器访问
web.mydomain.com时,会直接弹出基础认证的账号密码输入框,输入提前在htpasswd里配置的账号密码,即可正常访问后端的web服务 - 输入错误的账号密码时,会直接返回401未授权的响应,符合基础认证的预期行为
内容的提问来源于stack exchange,提问作者mayankchutani
相关产品推荐
相关产品推荐

