您的位置 首页 linux 运维

nginx-ingress-BasicAuth 代理

访问控制列表: 基于IP ,基于用户

方案一:给 Ingress 配置 BasicAuth(账号密码认证)
方案二:配置 Ingress 作为代理(传递认证头)

方案一:给 Ingress 配置 BasicAuth(账号密码认证)

这个方案会强制访问者在浏览器弹窗中输入用户名和密码。

1. 生成密码文件

你需要先安装 httpd-tools(包含 htpasswd 命令)。
# 安装工具 (CentOS/RHEL)
yum -y install httpd-tools

# 生成密码文件 (-c 表示创建新文件,foo 是用户名)
htpasswd -c auth foo
# 系统会提示输入密码,例如: password123

2. 创建 Kubernetes Secret

将刚才生成的 auth 文件创建为 Secret。
kubectl create secret generic basic-auth --from-file=auth

3. 修改 Ingress 配置

在你之前的 ingress-httpproxy-www1 配置中添加注解(Annotations)和 TLS 配置。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-httpproxy-www1
  annotations:
    # --- 添加以下三行 BasicAuth 配置 ---
    nginx.ingress.kubernetes.io/auth-type: basic
    nginx.ingress.kubernetes.io/auth-secret: basic-auth
    nginx.ingress.kubernetes.io/auth-realm: "Authentication Required" # 提示语
    
    # --- 保留你原有的配置 ---
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
spec:
  ingressClassName: nginx
  rules:
  - host: wwws.bmds.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: svc-ingress-httpproxy-www1
            port:
              number: 80
  tls:
    - hosts:
      - wwws.bmds.com
      secretName: ingress-nginx-tls

4. 应用配置

kubectl apply -f your-ingress-file.yaml

效果:
访问 https://wwws.bmds.com 时,浏览器会弹出登录框,输入 foo / password123 才能访问你的 Spring Boot 应用。

方案二:配置 Ingress 作为代理(传递认证头)

如果你的后端应用(如 Spring Boot)自己处理认证,你需要确保 Ingress 不要丢弃客户端发送的认证头(Header)。
默认情况下,Nginx Ingress 会传递标准的 HTTP 头。但如果你遇到认证头(如 Authorization)丢失,可以尝试添加以下注解:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-httpproxy-www1
  annotations:
    # 允许传递 Authorization 头
    nginx.ingress.kubernetes.io/configuration-snippet: |
      proxy_set_header Authorization $http_authorization;

总结

  • BasicAuth:由 Nginx Ingress 层直接拦截请求,验证账号密码。配置简单,适合保护管理后台。
  • 代理模式:Nginx 只负责转发,认证逻辑由后端应用(Pod)处理。灵活性高,适合复杂的用户系统。

欢迎来撩 : 汇总all

白眉大叔

关于白眉大叔linux云计算: 白眉大叔

热门文章