Образ АтивногоШюза в контейнере

Материал из Документация Ключ-АСТРОМ

Ключ-АСТРОМ поддерживает запуск АктивногоШлюза в контейнере. В качестве примера развертывания на основе контейнера эта страница описывает, как развернуть АктивныйШлюз на основе контейнера с использованием StatefulSet в Kubernetes/OpenShift.

Предустановка

  1. Создайте токен доступа InstallerDownload с областью действия
  2. Создайте токен аутентификации
  3. Определите конечные точки связи АктивногоШлюза и аутентификацию. Используйте информацию о подключении GET для API АктивногоШлюза.
  4. Получите UUID вашего пространства имен kube-system

Системные требования

Образ АктивногоШлюза Ключ-АСТРОМ поддерживается различными версиями Kubernetes и OpenShift. Полный список см. в разделе Поддержка технологий - Kubernetes.

Образы доступны для следующих архитектур:

  • x86-64
  • ARM64 (AArch64)
  • s390x

Директории контейнеров

Чтобы обеспечить бесперебойную интеграцию с вашими инструментами и адаптируемость к вашим потребностям, мы предлагаем наши образы контейнеров различными способами, обеспечивающими максимальную гибкость:

  • Встроенная директория Ключ-АСТРОМ (по умолчанию)
  • Общедоступные директории
  • Ваша собственная директория (рекомендуется)

Обратите внимание, что многоархитектурные образы контейнеров Ключ-АСТРОМ, поддерживающие архитектуры ЦП ARM64 (AArch64) и x86-64 на Linux, обеспечивающие совместимость на различных платформах, доступны только из общедоступных директорий. Встроенная директория Ключ-АСТРОМ предоставляет образы только x86-64.

Развертывание

Ключ-АСТРОМ предоставляет подписанные образы контейнеров для обеспечения подлинности и целостности, а также SBOM, в которых перечислены все включенные программные компоненты. Проверка подписей и просмотр SBOM позволяют эффективно управлять уязвимостями и снижать риски. Подробности проверки см. в разделе Проверка подписей образов Ключ-АСТРОМ.

Частная или общедоступная директория

  1. Создайте выделенное пространство имен.
    1. Kubernetes kubectl create namespace astromkey
    2. OpenShift oc adm new-project --node-selector="" astromkey
  2. Создайте ключ, содержащий данные аутентификации на сервере Ключ-АСТРОМ, используемом АктивныйШлюз.
    1. Kubernetes
      kubectl -n astromkey create secret generic astromkey-tokens \
      --from-literal=tenant-token=<YOUR_TENANT_TOKEN> \
      --from-literal=auth-token=<YOUR_AUTH_TOKEN>
    2. OpenShift
      oc -n astromkey create secret generic astromkey-tokens \
      --from-literal=tenant-token=<YOUR_TENANT_TOKEN> \
      --from-literal=auth-token=<YOUR_AUTH_TOKEN>

      Вам нужно заменить
      • <YOUR_TENANT_TOKEN> c значением tenantToken, полученным в Предустановке из информации о подключении.
      • <YOUR_AUTH_TOKEN> с индивидуальным токеном АктивногоШлюза, полученным в Предустановке.

  3. Создайте файл ag-deployment-example.yaml со следующим содержимым:
    ag-deployment-example.yaml
apiVersion: v1

kind: Service

metadata:

  name: astromkey-activegate

  namespace: astromkey

spec:

  type: ClusterIP

  selector:

    app.kubernetes.io/component: activegate

    component.astromkey.com/feature: activegate

  ports:

    - protocol: TCP

      port: 443

      targetPort: ag-https

---

apiVersion: apps/v1

kind: StatefulSet

metadata:

  name: astromkey-activegate

  namespace: astromkey

  labels:

    app.kubernetes.io/component: activegate

    component.astromkey.com/feature: activegate

spec:

  podManagementPolicy: Parallel

  serviceName: ""

  selector:

    matchLabels:

      app.kubernetes.io/component: activegate

      component.astromkey.com/feature: activegate

  template:

    metadata:

      labels:

        app.kubernetes.io/component: activegate

        component.astromkey.com/feature: activegate

    spec:

      affinity:

        nodeAffinity:

          requiredDuringSchedulingIgnoredDuringExecution:

            nodeSelectorTerms:

              - matchExpressions:

                  - key: kubernetes.io/arch

                    operator: In

                    values:

                      - <CPU_ARCHITECTURE>

                  - key: kubernetes.io/os

                    operator: In

                    values:

                      - linux

      containers:

        - name: activegate

          image: <REPOSITORY_URL>/astromkey-activegate:<IMAGE_TAG>

          imagePullPolicy: Always

          ports:

            - containerPort: 9999

              name: ag-https

              protocol: TCP

          env:

            - name: DT_TENANT

              value: <YOUR_ENVIRONMENT_ID>

            - name: DT_SERVER

              value: <YOUR_COMMUNICATION_ENDPOINTS>

            - name: DT_ID_SEED_NAMESPACE

              value: astromkey

            - name: DT_ID_SEED_K8S_CLUSTER_ID

              value: <YOUR_KUBE-SYSTEM_NAMESPACE_UUID>

            - name: DT_CAPABILITIES

              value: restInterface,kubernetes_monitoring,MSGrouter,metrics_ingest

            - name: DT_DEPLOYMENT_METADATA

              value: orchestration_tech=handcrated-ag-sts;script_version=none;orchestrator_id=none

            - name: DT_DNS_ENTRY_POINT

              value: https://$(astromkey_ACTIVEGATE_SERVICE_HOST):$(astromkey_ACTIVEGATE_SERVICE_PORT)/communication

          volumeMounts:

            - name: astromkey-tokens

              mountPath: /var/lib/astromkey/secrets/tokens

            - name: truststore-volume

              mountPath: /opt/astromkey/gateway/jre/lib/security/cacerts

              readOnly: true

              subPath: k8s-local.jks

            - name: server-certs-storage

              mountPath: /var/lib/astromkey/gateway/ssl

            - name: ag-lib-gateway-config

              mountPath: /var/lib/astromkey/gateway/config

            - name: ag-lib-gateway-temp

              mountPath: /var/lib/astromkey/gateway/temp

            - name: ag-lib-gateway-data

              mountPath: /var/lib/astromkey/gateway/data

            - name: ag-log-gateway

              mountPath: /var/log/astromkey/gateway

            - name: ag-tmp-gateway

              mountPath: /var/tmp/astromkey/gateway

          livenessProbe:

            failureThreshold: 2

            httpGet:

              path: /rest/state

              port: ag-https

              scheme: HTTPS

            initialDelaySeconds: 30

            periodSeconds: 30

            successThreshold: 1

            timeoutSeconds: 1

          readinessProbe:

            failureThreshold: 3

            httpGet:

              path: /rest/health

              port: ag-https

              scheme: HTTPS

            initialDelaySeconds: 30

            periodSeconds: 15

            successThreshold: 1

            timeoutSeconds: 1

          resources:

            requests:

              cpu: 500m

              memory: 512Mi

            limits:

              cpu: 1000m

              memory: 1.5Gi

          securityContext:

            allowPrivilegeEscalation: false

            capabilities:

              drop:

                - all

            privileged: false

            readOnlyRootFilesystem: true

            runAsNonRoot: true

            seccompProfile:

              type: RuntimeDefault

      initContainers:

        - name: certificate-loader

          image: <REPOSITORY_URL>/astromkey-activegate:<IMAGE_TAG>

          workingDir: /var/lib/astromkey/gateway

          command: ['/bin/bash']

          args: ['-c', '/opt/astromkey/gateway/k8scrt2jks.sh']

          volumeMounts:

            - mountPath: /var/lib/astromkey/gateway/ssl

              name: truststore-volume

      volumes:

        - name: truststore-volume

          emptyDir: {}

        - name: astromkey-tokens

          secret:

            secretName: astromkey-tokens

        - name: server-certs-storage

          emptyDir: {}

        - name: ag-lib-gateway-config

          emptyDir: {}

        - name: ag-lib-gateway-temp

          emptyDir: {}

        - name: ag-lib-gateway-data

          emptyDir: {}

        - name: ag-log-gateway

          emptyDir: {}

        - name: ag-tmp-gateway

          emptyDir: {}

  updateStrategy:

    type: RollingUpdate

  1. Измените файл YAML развертывания. Добавьте в файл ag-deployment-example.yaml сведения о конфигурации среды, обязательно заменив:
    • CPU_ARCHITECTURE c архитектурой вашего процессора. Возможные значения: amd64, arm64, и s390x
    • <REPOSITORY_URL> c одним из поддерживаемых реестров
    • <IMAGE_TAG> c правильным тегом образа
    • <YOUR_ENVIRONMENT_ID> с вашим идентификатором среды Чтобы определить идентификатор вашей среды, смотрите синтаксис ниже.
      • SaaS: https://{your-environment-id}.live.astromkey.com
      • Managment: https://{your-domain}/e/{your-environment-id}
    • <YOUR_COMMUNICATION_ENDPOINTS> c значением communicationEndpoints, полученным в Предустановке из информации о подключении.

      Список конечных точек связи с сервером (communicationEndpoints) может со временем меняться.
    • <YOUR_KUBE-SYSTEM_NAMESPACE_UUID> с UUID пространства имен kube-system, полученным в Предустановке.

      Параметры:
    • необязательный Включите AppArmor, если он доступен.
      Для обеспечения совместимости с более широким спектром кластеров Kubernetes профиль AppArmor не указан в ag-deployment-example.yaml. Если AppArmor доступен в вашем кластере Kubernetes, мы рекомендуем вам дополнительно аннотировать StatefulSet с помощью профиля runtime/default.

      spec:
        template:
          metadata:
            annotations:
              container.apparmor.security.beta.kubernetes.io/activegate: runtime/default
    • необязательный Применяйте ограничения ресурсов в соответствии с рекомендациями по размеру. Дополнительные параметры конфигурации см. в разделе Конфигурация АктивныхШлюзов.
  2. Развертывание АктивногоШлюза.
    1. Kubernetes kubectl apply -f ./ag-deployment-example.yaml
    2. OpenShift oc apply -f ./ag-deployment-example.yaml
  3. Чтобы убедиться, что АктившныйШлюз успешно подключился к серверу Ключ-АСТРОМ, перейдите в раздел Состояние развертывания > АктивныйШлюз.

Встроенная директория Ключ-АСТРОМ

  1. Создайте выделенное пространство имен.
    1. Kubernetes kubectl create namespace astromkey
    2. OpenShift oc adm new-project --node-selector="" astromkey
  2. Создайте ключ, содержащий URL-адрес среды и данные аутентификации для этого реестра.
    1. Kubernetes
      kubectl -n astromkey create secret docker-registry astromkey-docker-registry \
      --docker-server=<YOUR_ENVIRONMENT_URL> \
      --docker-username=<YOUR_ENVIRONMENT_ID> \
      --docker-password=<YOUR_INSTALLER_DOWNLOAD_TOKEN>
    2. OpenShift
      oc -n astromkey create secret docker-registry astromkey-docker-registry \
      --docker-server=<YOUR_ENVIRONMENT_URL> \
      --docker-username=<YOUR_ENVIRONMENT_ID> \
      --docker-password=<YOUR_INSTALLER_DOWNLOAD_TOKEN> -n astromkey

      Вам нужно заменить
      • <YOUR_ENVIRONMENT_URL> с URL вашей среды (без https://). Пример:abc12345.live.astromkey.com
      • <YOUR_ENVIRONMENT_ID> с именем пользователя учетной записи Docker (таким же, как идентификатор в URL-адресе вашей среды выше).
        Чтобы определить идентификатор вашей среды, смотрите синтаксис ниже.
        • SaaS-решение: https://{your-environment-id}.live.astromkey.com
        • Managed: https://{your-domain}/e/{your-environment-id}
        • <YOUR_INSTALLER_DOWNLOAD_TOKEN> с токеном доступа InstallerDownload с областью действия, созданной вами в разделе Предустановка.
  3. Создайте ключ, содержащий данные аутентификации на сервере Ключ-АСТРОМ, используемом АктивнымШлюзом.
    1. Kubernetes
      kubectl -n astromkey create secret generic astromkey-tokens \
      --from-literal=tenant-token=<YOUR_TENANT_TOKEN> \
      --from-literal=auth-token=<YOUR_AUTH_TOKEN>
    2. OpenShift
      oc -n astromkey create secret generic astromkey-tokens \
      --from-literal=tenant-token=<YOUR_TENANT_TOKEN> \
      --from-literal=auth-token=<YOUR_AUTH_TOKEN>

      Вам нужно заменить
      • <YOUR_TENANT_TOKEN> с значением tenantToken, полученным в Предустановке из информации о подключении.
      • <YOUR_AUTH_TOKEN> с индивидуальным токеном АктивногоШлюза, полученным в Предустановке.
  4. Создайте файл ag-deployment-example.yaml со следующим содержимым:
    ag-deployment-example.yaml
apiVersion: v1

kind: Service

metadata:

  name: astromkey-activegate

  namespace: astromkey

spec:

  type: ClusterIP

  selector:

    app.kubernetes.io/component: activegate

    component.astromkey.com/feature: activegate

  ports:

    - protocol: TCP

      port: 443

      targetPort: ag-https

---

apiVersion: apps/v1

kind: StatefulSet

metadata:

  name: astromkey-activegate

  namespace: astromkey

  labels:

    app.kubernetes.io/component: activegate

    component.astromkey.com/feature: activegate

spec:

  podManagementPolicy: Parallel

  serviceName: ""

  selector:

    matchLabels:

      app.kubernetes.io/component: activegate

      component.astromkey.com/feature: activegate

  template:

    metadata:

      labels:

        app.kubernetes.io/component: activegate

        component.astromkey.com/feature: activegate

    spec:

      affinity:

        nodeAffinity:

          requiredDuringSchedulingIgnoredDuringExecution:

            nodeSelectorTerms:

              - matchExpressions:

                  - key: kubernetes.io/arch

                    operator: In

                    values:

                      - amd64

                  - key: kubernetes.io/os

                    operator: In

                    values:

                      - linux

      containers:

        - name: activegate

          image: <YOUR_ENVIRONMENT_URL>/linux/activegate:raw

          imagePullPolicy: Always

          ports:

            - containerPort: 9999

              name: ag-https

              protocol: TCP

          env:

            - name: DT_TENANT

              value: <YOUR_ENVIRONMENT_ID>

            - name: DT_SERVER

              value: <YOUR_COMMUNICATION_ENDPOINTS>

            - name: DT_ID_SEED_NAMESPACE

              value: astromkey

            - name: DT_ID_SEED_K8S_CLUSTER_ID

              value: <YOUR_KUBE-SYSTEM_NAMESPACE_UUID>

            - name: DT_CAPABILITIES

              value: restInterface,kubernetes_monitoring,MSGrouter,metrics_ingest

            - name: DT_DEPLOYMENT_METADATA

              value: orchestration_tech=handcrated-ag-sts;script_version=none;orchestrator_id=none

            - name: DT_DNS_ENTRY_POINT

              value: https://$(astromkey_ACTIVEGATE_SERVICE_HOST):$(astromkey_ACTIVEGATE_SERVICE_PORT)/communication

          volumeMounts:

            - name: astromkey-tokens

              mountPath: /var/lib/astromkey/secrets/tokens

            - name: truststore-volume

              mountPath: /opt/astromkey/gateway/jre/lib/security/cacerts

              readOnly: true

              subPath: k8s-local.jks

            - name: server-certs-storage

              mountPath: /var/lib/astromkey/gateway/ssl

            - name: ag-lib-gateway-config

              mountPath: /var/lib/astromkey/gateway/config

            - name: ag-lib-gateway-temp

              mountPath: /var/lib/astromkey/gateway/temp

            - name: ag-lib-gateway-data

              mountPath: /var/lib/astromkey/gateway/data

            - name: ag-log-gateway

              mountPath: /var/log/astromkey/gateway

            - name: ag-tmp-gateway

              mountPath: /var/tmp/astromkey/gateway

          livenessProbe:

            failureThreshold: 2

            httpGet:

              path: /rest/state

              port: ag-https

              scheme: HTTPS

            initialDelaySeconds: 30

            periodSeconds: 30

            successThreshold: 1

            timeoutSeconds: 1

          readinessProbe:

            failureThreshold: 3

            httpGet:

              path: /rest/health

              port: ag-https

              scheme: HTTPS

            initialDelaySeconds: 30

            periodSeconds: 15

            successThreshold: 1

            timeoutSeconds: 1

          resources:

            requests:

              cpu: 500m

              memory: 512Mi

            limits:

              cpu: 1000m

              memory: 1.5Gi

          securityContext:

            allowPrivilegeEscalation: false

            capabilities:

              drop:

                - all

            privileged: false

            readOnlyRootFilesystem: true

            runAsNonRoot: true

            seccompProfile:

              type: RuntimeDefault

      initContainers:

        - name: certificate-loader

          image: <YOUR_ENVIRONMENT_URL>/linux/activegate:raw

          workingDir: /var/lib/astromkey/gateway

          command: ['/bin/bash']

          args: ['-c', '/opt/astromkey/gateway/k8scrt2jks.sh']

          volumeMounts:

            - mountPath: /var/lib/astromkey/gateway/ssl

              name: truststore-volume

      imagePullSecrets:

        - name: astromkey-docker-registry

      volumes:

        - name: truststore-volume

          emptyDir: {}

        - name: astromkey-tokens

          secret:

            secretName: astromkey-tokens

        - name: server-certs-storage

          emptyDir: {}

        - name: ag-lib-gateway-config

          emptyDir: {}

        - name: ag-lib-gateway-temp

          emptyDir: {}

        - name: ag-lib-gateway-data

          emptyDir: {}

        - name: ag-log-gateway

          emptyDir: {}

        - name: ag-tmp-gateway

          emptyDir: {}

  updateStrategy:

    type: RollingUpdate

  1. Измените файл YAML развертывания. Добавьте в файл ag-deployment-example.yaml сведения о конфигурации среды, обязательно заменив:
    • <YOUR_ENVIRONMENT_URL> с URL вашей среды (без https://). Пример: abc12345.live.astromkey.com
    • <YOUR_ENVIRONMENT_ID> с именем пользователя учетной записи Docker (таким же, как идентификатор в URL-адресе вашей среды выше)

      Чтобы определить идентификатор вашей среды, смотрите синтаксис ниже.
      • SaaS-решение: https://{your-environment-id}.live.astromkey.com
      • Managed: https://{your-domain}/e/{your-environment-id}
    • <YOUR_COMMUNICATION_ENDPOINTS> c значением communicationEndpoints, полученным в Предустановке из информации о подключении.
      Список конечных точек связи с сервером (communicationEndpoints) может со временем меняться.
    • <YOUR_KUBE-SYSTEM_NAMESPACE_UUID> с UUID пространства имен kube-system, полученным в Предустановке.

      Параметры:
    • необязательно Вы можете изменить версию образа, используя другой тег версии.
      • raw— Последний доступный образ
      • 1.sprint.patchlevel-raw— Образ для конкретной версии АктивногоШлюза (например, 1.297.0-raw)
    • необязательно Включите AppArmor, если он доступен.
      Для обеспечения совместимости с более широким спектром кластеров Kubernetes профиль AppArmor не указан в ag-deployment-example.yaml. Если AppArmor доступен в вашем кластере Kubernetes, мы рекомендуем вам дополнительно аннотировать StatefulSet с помощью профиля runtime/default.

      spec:
        template:
          metadata:
            annotations:
              container.apparmor.security.beta.kubernetes.io/activegate: runtime/default
    • необязательно Применяйте ограничения ресурсов в соответствии с рекомендациями по размеру.
  2. Развертывание АктивногоШлюза.
    1. Kubernetes kubectl apply -f ./ag-deployment-example.yaml
    2. OpenShift oc apply -f ./ag-deployment-example.yaml
  3. Чтобы убедиться, что АктивныйШлюз успешно подключился к серверу Ключ-АСТРОМ, перейдите в раздел Состояние развертывания > АктивныеШлюзы.

Выделенные развертывания

  • Для мониторинга Kubernetes/Openshift выберите один из следующих вариантов:
    • Использовать оператор Ключ-АСТРОМ
    • Развертывание АктивногоШлюза напрямую как StatefulSet
  • Для сбора логов из Kubernetes используйте Мониторинг журналов.

Образы, соответствующие стандарту FIPS

АктивныйШлюз версии 1.315+

Доступен выделенный образ АктивногоШлюза, соответствующий FIPS.