访问控制列表: 基于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
