JWT#
В примере ниже развертывается веб-приложение, настраивается балансировка нагрузки с помощью Установите ANIC. Сохраните публичный IP-адрес ANIC в переменной оболочки: Сохраните HTTP-порт ANIC в переменной оболочки: Создайте Deployment и Service для приложения: Примените настройки: Создайте секрет с именем Примените настройки: Создайте политику Примените настройки: Настройте балансировку нагрузки. Создайте ресурс Примените настройки: Обратите внимание, что Протестируйте конфигурацию. Если попытаться получить доступ к приложению без Ответ: Если передать корректный Ответ:VirtualServer
и применяется политика JWT
.Предварительные действия#
$ IC_IP=XXX.YYY.ZZZ.III
$ IC_HTTP_PORT=<номер порта>
Настройка JWT#
apiVersion: apps/v1
kind: Deployment
metadata:
name: webapp
spec:
replicas: 1
selector:
matchLabels:
app: webapp
template:
metadata:
labels:
app: webapp
spec:
containers:
- name: webapp
image: angiesoftware/angie-hello:plain-text
ports:
- containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
name: webapp-svc
spec:
ports:
- port: 80
targetPort: 8080
protocol: TCP
name: http
selector:
app: webapp
$ kubectl apply -f webapp.yaml
jwk-secret
, который будет использоваться для проверки JWT:apiVersion: v1
kind: Secret
metadata:
name: jwk-secret
type: angie.software/jwk
data:
jwk: eyJrZXlzIjoKICAgIFt7CiAgICAgICAgImsiOiJabUZ1ZEdGemRHbGphbmQwIiwKICAgICAgICAia3R5Ijoib2N0IiwKICAgICAgICAia2lkIjoiMDAwMSIKICAgIH1dCn0K
$ kubectl apply -f jwk-secret.yaml
jwt-policy
, которая будет ссылаться на Secret
из предыдущего шага
и разрешать запросы к веб-приложению только при наличии корректного JWT
:apiVersion: k8s.angie.software/v1
kind: Policy
metadata:
name: jwt-policy
spec:
jwt:
realm: MyProductAPI
secret: jwk-secret
token: $http_token
$ kubectl apply -f jwt.yaml
VirtualServer
для веб-приложения:apiVersion: k8s.angie.software/v1
kind: VirtualServer
metadata:
name: webapp
spec:
host: webapp.example.com
policies:
- name: jwt-policy
upstreams:
- name: webapp
service: webapp-svc
port: 80
routes:
- path: /
action:
pass: webapp
$ kubectl apply -f virtual-server.yaml
VirtualServer
ссылается на политику jwt-policy
, созданную на предыдущем шаге.JWT
, ANIC отклонит запрос:$ curl --resolve webapp.example.com:$IC_HTTP_PORT:$IC_IP http://webapp.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>
JWT
, запрос будет выполнен успешно:$ curl --resolve webapp.example.com:$IC_HTTP_PORT:$IC_IP http://webapp.example.com:$IC_HTTP_PORT/ -H "token: `cat token.jwt`"
Server address: 172.17.0.3:8080
Server name: webapp-7c6d448df9-lcrx6
Date: 10/Sep/2020:18:20:03 +0000
URI: /
Request ID: db2c07ce640755ccbe9f666d16f85620