Контроль доступа#
Ниже приведен пример развертывания веб-приложения, настройки балансировки нагрузки с помощью VirtualServer и применения политики управления доступом для запрета и разрешения трафика из определенной подсети.
Предварительные действия#
Установите ANIC.
Сохраните публичный IP-адрес ANIC в переменной оболочки:
$ IC_IP=<ваш_IP-адрес>
Сохраните HTTP-порт ANIC в переменной оболочки:
$ IC_HTTP_PORT=<номер порта>
Настройка контроля доступа#
Создайте Deployment и Service для приложения:
apiVersion: apps/v1 kind: Deployment metadata: name: webapp spec: 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
Создайте политику
webapp-policy, которая запрещает запросы от клиентов с IP-адресами из подсети10.0.0.0/8. Убедитесь, что полеdenyв файлеaccess-control-policy-deny.yamlнастроено в соответствии с вашей средой:apiVersion: k8s.angie.software/v1 kind: Policy metadata: name: webapp-policy spec: accessControl: deny: - 10.0.0.0/8
Примените настройки:
$ kubectl apply -f access-control-policy-deny.yaml
Создайте ресурс VirtualServer для веб-приложения:
apiVersion: k8s.angie.software/v1 kind: VirtualServer metadata: name: webapp spec: host: webapp.example.com policies: - name: webapp-policy upstreams: - name: webapp service: webapp-svc port: 80 routes: - path: / action: pass: webapp
Примените настройки:
$ kubectl apply -f virtual-server.yaml
Обратите внимание, что VirtualServer должен ссылаться на политику
webapp-policy, созданную на шаге 2.Протестируйте конфигурацию.
Попробуйте обратиться к приложению:
$ curl --resolve webapp.example.com:$IC_HTTP_PORT:$IC_IP http://webapp.example.com:$IC_HTTP_PORT
Ожидаемый результат:
<html> <head><title>403 Forbidden</title></head> <body> <center><h1>403 Forbidden</h1></center> <hr><center>Angie/1.8.1</center> </body> </html>
Ответ
403 Forbiddenозначает успешное срабатывание политики блокировки запросов.Обновите политику, чтобы разрешить запросы от клиентов из подсети
10.0.0.0/8. Убедитесь, что полеallowв файлеaccess-control-policy-allow.yamlнастроено в соответствии с вашей средой:apiVersion: k8s.angie.software/v1 kind: Policy metadata: name: webapp-policy spec: accessControl: allow: - 10.0.0.0/8
Обновите политику:
$ kubectl apply -f access-control-policy-allow.yaml
Повторно протестируйте конфигурацию.
Попробуйте обратиться к приложению:
$ curl --resolve webapp.example.com:$IC_HTTP_PORT:$IC_IP http://webapp.example.com:$IC_HTTP_PORT
Ожидаемый результат:
Server address: 10.64.0.13:8080 Server name: webapp-5cbbc7bd78-wf85w
Ответ
200 OKозначает успешное разрешение запроса после обновления политики.