Контроль доступа#
Ниже приведен пример развертывания веб-приложения, настройки балансировки нагрузки с помощью VirtualServer и применения политики управления доступом для запрета и разрешения трафика из определенной подсети. Установите ANIC. Сохраните публичный IP-адрес ANIC в переменной оболочки: Сохраните HTTP-порт ANIC в переменной оболочки: Создайте Deployment и Service для приложения: Примените настройки: Создайте политику Примените настройки: Создайте ресурс VirtualServer для веб-приложения: Примените настройки: Обратите внимание, что VirtualServer должен ссылаться на политику Протестируйте конфигурацию. Попробуйте обратиться к приложению: Ожидаемый результат: Ответ Обновите политику, чтобы разрешить запросы от клиентов из подсети Обновите политику: Повторно протестируйте конфигурацию. Попробуйте обратиться к приложению: Ожидаемый результат: Ответ Предварительные действия#
$ IC_IP=XXX.YYY.ZZZ.III
$ IC_HTTP_PORT=<номер порта>
Настройка контроля доступа#
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
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
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
означает успешное разрешение запроса после обновления политики.