← Навигация по документации

В качестве альтернативы запуску в Docker Docker-образы можно развернуть в кластере Kubernetes.

Далее описывается развёртывание в локальном кластере Kubernetes на базе Canonical MicroK8s.

Установка MicroK8s

На данный момент тестировалась только установка в виде Snap-пакета на Ubuntu 20.04.4 LTS:

  1. Установите Snap-пакет sudo snap install microk8s --classic --channel=1.24/stable
  2. Войдите в группу sudo usermod -a -G microk8s $USER sudo chown -f -R $USER ~/.kube Перевойдите в сеанс, чтобы обновление группы вступило в силу: su - $USER
  3. Проверьте статус microk8s status --wait-ready
  4. Включите дополнение dns с IP-адресом DNS-сервера microk8s enable dns:192.168.2.10 (для нескольких DNS-адресов следует использовать список через запятую)
  5. Включите дополнение storage microk8s enable storage
  6. Убедитесь, что имя хоста узла резолвится coreDNS, развернув gcr.io/kubernetes-e2e-test-images/dnsutils:1.3 microk8s kubectl apply -f https://k8s.io/examples/admin/dns/dnsutils.yaml и выполните поиск имени хоста этого узла: microk8s kubectl exec -i -t dnsutils -- nslookup test-ng ``` Server: 10.152.183.10 Address: 10.152.183.10#53

Name: test-ng Address: 192.168.2.145 ```

(Необязательно) Настройка многоузлового кластера

Если требуется распределить отдельные сервисы архива по нескольким узлам, необходимо установить MicroK8s на каждый из узлов, однако включать дополнения dns и storage и корректировать конфигурацию coredns достаточно только на начальном узле.

Для каждого дополнительного узла выполните

microk8s add-node

на начальном узле — будет выведена команда присоединения microk8s, которую нужно выполнить на экземпляре MicroK8s, который вы хотите присоединить к кластеру, например:

microk8s join 192.168.2.145:25000/e27a206f7347358adb9719b1588694b8

Создайте Opaque Secrets для доступа к

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

Обеспечьте необходимую системную конфигурацию для Elasticsearch для узла, на котором работает Elasticsearch. В частности отключите swap и обеспечьте достаточный объём виртуальной памяти для Elasticsearch, задав необходимые параметры sysctl (они сохраняются между перезагрузками):

cat <<EOF | sudo tee /etc/sysctl.d/99-elasticsearch.conf
vm.swappiness    = 1
vm.max_map_count = 262144
EOF

и примените параметры sysctl без перезагрузки

sudo sysctl --system

Убедитесь, что у Elasticsearch есть право на запись в bind-mounted каталоги config, data и log, предоставив групповый доступ с gid 0 для локального каталога.

$ sudo mkdir -p /var/local/microk8s/esdatadir
$ sudo chmod g+rwx /var/local/microk8s/esdatadir
$ sudo chgrp 0 /var/local/microk8s/esdatadir

Создайте elasticsearch-deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: elasticsearch
  labels:
    app: elasticsearch
spec:
  selector:
    matchLabels:
      app: elasticsearch
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: elasticsearch
    spec:
      subdomain: elasticsearch
      nodeSelector:
        kubernetes.io/hostname: <elk-node>
      containers:
        - name: elasticsearch
          image: elasticsearch:8.15.1
          env:
            - name: ES_JAVA_OPTS
              value: -Xms1024m -Xmx1024m
            - name: http.cors.enabled
              value: "true"
            - name: http.cors.allow-origin
              value: /.*/
            - name: http.cors.allow-headers
              value: X-Requested-With,Content-Length,Content-Type,Authorization
            - name: discovery.type
              value: single-node
            - name: xpack.security.enabled
              value: "false"
          ports:
            - containerPort: 9200
            - containerPort: 9300
          volumeMounts:
            - name: localtime
              mountPath: /etc/localtime
              readOnly: true
            - name: timezone
              mountPath: /etc/timezone
              readOnly: true
            - name: data
              mountPath: /usr/share/elasticsearch/data
      volumes:
        - name: localtime
          hostPath:
            path: /etc/localtime
            type: File
        - name: timezone
          hostPath:
            path: /etc/timezone
            type: File
        - name: data
          hostPath:
            path: /var/local/microk8s/esdatadir
            type: DirectoryOrCreate

скорректировав

      nodeSelector:
        kubernetes.io/hostname: <elk-node>

на имя хоста узла, на котором работает Elasticsearch, и настройки размера кучи (Heap size)

            - name: ES_JAVA_OPTS
              value: -Xms1024m -Xmx1024m

в соответствии с вашими потребностями и объёмом RAM, доступным на сервере, после чего выполните:

microk8s kubectl apply -f elasticsearch-deployment.yaml

Чтобы открыть эндпоинты Elasticsearch для других развёрнутых приложений — в частности для Logstash — создайте elasticsearch-service.yaml:

apiVersion: v1
kind: Service
metadata:
  name: elasticsearch
  labels:
    app: elasticsearch
spec:
  selector:
    app: elasticsearch
  clusterIP: None
  ports:
    - name: http
      port: 9200
    - name: discovery
      port: 9300

и выполните:

microk8s kubectl apply -f elasticsearch-service.yaml

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

Чтобы обеспечить Logstash право на запись в файл, используемый для сохранения отпечатка (fingerprint) последнего аудиторского сообщения, необходимо смонтировать файл или родительский каталог, заданный переменной окружения HASH_FILE, в каталог хоста на узле, где работает Logstash, чтобы не запускать построение нового хэш-дерева при каждом пересоздании контейнера. Файл (или родительский каталог) должен быть доступен для записи пользователем logstash в контейнере (uid=1000). Например, для монтирования файла:

sudo mkdir -p /var/local/microk8s/logstash
sudo touch /var/local/microk8s/logstash/filter-hashtree
sudo chown 1000:1000 /var/local/microk8s/logstash/filter-hashtree

а для монтирования родительского каталога

sudo mkdir -p /var/local/microk8s/logstash
sudo chown 1000:1000 /var/local/microk8s/logstash  

Создайте logstash-deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: logstash
  labels:
    app: logstash
spec:
  selector:
    matchLabels:
      app: logstash
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: logstash
    spec:
      subdomain: logstash
      nodeSelector:
        kubernetes.io/hostname: <elk-node>
      containers:
        - name: logstash
          image: dcm4che/logstash-dcm4chee:8.15.1-18
          ports:
            - containerPort: 12201
              protocol: UDP
            - containerPort: 8514
              protocol: UDP
            - containerPort: 8514
              protocol: TCP
            - containerPort: 6514
              protocol: TCP
          volumeMounts:
            - mountPath: /etc/localtime
              readOnly: true
              name: localtime
            - mountPath: /etc/timezone
              readOnly: true
              name: timezone
            - name: filter-hashtree
              mountPath: /usr/share/logstash/data/filter-hashtree
      volumes:
        - name: localtime
          hostPath:
            path: /etc/localtime
            type: File
        - name: timezone
          hostPath:
            path: /etc/timezone
            type: File
        - name: filter-hashtree
          hostPath:
            path: /var/local/microk8s/logstash/filter-hashtree
            type: File

скорректировав

      nodeSelector:
        kubernetes.io/hostname: <elk-node>

на имя хоста узла, на котором работает Elasticsearch.

Для монтирования родительского каталога замените

          - name: filter-hashtree
            mountPath: /usr/share/logstash/data/filter-hashtree

на

          - name: data
            mountPath: /usr/share/logstash/data

и

        - name: filter-hashtree
          hostPath:
            path: /var/local/microk8s/logstash/filter-hashtree
            type: File

на

        - name: data
          hostPath:
            path: /var/local/microk8s/logstash
            type: Directory

Выполните:

microk8s kubectl apply -f logstash-deployment.yaml

Чтобы открыть эндпоинты Logstash для других развёрнутых приложений — в частности для Keycloak и архива — создайте logstash-service.yaml:

apiVersion: v1
kind: Service
metadata:
  name: logstash
  labels:
    app: logstash
spec:
  selector:
    app: logstash
  clusterIP: None
  ports:
    - name: gelf-udp
      port: 12201
      protocol: UDP
    - name: syslog-udp
      port: 8514
      protocol: UDP
    - name: syslog-tcp
      port: 8514
      protocol: TCP
    - name: syslog-tls
      port: 6514
      protocol: TCP

и выполните:

microk8s kubectl apply -f elasticsearch-service.yaml

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

Создайте kibana-deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: kibana
  labels:
    app: kibana
spec:
  selector:
    matchLabels:
      app: kibana
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: kibana
    spec:
      subdomain: kibana
      nodeSelector:
        kubernetes.io/hostname: <elk-node>
      containers:
        - name: kibana
          image: kibana:8.15.1
          ports:
            - containerPort: 5601
          volumeMounts:
            - name: localtime
              mountPath: /etc/localtime
              readOnly: true
            - name: timezone
              mountPath: /etc/timezone
              readOnly: true
      volumes:
        - name: localtime
          hostPath:
            path: /etc/localtime
            type: File
        - name: timezone
          hostPath:
            path: /etc/timezone
            type: File

с

      nodeSelector:
        kubernetes.io/hostname: <elk-node>

скорректированным на имя хоста узла, на котором работает Kibana, и выполните:

microk8s kubectl apply -f kibana-deployment.yaml

Чтобы открыть эндпоинт Kibana для других развёрнутых приложений — в частности для OAuth2 Proxy — создайте kibana-service.yaml:

apiVersion: v1
kind: Service
metadata:
  name: kibana
  labels:
    app: kibana
spec:
  selector:
    app: kibana
  clusterIP: None
  ports:
    - name: http
      port: 3100

и выполните:

microk8s kubectl apply -f kibana-service.yaml

Развёртывание LDAP-сервера

Создайте ldap-deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: ldap
  labels:
    app: ldap
spec:
  selector:
    matchLabels:
      app: ldap
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: ldap
    spec:
      subdomain: ldap
      nodeSelector:
        kubernetes.io/hostname: <db-node>
      containers:
        - name: ldap
          image: dcm4che/slapd-dcm4chee:2.6.10-34.3
          env:
            - name: LDAP_URLS
              value: ldap:/// ldaps:///
            - name: STORAGE_DIR
              value: /storage/fs1
            - name: ARCHIVE_HOST
              value: <arc-node>
            - name: SYSLOG_HOST
              value: logstash
            - name: SYSLOG_PORT
              value: "8514"
            - name: SYSLOG_PROTOCOL
              value: TLS
          envFrom:
            - secretRef:
                name: ldap-secret
          ports:
            - containerPort: 389
            - containerPort: 636
          volumeMounts:
            - name: ldap-data
              mountPath: /var/lib/openldap/openldap-data
            - name: ldap-conf
              mountPath: /etc/openldap/slapd.d
      volumes:
        - name: ldap-data
          hostPath:
            path: /var/local/microk8s/ldap
            type: DirectoryOrCreate
        - name: ldap-conf
          hostPath:
            path: /var/local/microk8s/slapd.d
            type: DirectoryOrCreate

с

      nodeSelector:
        kubernetes.io/hostname: <db-node>

скорректированным на имя хоста узла, на котором работает LDAP, и <arc-node> в

            - name: ARCHIVE_HOST
              value: <arc-node>

на имя хоста (одного из) узла, открывающего эндпоинты архива, после чего выполните:

microk8s kubectl apply -f ldap-deployment.yaml

Чтобы открыть эндпоинты LDAP для других развёрнутых приложений — в частности для Keycloak и архива — создайте ldap-service.yaml:

apiVersion: v1
kind: Service
metadata:
  name: ldap
  labels:
    app: ldap
spec:
  clusterIP: None
  selector:
    app: ldap
  ports:
    - name: ldap
      port: 389
    - name: ldaps
      port: 636

и выполните:

microk8s kubectl apply -f ldap-service.yaml

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

Создайте db-deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: db
  labels:
    app: db
spec:
  selector:
    matchLabels:
      app: db
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: db
    spec:
      subdomain: db
      nodeSelector:
        kubernetes.io/hostname: `<db-node>`
      containers:
        - name: db
          image: dcm4che/postgres-dcm4chee:17.4-34
          envFrom:
            - secretRef:
                name: postgres-secret
          ports:
            - containerPort: 5432
          volumeMounts:
            - name: localtime
              mountPath: /etc/localtime
              readOnly: true
            - name: timezone
              mountPath: /etc/timezone
              readOnly: true
            - name: data
              mountPath: /var/lib/postgresql/data
      volumes:
        - name: localtime
          hostPath:
            path: /etc/localtime
            type: File
        - name: timezone
          hostPath:
            path: /etc/timezone
            type: File
        - name: data
          hostPath:
            path: /var/local/microk8s/db
            type: DirectoryOrCreate

скорректировав

      nodeSelector:
        kubernetes.io/hostname: <db-node>

на имя хоста узла, на котором работает PostgreSQL, и выполните:

microk8s kubectl apply -f db-deployment.yaml

Чтобы открыть эндпоинт PostgreSQL для других развёрнутых приложений — в частности для архива — создайте db-service.yaml:

apiVersion: v1
kind: Service
metadata:
  name: db
  labels:
    app: db
spec:
  clusterIP: None
  selector:
    app: db
  ports:
    - port: 5432

и выполните:

microk8s kubectl apply -f db-service.yaml

Развёртывание MariaDB (используется Keycloak)

Создайте mariadb-deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mariadb
  labels:
    app: mariadb
spec:
  selector:
    matchLabels:
      app: mariadb
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: mariadb
    spec:
      subdomain: mariadb
      nodeSelector:
        kubernetes.io/hostname: <db-node>
      containers:
        - name: mariadb
          image: mariadb:10.7.3
          envFrom:
            - secretRef:
                name: mariadb-secret
          ports:
            - containerPort: 3306
          volumeMounts:
            - name: localtime
              mountPath: /etc/localtime
              readOnly: true
            - name: timezone
              mountPath: /etc/timezone
              readOnly: true
            - name: data
              mountPath: /var/lib/mysql
      volumes:
        - name: localtime
          hostPath:
            path: /etc/localtime
            type: File
        - name: timezone
          hostPath:
            path: /etc/timezone
            type: File
        - name: data
          hostPath:
            path: /var/local/microk8s/mariadb
            type: DirectoryOrCreate

скорректировав

      nodeSelector:
        kubernetes.io/hostname: <db-node>

на имя хоста узла, на котором работает MariaDB, и выполните:

microk8s kubectl apply -f mariadb-deployment.yaml

Чтобы открыть эндпоинт MariaDB для других развёрнутых приложений — в частности для Keycloak — создайте mariadb-service.yaml:

apiVersion: v1
kind: Service
metadata:
  name: mariadb
  labels:
    app: mariadb
spec:
  clusterIP: None
  selector:
    app: mariadb
  ports:
    - port: 3306

и выполните:

microk8s kubectl apply -f mariadb-service.yaml

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

Создайте keycloak-deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: keycloak
  labels:
    app: keycloak
spec:
  selector:
    matchLabels:
      app: keycloak
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: keycloak
    spec:
      nodeSelector:
        kubernetes.io/hostname: <arc-node>
      containers:
        - name: keycloak
          image: dcm4che/keycloak:26.0.6
          env:
            - name: LDAP_URL
              value: "ldap://ldap:389"
            - name: ARCHIVE_HOST
              value: "<arc-node>"
            - name: KC_HOSTNAME
              value: "https://<arc-node>:8843"
            - name: KC_HOSTNAME_BACKCHANNEL_DYNAMIC
              value: 'true'
            - name: KC_HTTPS_PORT
              value: "8843"
            - name: KC_DB
              value: mariadb
            - name: KC_DB_URL_HOST
              value: mariadb
            - name: KC_DB_URL_DATABASE
              valueFrom:
                secretKeyRef:
                  name: mariadb-secret
                  key: MYSQL_DATABASE
            - name: KC_DB_USERNAME
              valueFrom:
                secretKeyRef:
                  name: mariadb-secret
                  key: MYSQL_USER
            - name: KC_DB_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: mariadb-secret
                  key: MYSQL_PASSWORD
            - name: KC_SPI_LOGIN_PROTOCOL_OPENID_CONNECT_LEGACY_LOGOUT_REDIRECT_URI
              value: "true"
            - name: KC_LOG
              value: file
            - name: GELF_ENABLED
              value: "true"
            - name: LOGSTASH_HOST
              value: logstash
            - name: KIBANA_REDIRECT_URL
              value: "https://<arc-node>:8643/auth2/callback/*"
            - name: KEYCLOAK_WAIT_FOR
              value: ldap:636 mariadb:3306 logstash:8514
          envFrom:
            - secretRef:
                name: ldap-secret
            - secretRef:
                name: keycloak-secret
          ports:
            - containerPort: 8843
          volumeMounts:
            - name: localtime
              mountPath: /etc/localtime
              readOnly: true
            - name: timezone
              mountPath: /etc/timezone
              readOnly: true
            - name: keycloak
              mountPath: /opt/keycloak/data
      volumes:
        - name: localtime
          hostPath:
            path: /etc/localtime
            type: File
        - name: timezone
          hostPath:
            path: /etc/timezone
            type: File
        - name: keycloak
          hostPath:
            path: /var/local/microk8s/keycloak
            type: DirectoryOrCreate

скорректировав

      nodeSelector:
        kubernetes.io/hostname: <arc-node>

и

      env:
        - name: KC_HOSTNAME
          value: "<arc-node>"

на имя хоста узла, на котором работает Keycloak,

      env:
        - name: ARCHIVE_HOST
          value: "<arc-node>"

на имя хоста узла, на котором работает архив, и

        - name: KIBANA_REDIRECT_URL
          value: "https://<arc-node>:8643/auth2/callback/*"

на имя хоста узла, на котором работает OAuth2 Proxy для защиты Kibana.

Для подключения к LDAP-серверу через TLS замените

            - name: LDAP_URL
              value: ldap://ldap:389

на

            - name: LDAP_URL
              value: ldaps://ldap:636

перед выполнением:

microk8s kubectl apply -f keycloak-deployment.yaml

Чтобы открыть эндпоинт Keycloak для внешних веб-браузеров и других развёрнутых приложений — в частности для OAuth2 Proxy и архива — создайте keycloak-service.yaml:

apiVersion: v1
kind: Service
metadata:
  name: keycloak
  labels:
    app: keycloak
spec:
  selector:
    app: keycloak
  externalIPs:
    - <external-ip>
  ports:
    - name: https
      port: 8843

Скорректируйте

  externalIPs:
    - <external-ip>

на IP-адрес(а) узла(ов), на которых должны быть открыты эндпоинты, и выполните:

microk8s kubectl apply -f keycloak-service.yaml
Проверка OIDC-клиента для OAuth2 Proxy в Keycloak

Войдите с именем пользователя/паролем root/changeit в Realm Admin Console Keycloak по адресу https://<arc-node>:8843/dcm4che/console — необходимо заменить <arc-node> на имя хоста узла, открывающего эндпоинт(ы) Keycloak. Если вы изменили имя realm по умолчанию: dcm4che через переменную окружения REALM_NAME для Keycloak, Keycloak Proxy и контейнера архива, то также необходимо заменить dcm4che на это значение в URL.

Docker-образ Keycloak dcm4che/keycloak:19.0.1 и новее создаёт OIDC-клиент для OAuth2 Proxy для защиты Kibana при первом запуске, настраиваемый через переменные окружения KIBANA_CLIENT_ID, KIBANA_CLIENT_SECRET и KIBANA_REDIRECT_URL:

с Audience Token Mapper audience:

и с учётными данными клиента (Client Credential):

теми, что вы указали при создании Opaque Secrets keycloak-secret выше.

Если вы воспользуетесь Regenerate Secret, потребуется также обновить значение в Opaque Secrets keycloak-secret, которое будет передано через переменную окружения OAUTH2_PROXY_CLIENT_SECRET в контейнер OAuth2 Proxy на следующем шаге.

Развёртывание OAuth2 Proxy для защиты Kibana

Создайте kibana-oauth2proxy-deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: kibana-oauth2proxy
  labels:
    app: kibana-oauth2proxy
spec:
  selector:
    matchLabels:
      app: kibana-oauth2proxy
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: kibana-oauth2proxy
    spec:
      nodeSelector:
        kubernetes.io/hostname: <arc-node>
      containers:
        - name: kibana-oauth2proxy
          image: dcm4che/oauth2-proxy:7.7.1
          env:
            - name: OAUTH2_PROXY_CLIENT_ID
              valueFrom:
                secretKeyRef:
                  name: keycloak-secret
                  key: KIBANA_CLIENT_ID
            - name: OAUTH2_PROXY_CLIENT_SECRET
              valueFrom:
                secretKeyRef:
                  name: keycloak-secret
                  key: KIBANA_CLIENT_SECRET
          args:
            - --https-address=:8643
            - --tls-cert-file=/etc/certs/cert.pem
            - --tls-key-file=/etc/certs/key.pem
            - --ssl-insecure-skip-verify
            - --provider=keycloak-oidc
            - --oidc-issuer-url=https://<arc-node>:8843/realms/dcm4che
            - --redirect-url=https://<arc-node>:8643/oauth2/callback
            - --upstream=http://kibana:5601
            - --allowed-role=auditlog
            - --email-domain=*
            - --oidc-email-claim=sub
            - --insecure-oidc-allow-unverified-email
            - --cookie-secret=T0F1dGhLaWJhbmFUZXN0cw==
            - --skip-provider-button
            - --custom-templates-dir=/templates
          ports:
            - containerPort: 8643

Скорректируйте

      nodeSelector:
        kubernetes.io/hostname: <arc-node>

и

            - --redirect-url=https://<arc-node>:8643/auth2/callback

на имя хоста узла, на котором работает OAuth2 Proxy.

Скорректируйте

            - --oidc-issuer-url=https://<arc-node>:8843/realms/dcm4che

на имя хоста узла, на котором работает Keycloak.

Выполните:

microk8s kubectl apply -f kibana-oauth2proxy-deployment.yaml

Чтобы открыть эндпоинт OAuth2 Proxy для внешних веб-браузеров, создайте kibana-oauth2proxy-service.yaml:

apiVersion: v1
kind: Service
metadata:
  name: kibana-oauth2proxy
  labels:
    app: kibana-oauth2proxy
spec:
  selector:
    app: kibana-oauth2proxy
  externalIPs:
    - <external-ip>
  ports:
    - name: https
      port: 8643

Скорректируйте

  externalIPs:
    - <external-ip>

на IP-адрес(а) узла(ов), на которых должен быть открыт эндпоинт, и выполните:

microk8s kubectl apply -f kibana-oauth2proxy-service.yaml

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

Создайте arc-deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: arc
  labels:
    app: arc
spec:
  selector:
    matchLabels:
      app: arc
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: arc
    spec:
      nodeSelector:
        kubernetes.io/hostname: <arc-node>
      containers:
        - name: arc
          image: dcm4che/dcm4chee-arc-psql:5.34.3-secure
          env:
            - name: HTTP_PORT
              value: "8080"
            - name: HTTPS_PORT
              value: "8443"
            - name: MANAGEMENT_HTTP_PORT
              value: "9990"
            - name: MANAGEMENT_HTTPS_PORT
              value: "9993"
            - name: LDAP_URL
              value: ldap://ldap:389
            - name: AUTH_SERVER_URL
              value: https://<arc-node>:8843
            - name: WILDFLY_CHOWN
              value: /opt/wildfly/standalone /storage
            - name: WILDFLY_WAIT_FOR
              value: ldap:389 db:5432 logstash:8514
            - name: JAVA_OPTS
              value: -Xms64m -Xmx512m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -Djava.net.preferIPv4Stack=true -agentlib:jdwp=transport=dt_socket,address=*:8787,server=y,suspend=n
            - name: POSTGRES_HOST
              value: db
            - name: LOGSTASH_HOST
              value: logstash
          envFrom:
            - secretRef:
                name: ldap-secret
            - secretRef:
                name: postgres-secret
          ports:
            - containerPort: 8080
            - containerPort: 8443
            - containerPort: 9990
            - containerPort: 9993
            - containerPort: 8787
            - containerPort: 11112
            - containerPort: 2762
            - containerPort: 2575
            - containerPort: 12575
          volumeMounts:
            - name: localtime
              mountPath: /etc/localtime
              readOnly: true
            - name: timezone
              mountPath: /etc/timezone
              readOnly: true
            - name: wildfly
              mountPath: /opt/wildfly/standalone
            - name: storage
              mountPath: /storage
      volumes:
        - name: localtime
          hostPath:
            path: /etc/localtime
            type: File
        - name: timezone
          hostPath:
            path: /etc/timezone
            type: File
        - name: wildfly
          hostPath:
            path: /var/local/microk8s/wildfly
            type: DirectoryOrCreate
        - name: storage
          hostPath:
            path: /var/local/microk8s/storage
            type: DirectoryOrCreate

Скорректируйте

      nodeSelector:
        kubernetes.io/hostname: <arc-node>

на имя хоста узла, на котором работает архив.

Скорректируйте

            - name: AUTH_SERVER_URL
              value: https://<arc-node>:8843

на имя хоста узла, на котором работает Keycloak.

Для подключения к LDAP-серверу через TLS замените

            - name: LDAP_URL
              value: ldap://ldap:389

на

            - name: LDAP_URL
              value: ldaps://ldap:636

Скорректируйте

            - name: JAVA_OPTS
              value: -Xms64m -Xmx512m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -Djava.net.preferIPv4Stack=true -agentlib:jdwp=transport=dt_socket,address=*:8787,server=y,suspend=n

в соответствии с вашими потребностями и объёмом RAM, доступным на сервере.

Выполните:

microk8s kubectl apply -f arc-deployment.yaml

Чтобы открыть эндпоинты архива для внешних приложений, создайте arc-service.yaml:

apiVersion: v1
kind: Service
metadata:
  name: arc
  labels:
    app: arc
spec:
  selector:
    app: arc
  externalIPs:
    - <external-ip>
  ports:
    - name: http
      port: 8080
    - name: https
      port: 8443
    - name: management-http
      port: 9990
    - name: management-https
      port: 9993
    - name: dicom
      port: 11112
    - name: dicom-tls
      port: 2762
    - name: mllp
      port: 2575
    - name: mllp-tls
      port: 12575

Скорректируйте

  externalIPs:
    - <external-ip>

на IP-адрес(а) узла(ов), на которых должны быть открыты эндпоинты, и выполните:

microk8s kubectl apply -f arc-service.yaml

Проверка OIDC-клиента для UI архива в Keycloak

Войдите с именем пользователя/паролем root/changeit в Realm Admin Console Keycloak по адресу https://test-ng:8843/admin/dcm4che/console — необходимо заменить test-ng на имя хоста узла, открывающего эндпоинт(ы) Keycloak. Если вы изменили имя realm по умолчанию: dcm4che через переменную окружения REALM_NAME для Keycloak и контейнера архива, то также необходимо заменить dcm4che на это значение в URL.

Docker-образ Keycloak dcm4che/keycloak:19.0.1 и новее создаёт OIDC-клиент для UI архива при первом запуске, настраиваемый через переменные окружения UI_CLIENT_ID, ARCHIVE_HOST, ARCHIVE_HTTP_PORT и ARCHIVE_HTTPS_PORT:

Проверка OIDC-клиента для Wildfly Administration Console в Keycloak

Доступ к Wildfly Administration Console также защищён с помощью Keycloak.

Docker-образ Keycloak dcm4che/keycloak:19.0.1 и новее также создаёт ещё один OIDC-клиент для Wildfly Administration Console при первом запуске, настраиваемый через переменные окружения WILDFLY_CONSOLE, ARCHIVE_HOST и ARCHIVE_MANAGEMENT_HTTPS_PORT:

Доступ к WildFly Administration Console разрешён только пользователям с ролью ADMINISTRATOR.

Выйдите из системы, прежде чем проверять, что обращение к WildFly Administration Console по адресу http://<arc-node>:9990 или https://<arc-node:9993 перенаправит вас на страницу входа Keycloak. Войти можно с именем пользователя/паролем root/changeit.

Проверка статуса развёртываний и сервисов