Basi c аутентификация через nginx входной контроллер - PullRequest
0 голосов
/ 20 января 2020

Я использую nginx входной контроллер (https://kubernetes.github.io/ingress-nginx/deploy/) на AWS. Бэкэнд-сервис (кибана из ECK: https://www.elastic.co/guide/en/cloud-on-k8s/current/k8s-operator-config.html) использует механику аутентификации HTTP basi c.

Есть ли способ настроить nginx, чтобы он добавлял заголовок Авторизация: Basi c к каждому запросу, направленному на мой сервис, чтобы пользователям не приходилось вводить пароль?

Это решение не сработало для меня:

nginx.ingress.kubernetes.io/configuration-snippet: |
      more_set_headers "Authorization: Basic encoded_credentals";

, так как мне все еще предлагается ввести пароль.

Ответы [ 2 ]

1 голос
/ 20 января 2020

Вот правило входа, использующее секрет, который содержит файл, созданный с помощью htpasswd. Важно, чтобы сгенерированный файл имел имя auth (на самом деле - секрет имеет ключ data.auth), в противном случае входной контроллер возвращает 503.

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: ingress-with-auth
  annotations:
    # type of authentication
    nginx.ingress.kubernetes.io/auth-type: basic
    # name of the secret that contains the user/password definitions
    nginx.ingress.kubernetes.io/auth-secret: basic-auth
    # message to display with an appropriate context why the authentication is required
    nginx.ingress.kubernetes.io/auth-realm: 'Authentication Required - foo'
spec:
  rules:
  - host: foo.bar.com
    http:
      paths:
      - path: /
        backend:
          serviceName: http-svc
          servicePort: 80

Создание секрета

$ htpasswd -c auth foo
New password: <bar>
New password:
Re-type new password:
Adding password for user foo
$ kubectl create secret generic basic-auth --from-file=auth
secret "basic-auth" created
$ kubectl get secret basic-auth -o yaml
apiVersion: v1
data:
  auth: Zm9vOiRhcHIxJE9GRzNYeWJwJGNrTDBGSERBa29YWUlsSDkuY3lzVDAK
kind: Secret
metadata:
  name: basic-auth
  namespace: default
type: Opaque

Получите доступ к нему, используя curl, и вы получите 200 Ok.

$ curl -v http://10.2.29.4/ -H 'Host: foo.bar.com' -u 'foo:bar'

Проверьте этот пример здесь

0 голосов
/ 29 января 2020

Решение:

nginx.ingress.kubernetes.io/configuration-snippet: |
    more_set_input_headers "Authorization: Basic <based64 user:pass>";
...