Когда я пытаюсь открыть веб-интерфейс xyz.com/h2/ базы данных H2 в своем браузере, я получаю следующий ответ в виде открытого текста:
Host xyz.com not found
Я использую базу данных H2 в среде Kubernetes.
Для запуска базы данных H2 используются следующие параметры JVM:
command:
- java
args:
- -cp
- /opt/h2/h2.jar
- org.h2.tools.Server
- -baseDir
- /opt/h2/data
- -tcp
- -tcpPort
- "9092"
- -tcpAllowOthers
- -web
- -webDaemon
- -webPort
- "8082"
- -webAllowOthers
- -ifNotExists
Когда я включаю трассировку с помощью опции -trace
, я вижу ошибку HTTP 404 Not Found в журналах сервера базы данных H2.
Версии, которые я использую: Н2: 2.2.224 Кубернетес: 1,26 Ява: JDK11
Я ожидаю увидеть консоль графического интерфейса (веб-интерфейс) базы данных H2 при запросе URL-адреса. Например, с H2 версии 1.4.196 приведенная выше конфигурация работает.
Решение: использовать опцию webExternalNames
JVM, чтобы разблокировать имена хостов, с которых должен быть запрошен мой экземпляр базы данных H2.
В моем случае командная строка в манифесте развертывания Kubernetes теперь выглядит так:
command:
- java
args:
- -cp
- /opt/h2/h2.jar
- org.h2.tools.Server
- -baseDir
- /opt/h2/data
- -tcp
- -tcpPort
- "9092"
- -tcpAllowOthers
- -web
- -webDaemon
- -webPort
- "8082"
- -webAllowOthers
- -webExternalNames
- xyz.com,localhost,h2-v2,h2-v2.build,h2-v2.build.svc.cluster.local
- -ifNotExists
xyz.com = это имя хоста при запросе веб-интерфейса H2 из-за пределов кластера Kubernetes.
localhost = адрес обратной связи при вызове веб-интерфейса из модуля Kubernetes
h2-v2 = имя службы Kubernetes для вызова веб-интерфейса из другого модуля в том же пространстве имен в том же кластере Kubernetes.
h2-v2.* = имя службы Kubernetes в сочетании с пространством имен (сборка) и полным доменным именем (svc.cluster.local) для поддержки различных конфигураций в модулях одного и того же или разных пространств имен в одном кластере Kubernetes.
Список всех вариантов JVM для запуска экземпляра сервера базы данных H2 вы можете получить здесь: H2database.com/javadocs
Спасибо за подсказку. Я знаю эту проблему уже из чтения документации. Мы используем H2 в интранете и только для тестирования. Невозможно войти в базу данных из любой ненадежной сети за пределами нашей организации.
Комбинация -webAllowOthers/-tcpAllowOthers/-pgAllowOthers с -ifNotExists эффективно открывает брешь в удаленной безопасности вашей системы, если к этим портам можно получить доступ из ненадежных сетей.