简介:

nginx-ingress是基于nginx实现,支持Nginx Auth认证,所以也可以通过Nginx Ingress Basic Authentication进行简单的认证,本文基于最简单的basic方式实现,有特殊需求的可以通过request方式实现。

nginx auth_basic 方式

1、生成web页面的账户和密码

# htpasswd -c auth admin
New password:
Re-type new password:
Adding password for user admin
# cat auth
admin:$apr1$NaFM0uGc$1sJdLPGriP8wgwcYkSnvG/

2、创建secret文件

# kubectl create secret generic ingress-auth --from-file=auth -n ingress-nginx 
secret/ingress-auth created

3、ingress引用

  • 需要在annotations下添加三条配置
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-web
namespace: ingress-nginx
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/enable-access-log: "true"
nginx.ingress.kubernetes.io/configuration-snippet: |
access_log /var/log/nginx/test.web.com.log upstreaminfo;
# 认证类型
nginx.ingress.kubernetes.io/auth-type: basic
# 包含账号密码的secret
nginx.ingress.kubernetes.io/auth-secret: ingress-auth
# 认证提示信息
nginx.ingress.kubernetes.io/auth-realm: 'Authentication Required - admin'

4、验证

开启Nginx Ingress认证_nginx-ingres认证

遇到的问题

1、503错误

  • 查看ingress-nginx的日志

开启Nginx Ingress认证_nginx-ingres认证_02

  • 原因:由于创建的服务在default默认空间下,而创建的secret在ingress-nginx名称空间下,所以造成找不到引起了503错误
  • 所以需要将secret认证文件和pod放在同一个名称空间下