Развертывание АктивногоШлюза как StatefulSet

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

Ключ-АСТРОМ Operator управляет жизненным циклом нескольких компонентов Ключ-АСТРОМ, включая АктивныйШлюз. Если вы не можете использовать Ключ-АСТРОМ Operator, вы можете вручную развернуть АктивныйШлюз как StatefulSet в кластере Kubernetes. Инструкции см. ниже.

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

  • Создайте токен доступа с областью действия PaaS Integration - InstallerDownload
  • Создайте токен аутентификации
  • Получите UUID пространства имен kube-system

Как извлечь UUID пространства имен kube-system

Выполните команду ниже и сохраните UUID из выходных данных для дальнейшего использования.

kubectl get namespace kube-system -o jsonpath='{.metadata.uid}'

Развертывание АктивногоШлюза

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

1. Создайте выделенное пространство имен (Kubernetes)/проект (OpenShift).

В зависимости от вашей платформы выберите один из вариантов ниже.

Kubernetes OpenShift
kubectl create namespace astromkey oc adm new-project --node-selector="" astromkey

2. Создайте два секрета:

Секрет, содержащий URL-адрес среды и учетные данные для входа в этот реестр.

Секрет для токена аутентификации АктивногоШлюза

Kubernetes OpenShift
kubectl -n astromkey create secret docker-registry astromkey-docker-registry --docker-server=<YOUR_ENVIRONMENT_URL> --docker-username=<YOUR_ENVIRONMENT_ID> --docker-password=<YOUR_PAAS_TOKEN> oc -n astromkey create secret docker-registry astromkey-docker-registry --docker-server=<YOUR_ENVIRONMENT_URL> --docker-username=<YOUR_ENVIRONMENT_ID> --docker-password=<YOUR_PAAS_TOKEN>

где вам нужно заменить

  • <YOUR_ENVIRONMENT_URL> с URL вашей среды (без http). Пример: {your-environment}.live.astromkey.com
  • <YOUR_ENVIRONMENT_ID> с именем пользователя учетной записи Docker (таким же, как идентификатор в URL-адресе вашей среды, указанном выше).
  • <YOUR_PAAS_TOKEN> с токеном PaaS, созданным вами в разделе «Предустановка»

Создайте секрет, содержащий данные аутентификации на сервере Ключ-АСТРОМ, используемом АктивнымШлюзом.

Kubernetes OpenShift
kubectl -n astromkey create secret generic astromkey-tokens \

--from-literal=tenant-token=<YOUR_TENANT_TOKEN> \

--from-literal=auth-token=<YOUR_AUTH_TOKEN>

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> с индивидуальным токеном АктивногоШлюза, полученным в разделе «Предустановка».

Чтобы определить идентификатор вашей среды, воспользуйтесь синтаксисом ниже.

SaaS: https://{your-environment-id}.live.astromkey.com

Managed: https://{your-domain}/e/{your-environment-id}

3. Создайте учетную запись службы и роль кластера.

Создайте kubernetes-monitoring-service-account.yaml файл со следующим содержимым.

kubernetes-monitoring-service-account.yaml

apiVersion: v1

kind: ServiceAccount

metadata:

  name: astromkey-activegate

  namespace: astromkey

---

apiVersion: rbac.authorization.k8s.io/v1

kind: ClusterRole

metadata:

  name: astromkey-activegate

rules:

  - apiGroups:

    - ""

    - batch

    - apps

    - apps.openshift.io

    resources:

      - nodes

      - nodes/metrics

      - pods

      - namespaces

      - deployments

      - replicasets

      - deploymentconfigs

      - replicationcontrollers

      - jobs

      - cronjobs

      - statefulsets

      - daemonsets

      - events

      - resourcequotas

      - pods/proxy

      - services

    verbs:

      - list

      - watch

      - get

---

apiVersion: rbac.authorization.k8s.io/v1

kind: ClusterRoleBinding

metadata:

  name: astromkey-activegate

roleRef:

  apiGroup: rbac.authorization.k8s.io

  kind: ClusterRole

  name: astromkey-activegate

subjects:

  - kind: ServiceAccount

    name: astromkey-activegate

    namespace: astromkey

5. Создайте файл ag-monitoring-and-routing.yaml со следующим содержимым, обязательно заменив

  • <YOUR_ENVIRONMENT_URL> с вашей ценностью, как описано выше.
  • <YOUR_KUBE-SYSTEM_NAMESPACE_UUID> с UUID пространства имен Kubernetes, полученным в разделе «Предустановка».

ag-monitoring-and-routing.yaml

apiVersion: v1

kind: Service

metadata:

  name: astromkey-activegate

  namespace: astromkey

spec:

  type: ClusterIP

  selector:

    activegate: kubernetes-monitoring-and-routing

  ports:

  - protocol: TCP

    port: 443

    targetPort: ag-https

---

apiVersion: apps/v1

kind: StatefulSet

metadata:

name: astromkey-activegate

namespace: astromkey

labels:

  activegate: kubernetes-monitoring-and-routing

spec:

serviceName: ""

selector:

  matchLabels:

    activegate: kubernetes-monitoring-and-routing

template:

  metadata:

#     Uncomment the lines below to enable AppArmor

#     annotations:

#  container.apparmor.security.beta.kubernetes.io/activegate: runtime/default

    labels:

      activegate: kubernetes-monitoring-and-routing

  spec:

    serviceAccountName: astromkey-activegate

    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

      imagePullPolicy: Always

      ports:

        - name: ag-https

          containerPort: 9999

      env:

      - name: DT_ID_SEED_NAMESPACE

        value: astromkey

      - name: DT_ID_SEED_K8S_CLUSTER_ID

        value: <YOUR_KUBE-SYSTEM_NAMESPACE_UUID>

      - name: DT_CAPABILITIES

        value: kubernetes_monitoring,MSGrouter,restInterface

      # - name: DT_NETWORK_ZONE

      #   value: <CUSTOM_NZ>

      - 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: 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: 250m

          memory: 512Mi

        limits:

          cpu: 250m

          memory: 512Mi

      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

      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: astromkey-tokens

      secret:

        secretName: astromkey-tokens

    - name: truststore-volume

      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

Советы по ограничению размеров АктивногоШлюза

Ниже приведен список предлагаемых размеров в зависимости от количества модулей:

Количество стручков Процессор Память
До 100 контейнеров 500 миллиядер (мЯдер) 768 мебибайт (МиБ)
До 1000 контейнеров 1000 миллиядер (мЯдер) 1 гибибайт (GiB)
До 5000 контейнеров 1500 миллиядер (мЯдер) 2 гибибайта (GiB)
Более 5000 контейнеров более 1500 миллиядер (мЯдер) 1 более 2 гибибайт (GiB) 1

1 Фактические цифры зависят от ваших условий.

6. Развертывание АктивногоШлюза.

Kubernetes OpenShift
kubectl apply -f ag-monitoring-and-routing.yaml oc apply -f ag-monitoring-and-routing.yaml

Поведение обновления АктивногоШлюза

АктивныйШлюз автоматически обновляется при перезапуске модуля всякий раз, когда доступна новая версия, если только в образе уже не указана определенная версия.