Как установить вторичный ключ для Kubernetes Ingress Basic-Auth

Я хочу иметь вход для всех моих сервисов в k8s и дать входу базовую аутентификацию. Но для ротации аутентификации я хочу поддерживать вторичную аутентификацию для пользователя, чтобы конечная точка могла быть достигнута, когда они повторно сгенерируют первичный ключ.

В настоящее время я могу следовать этому руководству, чтобы настроить вход с помощью одного базовый авт.


person Yuwei Zhou    schedule 14.08.2019    source источник
comment
Если вы запустите команду htpasswd без флага -c, например, htpasswd <filename> <username> он добавит запись в файл, а не создаст новый файл с нуля. Затем вы можете попробовать обновить Secret содержимым того же файла с помощью этого трюка. Похоже, что аннотация auth-secret должна быть секретом, который содержит имя пользователя s и пароль s (выделено множественное число); см. здесь .   -  person Amit Kumar Gupta    schedule 14.08.2019
comment
Не могли бы вы попробовать это и сообщить мне, сработает ли это?   -  person Amit Kumar Gupta    schedule 14.08.2019
comment
Собственно, только что попробовал, конвертирую комментарии в ответ.   -  person Amit Kumar Gupta    schedule 14.08.2019


Ответы (1)


Адаптировав руководство, вы можете указать несколько имен пользователей и паролей в 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

Затем вы можете обновить секрет с помощью этого трюка:

$ 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
person Amit Kumar Gupta    schedule 14.08.2019