Установка OSA Firewall в Kubernetes¶
Предварительные условия¶
Учетные данные в реестре контейнеров¶
Docker-образ компонента OSA Firewall и Helm Chart находятся в частном реестре, для доступа в который требуется авторизация.
Получение Helm Chart OSA Firewall¶
Для получения Helm Chart OSA Firewall необходимо добавить OCI-совместимый Helm приватный реестр с теми же учетными данными, что и для доступа к образам контейнеров.
-
Войдите в реестр (с ручным вводом пароля).
helm registry login -u myuser registry.appsec.global Password: Login succeeded -
Скачайте последнюю/конкретную версию Helm Chart OSA Firewall.
helm pull oci://registry.appsec.global/appsec-track/osa-firewall-proxy-helm/osa-firewall-proxy --version 4.2.0 --untar
Предварительная конфигурация¶
Примечание
По умолчанию Helm Chart создает секрет на основе файла values.yaml.
-
Создайте новое пространство имен (например,
osa-firewall-proxy).kubectl create namespace osa-firewall-proxy -
Создайте ImagePullSecret.
kubectl create secret docker-registry osa-firewall-proxy-registry-secret \ --docker-server="registry.appsec.global" \ --namespace=osa-firewall-proxy \ --docker-username="user@example.com" \ --docker-password="<Password>" \ --docker-email="user@example.com"Примечание
Если вы используете Helm Chart с уже заданным параметром
images.registry.ImagePullSecret.jsonconfig, секрет будет создан автоматически. -
Если секрет создан вручную, отключите автоматическое создание секрета Helm Chart.
values.yamlimages: registry: ImagePullSecret: create: false
Сервисная учетная запись¶
По умолчанию Helm Chart создаст сервисную учетную запись (Service Account, SA) с именем osa-firewall-proxy-sa и будет разворачивать ресурсы с ее помощью.
Существует 3 сценария использования учетной записи:
-
Учетная запись
osa-firewall-proxy-saпо умолчанию. В этом случае никаких дополнительных значений указывать не нужно. -
Учетная запись пользовательского имени — необходимо передать параметр
osaFirewallProxy.serviceAccount.nameс желаемым именем. -
Использование существующей или императивно созданной учетной записи.
Например
Учетная запись может быть добавлена с помощью следующих команд:
# Создать учетную запись kubectl create serviceaccount osa-firewall-proxy-custom-sa -n osa-firewall-proxy # Сопоставление учетной записи с секретом извлечения образов kubectl patch serviceaccount osa-firewall-proxy-custom-sa -n osa-firewall-proxy -p '{"imagePullSecrets": [{"name": "osa-firewall-proxy-registry-secret"}]}'В Helm Chart необходимо добавить следующие значения:
osaFirewallProxy.serviceAccount.create=false(не генерировать учетную запись);osaFirewallProxy.serviceAccount.name=osa-firewall-proxy-custom-sa.
Интеграция с AppSec.Track¶
Укажите URL AppSec.Track API и токен доступа в values.yaml:
osaFirewallProxy:
track:
# -- URL API Track
apiUrl: https://track.example.com/api
# -- API Token для доступа к API Track
apiToken: track-api-token
# -- Блокировать компоненты в карантине
quarantine: true
# -- Блокировать при недоступности Track
failOnApiErrors: true
# -- Отключить проверку TLS (для тестовых окружений)
insecureSsl: false
База данных Redis¶
Redis используется для кэширования. По умолчанию Helm Chart разворачивает Redis как зависимость (Bitnami) для PoC-тестирования. Для производственного использования рекомендуется указать существующий Redis:
redis:
# -- Установить false, если будет использован ваш Redis
enabled: false
# -- Указать, если используется ваш Redis
external:
host: redis-host
port: 6379
auth:
enabled: true
secretName: redis-secret
createSecret: false
password: password
Установка с помощью Helm¶
-
Сконфигурируйте параметры под свою среду (
values.yaml), см. раздел «Параметры». -
Установите Helm Chart OSA Firewall.
helm upgrade --install --create-namespace --namespace osa-firewall-proxy <RELEASE_NAME> <PATH_TO_CHART>
Параметры¶
Параметры установки с помощью Helm приведены в таблице ниже.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
| images.registry.name | string | "cr.yandex" |
Реестр образов контейнеров |
| images.registry. ImagePullSecret.name |
string | "regcred" |
Имя ImagePullSecret'а |
| images.registry. ImagePullSecret.create |
bool | true |
Создать ImagePullSecret (true/false) |
| images.registry. ImagePullSecret.jsonconfig |
string | nil |
json_key или "user:password", закодированные в base64 (если create = true) |
| ingress.enabled | bool | true |
Создать Ingress (true/false) |
| ingress.annotations | object | {} |
Аннотации к объекту Ingress |
| ingress.class_name | string | "nginx-internal" |
Указание Ingress Class |
| ingress.name | string | "osa-firewall-proxy-ingress" |
Название Ingress |
| ingress.hosts | object | {"host":"osa-firewall-proxy.example.com","pathUI":"/"} |
Ingress hosts |
| ingress.tls.hosts | string | "osa-firewall-proxy.example.com" |
Домен osa-firewall-proxy |
| ingress.tls.secretName | string | "tls-certs" |
Имя существующего секрета TLS |
| ingress.tls.enable | bool | true |
Использовать SSL (true/false) |
| ingress.tls.create | bool | false |
Создать секрет с SSL (true/false) |
| ingress.tls.crt | string | nil |
Сертификат в Base64 |
| ingress.tls.key | string | nil |
Ключ сертификата в Base64 |
| osaFirewallProxy.fullname | string | "osa-firewall-proxy" |
Имя контейнера |
| osaFirewallProxy.admin.username | string | "admin" |
Логин администратора веб-интерфейса |
| osaFirewallProxy.admin.password | string | "admin123" |
Пароль администратора |
| osaFirewallProxy.repository.url | string | "" |
Базовый URL upstream (Nexus/Artifactory). Если пусто — редирект на настройки |
| osaFirewallProxy.track. apiUrl |
string | "https://track.example.com/api" |
URL API Track |
| osaFirewallProxy.track. apiToken |
string | "track-api-token" |
API Token для доступа к API Track |
| osaFirewallProxy.track. quarantine |
bool | true |
Блокировать компоненты в карантине |
| osaFirewallProxy.track. failOnApiErrors |
bool | true |
Блокировать при недоступности Track |
| osaFirewallProxy.track. insecureSsl |
bool | false |
Отключить проверку TLS |
| osaFirewallProxy.service. type |
string | "ClusterIP" |
Тип Service (ClusterIP/LoadBalancer) |
| osaFirewallProxy.service. port |
int | 6080 |
Порт для Service |
| osaFirewallProxy.service. targetPort |
int | 6080 |
Порт контейнера |
| osaFirewallProxy.service. loadBalancerIP |
string | nil |
IP LoadBalancer (если type=LoadBalancer) |
| osaFirewallProxy.service. enableIp |
bool | false |
Использовать статический IP для LoadBalancer |
| osaFirewallProxy.service. externalTrafficPolicy |
string | "Local" |
External Traffic Policy (при type=LoadBalancer) |
| osaFirewallProxy.service. annotations |
object | {} |
Аннотации к Service |
| osaFirewallProxy.replicaCount | int | 1 |
Количество реплик |
| osaFirewallProxy.strategy | object | {"type":"RollingUpdate"} |
Стратегия развертывания |
| osaFirewallProxy.serviceAccount. create |
bool | true |
Создать Service Account (true/false) |
| osaFirewallProxy.serviceAccount. name |
string | "osa-firewall-proxy-sa" |
Имя ServiceAccount |
| osaFirewallProxy.serviceAccount. annotations |
object | {} |
Аннотации к ServiceAccount |
| osaFirewallProxy.serviceAccount. automountServiceAccountToken |
bool | false |
Монтировать токен API (true/false) |
| osaFirewallProxy.image.name | string | "registry.appsec.global/.../osa-firewall-proxy" |
Путь к образу |
| osaFirewallProxy.image.tag | string | "1.0.0" |
Тег образа |
| osaFirewallProxy. image.pullPolicy |
string | "Always" |
Политика вытягивания образа |
| osaFirewallProxy. securityContext |
object | {"fsGroup":1000,...} |
Security Context деплоймента |
| osaFirewallProxy. container_securityContext |
object | {"allowPrivilegeEscalation":false} |
Security Context контейнера |
| osaFirewallProxy.resources | object | {} |
Запросы и лимиты ресурсов |
| osaFirewallProxy.livenessProbe | object | см. values.yaml | Liveness Probe |
| osaFirewallProxy.readinessProbe | object | см. values.yaml | Readiness Probe |
| osaFirewallProxy.additionalCerts | object | {} |
Дополнительные сертификаты (name, filename, data base64) |
| osaFirewallProxy.nodeSelector | object | {} |
nodeSelector для pod'ов |
| redis.enabled | bool | true |
Установить Redis (true/false) |
| redis.auth.enabled | bool | true |
Включить аутентификацию Redis |
| redis.auth.password | string | "password" |
Пароль Redis (если redis.auth.enabled=true) |
| redis.external.host | string | "redis-host" |
Адрес внешнего Redis (если redis.enabled=false) |
| redis.external.port | int | 6379 |
Порт внешнего Redis |
| redis.external.auth.* | object | см. values.yaml | Параметры аутентификации внешнего Redis |
Полный список параметров и значения по умолчанию см. в файле values.yaml в корне Chart.