Хотя это и не прямой ответ, но альтернативное решение этой проблемы.
Как отметил @hariK, переменные среды всегда являются строками, и для того, чтобы использовать их как json, нам нужно будет преобразовать env var читать как строку в json.
Однако в моем случае это не было жизнеспособным решением, потому что я использовал библиотеку, которая ожидала объект Config , а не json объект напрямую, что потребовало бы много работы. Преобразование string
-> json
-> Config
. Кроме того, этот подход несовместим с тем, как объект Config
создавался в сценарии разработки ios, то есть json
-> Config
. См. здесь .
Фреймворк, который я использую для создания этого приложения, основан на Play Framework , который позволяет разбивать конфигурации приложений на модули в отдельных файлах, а затем объединять необходимые части вместе в желаемом файле конфигурации, как показано ниже. Вы можете прочитать его более подробно здесь .
application.conf
include "/opt/conf/app1.conf"
include "/opt/conf/app2.conf"
Это позволило мне использовать Используя Секреты в виде файлов из функции Pod от kubernetes.
- По сути, я создал небольшой файл конфигурации, который содержит часть моего основного файла конфигурации приложения, как показано ниже:
cat deploy/keys/signature-public-jwk
pac4j.lagom.jwt.authenticator {
signatures = [
{
algorithm = "RS256"
jwk = {"kty":"RSA","e":"AQAB","n":"ghhDZxuUo6TaSvAlD23mLP6n_T9pQuJsFY4JWdBYTjtcp_8Q3QeR477jou4cScPGczWw2JMGnx-Ao_b7ewagSl7VHpECBFHgcnlAgs5j6jfnd3M9ADKD2Yc756iXlIMT9xKDblIcXQQYlXalqxGvnLRLv1KAgVVVpVWzQd6Iz8WdTnexVrh7L9N87QQbOWcAVWGHCWCLCBsVE7JbC-XDt9h9P1g1sMqMV-qp7HjSXUKWuF2NwOnL2VeFSED7gdefs2Za1UYqhfwxdGl7aaPDXhjib0cfg4NvbcXMzxDEVkeJqhdDfD82wHOs4qFvnFMVxq9n6VVExSxsJq8gBJ7Z2AmfoXpmZC1L1ZwULB2KKpFXDCzgBELPLrfyIf8mNnk2nuuLT-aaMsqy2uB-ea3du4lyWo9MLk6x-L5g-n1oADKFKBY9aP2QQwruCG92XSd7jA9yLtbgr9OGVCYezxIxFp4vW6KcmPwJQjozWtwkZjeo4hv-zhRac73WDox2hDkif7WPTuEvC21fRy3GvyPIUPKPJA8pJjb2TXT7DXknR97CTnOWicuh3HMoRlVIwUzM5SVLGSXex0VjHZKgLYwQYukg5O2rab_4NxpD6LqLHx1bbPssC7BedCIfWX1Vcae40tlfvJAM09MiwQPZjWRahW_fK_9X5F5_rtUhCznm32M"}
}
]
}
Затем создал секрет кубернетов и примонтировал тома при развертывании, чтобы они отображались в модуле в виде файла
kubectl create secret generic signature-public-secret --from-file=./deploy/secrets/signature-public-jwks.conf
// deployment yaml
spec:
containers:
- name: employee
image: "codingkapoor/employee-impl:latest"
volumeMounts:
- name: signature-public-secret-conf
mountPath: /opt/conf/signature-public-jwks.conf
subPath: signature-public-jwks.conf
readOnly: true
volumes:
- name: signature-public-secret-conf
secret:
secretName: signature-public-secret
Используйте это место смонтированного файла в
application.conf
, чтобы включить тот же
include file("/opt/conf/signature-public-jwks.conf")
Обратите внимание, что mountPath
и расположение файла в application.conf
совпадают.
Преимущества этого подхода:
Решение совместимо с рабочей средой разработки и тестирования, поскольку мы могли бы вернуть json вместо строки в библиотеку, как описано выше.
Секреты в любом случае не должны передаваться как переменные среды! Подробнее об этом можно прочитать здесь .