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

Установка AppSec.Code в Kubernetes

Документ описывает базовый порядок установки AppSec.Code в кластер Kubernetes с помощью Helm Chart.

Переменные установки

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

export KUBECONFIG_PATH="<PATH_TO_KUBECONFIG>"
export NAMESPACE="<TARGET_NAMESPACE>"
export RELEASE_NAME="<HELM_RELEASE_NAME>"
export DOMAIN="<BASE_DOMAIN>"
export TLS_SECRET_NAME="<TLS_SECRET_NAME>"
export CHART_VERSION="<CHART_VERSION>"

Необходимые условия для установки

Для установки должны быть доступны:

  • Инструмент командной строки kubectl.
  • Менеджер пакетов Helm.
  • Доступ к целевому кластеру Kubernetes.
  • Доступ к OCI registry registry.appsec.global.
  • Подготовленный под свою среду файл values.yaml или набор параметров для передачи через --set.
  • TLS-сертификат для доменов инсталляции, если используется HTTPS через Ingress.

Перед установкой проверьте, что в файле values.yaml или в CLI-параметрах заданы:

  • global.registrykey.
  • Домены и Ingress-настройки.
  • Имя TLS-секрета.
  • Необходимые теги образов для компонентов, если они переопределяются отдельно.

Загрузка Helm-чарта AppSec.Code

  1. Войдите в OCI-совместимый Helm приватный реестр registry.appsec.global:

    helm registry login registry.appsec.global -u <REGISTRY_USERNAME>
    
  2. Скачайте нужную версию AppSec.Code Helm-чарт:

    helm pull oci://registry.appsec.global/appseccode/helm/appsec-code/appsec-code \
      --version "$CHART_VERSION" \
      --untar
    
  3. После загрузки перейдите в директорию распакованного Helm-чарта или используйте локальную директорию с чартом.

Создание пространства имен

Создайте новое пространство имен с помощью команды:

kubectl --kubeconfig "$KUBECONFIG_PATH" create namespace "$NAMESPACE"

Создание TLS secret

  1. Создайте TLS secret kubernetes.io/tls в целевом пространстве имен:

    apiVersion: v1
    kind: Secret
    metadata:
      name: <TLS_SECRET_NAME>
      namespace: <TARGET_NAMESPACE>
    type: kubernetes.io/tls
    data:
      tls.crt: <BASE64_CERTIFICATE>
      tls.key: <BASE64_PRIVATE_KEY>
    
  2. Примените созданный TLS secret:

    kubectl --kubeconfig "$KUBECONFIG_PATH" apply -f tls-secret.yaml
    

Установка Helm-чарта

Вариант 1. Установка с подготовленным values.yaml

Установите или обновите релиз AppSec.Code, выполнив приведенную ниже команду.

Если Helm-чарт лежит не в директории ./appsec-code, замените в команде значение ./appsec-code на актуальное.

```bash
helm --kubeconfig "$KUBECONFIG_PATH" \
  upgrade --install "$RELEASE_NAME" ./appsec-code \
  -n "$NAMESPACE" \
  --create-namespace \
  --wait \
  --timeout 15m
```

Вариант 2. Установка со стандартным values.yaml и переопределением через --set

Существует способ установки, при котором не требуется отдельно изменять файл values.yaml, а обязательные параметры можно передать непосредственно в команде установки.

В этом случае команду установки необходимо запускать из директории, где расположен Helm-чарт.

helm --kubeconfig "$KUBECONFIG_PATH" \
  upgrade --install "$RELEASE_NAME" . \
  -n "$NAMESPACE" \
  --set global.registrykey=<BASE64_DOCKERCONFIGJSON> \
  --set global.hosts.domain="$DOMAIN" \
  --set global.hosts.gitlab.name="<GITLAB_HOSTNAME>" \
  --set global.hosts.minio.name="<MINIO_HOSTNAME>" \
  --set global.hosts.registry.name="<REGISTRY_HOSTNAME>" \
  --set global.hosts.kas.name="<KAS_HOSTNAME>" \
  --set global.ingress.class="<INGRESS_CLASS>" \
  --set global.ingress.tls.secretName="$TLS_SECRET_NAME"

Отслеживание статуса после запуска развертывания

После запуска развертывания ориентируйтесь в первую очередь на логи пода migrations.

Команда просмотра логов:

kubectl --kubeconfig "$KUBECONFIG_PATH" \
  logs -n "$NAMESPACE" "$(kubectl --kubeconfig "$KUBECONFIG_PATH" get pods -n "$NAMESPACE" --no-headers | awk '/migrations/ {print $1; exit}')"

Выполнение миграций

Если логи содержат записи следующего вида:

NOTICE: There are 1880 pending migrations.
Checking database migrations are up-to-date
Performing migrations (this will initialized if needed)
Running db:schema:load rake task

это означает, что установка идёт нормально и миграции уже выполняются. На этом этапе обычно следует просто подождать около 5-10 минут.

Окончание миграций

Если логи содержат записи следующего вида:

OK
== Seeding took 7.89 seconds
Running gitlab:clickhouse:migrate:main rake task
Performing custom instance setup
Registering OAuth applications.

это означает, что основная часть миграций завершилась. После этого вскоре начнут подниматься оставшиеся поды, и можно будет получить логин и пароль администратора.

Получение логина и пароля root

После завершения миграций получить учётные данные root можно командой:

kubectl --kubeconfig "$KUBECONFIG_PATH" \
  logs -n "$NAMESPACE" "$(kubectl --kubeconfig "$KUBECONFIG_PATH" get pods -n "$NAMESPACE" --no-headers | awk '/migrations/ {print $1; exit}')" \
  | awk '/login:|password:/'

Если нужен только пароль, используйте следующую команду:

kubectl --kubeconfig "$KUBECONFIG_PATH" \
  logs -n "$NAMESPACE" "$(kubectl --kubeconfig "$KUBECONFIG_PATH" get pods -n "$NAMESPACE" --no-headers | awk '/migrations/ {print $1; exit}')" \
  | awk -F'password:[[:space:]]*' '/password:/ {print $2}'