В качестве альтернативы запуску в Docker Docker-образы можно развернуть в кластере Kubernetes.
Далее описывается развёртывание в локальном кластере Kubernetes на базе Canonical MicroK8s.
На данный момент тестировалась только установка в виде Snap-пакета на Ubuntu 20.04.4 LTS:
sudo snap install microk8s --classic --channel=1.24/stablesudo usermod -a -G microk8s $USER
sudo chown -f -R $USER ~/.kube
Перевойдите в сеанс, чтобы обновление группы вступило в силу:
su - $USERmicrok8s status --wait-readydns с IP-адресом DNS-сервера
microk8s enable dns:192.168.2.10
(для нескольких DNS-адресов следует использовать список через запятую)storage
microk8s enable storagemicrok8s 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#53Name: test-ng Address: 192.168.2.145 ```
Если требуется распределить отдельные сервисы архива по нескольким узлам, необходимо установить MicroK8s на каждый из узлов, однако включать дополнения dns и storage и корректировать конфигурацию coredns достаточно только на начальном узле.
Для каждого дополнительного узла выполните
microk8s add-node
на начальном узле — будет выведена команда присоединения microk8s, которую нужно выполнить на экземпляре MicroK8s, который вы хотите присоединить к кластеру, например:
microk8s join 192.168.2.145:25000/e27a206f7347358adb9719b1588694b8
microk8s kubectl create secret generic ldap-secret \
--from-literal=LDAP_ROOTPASS=secret \
--from-literal=LDAP_CONFPASS=secretmicrok8s kubectl create secret generic postgres-secret \
--from-literal=POSTGRES_DB=pacsdb \
--from-literal=POSTGRES_USER=pacs \
--from-literal=POSTGRES_PASSWORD=pacsmicrok8s kubectl create secret generic mariadb-secret \
--from-literal=MYSQL_DATABASE=keycloak \
--from-literal=MYSQL_USER=keycloak \
--from-literal=MYSQL_PASSWORD=keycloak \
--from-literal=MYSQL_ROOT_PASSWORD=secretmicrok8s kubectl create secret generic keycloak-secret \
--from-literal=KC_BOOTSTRAP_ADMIN_USERNAME=admin \
--from-literal=KC_BOOTSTRAP_ADMIN_PASSWORD=changeit \
--from-literal=KIBANA_CLIENT_ID=kibana \
--from-literal=KIBANA_CLIENT_SECRET=changeitОбеспечьте необходимую системную конфигурацию для 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 право на запись в файл, используемый для сохранения отпечатка (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-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-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
Создайте 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-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-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
Войдите с именем пользователя/паролем 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 на следующем шаге.
Создайте 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
Войдите с именем пользователя/паролем 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:

Доступ к 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.
Список всех Deployment
microk8s kubectl get deployments -o wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
elasticsearch 1/1 1 1 133m elasticsearch elasticsearch:8.15.1 app=elasticsearch
logstash 1/1 1 1 130m logstash dcm4che/logstash-dcm4chee:8.15.1-18 app=logstash
kibana 1/1 1 1 129m kibana kibana:8.15.1 app=kibana
ldap 1/1 1 1 127m ldap dcm4che/slapd-dcm4chee:2.6.10-34.3 app=ldap
db 1/1 1 1 126m db dcm4che/postgres-dcm4chee:17.4-34 app=db
keycloak 1/1 1 1 71m keycloak dcm4che/keycloak:26.0.6 app=keycloak
mariadb 1/1 1 1 54m mariadb mariadb:10.7.3 app=mariadb
kibana-oauth2proxy 1/1 1 1 9m56s kibana-oauth2proxy dcm4che/oauth2-proxy:7.7.1 app=kibana-oauth2proxy
arc 1/1 1 1 6m25s arc dcm4che/dcm4chee-arc-psql:5.34.3-secure app=arc
Список всех развёрнутых Pod
microk8s kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
mariadb-79cf85cf4b-jxr44 1/1 Running 0 56m 10.1.180.203 test-ng <none> <none>
keycloak-dbc99f676-pdhfz 1/1 Running 0 73m 10.1.180.202 test-ng <none> <none>
db-77c9898c5c-7vwrn 1/1 Running 0 128m 10.1.180.201 test-ng <none> <none>
elasticsearch-864965cf6d-4g9w2 1/1 Running 0 135m 10.1.180.197 test-ng <none> <none>
kibana-7ffbb4d769-hqb9w 1/1 Running 0 131m 10.1.180.199 test-ng <none> <none>
logstash-6bdc9b5c9c-znqm4 1/1 Running 0 132m 10.1.180.198 test-ng <none> <none>
ldap-55444979cb-cmrl9 1/1 Running 0 129m 10.1.180.200 test-ng <none> <none>
kibana-oauth2proxy-77546fbb-gh9ds 1/1 Running 0 12m 10.1.180.204 test-ng <none> <none>
arc-845fdc847-b28qk 1/1 Running 0 8m34s 10.1.180.205 test-ng <none> <none>
Список всех Service
microk8s kubectl get services -o wide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
kubernetes ClusterIP 10.152.183.1 <none> 443/TCP 158m <none>
elasticsearch ClusterIP None <none> 9200/TCP,9300/TCP 137m app=elasticsearch
kibana ClusterIP None <none> 3100/TCP 133m app=kibana
ldap ClusterIP None <none> 389/TCP,636/TCP 131m app=ldap
db ClusterIP None <none> 5432/TCP 130m app=db
mariadb ClusterIP None <none> 3306/TCP 128m app=mariadb
logstash ClusterIP None <none> 12201/UDP,8514/UDP,8514/TCP,6514/TCP 57m app=logstash
keycloak ClusterIP 10.152.183.115 192.168.2.145 8843/TCP 45m app=keycloak
kibana-oauth2proxy ClusterIP 10.152.183.5 192.168.2.145 8643/TCP 13m app=kibana-oauth2proxy
arc ClusterIP 10.152.183.238 192.168.2.145 8080/TCP,8443/TCP,9990/TCP,9993/TCP,11112/TCP,2762/TCP,2575/TCP,12575/TCP 9m48s app=arc
Либо разверните Kubernetes Dashboard
microk8s dashboard-proxy
Checking if Dashboard is running.
Warning: apiregistration.k8s.io/v1beta1 APIService is deprecated in v1.19+, unavailable in v1.22+; use apiregistration.k8s.io/v1 APIService
Waiting for Dashboard to come up.
Dashboard will be available at https://127.0.0.1:10443
Use the following token to login:
eyJhbGciOiJSUzI1NiIsImtpZCI6InU0OTZpLUJrbFRCcmdBWnFzTG5Gb05vY09SY1RWNWQtTjd5cjdkdnZsTUUifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkZWZhdWx0LXRva2VuLXdxcnM4Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImRlZmF1bHQiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiI4ZjMwZWU2OC02YTkyLTQ2Y2ItYTk2ZS0xMWM1MDUyNTg4NDQiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZS1zeXN0ZW06ZGVmYXVsdCJ9.T_L24S4eVdiavBTyExalCCydyBp2S4P3yune50R0QWZDLHscX0GGR-Tqn0OH1kanvyuoDlRptOuqQ6Um9BNP2sImxep6SiArCDzTUnhmPnO0ke3AiAmzvIqDI6SxKbGckfknVfzsQkRNwERtGOM1pW-bEH-XL2d0DVzDdS9SFqbbGLnzVrsvuh7JWnOzCS2MPJ10_bUfh1lR5OunOIl1Pu7uS_PGNDEsZ6T-6sue6JWcBnzhmw-e1qzV5u2Iuw8B7X3hlMAZV89PU7L6xf4XF9wwHWocc__epwWTNnN4h2WxmTz51IUy0TVcA4ii7yovuV93YSEg4_CVP1qbkBjUrQ
и откройте URL Dashboard в любом веб-браузере:
