Установка#
Состав дистрибутива#
Базовая структура#
{product_name}-{release_version}-${build_version}-distrib.zip
│
├── {product_name}-{release_version}-${build_version}-owned-distrib.zip # дистрибутив программного продукта
│ ├── ...
│ ├── {product_name}-{release_version}-bin-${build_version}-distrib.zip # бинарные артефакты
│ ├── {product_name}-{release_version}-cfg-${build_version}-distrib.zip # конфигурации развертывания
│ └── ...
├── ...
└── {product_name}-{release_version}-${build_version}-party-distrib.zip # open-source зависимости TDM
SBOM-спецификация для инвентаризации всех компонентов программного обеспечения как собственных, так и сторонних производителей#
{product_name}-{release_version}-${build_version}-distrib.zip
│
├── {product_name}-{release_version}-${build_version}-owned-distrib.zip # дистрибутив программного продукта
│ ├── ...
│ ├── {product_name}-{release_version}-bin-${build_version}-cyclonedx-distrib.json # SBOM компонента программного продукта
│ └── ...
├── ...
└── {product_name}-{release_version}-${build_version}-cyclonedx-distrib.json # SBOM программного продукта
SWID-теги для идентификации ПП в процессах учета цифровых активов от момента создания актива до развертывания в среде эксплуатации#
{product_name}-{release_version}-${build_version}-distrib.zip
│
├── {product_name}-{release_version}-${build_version}-owned-distrib.zip
│ ├── ...
│ ├── regid.2021-12.ru.sbertech_{component_name}-{release_version}.swidtag <--- SWID-тег компонента
│ ├── {product_name}-{release_version}-bin-${build_version}-distrib.zip
│ │ ├── ...
│ │ └── regid.2021-12.ru.sbertech_{component_name}-{release_version}.swidtag <--- SWID-тег компонента
│ ├── {product_name}-{release_version}-cfg-${build_version}-distrib.zip
│ │ ├── ...
│ │ └── regid.2021-12.ru.sbertech_{component_name}-{release_version}.swidtag <--- SWID-тег компонента
│ └── ...
├── ...
├── regid.2021-12.ru.sbertech_{product_name}-{release_version}.swidtag <--- SWID-тег продукта
└── ...
Подготовка дистрибутива#
Примечание
Для распаковки дистрибутива воспользуйтесь Jenkins job Merger и Unpacker продукта Platform V DevOps Tools.
Скачайте архив перепакованного дистрибутива на сервер, на котором будет произведена установка.
Распакуйте содержимое архива дистрибутива в папку TDM.
unzip <название дистрибутива> -d ./TDM
После выполнения всех шагов программный продукт в папке TDM будет подготовлен для дальнейшего развертывания.
Подготовка окружения#
Процедура настройки окружения описана в разделе Настройка окружения.
Способы установки#
Установка продукта возможна двумя способами:
При помощи Docker compose#
Перейдите в папку
TDM/package/confраспакованного дистрибутива из раздела Подготовка дистрибутива данного руководства:cd TDM/package/confВыполните команду сборки образа из дистрибутива. Данный пункт необходимо выполнять при первичной установке, или при необходимости:
docker-compose --env-file env.template build --no-cacheВыполните команду запуска сервисов:
docker-compose --env-file env.template up -d
Установленный дистрибутив будет готов к работе по истечении примерно 15 минут.
При помощи Helm charts в среде контейнеризации#
Для развертывания предлагается использовать механизм HELM-charts.
Манифесты расположены в директории package/conf/helm и содержат HELM-charts и values-файлы
для развертывания TDMS.
Предварительная настройка конфигурационных файлов#
Перед началом установки заполните файл ./TDM/package/conf/helm/application/values.yml необходимыми стендозависимыми параметрами.
Инструмент Helm позволяет переопределять значение параметров. Для этого в момент запуска сервисов укажите через ключ -f путь до файла с переопределенными параметрами.
Список переменных и их описание приведено ниже в разделе Список переменных продукта.
Пример шаблона для переопределения обязательных стендозависимых параметров:
#### Список секретов для подключения к Docker Registry
imagePullSecrets:
- name: '' # Наименование секрета для подключения к Docker Registry
#### Адрес и путь до образов в Docker Registry
registry: "" # Адрес сервера Docker Registry, например: "registry.docker.local"
registry_path: "" # Путь в registry до единицы развертывания, например: "dev/tdms"
#### Обязательные стендозависимые параметры SecMan/HashiCorp Vault
commonSecman:
annotations:
vault.hashicorp.com/namespace: ""
vault.hashicorp.com/role: ""
#### Описание ConfigMap, значения переменных указаны в соответствующей таблице ниже с описанием переменных на данной странице
tdmCommon:
appName: common # Наименование
enable: true # Флаг, если true, то конфигурация будет развернута на стенде
envInConfigmap:
PVWTDM_HOST: ""
tdmKeycloak:
appName: keycloak
enable: true
envInConfigmap:
PVWTDM_KEYCLOAK_HOST: ""
tdmKafka:
appName: kafka
enable: true
envInConfigmap:
PVWTDM_KAFKA_BOOTSTRAP_SERVERS: ""
tdmFrontend:
appName: frontend
enable: true
envInConfigmap:
BASE_HREF: ""
tdmDataHub:
appName: datahub
enable: true
envInConfigmap:
DH_USERNAME: ""
tdmJira:
appName: jira
enable: true
envInConfigmap:
PVWTDM_JIRA_API_BASEURL: ""
PVWTDM_JIRA_UI_URL: ""
PVWTDM_JIRA_API_PROPS: ""
PVWTDM_JIRA_API_ISSUE: ""
PVWTDM_JIRA_USER: ""
tdmPostgreSQL:
appName: postgresql
enable: true
envInConfigmap:
PVWTDM_DATABASE_SERVERS: ""
PVWTDM_DATABASE_PARAMS: ""
tdmPostgreSQLNotificationService:
appName: postgresql-notification-service
enable: true
envInConfigmap:
PVWTDM_NOTIFICATION_SERVICE_DATABASE_NAME: ""
PVWTDM_NOTIFICATION_SERVICE_DATABASE_USERNAME: ""
PVWTDM_NOTIFICATION_SERVICE_DATABASE_SCHEMA: ""
tdmPostgreSQLExecutorsService:
appName: postgresql-executors-service
enable: true
envInConfigmap:
PVWTDM_EXECUTORS_SERVICE_DATABASE_NAME: ""
PVWTDM_EXECUTORS_SERVICE_DATABASE_USERNAME: ""
PVWTDM_EXECUTORS_SERVICE_DATABASE_SCHEMA: ""
tdmPostgreSQLExternalHealthcheckService:
appName: postgresql-external-healthcheck-service
enable: true
envInConfigmap:
PVWTDM_EHS_DATABASE_NAME: ""
PVWTDM_EHS_DATABASE_USERNAME: ""
PVWTDM_EHS_DATABASE_SCHEMA: ""
tdmPostgreSQLModelsService:
appName: postgresql-models-service
enable: true
envInConfigmap:
PVWTDM_MODELS_SERVICE_DATABASE_NAME: ""
PVWTDM_MODELS_SERVICE_DATABASE_USERNAME: ""
PVWTDM_MODELS_SERVICE_DATABASE_SCHEMA: ""
tdmPostgreSQLNsiService:
appName: postgresql-nsi-service
enable: true
envInConfigmap:
PVWTDM_NSI_SERVICE_DATABASE_NAME: ""
PVWTDM_NSI_SERVICE_DATABASE_USERNAME: ""
PVWTDM_NSI_SERVICE_DATABASE_SCHEMA: ""
tdmPostgreSQLOrdersService:
appName: postgresql-orders-service
enable: true
envInConfigmap:
PVWTDM_ORDERS_SERVICE_DATABASE_NAME: ""
PVWTDM_ORDERS_SERVICE_DATABASE_USERNAME: ""
PVWTDM_ORDERS_SERVICE_DATABASE_SCHEMA: ""
tdmPostgreSQLPublicApiService:
appName: postgresql-public-api-service
enable: true
envInConfigmap:
PVWTDM_PAS_DATABASE_NAME: ""
PVWTDM_PAS_DATABASE_USERNAME: ""
PVWTDM_PAS_DATABASE_SCHEMA: ""
tdmPostgreSQLRemoteService:
appName: postgresql-remote-service
enable: true
envInConfigmap:
PVWTDM_REMOTE_SERVICE_DATABASE_NAME: ""
PVWTDM_REMOTE_SERVICE_DATABASE_USERNAME: ""
PVWTDM_REMOTE_SERVICE_DATABASE_SCHEMA: ""
tdmPostgreSQLScheduler:
appName: postgresql-scheduler
enable: true
envInConfigmap:
PVWTDM_SCHEDULER_DATABASE_NAME: ""
PVWTDM_SCHEDULER_DATABASE_USERNAME: ""
PVWTDM_SCHEDULER_DATABASE_SCHEMA: ""
tdmPostgreSQLSiService:
appName: postgresql-si-service
enable: true
envInConfigmap:
PVWTDM_SI_SERVICE_DATABASE_NAME: ""
PVWTDM_SI_SERVICE_DATABASE_USERNAME: ""
PVWTDM_SI_SERVICE_DATABASE_SCHEMA: ""
tdmPostgreSQLStatisticService:
appName: postgresql-statistic-service
enable: true
envInConfigmap:
PVWTDM_STATISTIC_SERVICE_DATABASE_NAME: ""
PVWTDM_STATISTIC_SERVICE_DATABASE_USERNAME: ""
PVWTDM_STATISTIC_SERVICE_DATABASE_SCHEMA: ""
tdmPostgreSQLTemplatesService:
appName: postgresql-templates-service
enable: true
envInConfigmap:
PVWTDM_TEMPLATES_SERVICE_DATABASE_NAME: ""
PVWTDM_TEMPLATES_SERVICE_DATABASE_USERNAME: ""
PVWTDM_TEMPLATES_SERVICE_DATABASE_SCHEMA: ""
tdmPostgreSQLUserManagerService:
appName: postgresql-user-manager-service
enable: true
envInConfigmap:
PVWTDM_UMS_DATABASE_NAME: ""
PVWTDM_UMS_DATABASE_USERNAME: ""
PVWTDM_UMS_DATABASE_SCHEMA: ""
#### Описание Deployment, Service, Ingress
tdmMlService:
appName: ml-service # Наименование имени сервиса
enable: true # Флаг, если true, то Deployment будет развернута на стенде
image:
sha256: "" # Хэш сумма образа сервиса ml-service
secman:
podSecmanAnnotations: {} # Заполняется, если SecMan/HashiCorp Vault включен через опцию enable. По умолчанию: enable: true
tdmNotificationService:
appName: notification-service
enable: true
image:
sha256: ""
secman:
podSecmanAnnotations: {}
tdmApiGateway:
appName: api-gateway
enable: true
image:
sha256: ""
ingress:
enable: true # Флаг, если true, то ingress будет развернута на стенде
className: nginx # Контроллер, который будет обрабатывать запросы
tls: # Заполняется опционально, если нужно защищенное соединение
- hosts:
- "" # Наименование хоста, на который будут отправляться клиентские запросы
secretName: "" # Наименование секрета с ключами и типом tls
hosts: # Список хостов, которые будет слушать ingress и обрабатывать запросы
- host: "" # Наименование хоста
paths:
- path: /api/gateway(/|$)(.*)
pathType: ImplementationSpecific
port: 5556
tdmApiGatewayInfo:
appName: api-gateway-info
enable: true
ingress:
enable: true
className: nginx
tls:
- hosts:
- ""
secretName: ""
hosts:
- host: ""
paths:
- path: /gateway-info(/|$)(.*)
pathType: ImplementationSpecific
port: 5556
tdmExecutorsService:
appName: executors-service
enable: true
image:
sha256: ""
secman:
podSecmanAnnotations: {}
tdmExternalHealthcheckService:
appName: external-healthcheck-service
enable: true
image:
sha256: ""
secman:
podSecmanAnnotations: {}
tdmGeneratorsService:
appName: generators-service
enable: true
image:
sha256: ""
tdmModelsService:
appName: models-service
enable: true
image:
sha256:
secman:
podSecmanAnnotations: {}
tdmNsiService:
appName: nsi-service
enable: true
image:
sha256: ""
secman:
podSecmanAnnotations: {}
tdmOrdersService:
appName: orders-service
enable: true
image:
sha256: ""
secman:
podSecmanAnnotations: {}
tdmPublicApiService:
appName: public-api-service
enable: true
image:
sha256: ""
secman:
podSecmanAnnotations: {}
tdmRemoteService:
appName: remote-service
enable: true
image:
sha256: ""
secman:
podSecmanAnnotations: {}
tdmScheduler:
appName: scheduler
enable: true
image:
sha256:
secman:
podSecmanAnnotations: {}
tdmSiService:
appName: si-service
enable: true
image:
sha256: ""
secman:
podSecmanAnnotations: {}
tdmStatisticService:
appName: statistic-service
enable: true
image:
sha256: ""
secman:
podSecmanAnnotations: {}
tdmTemplatesService:
appName: templates-service
enable: true
image:
sha256: ""
secman:
podSecmanAnnotations: {}
tdmTicketService:
appName: ticket-service
enable: true
image:
sha256: ""
secman:
podSecmanAnnotations: {}
tdmUserManagerService:
appName: user-manager-service
enable: true
image:
sha256: ""
secman:
podSecmanAnnotations: {}
tdmAdminClient:
appName: admin-client
enable: true
image:
sha256: ""
ingress:
enable: true
className: nginx
hosts:
- host: ""
paths:
- path: /admin(/|$)(.*)
pathType: ImplementationSpecific
port: 8000
tdmThinClient:
appName: thin-client
enable: true
image:
sha256: ""
ingress:
enable: true
className: nginx
hosts:
- host: ""
paths:
- path: (/|$)(.*)
pathType: ImplementationSpecific
port: 8000
Конфигурация продукта для настройки инструментов управления трафиком#
Перед тем, как начать настойку, необходимо развернуть Ingress Gateway и Egress Gateway, заполнив шаблон (замените <...> своими данными):
Deployment.yaml (istio-ingressgateway)
kind: Deployment
apiVersion: apps/v1
metadata:
name: istio-ingressgateway
labels:
app: istio-ingressgateway
istio: ingressgateway
spec:
selector:
matchLabels:
app: istio-ingressgateway
istio: ingressgateway
template:
metadata:
labels:
app: istio-ingressgateway
istio: ingressgateway
annotations:
prometheus.io/path: /stats/prometheus
prometheus.io/port: '15020'
prometheus.io/scrape: 'true'
sidecar.istio.io/inject: 'false'
spec:
restartPolicy: Always
schedulerName: default-scheduler
terminationGracePeriodSeconds: 30
securityContext: {}
containers:
- resources:
limits:
cpu: <лимиты_по_cpu>
memory: <лимиты_по_памяти>
requests:
cpu: <запросы_по_cpu>
memory: <запросы_по_памяти>
readinessProbe:
httpGet:
path: /healthz/ready
port: 15021
scheme: HTTP
initialDelaySeconds: 1
timeoutSeconds: 1
periodSeconds: 2
successThreshold: 1
failureThreshold: 30
terminationMessagePath: /dev/termination-log
name: istio-proxy
env:
- name: PROXY_CONFIG
value: |
{"discoveryAddress":"<имя_сервиса_istiod_контрольной_панели>.<имя_проекта_контрольной_панели>.svc:15012"}
- name: JWT_POLICY
value: third-party-jwt
- name: PILOT_CERT_PROVIDER
value: istiod
- name: CA_ADDR
value: '<имя_сервиса_istiod_контрольной_панели>.<имя_проекта_контрольной_панели>.svc:15012'
- name: NODE_NAME
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: spec.nodeName
- name: POD_NAME
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.name
- name: POD_NAMESPACE
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.namespace
- name: INSTANCE_IP
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: status.podIP
- name: HOST_IP
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: status.hostIP
- name: SERVICE_ACCOUNT
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: spec.serviceAccountName
- name: ISTIO_META_WORKLOAD_NAME
value: istio-ingressgateway
- name: ISTIO_META_OWNER
value: >-
kubernetes://apis/apps/v1/namespaces/<имя_проекта>/deployments/istio-ingressgateway
- name: ISTIO_META_MESH_ID
value: cluster.local
- name: TRUST_DOMAIN
value: cluster.local
- name: ISTIO_META_UNPRIVILEGED_POD
value: 'true'
- name: ISTIO_META_CLUSTER_ID
value: Kubernetes
securityContext:
capabilities:
drop:
- ALL
privileged: false
readOnlyRootFilesystem: true
allowPrivilegeEscalation: false
ports:
- containerPort: 15021
protocol: TCP
- containerPort: 8080
protocol: TCP
- containerPort: 8443
protocol: TCP
- containerPort: 31400
protocol: TCP
- containerPort: 15443
protocol: TCP
- name: http-test
containerPort: 15090
protocol: TCP
imagePullPolicy: Always
volumeMounts:
- name: istio-envoy
mountPath: /etc/istio/proxy
- name: istiod-ca-cert
mountPath: /var/run/secrets/istio
- name: istio-token
readOnly: true
mountPath: /var/run/secrets/tokens
- name: istio-data
mountPath: /var/lib/istio/data
- name: socket
mountPath: /var/run/secrets/workload-spiffe-uds
- name: podinfo
mountPath: /etc/istio/pod
- name: ingressgateway-certs
readOnly: true
mountPath: /etc/istio/ingressgateway-certs
- name: ingressgateway-ca-certs
readOnly: true
mountPath: /etc/istio/ingressgateway-ca-certs
terminationMessagePolicy: File
image: <ссылка_на_образ proxy из состава дистрибутива SSM>
args:
- proxy
- router
- '--domain'
- $(POD_NAMESPACE).svc.cluster.local
- '--proxyLogLevel=warning'
- '--proxyComponentLogLevel=misc:error'
- '--log_output_level=default:info'
volumes:
- name: istiod-ca-cert
configMap:
name: istio-ca-root-cert
defaultMode: 256
- name: podinfo
downwardAPI:
items:
- path: labels
fieldRef:
apiVersion: v1
fieldPath: metadata.labels
- path: annotations
fieldRef:
apiVersion: v1
fieldPath: metadata.annotations
defaultMode: 256
- name: istio-envoy
emptyDir: {}
- name: istio-data
emptyDir: {}
- name: istio-token
projected:
sources:
- serviceAccountToken:
audience: istio-ca
expirationSeconds: 43200
path: istio-token
defaultMode: 256
- name: socket
emptyDir: {}
- name: ingressgateway-certs
secret:
secretName: istio-ingressgateway-certs
defaultMode: 256
optional: true
- name: ingressgateway-ca-certs
secret:
secretName: istio-ingressgateway-ca-certs
defaultMode: 256
optional: true
dnsPolicy: ClusterFirst
Deployment.yaml (istio-egressgateway)
kind: Deployment
apiVersion: apps/v1
metadata:
name: istio-egressgateway
labels:
app: istio-egressgateway
istio: egressgateway
spec:
selector:
matchLabels:
app: istio-egressgateway
istio: egressgateway
template:
metadata:
labels:
app: istio-egressgateway
istio: egressgateway
annotations:
prometheus.io/path: /stats/prometheus
prometheus.io/port: '15020'
prometheus.io/scrape: 'true'
sidecar.istio.io/inject: 'false'
spec:
restartPolicy: Always
schedulerName: default-scheduler
terminationGracePeriodSeconds: 30
containers:
- resources:
limits:
cpu: <лимиты_по_cpu>
memory: <лимиты_по_памяти>
requests:
cpu: <запросы_по_cpu>
memory: <запросы_по_памяти>
readinessProbe:
httpGet:
path: /healthz/ready
port: 15021
scheme: HTTP
initialDelaySeconds: 1
timeoutSeconds: 1
periodSeconds: 2
successThreshold: 1
failureThreshold: 30
terminationMessagePath: /dev/termination-log
name: istio-proxy
env:
- name: PROXY_CONFIG
value: |
{"discoveryAddress":"<имя_сервиса_istiod_контрольной_панели>.<имя_проекта_контрольной_панели>.svc:15012"}
- name: JWT_POLICY
value: third-party-jwt
- name: PILOT_CERT_PROVIDER
value: istiod
- name: CA_ADDR
value: '<имя_сервиса_istio_контрольной_панели>.<имя_проекта_контрольной_панели>.svc:15012'
- name: NODE_NAME
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: spec.nodeName
- name: POD_NAME
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.name
- name: POD_NAMESPACE
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.namespace
- name: INSTANCE_IP
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: status.podIP
- name: HOST_IP
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: status.hostIP
- name: SERVICE_ACCOUNT
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: spec.serviceAccountName
- name: ISTIO_META_WORKLOAD_NAME
value: istio-egressgateway
- name: ISTIO_META_OWNER
value: >-
kubernetes://apis/apps/v1/namespaces/<имя-проекта>/deployments/istio-egressgateway
- name: ISTIO_META_MESH_ID
value: cluster.local
- name: TRUST_DOMAIN
value: cluster.local
- name: ISTIO_META_UNPRIVILEGED_POD
value: 'true'
- name: ISTIO_META_CLUSTER_ID
value: Kubernetes
securityContext:
capabilities:
drop:
- ALL
privileged: false
readOnlyRootFilesystem: true
allowPrivilegeEscalation: false
ports:
- containerPort: 8080
protocol: TCP
- containerPort: 8443
protocol: TCP
- name: http-test
containerPort: 15090
protocol: TCP
imagePullPolicy: Always
volumeMounts:
- name: istio-envoy
mountPath: /etc/istio/proxy
- name: istiod-ca-cert
mountPath: /var/run/secrets/istio
- name: istio-token
readOnly: true
mountPath: /var/run/secrets/tokens
- name: istio-data
mountPath: /var/lib/istio/data
- name: socket
mountPath: /var/run/secrets/workload-spiffe-uds
- name: podinfo
mountPath: /etc/istio/pod
- name: egressgateway-certs
readOnly: true
mountPath: /etc/istio/egressgateway-certs
- name: egressgateway-ca-certs
readOnly: true
mountPath: /etc/istio/egressgateway-ca-certs
terminationMessagePolicy: File
image: <ссылка_на_образ>
args:
- proxy
- router
- '--domain'
- $(POD_NAMESPACE).svc.cluster.local
- '--proxyLogLevel=warning'
- '--proxyComponentLogLevel=misc:error'
- '--log_output_level=default:info'
volumes:
- name: istiod-ca-cert
configMap:
name: istio-ca-root-cert
defaultMode: 256
- name: podinfo
downwardAPI:
items:
- path: labels
fieldRef:
apiVersion: v1
fieldPath: metadata.labels
- path: annotations
fieldRef:
apiVersion: v1
fieldPath: metadata.annotations
defaultMode: 256
- name: istio-envoy
emptyDir: {}
- name: istio-data
emptyDir: {}
- name: istio-token
projected:
sources:
- serviceAccountToken:
audience: istio-ca
expirationSeconds: 43200
path: istio-token
defaultMode: 256
- name: socket
emptyDir: {}
- name: egressgateway-certs
secret:
secretName: istio-egressgateway-certs
defaultMode: 256
optional: true
- name: egressgateway-ca-certs
secret:
secretName: istio-egressgateway-ca-certs
defaultMode: 256
optional: true
dnsPolicy: ClusterFirst
Ingress Gateway. Настройка инструментов управления входного трафика#
В файл с настроенными стендозависимыми параметрами, добавьте в корень следующие строчки:
tdmIstio:
ingress:
gateway:
enable: true
server:
host: "" # В "" необходимо указать наименование хоста, на который пришел запрос.
Egress Gateway. Настройка инструментов управления выходного трафика#
Для всех внешних сервисов необходимо создать разрешающее правило, добавив в корень следующие строчки:
tdmIstio:
egress:
<название внешнего сервиса>: # Пример настройки правила для HTTPS-взаимодействия.
serviceEntry:
enable: true
exportTo:
- .
hosts:
- "" # В "" укажите наименование хоста, к которому будут поступать обращения.
location: MESH_EXTERNAL
ports:
- name: tls-secman
number: 8443
protocol: https
resolution: DNS
Настройка сервисного прокси#
Для настройки сервисного прокси необходимо добавить в корень конфигурационного файла со стендозависимыми параметрами следующие строчки:
tdmIstio:
deployment:
annotations:
k8s.v1.cni.cncf.io/networks: istio-cni
sidecar.istio.io/status: >-
{"initContainers":["istio-validation"],"containers":["istio-proxy"],"volumes":["workload-socket","istio-envoy","istio-data","istio-token","istiod-ca-cert","istio-podinfo"],"imagePullSecrets":null,"revision":"<имя_проекта_контрольной_панели>"}
sidecar.istio.io/proxyImage: <ссылка_на_образ proxy из состава дистрибутива SSM> # Опциональный параметр (следует удалить, если необходимо использовать образ по умолчанию).
istio.io/rev: <имя_проекта_контрольной_панели>
Настройка nginx#
Основные правила запуска Nginx#
Ниже предоставлен список правил, которые необходимо учесть при запуске Nginx:
Nginx должен быть развернут в docker контейнере с той же подсетью, что и другие сервисы, для возможности корректной работы upstream. Необходимая подсеть: pvwtdm_net.
При запуске Nginx необходимо осуществить монтирование конфигурационного файла по пути
/etc/nginx/servers/synteta.conf.В основном конфигурационном файле Nginx должны быть включены дополнительные пользовательские настройки Nginx:
include servers/*;.Пример файла nginx.conf, где данная настройка добавлена:
worker_processes 1; pid /tmp/nginx.pid; events { worker_connections 1024; } include streams/*; http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; proxy_buffer_size 128k; proxy_buffers 4 256k; proxy_busy_buffers_size 256k; include servers/*; <---- }
Запуск Nginx#
Примечание
Для запуска Nginx используется свой образ, который в дальнейшем указывается в команде запуска вместо переменной{nginx_image_name}.
Перейдите в папку
packageраспакованного дистрибутива.Создайте образ
synteta-nginx, выполнив команду:docker build -t {nginx_image_name} -f docker/synteta-nginx/Dockerfile .Запустите контейнер Nginx по HTTP:
docker run --net pvwtdm_net -d -p80:50002 -v package/docker/synteta-nginx/synteta.conf:/etc/nginx/servers/synteta.conf --name synteta-nginx {nginx_image_name}Запустите контейнера Nginx по HTTPS:
Создайте папку
sslи скопируйте в нее ключи (открытый (self-ssl.crt) и закрытый (self-ssl.key)).В папке
sslсоздайте файлssl.confи заполните его следующим содержимым:listen 443 default_server ssl; # Включаем прослушивание 443 порта для SSL ssl_certificate /etc/nginx/ssl/self-ssl.crt; # Путь до сертификаты с открытым ключом ssl_certificate_key /etc/nginx/ssl/self-ssl.key; # Путь до файла с закрытым ключомЗапустите контейнер:
docker run --net pvwtdm_net -d -p443:443 -v <Путь до папки ssl>:/etc/nginx/ssl -v package/docker/synteta-nginx/synteta.conf:/etc/nginx/servers/synteta.conf --name synteta-nginx {nginx_image_name}
Установка#
Перейдите в папку
TDM/package/confраспакованного дистрибутива из раздела Подготовка дистрибутива данного руководства:cd TDM/package/confВыполните команду запуска сервисов:
helm upgrade --install <Наименование инсталляции> helm/application -n <наименование пространства имен> -f <путь до файла с переопределенными параметрами>
Установленный дистрибутив будет готов к работе по истечении примерно 10 минут.
Приложение для проверки#
Перед проверкой убедитесь, что создан пользователь для системы TDMS с необходимой ролью для него. Для проверки не рекомендуется использовать техническую учетную запись, созданную в процессе установки.
Инструкции по заведению пользователя и назначению групп на пользователя:
Для проверки выполненных действий перейдите по следующему адресу: http(s)://{{ PVWTDM_HOST }}/, где: {{ PVWTDM_HOST }} — доменное имя (или IP-адрес) стенда, по которому будет доступна инсталляция TDMS.
Список переменных продукта#
Обратите внимание
Все необходимые параметры настраиваются на этапе подготовки к установке. После установки дополнительные настройки со стороны системного администратора (DevOps) не требуются.
Обязательные#
Название переменной |
Описание |
|---|---|
|
Ссылка на базовый образ в docker registry для сборки сервисов. Доступные ОС для развертывания указаны в разделе Системные требования |
|
Значение из двух вариантов: |
|
Версия устанавливаемой системы, значение данной переменной используется для тегирования образа |
|
Протокол, по которому доступен TDMS ( |
|
Доменное имя (или внешний IP-адрес) стенда, по которому будет доступен TDMS |
|
Список хостов (или IP-адресов) и параметров для подключения к СУБД, используемой как СПО программного компонента. Серверы перечисляются через запятую |
|
Параметры подключения к СУБД, используемой как СПО программного компонента (Опционально) |
|
Протокол подключения для R2DBC. По умолчанию: |
|
Параметры подключения к СУБД для R2DBC, используемой как СПО программного компонента (Опционально) |
|
Путь до директории с доверенными сертификатами, пример значения переменной: |
|
Наименование базы данных для хранения данных сервиса |
|
Пользователь, под учетной записью которого будет произведена авторизация в базе данных сервиса |
|
Пароль для аутентификации пользователя в базе данных сервиса |
|
Наименование схемы в базе данных сервиса |
|
Наименование базы данных для хранения данных сервиса |
|
Пользователь, под учетной записью которого будет произведена авторизация в базе данных сервиса |
|
Пароль для аутентификации пользователя в базе данных сервиса |
|
Наименование схемы в базе данных сервиса |
|
Наименование базы данных для хранения данных сервиса |
|
Пользователь, под учетной записью которого будет произведена авторизация в базе данных сервиса |
|
Пароль для аутентификации пользователя в базе данных сервиса |
|
Наименование схемы в базе данных сервиса |
|
Наименование базы данных для хранения данных сервиса |
|
Пользователь, под учетной записью которого будет произведена авторизация в базе данных сервиса |
|
Пароль для аутентификации пользователя в базе данных сервиса |
|
Наименование схемы в базе данных сервиса |
|
Наименование базы данных для хранения данных сервиса |
|
Пользователь, под учетной записью которого будет произведена авторизация в базе данных сервиса |
|
Пароль для аутентификации пользователя в базе данных сервиса |
|
Наименование схемы в базе данных сервиса |
|
Наименование базы данных для хранения данных сервиса |
|
Пользователь, под учетной записью которого будет произведена авторизация в базе данных сервиса |
|
Пароль для аутентификации пользователя в базе данных сервиса |
|
Наименование схемы в базе данных сервиса |
|
Наименование базы данных для хранения данных сервиса |
|
Пользователь, под учетной записью которого будет произведена авторизация в базе данных сервиса |
|
Пароль для аутентификации пользователя в базе данных сервиса |
|
Наименование схемы в базе данных сервиса |
|
Наименование базы данных для хранения данных сервиса |
|
Пользователь, под учетной записью которого будет произведена авторизация в базе данных сервиса |
|
Пароль для аутентификации пользователя в базе данных сервиса |
|
Наименование схемы в базе данных сервиса |
|
Наименование базы данных для хранения данных сервиса |
|
Пользователь, под учетной записью которого будет произведена авторизация в базе данных сервиса |
|
Пароль для аутентификации пользователя в базе данных сервиса |
|
Наименование схемы в базе данных сервиса |
|
Наименование базы данных для хранения данных сервиса |
|
Пользователь, под учетной записью которого будет произведена авторизация в базе данных сервиса |
|
Пароль для аутентификации пользователя в базе данных сервиса |
|
Наименование схемы в базе данных сервиса |
|
Наименование базы данных для хранения данных сервиса |
|
Пользователь, под учетной записью которого будет произведена авторизация в базе данных сервиса |
|
Пароль для аутентификации пользователя в базе данных сервиса |
|
Наименование схемы в базе данных сервиса |
|
Наименование базы данных для хранения данных сервиса |
|
Пользователь, под учетной записью которого будет произведена авторизация в базе данных сервиса |
|
Пароль для аутентификации пользователя в базе данных сервиса |
|
Наименование схемы в базе данных сервиса |
|
Наименование базы данных для хранения данных сервиса |
|
Пользователь, под учетной записью которого будет произведена авторизация в базе данных сервиса |
|
Пароль для аутентификации пользователя в базе данных сервиса |
|
Наименование схемы в базе данных сервиса |
|
Наименование базы данных для хранения данных сервиса |
|
Пользователь, под учетной записью которого будет произведена авторизация в базе данных сервиса |
|
Пароль для аутентификации пользователя в базе данных сервиса |
|
Наименование схемы в базе данных сервиса |
|
Список хостов (или IP-адресов) для подключения к брокеру сообщений. Указывается список хостов через запятую |
|
Протокол, по которому будет осуществлено подключение к брокеру Kafka. Доступные протоколы: PLAINTEXT (используется по умолчанию), SSL |
|
Местоположение файла хранилища ключей (только для SSL) |
|
Пароль для файла хранилища ключей (только для SSL) |
|
Местоположение файла хранилища доверенных сертификатов (только для SSL) |
|
Пароль для файла хранилища доверенных сертификатов. Если пароль не установлен, настроенный файл хранилища доверенных сертификатов по-прежнему будет использоваться, но проверка целостности будет отключена (только для SSL) |
|
Пароль закрытого ключа в файле хранилища ключей или ключ PEM, указанный в |
|
Алгоритм идентификации конечной точки для проверки имени хоста сервера с использованием сертификата сервера (только для SSL, по умолчанию: |
|
Протокол, по которому доступен Keycloak ( |
|
Хост и порт (или IP-адрес и порт), по которому доступен KeyCloak |
|
Путь до стартовой страницы keycloak |
|
Проектная область в KeyCloak |
|
Клиент для сервисных взаимодействий |
|
Secret клиента KeyCloak ( |
|
Клиент для пользователей |
|
Имя пользователя с правами на поиск и просмотр пользователей и групп |
|
Пароль пользователя с правами на поиск и просмотр пользователей и групп |
|
Список конфигурационных файлов для донастройки работы микросервисов. Например: |
Для работоспособности функции предиктивной генерации тестовых данных#
Название переменной |
Описание |
|---|---|
|
Путь до файла доверенного сертификата, формат файла |
|
Путь до файла с открытым ключом (public key), формат файла |
|
Путь до файла с закрытым ключом (private key), формат файла |
|
Протокол, по которому будет осуществлено подключение к брокеру Kafka. Доступные протоколы: |
|
Пароль к закрытому ключу (private key) |
|
Список хостов (или IP-адресов) для подключения к брокеру сообщений. Указывается список хостов через запятую |
|
Группа зарегистрированных клиентов в Kafka (пример, |
|
Топик Kafka, по которому будут прослушиваться сообщения |
|
Строка подключения к базе данных |
|
Схема базы данных, к которой подключается |
|
Идентификатор клиента в Keycloak для межсервисного взаимодействия |
|
Тип аутентификации. Поддерживаемая на текущий момент аутентификация - |
|
Secret |
|
URL-адрес для точки подключения токена |
|
Полный адрес для взаимодействия с |
|
Расписание запуска cron job, указывается в часах |
|
Расписание запуска cron job, указывается в минутах |
|
Драйвер базы данных компонента программного компонента |
|
Пользователь базы данных компонента программного компонента |
|
Пароль от пользователя базы данных компонента программного компонента |
|
Хост (или IP-адрес) для подключения к базе данных компонента программного компонента |
|
Наименование базы данных компонента программного компонента |
|
Схема базы данных компонента программного компонента |
Опционально#
Название переменной |
Описание |
|---|---|
|
Базовый адрес, который автоматически добавляется ко всем относительным ссылкам для TDMS |
|
Наименование тенанта |
|
Ссылка на документацию |
Настройка отправки аудита#
Сохранение событий аудита в файл:
Название переменной |
Описание |
|---|---|
|
Путь до директории, в которую будут записываться события аудита |
|
Срок хранения файлов событий аудита. По умолчанию 7 дней |
Отправка событий аудита через Logstash:
Название переменной |
Описание |
|---|---|
|
Адреса сервера Logstash (host:port) для отправки событий аудита |
Отправка событий аудита через Kafka:
Название переменной |
Описание |
|---|---|
|
Адреса сервера Kafka (host:port) для отправки событий аудита |
|
Идентификатор клиента Kafka для отправки событий аудита (необязательный параметр, по умолчанию client_id = название микросервиса) |
|
Наименование топика для отправки событий аудита |
|
Протокол, используемый для связи с брокерами Kafka. Допустимые значения: |
|
Местоположение файла хранилища ключей (только для SSL) |
|
Пароль для файла хранилища ключей (только для SSL) |
|
Местоположение файла хранилища доверенных сертификатов (только для SSL) |
|
Пароль для файла хранилища доверенных сертификатов. Если пароль не установлен, настроенный файл хранилища доверенных сертификатов по-прежнему будет использоваться, но проверка целостности будет отключена (только для SSL) |
|
Пароль закрытого ключа в файле хранилища ключей или ключ PEM, указанный в |
|
Алгоритм идентификации конечной точки для проверки имени хоста сервера с использованием сертификата сервера (только для SSL, по умолчанию: |
Параметры отправки оповещений пользователям#
Название переменной |
Описание |
|---|---|
|
Хост почтового сервера для отправки оповещений пользователям |
|
Порт почтового сервера для отправки оповещений пользователям |
|
Пользователь почтового сервера для отправки оповещений пользователям |
|
Пароль пользователя почтового сервера для отправки оповещений пользователям |
|
Адрес почты, от имени которой будет осуществляться отправка оповещений пользователям |
Параметры для создания запроса на генератор#
Данная функциональность применима только для интеграции с Jira.
Название переменной |
Описание |
|---|---|
|
Имя пользователя для создания запроса на генератор от его имени в Jira |
|
Пароль пользователя для создания запроса на генератор от его имени в Jira |
|
URL для пользовательского перехода на созданный запрос в Jira |
|
Ссылка на API для взаимодействия с Jira на уровне сервиса |
|
Endpoint для получения списка полей из Jira для заполнения формы создания запроса на генератор |
|
Endpoint для создания запроса на генератор в Jira |
Параметры для работы со справочниками КЭ#
Название переменной |
Описание |
|---|---|
|
Имя пользователя для авторизации в сервисе, обеспечивающем доступ к справочнику КЭ (например, DataHub) |
|
Пароль для аутентификации пользователя в сервисе, обеспечивающем доступ к справочнику КЭ (например, DataHub) |
Параметры для интеграции с системой поведенческой аналитики#
Название переменной |
Описание |
|---|---|
|
Настройка, позволяющая включать ( |
|
Ссылка на API для взаимодействия с сервисом поведенческой аналитики |
Подключение виджета#
Название переменной |
Описание |
|---|---|
|
Адрес сервера, откуда будут подгружены файлы из переменных |
|
Адрес API виджета |
|
Путь до файла swwidget.chunk.js |
|
Путь до файла swwidget.main.chunk.js |
|
Путь до файла swwidget.runtime-main.chunk.js |
Интеграция с SSDP#
Название переменной |
Описание |
|---|---|
|
Абсолютный URL для доступа к сервису |
|
Ключ инструмента. Уникальное значение для инсталляции продукта TDMS |
|
Ключ, по которому открывается вкладка в меню компонента TMS |
Настройка отображения результатов от системы мониторинга SPAC#
Название переменной |
Описание |
|---|---|
|
Ссылка на SPAC, центр управления интеграционными полигонами, отслеживания состояния, получения уведомления об инцидентах и других видах событий на тестовых стендах |
|
Устанавливает время в милисекундах таймаута запроса к SPAC, по умолчанию 2000. |
Для работоспособности функциональности глобального поиска#
Название переменной |
Описание |
|---|---|
|
Настройка периода очистки поисковых индексов Шаблона. По умолчанию равен |
Для работоспособности сервиса scheduler#
Название переменной |
Описание |
|---|---|
|
Включение или отключение авторизации на отправку ответа от внешних систем исполнителей работы генератора в TDMS |
Настройка интерфейса системы администратором инсталляции#
Название переменной |
Описание |
|---|---|
|
Признак необходимости отображения диалогового окна для подтверждения генерации при нестабильности. Значение |
|
Признак необходимости включения работы глобального поиска. Значение |
Настройка интеграции с GigaChat сервисом#
Название переменной |
Описание |
|---|---|
|
Топик Kafka для считывания информации от микросервисов |
|
Топик Kafka для публикации информации, сгенерированной LLM |
|
Токен аутентификаци для API GigaChat |
|
Используемая модель в рамках интеграции с LLM. По умолчанию |
|
Флаг SSL валидации. По умолчанию |
|
Контекст использования LLM. По умолчанию |
Шифрование входных и выходных параметров запускаемых задач#
Название переменной |
Описание |
|---|---|
|
Включить/выключить шифрование входных и выходных параметров |
|
Ключ шифрования |
|
Дополнительная „соль“ шифрования (должна иметь длину не менее 4 символов) |