Публикация приложения с использованием Helm Charts¶
Требования¶
-
Локальный или облачный (например, EKS, GKE, AKE) кластер любой версии Kubernetes
-
Приложение, опубликованное в Kubernetes с использованием Helm Charts
-
Доступность pod'а из сети Интернет или других потенциально опасных ресурсов
-
Ingress‑контроллер или внешний балансировщик нагрузки передает публичный IP‑адрес подключающегося клиента в заголовке
X-Forwarded-For
-
Аккаунт в Консоли управления Вебмониторэкс
-
Имя и пароль пользователя с ролью Деплой, который добавлен в аккаунт вашей компании в Консоли управления Вебмониторэкс. Для добавления пользователя используйте инструкцию
Установка¶
-
Создайте ConfigMap Вебмониторэкс.
-
Обновите описание объекта
Deployment
в Kubernetes. -
Обновите описание объекта
Service
в Kubernetes. -
Обновите конфигурационный файл Helm Charts.
-
Протестируйте sidecar‑контейнер Вебмониторэкс.
Если вы используете несколько нод Вебмониторэкс
Все ноды Вебмониторэкс, установленные в вашей инфраструктуре, должны иметь одинаковые версии.
Перед установкой дополнительной ноды убедитесь, что ее версия совпадает с версией уже установленных модулей. Если версии модулей устарели или начинают устаревать (3.6
и ниже), рекомендуем обновить все модули до последней версии.
Версия установленной ноды Вебмониторэкс указана в конфигурационном файле Helm chart → wallarm.image.tag
.
Шаг 1: Создание ConfigMap Вебмониторэкс¶
Перейдите к директории с файлами Helm Charts → папка templates
и создайте шаблон wallarm-sidecar-configmap.yaml
со следующим содержимым:
apiVersion: v1
kind: ConfigMap
metadata:
name: wallarm-sidecar-nginx-conf
data:
default: |
geo $remote_addr $wallarm_mode_real {
default {{ .Values.wallarm.mode | quote }};
# IP‑адреса Сканера Вебмониторэкс
130.193.36.60 off; 130.193.37.248 off; 130.193.39.11 off; 130.193.39.40 off; 139.162.146.186 off; 172.105.67.64 off; 172.105.72.250 off; 172.105.75.228 off; 172.105.81.224 off; 172.105.83.226 off; 172.105.83.238 off; 172.105.84.20 off; 172.105.84.201 off; 172.105.84.7 off; 172.105.89.44 off; 172.105.89.55 off; 172.105.90.179 off; 172.105.90.189 off; 172.105.91.75 off; 172.105.92.7 off; 172.105.93.66 off; 172.105.95.224 off; 172.105.95.226 off; 172.105.95.230 off; 192.53.121.142 off; 192.46.211.242 off; 139.162.8.219 off; 45.79.238.128 off; 45.33.120.132 off; 172.104.244.176 off; 45.79.160.150 off; 45.79.72.89 off; 194.195.212.130 off; 80.85.85.222 off; 172.105.111.179 off; 172.104.189.111 off; 139.177.182.124 off; 173.230.128.167 off; 69.164.219.109 off; 80.85.87.179 off; 45.79.26.118 off; 192.46.211.128 off; 172.105.170.217 off; 74.207.245.45 off;
}
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
server_name localhost;
root /usr/share/nginx/html;
index index.html index.htm;
wallarm_mode $wallarm_mode_real;
# wallarm_instance 1;
set_real_ip_from 0.0.0.0/0;
real_ip_header X-Forwarded-For;
location / {
proxy_pass http://localhost:{{ .Values.wallarm.app_container_port }};
include proxy_params;
}
}
Шаг 2: Обновление объекта Deployment в Kubernetes¶
-
Вернитесь к директории с файлами Helm Charts → папка
templates
и откройте шаблон с описанием объектаDeployment
. Если в приложении несколько объектовDeployment
, откройте тот, в котором описаны pod'ы, доступные из сети Интернет. Например:apiVersion: apps/v1 kind: Deployment metadata: name: myapp spec: selector: matchLabels: app: myapp template: metadata: labels: app: myapp spec: containers: # Описание основного контейнера вашего приложения - name: myapp image: <Image> resources: limits: memory: "128Mi" cpu: "500m" ports: # Порт, по которому контейнер приложения получает входящие запросы - containerPort: 8080
-
Скопируйте в шаблон следующие элементы:
- В секцию
spec.template.metadata.annotations
аннотациюchecksum/config
для обновления запущенных pod'ов после изменения ConfigMap Вебмониторэкс - В секцию
spec.template.spec.containers
описание sidecar‑контейнераwallarm
- В секцию
spec.template.spec.volumes
описание ресурсаwallarm-nginx-conf
Ниже приведен пример шаблона с добавленными элементами. Элементы для копирования обозначены комментарием
элемент Вебмониторэкс
.apiVersion: apps/v1 kind: Deployment metadata: annotations: # Элемент Вебмониторэкс: аннотация для обновления запущенных pod'ов после изменения ConfigMap Вебмониторэкс checksum/config: '{{ include (print $.Template.BasePath "/wallarm-sidecar-configmap.yaml") . | sha256sum }}' name: myapp spec: selector: matchLabels: app: myapp template: metadata: labels: app: myapp spec: containers: # Элемент Вебмониторэкс: описание sidecar‑контейнера Вебмониторэкс - name: wallarm image: {{ .Values.wallarm.image.repository }}:{{ .Values.wallarm.image.tag }} imagePullPolicy: {{ .Values.wallarm.image.pullPolicy | quote }} env: - name: WALLARM_API_HOST value: {{ .Values.wallarm.wallarm_host_api | quote }} - name: DEPLOY_USER value: {{ .Values.wallarm.deploy_username | quote }} - name: DEPLOY_PASSWORD value: {{ .Values.wallarm.deploy_password | quote }} - name: DEPLOY_FORCE value: "true" - name: WALLARM_ACL_ENABLE value: "true" - name: TARANTOOL_MEMORY_GB value: {{ .Values.wallarm.tarantool_memory_gb | quote }} ports: - name: http # Порт, по которому sidecar‑контейнер Вебмониторэкс получает запросы от объекта Service containerPort: 80 volumeMounts: - mountPath: /etc/nginx/sites-enabled readOnly: true name: wallarm-nginx-conf # Описание основного контейнера вашего приложения - name: myapp image: <Image> resources: limits: memory: "128Mi" cpu: "500m" ports: # Порт, по которому контейнер приложения получает входящие запросы - containerPort: 8080 volumes: # Элемент Вебмониторэкс: описание ресурса wallarm-nginx-conf - name: wallarm-nginx-conf configMap: name: wallarm-sidecar-nginx-conf items: - key: default path: default
- В секцию
Шаг 3: Обновление объекта Service в Kubernetes¶
-
Вернитесь к директории с файлами Helm Charts → папка
templates
и откройте шаблон с описанием объектаService
, который соответствует объектуDeployment
из шага 2. Например:apiVersion: v1 kind: Service metadata: name: myapp spec: selector: app: myapp ports: - port: {{ .Values.service.port }} # Порт sidecar‑контейнера Вебмониторэкс, на который объект Service перенаправляет запросы; # значение должно совпадать с ports.containerPort в описании sidecar‑контейнера Вебмониторэкс targetPort: 8080
-
Обновите значение
ports.targetPort
в соответствии сports.containerPort
из описания sidecar‑контейнера Вебмониторэкс. Например:... - port: {{ .Values.service.port }} # Порт sidecar‑контейнера Вебмониторэкс # значение должно совпадать с ports.containerPort в описании sidecar‑контейнера Вебмониторэкс targetPort: 80
Шаг 4: Обновление конфигурационного файла Helm Charts¶
-
Вернитесь к директории с файлами Helm Charts и откройте файл
values.yaml
. -
Скопируйте в файл
values.yaml
описание объектаwallarm
ниже и измените значения параметров, следуя комментариям к коду.wallarm: image: repository: wallarm/node tag: 2.18.1-5 pullPolicy: Always # Эндпоинт Вебмониторэкс API wallarm_host_api: "api.wallarm.ru" # Имя пользователя с ролью "Деплой" deploy_username: "username" # Пароль пользователя с ролью "Деплой" deploy_password: "password" # Порт, по которому контейнер получает входящие запросы; # значение должно совпадать с ports.containerPort # в описании основного контейнера вашего приложения app_container_port: 80 # Режим фильтрации запросов: # "off" для отключения фильтрации # "monitoring" для обработки всех запросов без блокировки # "block" для обработки всех запросов и блокировки вредоносных mode: "block" # Объем оперативной памяти в ГБ для записи данных по аналитике запросов; # рекомендуемое значение — 75% от общей памяти сервера tarantool_memory_gb: 2 # Передайте значение "true", чтобы включить блокировку запросов по IP enable_ip_blocking: "false"
-
Убедитесь, что файл
values.yaml
валидный, используя команду:helm lint
-
Обновите Helm Charts в Kubernetes, используя команду:
helm upgrade <RELEASE> <CHART>
<RELEASE>
— название существующего Helm Chart<CHART>
— путь до директории с файлами Helm Charts
Объект NetworkPolicy в Kubernetes
Если вы также используете объект NetworkPolicy
в Kubernetes, убедитесь, что он обрабатывает трафик, поступающий с порта sidecar‑контейнера Вебмониторэкс.
Шаг 5: Тестирование sidecar‑контейнера Вебмониторэкс¶
-
Получите список pod'ов, используя команду:
kubectl get pods
Количество контейнеров в pod'е должно увеличиться, статус pod'а должен быть Running.
NAME READY STATUS RESTARTS AGE mychart-856f957bbd-cr4kt 2/2 Running 0 3m48s
-
Перейдите в Консоль управления Вебмониторэкс → секция Ноды и убедитесь, что в списке появился новый элемент. Созданная нода используется для фильтрации запросов к вашему приложению.
-
Выполните тестовую атаку на адрес вашего приложения, как описано в документации.
-
Перейдите в Консоль управления Вебмониторэкс → секция События и проверьте, что атака появилась в списке.