如何为kubernetes入口basic-auth设置密钥

时间:2019-08-14 02:24:37

标签: kubernetes kubernetes-ingress nginx-ingress

我想为k8s中的所有服务提供一个入口,并为入口提供基本身份验证。但是对于身份验证轮换,我想为用户支持辅助身份验证,以便在他们重新生成主键时可以访问端点。

我目前可以按照this guide设置具有单个基本身份验证的入口。

1 个答案:

答案 0 :(得分:1)

适应the guide,您可以在用于生成基本身份验证密钥的auth文件中放置多个用户名和密码。具体来说,如果您运行的htpasswd命令中没有-c标志,例如htpasswd <filename> <username>,它将添加文件的条目,而不是从头开始创建新文件:

$ 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 create secret generic basic-auth --from-file=auth

然后您可以使用this trick更新机密:

$ kubectl create secret generic basic-auth --from-file=auth\
  --dry-run -o yaml | kubectl apply -f -
Warning: kubectl apply should be used on resource created by either kubectl create --save-config or kubectl apply
secret/basic-auth configured

您可以确认设置该秘密有效:

$ 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