Базовая HTTP-аутентификация#
ANIC поддерживает аутентификацию HTTP-запросов. Для настройки базовой HTTP-аутентификации используются следующие две аннотации:
angie.software/basic-auth-secret: "secret"
— обязательная аннотация, указывает на секрет, содержащий список пользователей в форматеhtpasswd
. Значения хранятся в полеhtpasswd
. Тип секрета:angie.software/htpasswd
.angie.software/basic-auth-realm: "realm"
— необязательная аннотация, определяет область (realm), отображаемую в окне входа.
Установите ANIC.
Сохраните публичный IP-адрес ANIC в переменной оболочки:
$ IC_IP=<ваш_IP-адрес>
Сохраните HTTP-порт ANIC в переменную оболочки:
$ IC_HTTP_PORT=<номер_порта>
Создайте Deployment и Service приложения Cafe для компонентов
coffee
иtea
:Пример
apiVersion: apps/v1 kind: Deployment metadata: name: coffee spec: replicas: 2 selector: matchLabels: app: coffee template: metadata: labels: app: coffee spec: containers: - name: coffee image: angiesoftware/angie-hello:plain-text ports: - containerPort: 8080 --- apiVersion: v1 kind: Service metadata: name: coffee-svc spec: ports: - port: 80 targetPort: 8080 protocol: TCP name: http selector: app: coffee --- apiVersion: apps/v1 kind: Deployment metadata: name: tea spec: replicas: 3 selector: matchLabels: app: tea template: metadata: labels: app: tea spec: containers: - name: tea image: angiesoftware/angie-hello:plain-text ports: - containerPort: 8080 --- apiVersion: v1 kind: Service metadata: name: tea-svc labels: spec: ports: - port: 80 targetPort: 8080 protocol: TCP name: http selector: app: tea
Примените настройки:
$ kubectl apply -f cafe.yaml
Создайте секрет типа
angie.software/htpasswd
с именемcafe-passwd
, который будет использоваться для базовой аутентификации. Секрет должен содержать список парuser:password
в формате Base64:kind: Secret metadata: name: cafe-passwd apiVersion: v1 type: angie.software/htpasswd stringData: htpasswd: | foo:$2y$10$e4CiBWaLq9JW93jV8r9CW.RE6fbsT3szmIsUhwqYuPfVlggXiBY76 # bar
Примените настройки:
$ kubectl apply -f cafe-passwd.yaml
Создайте ресурс Ingress для приложения:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: cafe-ingress annotations: angie.software/basic-auth-secret: "cafe-passwd" angie.software/basic-auth-realm: "Cafe App" spec: ingressClassName: angie tls: - hosts: - cafe.example.com secretName: cafe-secret rules: - host: cafe.example.com http: paths: - path: /tea pathType: Prefix backend: service: name: tea-svc port: number: 80 - path: /coffee pathType: Prefix backend: service: name: coffee-svc port: number: 80
Примените настройки:
$ kubectl apply -f cafe-ingress.yaml
Примечание
Ресурс Ingress должен содержать аннотацию
angie.software/basic-auth-secret
, ссылающуюся на секретcafe-passwd
, созданный ранее.Протестируйте конфигурацию.
Если вы попытаетесь получить доступ к приложению без указания действительных имени пользователя и пароля, ANIC отклонит запрос:
$ curl --resolve cafe.example.com:$IC_HTTP_PORT:$IC_IP http://cafe.example.com:$IC_HTTP_PORT/ <html> <head><title>401 Authorization Required</title></head> <body> <center><h1>401 Authorization Required</h1></center> <hr><center>Angie/1.8.1</center> </body> </html>
Если указать правильные имя пользователя и пароль, запрос будет успешным:
$ curl --resolve cafe.example.com:$IC_HTTPS_PORT:$IC_IP https://cafe.example.com:$IC_HTTPS_PORT/coffee --insecure -u foo:bar Server address: 10.244.0.6:8080 Server name: coffee-7b9b4bbd99-bdbxm Date: 20/Jun/2022:11:43:34 +0000 URI: /coffee Request ID: f91f15d1af17556e552557df2f5a0dd2
Пример с отдельными параметрами htpasswd для разных путей#
В примере ниже реализована базовая аутентификация для объединенных (mergeable) ресурсов Ingress
с отдельными списками user:password
для каждого пути.
Master Ingress:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: cafe-ingress-master
annotations:
angie.software/mergeable-ingress-type: "master"
spec:
ingressClassName: angie
tls:
- hosts:
- cafe.example.com
secretName: cafe-secret
rules:
- host: cafe.example.com
Minion для /tea
:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: cafe-ingress-tea-minion
annotations:
angie.software/mergeable-ingress-type: "minion"
angie.software/basic-auth-secret: "tea-passwd"
angie.software/basic-auth-realm: "Tea"
spec:
rules:
- host: cafe.example.com
http:
paths:
- path: /tea
pathType: Prefix
backend:
service:
name: tea-svc
port:
number: 80
Minion для /coffee
:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: cafe-ingress-coffee-minion
annotations:
angie.software/mergeable-ingress-type: "minion"
angie.software/basic-auth-secret: "coffee-passwd"
angie.software/basic-auth-realm: "Coffee"
spec:
rules:
- host: cafe.example.com
http:
paths:
- path: /coffee
pathType: Prefix
backend:
service:
name: coffee-svc
port:
number: 80