Как сохранить небольшой конфиденциальный файл в PCF, чтобы приложение Spring могло получить к нему доступ - PullRequest
0 голосов
/ 12 июня 2019

Мне нужно сохранить файл Kafka Keystore.jks и Truststore.jks в PCF, чтобы мое весеннее загрузочное приложение могло использовать его для доступа к кластеру.

Решение, которое я имею в виду, состоит в том, чтоследующее.Мой трубопровод Дженкинс подключен к Хасикорп Хранилище.Поэтому я могу хранить закодированный в BASE64 контент в Vault и читать его оттуда во время развертывания.Но я не знаю, как вывести этот контент в виде файла на виртуальной машине PCF до запуска моего Java-приложения.Я пытался следовать маршруту .profile;к сожалению, Java Build Pack не поддерживает .profile.Любые указатели будут с благодарностью, спасибо!

Ответы [ 3 ]

1 голос
/ 12 июня 2019

Несколько вариантов:

  1. Поместите ваши JKS-файлы, которые защищены паролем, как файл внутри вашего приложения. Передайте пароль, чтобы прочитать их, используя переменную среды, предоставляемую пользователем службу, через Spring Config Server или через брокера служб CredHub.

  2. То же, что и # 1, но создайте небольшой пользовательский сборочный пакет, который устанавливает ваши файлы JKS. Используйте функциональность multi-buildpack для платформ, чтобы сначала запустить свой собственный buildpack, а затем Java buildpack. Эта опция немного удобнее, если у вас много приложений, использующих одни и те же файлы JKS.

  3. Base64 кодирует ваши JKS-файлы и помещает их в переменную среды, предоставляемую пользователем службу, Spring Config Server или через сервисный брокер CredHub. Извлекайте и декодируйте их при запуске приложения, либо в файле .profile, либо в самом приложении.

При создании вашего JAR-файла вы можете запустить run jar uf <path/to/file.jar> .profile, и он добавит файл .profile в корень вашего JAR-файла.

Вы можете подтвердить, что он в нужном месте, запустив jar tf <path/to/file.jar>. Вывод должен выглядеть следующим образом ...

...
BOOT-INF/lib/jackson-annotations-2.9.0.jar
BOOT-INF/lib/jackson-core-2.9.6.jar
BOOT-INF/lib/reactive-streams-1.0.2.jar
BOOT-INF/lib/logback-core-1.2.3.jar
BOOT-INF/lib/log4j-api-2.10.0.jar
<rest of your files here>
... 
.profile

Обратите внимание, что перед .profile нет пути. Вот где он должен быть для правильной работы.

Надеюсь, это поможет!

1 голос
/ 15 июня 2019

Я создал новый сборочный пакет поставки, чтобы помочь решить эту проблему

https://github.com/starkandwayne/dot-profile-buildpack

cf push javaapp --path build/jibs/myapp-1.0.0.jar \
  -b https://github.com/starkandwayne/dot-profile-buildpack \
  -b java_buildpack \
  --no-start
cf set-env javaapp PROFILED "$(cat <<SHELL
#!/bin/bash

cat > config.json <<JSON
{
  "some": "config"
}
JSON
SHELL
)"
cf start javaapp

Конечно, вы также можете установить $PROFILED env var в вашем cf push -f manifest.yml.

1 голос
/ 12 июня 2019

Вы можете использовать плагин spring-cloud-vault, чтобы при загрузке приложения при начальной загрузке загрузите ваши секреты из хранилища.
Плагин Spring-cloud-vault

Но я не понимаю, зачем вам помещать файлы JKS в хранилище. Эти JKS-файлы защищены паролем, что означает, что вы можете связать jks-файлы как ресурс внутри вашего JAR-файла и просто получить секретный пароль, необходимый для открытия этих JKS-файлов из хранилища при запуске приложения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...