如何为kubernetes ingress basic auth设置secodary密钥

如何为kubernetes ingress basic auth设置secodary密钥,kubernetes,kubernetes-ingress,nginx-ingress,Kubernetes,Kubernetes Ingress,Nginx Ingress,我想为我在k8s中的所有服务创建一个入口,并为入口提供一个基本身份验证。但对于身份验证旋转,我希望支持用户的辅助身份验证,以便在重新生成主键时可以到达端点 目前,我可以使用单个基本身份验证设置入口。通过调整,您可以在用于生成基本身份验证密码的auth文件中输入多个用户名和密码。具体而言,如果您在没有-c标志的情况下运行htpasswd命令,例如htpasswd它将向文件添加一个条目,而不是从头创建一个新文件: $ htpasswd -c auth foo New password: <ba

我想为我在k8s中的所有服务创建一个入口,并为入口提供一个基本身份验证。但对于身份验证旋转,我希望支持用户的辅助身份验证,以便在重新生成主键时可以到达端点

目前,我可以使用单个基本身份验证设置入口。

通过调整,您可以在用于生成基本身份验证密码的
auth
文件中输入多个用户名和密码。具体而言,如果您在没有
-c
标志的情况下运行
htpasswd
命令,例如
htpasswd
它将向文件添加一个条目,而不是从头创建一个新文件:

$ htpasswd -c auth foo
New password: <bar>
Re-type new password: <bar>
Adding password for user foo

$ cat auth
foo:$apr1$isCec65Z$JNaQ0GJCpPeG8mR1gYsgM1

$ htpasswd auth user2
New password: <pass2>
Re-type new password: <pass2>
Adding password for user user2

$ cat auth
foo:$apr1$isCec65Z$JNaQ0GJCpPeG8mR1gYsgM1
user2:$apr1$.FsOzlqA$eFxym7flDnoDtymRLraA2/
然后,您可以使用以下命令更新机密:

您可以确认设置密码是否有效:

$ kubectl get secret basic-auth -ojsonpath={.data.auth} | base64 -D
foo:$apr1$isCec65Z$JNaQ0GJCpPeG8mR1gYsgM1
user2:$apr1$.FsOzlqA$eFxym7flDnoDtymRLraA2/
最后,您可以使用用户名和密码测试basic auth是否正常工作:

$ curl http://<minikube_ip>/ -H 'Host: foo.bar.com' \
  -s -w"%{http_code}" -o /dev/null
401

$ curl http://<minikube_ip>/ -H 'Host: foo.bar.com' \
  -u 'wronguser:wrongpass' \
  -s -w"%{http_code}" -o /dev/null
401

$ curl http://<minikube_ip>/ -H 'Host: foo.bar.com' \
  -u 'foo:bar' \
  -s -w"%{http_code}" -o /dev/null
200

$ curl http://<minikube_ip>/ -H 'Host: foo.bar.com' \
  -u 'user2:pass2' \
  -s -w"%{http_code}" -o /dev/null
200
$curl http://-H'Host:foo.bar.com'\
-s-w“{http_code}”-o/dev/null
401
$curl http://-H'Host:foo.bar.com'\
-u“错误用户:错误传递”\
-s-w“{http_code}”-o/dev/null
401
$curl http://-H'Host:foo.bar.com'\
-u'foo:bar'\
-s-w“{http_code}”-o/dev/null
200
$curl http://-H'Host:foo.bar.com'\
-u'user2:pass2'\
-s-w“{http_code}”-o/dev/null
200

如果在没有
-c
标志的情况下运行
htpasswd
命令,例如
htpasswd
将向文件中添加条目,而不是从头创建新文件。您可以尝试使用同一文件中的内容通过更新
机密。听起来像是
auth secret
注释应该是“包含用户名和密码的秘密”(强调复数);看。你能试试看,让我知道它是否有效吗?事实上,我刚刚试过,会把评论转换成答案。
$ kubectl get secret basic-auth -ojsonpath={.data.auth} | base64 -D
foo:$apr1$isCec65Z$JNaQ0GJCpPeG8mR1gYsgM1
user2:$apr1$.FsOzlqA$eFxym7flDnoDtymRLraA2/
$ curl http://<minikube_ip>/ -H 'Host: foo.bar.com' \
  -s -w"%{http_code}" -o /dev/null
401

$ curl http://<minikube_ip>/ -H 'Host: foo.bar.com' \
  -u 'wronguser:wrongpass' \
  -s -w"%{http_code}" -o /dev/null
401

$ curl http://<minikube_ip>/ -H 'Host: foo.bar.com' \
  -u 'foo:bar' \
  -s -w"%{http_code}" -o /dev/null
200

$ curl http://<minikube_ip>/ -H 'Host: foo.bar.com' \
  -u 'user2:pass2' \
  -s -w"%{http_code}" -o /dev/null
200