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