Перейти к содержанию

Установка OSA Firewall в Kubernetes

Предварительные условия

Учетные данные в реестре контейнеров

Docker-образ компонента OSA Firewall и Helm Chart находятся в частном реестре, для доступа в который требуется авторизация.

Получение Helm Chart OSA Firewall

Для получения Helm Chart OSA Firewall необходимо добавить OCI-совместимый Helm приватный реестр с теми же учетными данными, что и для доступа к образам контейнеров.

  1. Войдите в реестр (с ручным вводом пароля).

    helm registry login -u myuser registry.appsec.global
    Password:
    Login succeeded
    
  2. Скачайте последнюю/конкретную версию 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.

  1. Создайте новое пространство имен (например, osa-firewall-proxy).

    kubectl create namespace osa-firewall-proxy
    
  2. Создайте 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, секрет будет создан автоматически.

  3. Если секрет создан вручную, отключите автоматическое создание секрета Helm Chart.

    values.yaml
    images:
      registry:
        ImagePullSecret:
          create: false
    

Сервисная учетная запись

По умолчанию Helm Chart создаст сервисную учетную запись (Service Account, SA) с именем osa-firewall-proxy-sa и будет разворачивать ресурсы с ее помощью.

Существует 3 сценария использования учетной записи:

  1. Учетная запись osa-firewall-proxy-sa по умолчанию. В этом случае никаких дополнительных значений указывать не нужно.

  2. Учетная запись пользовательского имени — необходимо передать параметр osaFirewallProxy.serviceAccount.name с желаемым именем.

  3. Использование существующей или императивно созданной учетной записи.

    Например

    Учетная запись может быть добавлена с помощью следующих команд:

    # Создать учетную запись
    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:

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:

values.yaml
redis:
  # -- Установить false, если будет использован ваш Redis
  enabled: false
  # -- Указать, если используется ваш Redis
  external:
    host: redis-host
    port: 6379
    auth:
      enabled: true
      secretName: redis-secret
      createSecret: false
      password: password

Установка с помощью Helm

  1. Сконфигурируйте параметры под свою среду (values.yaml), см. раздел «Параметры».

  2. Установите 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.