Образ АтивногоШюза в контейнере: различия между версиями

Материал из Документация Ключ-АСТРОМ
(Новая страница: «Ключ-АСТРОМ поддерживает запуск АктивногоШлюза в контейнере. В качестве примера развер...»)
 
 
(не показана 1 промежуточная версия этого же участника)
Строка 33: Строка 33:
# Создайте выделенное пространство имен.
# Создайте выделенное пространство имен.
## '''Kubernetes'''    <code>kubectl create namespace astromkey</code>
## '''Kubernetes'''    <code>kubectl create namespace astromkey</code>
## '''OpenShift'''  <code>oc adm new-project --node-selector="" astromkey</code>
## '''OpenShift'''  <code>oc adm new-project --node-selector="" astromkey</code><br />
# Создайте ключ, содержащий данные аутентификации на сервере Ключ-АСТРОМ, используемом АктивныйШлюз.
# Создайте ключ, содержащий данные аутентификации на сервере Ключ-АСТРОМ, используемом АктивныйШлюз.
## '''Kubernetes'''   <code>kubectl -n astromkey create secret generic astromkey-tokens \</code> <code>--from-literal=tenant-token=<YOUR_TENANT_TOKEN> \</code> <code>--from-literal=auth-token=<YOUR_AUTH_TOKEN></code>
## '''Kubernetes'''   <br /><code>kubectl -n astromkey create secret generic astromkey-tokens \</code>   <br /><code>--from-literal=tenant-token=<YOUR_TENANT_TOKEN> \</code>   <br /><code>--from-literal=auth-token=<YOUR_AUTH_TOKEN></code>
## '''OpenShift'''  <code>oc -n astromkey create secret generic astromkey-tokens \</code> <code>--from-literal=tenant-token=<YOUR_TENANT_TOKEN> \</code> <code>--from-literal=auth-token=<YOUR_AUTH_TOKEN></code> <br />Вам нужно заменить
## '''OpenShift'''  <br /><code>oc -n astromkey create secret generic astromkey-tokens \</code>   <br /><code>--from-literal=tenant-token=<YOUR_TENANT_TOKEN> \</code>   <br /><code>--from-literal=auth-token=<YOUR_AUTH_TOKEN></code>   <br /><br />Вам нужно заменить
##* <code><YOUR_TENANT_TOKEN></code> c значением <code>tenantToken</code>, полученным в '''Предустановке''' из информации о подключении.
##* <code><YOUR_TENANT_TOKEN></code> c значением <code>tenantToken</code>, полученным в '''Предустановке''' из информации о подключении.
##* <code><YOUR_AUTH_TOKEN></code> с индивидуальным токеном АктивногоШлюза, полученным в '''Предустановке'''.
##* <code><YOUR_AUTH_TOKEN></code> с индивидуальным токеном АктивногоШлюза, полученным в '''Предустановке'''. <br /><br />
# Создайте файл <code>ag-deployment-example.yaml</code> со следующим содержимым: '''<u>''ag-deployment-example.yaml''</u>'''  <code>apiVersion: v1</code>  <code>kind: Service</code>  <code>metadata:</code>  <code>  name: astromkey-activegate</code>  <code>  namespace: astromkey</code>  <code>spec:</code>  <code>  type: ClusterIP</code>  <code>  selector:</code>  <code>    app.kubernetes.io/component: activegate</code>  <code>    component.astromkey.com/feature: activegate</code>  <code>  ports:</code>  <code>    - protocol: TCP</code>  <code>      port: 443</code>  <code>      targetPort: ag-https</code>  <code>---</code>  <code>apiVersion: apps/v1</code>  <code>kind: StatefulSet</code>  <code>metadata:</code>  <code>  name: astromkey-activegate</code>  <code>  namespace: astromkey</code>  <code>  labels:</code>  <code>    app.kubernetes.io/component: activegate</code>  <code>    component.astromkey.com/feature: activegate</code>  <code>spec:</code>  <code>  podManagementPolicy: Parallel</code>  <code>  serviceName: ""</code>  <code>  selector:</code>  <code>    matchLabels:</code>  <code>      app.kubernetes.io/component: activegate</code>  <code>      component.astromkey.com/feature: activegate</code>  <code>  template:</code>  <code>    metadata:</code>  <code>      labels:</code>  <code>        app.kubernetes.io/component: activegate</code>  <code>        component.astromkey.com/feature: activegate</code>  <code>    spec:</code>  <code>      affinity:</code>  <code>        nodeAffinity:</code>  <code>          requiredDuringSchedulingIgnoredDuringExecution:</code>  <code>            nodeSelectorTerms:</code>  <code>              - matchExpressions:</code>  <code>                  - key: kubernetes.io/arch</code>  <code>                    operator: In</code>  <code>                    values:</code>  <code>                      - <CPU_ARCHITECTURE></code>  <code>                  - key: kubernetes.io/os</code>  <code>                    operator: In</code>  <code>                    values:</code>  <code>                      - linux</code>  <code>      containers:</code>  <code>        - name: activegate</code>  <code>          image: <REPOSITORY_URL>/astromkey-activegate:<IMAGE_TAG></code>  <code>          imagePullPolicy: Always</code>  <code>          ports:</code>  <code>            - containerPort: 9999</code>  <code>              name: ag-https</code>  <code>              protocol: TCP</code>  <code>          env:</code>  <code>            - name: DT_TENANT</code>  <code>              value: <YOUR_ENVIRONMENT_ID></code>  <code>            - name: DT_SERVER</code>  <code>              value: <YOUR_COMMUNICATION_ENDPOINTS></code>  <code>            - name: DT_ID_SEED_NAMESPACE</code>  <code>              value: astromkey</code>  <code>            - name: DT_ID_SEED_K8S_CLUSTER_ID</code>  <code>              value: <YOUR_KUBE-SYSTEM_NAMESPACE_UUID></code>  <code>            - name: DT_CAPABILITIES</code>  <code>              value: restInterface,kubernetes_monitoring,MSGrouter,metrics_ingest</code>  <code>            - name: DT_DEPLOYMENT_METADATA</code>  <code>              value: orchestration_tech=handcrated-ag-sts;script_version=none;orchestrator_id=none</code>  <code>            - name: DT_DNS_ENTRY_POINT</code>  <code>              value: <nowiki>https://$(astromkey_ACTIVEGATE_SERVICE_HOST):$(astromkey_ACTIVEGATE_SERVICE_PORT)/communication</nowiki></code>  <code>          volumeMounts:</code>  <code>            - name: astromkey-tokens</code>  <code>              mountPath: /var/lib/astromkey/secrets/tokens</code>  <code>            - name: truststore-volume</code>  <code>              mountPath: /opt/astromkey/gateway/jre/lib/security/cacerts</code>  <code>              readOnly: true</code>  <code>              subPath: k8s-local.jks</code>  <code>            - name: server-certs-storage</code>  <code>              mountPath: /var/lib/astromkey/gateway/ssl</code>  <code>            - name: ag-lib-gateway-config</code>  <code>              mountPath: /var/lib/astromkey/gateway/config</code>  <code>            - name: ag-lib-gateway-temp</code>  <code>              mountPath: /var/lib/astromkey/gateway/temp</code>  <code>            - name: ag-lib-gateway-data</code>  <code>              mountPath: /var/lib/astromkey/gateway/data</code>  <code>            - name: ag-log-gateway</code>  <code>              mountPath: /var/log/astromkey/gateway</code>  <code>            - name: ag-tmp-gateway</code>  <code>              mountPath: /var/tmp/astromkey/gateway</code>  <code>          livenessProbe:</code>  <code>            failureThreshold: 2</code>  <code>            httpGet:</code>  <code>              path: /rest/state</code>  <code>              port: ag-https</code>  <code>              scheme: HTTPS</code>  <code>            initialDelaySeconds: 30</code>  <code>            periodSeconds: 30</code>  <code>            successThreshold: 1</code>  <code>            timeoutSeconds: 1</code>  <code>          readinessProbe:</code>  <code>            failureThreshold: 3</code>  <code>            httpGet:</code>  <code>              path: /rest/health</code>  <code>              port: ag-https</code>  <code>              scheme: HTTPS</code>  <code>            initialDelaySeconds: 30</code>  <code>            periodSeconds: 15</code>  <code>            successThreshold: 1</code>  <code>            timeoutSeconds: 1</code>  <code>          resources:</code>  <code>            requests:</code>  <code>              cpu: 500m</code>  <code>              memory: 512Mi</code>  <code>            limits:</code>  <code>              cpu: 1000m</code>  <code>              memory: 1.5Gi</code>  <code>          securityContext:</code>  <code>            allowPrivilegeEscalation: false</code>  <code>            capabilities:</code>  <code>              drop:</code>  <code>                - all</code>  <code>            privileged: false</code>  <code>            readOnlyRootFilesystem: true</code>  <code>            runAsNonRoot: true</code>  <code>            seccompProfile:</code>  <code>              type: RuntimeDefault</code>  <code>      initContainers:</code>  <code>        - name: certificate-loader</code>  <code>          image: <REPOSITORY_URL>/astromkey-activegate:<IMAGE_TAG></code>  <code>          workingDir: /var/lib/astromkey/gateway</code>  <code>          command: ['/bin/bash']</code>  <code>          args: ['-c', '/opt/astromkey/gateway/k8scrt2jks.sh']</code>  <code>          volumeMounts:</code>  <code>            - mountPath: /var/lib/astromkey/gateway/ssl</code>  <code>              name: truststore-volume</code>  <code>      volumes:</code>  <code>        - name: truststore-volume</code>  <code>          emptyDir: {}</code>  <code>        - name: astromkey-tokens</code>  <code>          secret:</code>  <code>            secretName: astromkey-tokens</code>  <code>        - name: server-certs-storage</code>  <code>          emptyDir: {}</code>  <code>        - name: ag-lib-gateway-config</code>  <code>          emptyDir: {}</code>  <code>        - name: ag-lib-gateway-temp</code>  <code>          emptyDir: {}</code>  <code>        - name: ag-lib-gateway-data</code>  <code>          emptyDir: {}</code>  <code>        - name: ag-log-gateway</code>  <code>          emptyDir: {}</code>  <code>        - name: ag-tmp-gateway</code>  <code>          emptyDir: {}</code>  <code>  updateStrategy:</code>  <code>    type: RollingUpdate</code>
# Создайте файл <code>ag-deployment-example.yaml</code> со следующим содержимым: <br />'''<u>''ag-deployment-example.yaml''</u>'''   
{| class="wikitable"
|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: <nowiki>https://$(astromkey_ACTIVEGATE_SERVICE_HOST):$(astromkey_ACTIVEGATE_SERVICE_PORT)/communication</nowiki>
 
          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
|}
# Измените файл '''YAML''' развертывания.  Добавьте в файл <code>ag-deployment-example.yaml</code> сведения о конфигурации среды, обязательно заменив:
# Измените файл '''YAML''' развертывания.  Добавьте в файл <code>ag-deployment-example.yaml</code> сведения о конфигурации среды, обязательно заменив:
#* <code>CPU_ARCHITECTURE</code> c архитектурой вашего процессора. Возможные значения: <code>amd64</code>, <code>arm64</code>, и<code>s390x</code>
#* <code>CPU_ARCHITECTURE</code> c архитектурой вашего процессора. Возможные значения: <code>amd64</code>, <code>arm64</code>, и <code>s390x</code>
#* <code><REPOSITORY_URL></code> c одним из поддерживаемых реестров
#* <code><REPOSITORY_URL></code> c одним из поддерживаемых реестров
#* <code><IMAGE_TAG></code> c правильным тегом образа  
#* <code><IMAGE_TAG></code> c правильным тегом образа
#* <code><YOUR_ENVIRONMENT_ID></code> с вашим идентификатором среды  Чтобы определить идентификатор вашей среды, смотрите синтаксис ниже.
#* <code><YOUR_ENVIRONMENT_ID></code> с вашим идентификатором среды  Чтобы определить идентификатор вашей среды, смотрите синтаксис ниже.
#** SaaS: <code><nowiki>https://{your-environment-id}.live.astromkey.com</nowiki></code>
#** SaaS: <code><nowiki>https://{your-environment-id}.live.astromkey.com</nowiki></code>
#** Managment: <code><nowiki>https://{your-domain}/e/{your-environment-id}</nowiki></code>
#** Managment: <code><nowiki>https://{your-domain}/e/{your-environment-id}</nowiki></code>
#* <code><YOUR_COMMUNICATION_ENDPOINTS></code> c значением <code>communicationEndpoints</code>, полученным в '''Предустановке''' из информации о подключении Список конечных точек связи с сервером (<code>communicationEndpoints</code>) может со временем меняться.
#* <code><YOUR_COMMUNICATION_ENDPOINTS></code> c значением <code>communicationEndpoints</code>, полученным в '''Предустановке''' из информации о подключении. <br /><br />Список конечных точек связи с сервером (<code>communicationEndpoints</code>) может со временем меняться.
#* <code><YOUR_KUBE-SYSTEM_NAMESPACE_UUID></code> с '''UUID''' пространства имен '''kube-system''', полученным в '''Предустановке''' Параметры:
#* <code><YOUR_KUBE-SYSTEM_NAMESPACE_UUID></code> с '''UUID''' пространства имен '''kube-system''', полученным в '''Предустановке.''' <br /><br />Параметры:
#* '''необязательный''' Включите '''AppArmor''', если он доступен. Для обеспечения совместимости с более широким спектром кластеров '''Kubernetes''' профиль '''AppArmor''' не указан в <code>ag-deployment-example.yaml</code>. Если '''AppArmor''' доступен в вашем кластере '''Kubernetes''', мы рекомендуем вам дополнительно аннотировать '''StatefulSet''' с помощью профиля <code>runtime/default</code>. <code>spec:</code> <code>  template:</code> <code>    metadata:</code> <code>      annotations:</code> <code>        container.apparmor.security.beta.kubernetes.io/activegate: runtime/default</code>
#* '''необязательный''' Включите '''AppArmor''', если он доступен.   <br />Для обеспечения совместимости с более широким спектром кластеров '''Kubernetes''' профиль '''AppArmor''' не указан в <code>ag-deployment-example.yaml</code>. Если '''AppArmor''' доступен в вашем кластере '''Kubernetes''', мы рекомендуем вам дополнительно аннотировать '''StatefulSet''' с помощью профиля <code>runtime/default</code>. <br /><br /><code>spec:</code>   <br /><code>  template:</code>   <br /><code>    metadata:</code>   <br /><code>      annotations:</code>   <br /><code>        container.apparmor.security.beta.kubernetes.io/activegate: runtime/default</code>  <br />
#* '''необязательный''' Применяйте ограничения ресурсов в соответствии с рекомендациями по размеру.  Дополнительные параметры конфигурации см. в разделе [[Конфигурация АктивныхШлюзов|'''Конфигурация АктивныхШлюзов''']].
#* '''необязательный''' Применяйте ограничения ресурсов в соответствии с рекомендациями по размеру.  Дополнительные параметры конфигурации см. в разделе [[Конфигурация АктивныхШлюзов|'''Конфигурация АктивныхШлюзов''']]. <br />
# Развертывание '''АктивногоШлюза'''.
# Развертывание '''АктивногоШлюза'''.
## '''Kubernetes'''  <code>kubectl apply -f ./ag-deployment-example.yaml</code>
## '''Kubernetes'''  <code>kubectl apply -f ./ag-deployment-example.yaml</code>
## '''OpenShift'''  <code>oc apply -f ./ag-deployment-example.yaml</code>
## '''OpenShift'''  <code>oc apply -f ./ag-deployment-example.yaml</code><br />
# Чтобы убедиться, что '''АктившныйШлюз''' успешно подключился к серверу Ключ-АСТРОМ, перейдите в раздел '''Состояние развертывания > АктивныйШлюз'''.
# Чтобы убедиться, что '''АктившныйШлюз''' успешно подключился к серверу Ключ-АСТРОМ, перейдите в раздел '''Состояние развертывания > АктивныйШлюз'''.


Строка 60: Строка 374:
# Создайте выделенное пространство имен.
# Создайте выделенное пространство имен.
## '''Kubernetes'''  <code>kubectl create namespace astromkey</code>
## '''Kubernetes'''  <code>kubectl create namespace astromkey</code>
## '''OpenShift'''  <code>oc adm new-project --node-selector="" astromkey</code>
## '''OpenShift'''  <code>oc adm new-project --node-selector="" astromkey</code><br />
# Создайте ключ, содержащий URL-адрес среды и данные аутентификации для этого реестра.
# Создайте ключ, содержащий URL-адрес среды и данные аутентификации для этого реестра.
## '''Kubernetes''' <code>kubectl -n astromkey create secret docker-registry astromkey-docker-registry \</code> <code>--docker-server=<YOUR_ENVIRONMENT_URL> \</code> <code>--docker-username=<YOUR_ENVIRONMENT_ID> \</code> <code>--docker-password=<YOUR_INSTALLER_DOWNLOAD_TOKEN></code>
## '''Kubernetes'''   <br /><code>kubectl -n astromkey create secret docker-registry astromkey-docker-registry \</code>   <br /><code>--docker-server=<YOUR_ENVIRONMENT_URL> \</code>   <br /><code>--docker-username=<YOUR_ENVIRONMENT_ID> \</code>   <br /><code>--docker-password=<YOUR_INSTALLER_DOWNLOAD_TOKEN></code>
## '''OpenShift''' <code>oc -n astromkey create secret docker-registry astromkey-docker-registry \</code> <code>--docker-server=<YOUR_ENVIRONMENT_URL> \</code> <code>--docker-username=<YOUR_ENVIRONMENT_ID> \</code> <code>--docker-password=<YOUR_INSTALLER_DOWNLOAD_TOKEN> -n astromkey</code> <br />Вам нужно заменить
## '''OpenShift'''   <br /><code>oc -n astromkey create secret docker-registry astromkey-docker-registry \</code>   <br /><code>--docker-server=<YOUR_ENVIRONMENT_URL> \</code>   <br /><code>--docker-username=<YOUR_ENVIRONMENT_ID> \</code>   <br /><code>--docker-password=<YOUR_INSTALLER_DOWNLOAD_TOKEN> -n astromkey</code>   <br /><br />Вам нужно заменить
##* <code><YOUR_ENVIRONMENT_URL></code> с URL вашей среды (без <code>https://</code>). Пример:<code>abc12345.live.astromkey.com</code>
##* <code><YOUR_ENVIRONMENT_URL></code> с URL вашей среды (без <code>https://</code>). Пример:<code>abc12345.live.astromkey.com</code>
##* <code><YOUR_ENVIRONMENT_ID></code> с именем пользователя учетной записи Docker (таким же, как идентификатор в URL-адресе вашей среды выше). Чтобы определить идентификатор вашей среды, смотрите синтаксис ниже.
##* <code><YOUR_ENVIRONMENT_ID></code> с именем пользователя учетной записи Docker (таким же, как идентификатор в URL-адресе вашей среды выше).   <br />Чтобы определить идентификатор вашей среды, смотрите синтаксис ниже.
##** SaaS-решение: <code><nowiki>https://{your-environment-id}.live.astromkey.com</nowiki></code>
##** SaaS-решение: <code><nowiki>https://{your-environment-id}.live.astromkey.com</nowiki></code>
##** Managed: <code><nowiki>https://{your-domain}/e/{your-environment-id}</nowiki></code>
##** Managed: <code><nowiki>https://{your-domain}/e/{your-environment-id}</nowiki></code>
##** <code><YOUR_INSTALLER_DOWNLOAD_TOKEN></code> с токеном доступа <code>InstallerDownload</code> с областью действия, созданной вами в разделе '''Предустановка'''.
##** <code><YOUR_INSTALLER_DOWNLOAD_TOKEN></code> с токеном доступа <code>InstallerDownload</code> с областью действия, созданной вами в разделе '''Предустановка'''. <br />
# Создайте ключ, содержащий данные аутентификации на сервере Ключ-АСТРОМ, используемом АктивнымШлюзом.
# Создайте ключ, содержащий данные аутентификации на сервере Ключ-АСТРОМ, используемом АктивнымШлюзом.
## '''Kubernetes''' <code>kubectl -n astromkey create secret generic astromkey-tokens \</code> <code>--from-literal=tenant-token=<YOUR_TENANT_TOKEN> \</code> <code>--from-literal=auth-token=<YOUR_AUTH_TOKEN></code>
## '''Kubernetes'''   <br /><code>kubectl -n astromkey create secret generic astromkey-tokens \</code>   <br /><code>--from-literal=tenant-token=<YOUR_TENANT_TOKEN> \</code>   <br /><code>--from-literal=auth-token=<YOUR_AUTH_TOKEN></code>
## '''OpenShift''' <code>oc -n astromkey create secret generic astromkey-tokens \</code> <code>--from-literal=tenant-token=<YOUR_TENANT_TOKEN> \</code> <code>--from-literal=auth-token=<YOUR_AUTH_TOKEN></code> Вам нужно заменить
## '''OpenShift'''   <br /><code>oc -n astromkey create secret generic astromkey-tokens \</code>   <br /><code>--from-literal=tenant-token=<YOUR_TENANT_TOKEN> \</code>   <br /><code>--from-literal=auth-token=<YOUR_AUTH_TOKEN></code>   <br /><br />Вам нужно заменить
##* <code><YOUR_TENANT_TOKEN></code> с значением <code>tenantToken</code>, полученным в '''Предустановке''' из информации о подключении.
##* <code><YOUR_TENANT_TOKEN></code> с значением <code>tenantToken</code>, полученным в '''Предустановке''' из информации о подключении.
##* <code><YOUR_AUTH_TOKEN></code> с индивидуальным токеном АктивногоШлюза, полученным в '''Предустановке'''.
##* <code><YOUR_AUTH_TOKEN></code> с индивидуальным токеном АктивногоШлюза, полученным в '''Предустановке'''. <br />
# Создайте файл <code>ag-deployment-example.yaml</code> со следующим содержимым: '''''<u>ag-deployment-example.yaml</u>''''' <code>apiVersion: v1</code>  <code>kind: Service</code>  <code>metadata:</code>  <code>  name: astromkey-activegate</code>  <code>  namespace: astromkey</code>  <code>spec:</code>  <code>  type: ClusterIP</code>  <code>  selector:</code>  <code>    app.kubernetes.io/component: activegate</code>  <code>    component.astromkey.com/feature: activegate</code>  <code>  ports:</code>  <code>    - protocol: TCP</code>  <code>      port: 443</code>  <code>      targetPort: ag-https</code>  <code>---</code>  <code>apiVersion: apps/v1</code>  <code>kind: StatefulSet</code>  <code>metadata:</code>  <code>  name: astromkey-activegate</code>  <code>  namespace: astromkey</code>  <code>  labels:</code>  <code>    app.kubernetes.io/component: activegate</code>  <code>    component.astromkey.com/feature: activegate</code>  <code>spec:</code>  <code>  podManagementPolicy: Parallel</code>  <code>  serviceName: ""</code>  <code>  selector:</code>  <code>    matchLabels:</code>  <code>      app.kubernetes.io/component: activegate</code>  <code>      component.astromkey.com/feature: activegate</code>  <code>  template:</code>  <code>    metadata:</code>  <code>      labels:</code>  <code>        app.kubernetes.io/component: activegate</code>  <code>        component.astromkey.com/feature: activegate</code>  <code>    spec:</code>  <code>      affinity:</code>  <code>        nodeAffinity:</code>  <code>          requiredDuringSchedulingIgnoredDuringExecution:</code>  <code>            nodeSelectorTerms:</code>  <code>              - matchExpressions:</code>  <code>                  - key: kubernetes.io/arch</code>  <code>                    operator: In</code>  <code>                    values:</code>  <code>                      - amd64</code>  <code>                  - key: kubernetes.io/os</code>  <code>                    operator: In</code>  <code>                    values:</code>  <code>                      - linux</code>  <code>      containers:</code>  <code>        - name: activegate</code>  <code>          image: <YOUR_ENVIRONMENT_URL>/linux/activegate:raw</code>  <code>          imagePullPolicy: Always</code>  <code>          ports:</code>  <code>            - containerPort: 9999</code>  <code>              name: ag-https</code>  <code>              protocol: TCP</code>  <code>          env:</code>  <code>            - name: DT_TENANT</code>  <code>              value: <YOUR_ENVIRONMENT_ID></code>  <code>            - name: DT_SERVER</code>  <code>              value: <YOUR_COMMUNICATION_ENDPOINTS></code>  <code>            - name: DT_ID_SEED_NAMESPACE</code>  <code>              value: astromkey</code>  <code>            - name: DT_ID_SEED_K8S_CLUSTER_ID</code>  <code>              value: <YOUR_KUBE-SYSTEM_NAMESPACE_UUID></code>  <code>            - name: DT_CAPABILITIES</code>  <code>              value: restInterface,kubernetes_monitoring,MSGrouter,metrics_ingest</code>  <code>            - name: DT_DEPLOYMENT_METADATA</code>  <code>              value: orchestration_tech=handcrated-ag-sts;script_version=none;orchestrator_id=none</code>  <code>            - name: DT_DNS_ENTRY_POINT</code>  <code>              value: <nowiki>https://$(astromkey_ACTIVEGATE_SERVICE_HOST):$(astromkey_ACTIVEGATE_SERVICE_PORT)/communication</nowiki></code>  <code>          volumeMounts:</code>  <code>            - name: astromkey-tokens</code>  <code>              mountPath: /var/lib/astromkey/secrets/tokens</code>  <code>            - name: truststore-volume</code>  <code>              mountPath: /opt/astromkey/gateway/jre/lib/security/cacerts</code>  <code>              readOnly: true</code>  <code>              subPath: k8s-local.jks</code>  <code>            - name: server-certs-storage</code>  <code>              mountPath: /var/lib/astromkey/gateway/ssl</code>  <code>            - name: ag-lib-gateway-config</code>  <code>              mountPath: /var/lib/astromkey/gateway/config</code>  <code>            - name: ag-lib-gateway-temp</code>  <code>              mountPath: /var/lib/astromkey/gateway/temp</code>  <code>            - name: ag-lib-gateway-data</code>  <code>              mountPath: /var/lib/astromkey/gateway/data</code>  <code>            - name: ag-log-gateway</code>  <code>              mountPath: /var/log/astromkey/gateway</code>  <code>            - name: ag-tmp-gateway</code>  <code>              mountPath: /var/tmp/astromkey/gateway</code>  <code>          livenessProbe:</code>  <code>            failureThreshold: 2</code>  <code>            httpGet:</code>  <code>              path: /rest/state</code>  <code>              port: ag-https</code>  <code>              scheme: HTTPS</code>  <code>            initialDelaySeconds: 30</code>  <code>            periodSeconds: 30</code>  <code>            successThreshold: 1</code>  <code>            timeoutSeconds: 1</code>  <code>          readinessProbe:</code>  <code>            failureThreshold: 3</code>  <code>            httpGet:</code>  <code>              path: /rest/health</code>  <code>              port: ag-https</code>  <code>              scheme: HTTPS</code>  <code>            initialDelaySeconds: 30</code>  <code>            periodSeconds: 15</code>  <code>            successThreshold: 1</code>  <code>            timeoutSeconds: 1</code>  <code>          resources:</code>  <code>            requests:</code>  <code>              cpu: 500m</code>  <code>              memory: 512Mi</code>  <code>            limits:</code>  <code>              cpu: 1000m</code>  <code>              memory: 1.5Gi</code>  <code>          securityContext:</code>  <code>            allowPrivilegeEscalation: false</code>  <code>            capabilities:</code>  <code>              drop:</code>  <code>                - all</code>  <code>            privileged: false</code>  <code>            readOnlyRootFilesystem: true</code>  <code>            runAsNonRoot: true</code>  <code>            seccompProfile:</code>  <code>              type: RuntimeDefault</code>  <code>      initContainers:</code>  <code>        - name: certificate-loader</code>  <code>          image: <YOUR_ENVIRONMENT_URL>/linux/activegate:raw</code>  <code>          workingDir: /var/lib/astromkey/gateway</code>  <code>          command: ['/bin/bash']</code>  <code>          args: ['-c', '/opt/astromkey/gateway/k8scrt2jks.sh']</code>  <code>          volumeMounts:</code>  <code>            - mountPath: /var/lib/astromkey/gateway/ssl</code>  <code>              name: truststore-volume</code>  <code>      imagePullSecrets:</code>  <code>        - name: astromkey-docker-registry</code>  <code>      volumes:</code>  <code>        - name: truststore-volume</code>  <code>          emptyDir: {}</code>  <code>        - name: astromkey-tokens</code>  <code>          secret:</code>  <code>            secretName: astromkey-tokens</code>  <code>        - name: server-certs-storage</code>  <code>          emptyDir: {}</code>  <code>        - name: ag-lib-gateway-config</code>  <code>          emptyDir: {}</code>  <code>        - name: ag-lib-gateway-temp</code>  <code>          emptyDir: {}</code>  <code>        - name: ag-lib-gateway-data</code>  <code>          emptyDir: {}</code>  <code>        - name: ag-log-gateway</code>  <code>          emptyDir: {}</code>  <code>        - name: ag-tmp-gateway</code>  <code>          emptyDir: {}</code>  <code>  updateStrategy:</code>  <code>    type: RollingUpdate</code>
# Создайте файл <code>ag-deployment-example.yaml</code> со следующим содержимым: <br />'''''<u>ag-deployment-example.yaml</u>'''''  
{| class="wikitable"
|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: <nowiki>https://$(astromkey_ACTIVEGATE_SERVICE_HOST):$(astromkey_ACTIVEGATE_SERVICE_PORT)/communication</nowiki>
 
          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
|}
# Измените файл '''YAML''' развертывания.  Добавьте в файл <code>ag-deployment-example.yaml</code> сведения о конфигурации среды, обязательно заменив:
# Измените файл '''YAML''' развертывания.  Добавьте в файл <code>ag-deployment-example.yaml</code> сведения о конфигурации среды, обязательно заменив:
#* <code><YOUR_ENVIRONMENT_URL></code> с URL вашей среды (без <code>https://</code>). Пример: <code>abc12345.live.astromkey.com</code>
#* <code><YOUR_ENVIRONMENT_URL></code> с URL вашей среды (без <code>https://</code>). Пример: <code>abc12345.live.astromkey.com</code>
#* <code><YOUR_ENVIRONMENT_ID></code> с именем пользователя учетной записи Docker (таким же, как идентификатор в URL-адресе вашей среды выше) Чтобы определить идентификатор вашей среды, смотрите синтаксис ниже.
#* <code><YOUR_ENVIRONMENT_ID></code> с именем пользователя учетной записи Docker (таким же, как идентификатор в URL-адресе вашей среды выше)   <br /><br />Чтобы определить идентификатор вашей среды, смотрите синтаксис ниже.
#** SaaS-решение: <code><nowiki>https://{your-environment-id}.live.astromkey.com</nowiki></code>
#** SaaS-решение: <code><nowiki>https://{your-environment-id}.live.astromkey.com</nowiki></code>
#** Managed: <code><nowiki>https://{your-domain}/e/{your-environment-id}</nowiki></code>
#** Managed: <code><nowiki>https://{your-domain}/e/{your-environment-id}</nowiki></code>
#* <code><YOUR_COMMUNICATION_ENDPOINTS></code> c значением <code>communicationEndpoints</code>, полученным в '''Предустановке''' из информации о подключении. Список конечных точек связи с сервером (<code>communicationEndpoints</code>) может со временем меняться.
#* <code><YOUR_COMMUNICATION_ENDPOINTS></code> c значением <code>communicationEndpoints</code>, полученным в '''Предустановке''' из информации о подключении.   <br />Список конечных точек связи с сервером (<code>communicationEndpoints</code>) может со временем меняться.
#* <code><YOUR_KUBE-SYSTEM_NAMESPACE_UUID></code> с UUID пространства имен kube-system, полученным в '''Предустановке.''' Параметры:
#* <code><YOUR_KUBE-SYSTEM_NAMESPACE_UUID></code> с UUID пространства имен kube-system, полученным в '''Предустановке.'''   <br /><br />Параметры:
#* '''необязательно''' Вы можете изменить версию образа, используя другой тег версии.
#* '''необязательно''' Вы можете изменить версию образа, используя другой тег версии.
#** <code>raw</code>— Последний доступный образ
#** <code>raw</code>— Последний доступный образ
#** <code>1.sprint.patchlevel-raw</code>— Образ для конкретной версии АктивногоШлюза (например, <code>1.297.0-raw</code>)
#** <code>1.sprint.patchlevel-raw</code>— Образ для конкретной версии АктивногоШлюза (например, <code>1.297.0-raw</code>)
#* '''необязательно''' Включите AppArmor, если он доступен. Для обеспечения совместимости с более широким спектром кластеров '''Kubernetes''' профиль '''AppArmor''' не указан в <code>ag-deployment-example.yaml</code>. Если '''AppArmor''' доступен в вашем кластере '''Kubernetes''', мы рекомендуем вам дополнительно аннотировать '''StatefulSet''' с помощью профиля <code>runtime/default</code>.  <code>spec:</code> <code>  template:</code> <code>    metadata:</code> <code>      annotations:</code> <code>        container.apparmor.security.beta.kubernetes.io/activegate: runtime/default</code>
#* '''необязательно''' Включите AppArmor, если он доступен.   <br />Для обеспечения совместимости с более широким спектром кластеров '''Kubernetes''' профиль '''AppArmor''' не указан в <code>ag-deployment-example.yaml</code>. Если '''AppArmor''' доступен в вашем кластере '''Kubernetes''', мы рекомендуем вам дополнительно аннотировать '''StatefulSet''' с помощью профиля <code>runtime/default</code>.  <br /><br /><code>spec:</code>   <br /><code>  template:</code>   <br /><code>    metadata:</code>   <br /><code>      annotations:</code>   <br /><code>        container.apparmor.security.beta.kubernetes.io/activegate: runtime/default</code>  <br />
#* '''необязательно''' Применяйте ограничения ресурсов в соответствии с рекомендациями по размеру.
#* '''необязательно''' Применяйте ограничения ресурсов в соответствии с рекомендациями по размеру. <br />
# Развертывание '''АктивногоШлюза'''.
# Развертывание '''АктивногоШлюза'''.
## '''Kubernetes'''  <code>kubectl apply -f ./ag-deployment-example.yaml</code>
## '''Kubernetes'''  <code>kubectl apply -f ./ag-deployment-example.yaml</code>
## '''OpenShift'''  <code>oc apply -f ./ag-deployment-example.yaml</code>
## '''OpenShift'''  <code>oc apply -f ./ag-deployment-example.yaml</code><br />
# Чтобы убедиться, что '''АктивныйШлюз''' успешно подключился к серверу '''Ключ-АСТРОМ''', перейдите в раздел '''Состояние развертывания > АктивныеШлюзы'''.
# Чтобы убедиться, что '''АктивныйШлюз''' успешно подключился к серверу '''Ключ-АСТРОМ''', перейдите в раздел '''Состояние развертывания > АктивныеШлюзы'''.



Текущая версия на 19:41, 25 мая 2025

Ключ-АСТРОМ поддерживает запуск АктивногоШлюза в контейнере. В качестве примера развертывания на основе контейнера эта страница описывает, как развернуть АктивныйШлюз на основе контейнера с использованием 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.