gpt4 book ai didi

tomcat - 在 tomcat catalina.properties [Kubernetes] 中注入(inject)环境变量

转载 作者:行者123 更新时间:2023-12-02 12:12:57 25 4
gpt4 key购买 nike

我正在使用 kubernetes 部署 Web 应用程序。

  containers:
- name: myapp
image: tomcat8-jre8:latest
imagePullPolicy: Always
env:
- name: DATABASE_HOST
valueFrom:
secretKeyRef:
name: my-secret
key: external.database.host
- name: DATABASE_USER
valueFrom:
secretKeyRef:
name: my-secret
key: external.database.user
- name: DATABASE_PASSWORD
valueFrom:
secretKeyRef:
name: my-secret
key: external.database.password

我还使用带有自定义 server.xml 和 catalina.properties 的 tomcat JNDI

 <Resource factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
name="jdbc/mysource"
auth="Container"
type="javax.sql.DataSource"
driverClassName="org.postgresql.Driver"
url="jdbc:postgresql://******" # secret url
username="${database.user}"
password="${database.password}" />

我尝试将新属性放入 catalina.properties

### catalina specific configuration
database.user = ${DATABASE_USER}
database.password = ${DATABASE_PASSWORD}

server.xml 可以很好的读取属性但是无法解析环境变量${DATABASE_USER} 和${DATABASE_PASSWORD}

server.xml 和 catalina.properties 都作为配置映射挂载,敏感信息保存在环境变量中。我们不知道他们的值(value)观

环境变量是在我登录 pod 时设置的,并且可以从我的 web 应用程序(基于 java)中识别,但无法从 catalina.properties(和/或 server.xml)中读取它

任何人都可以给我一些提示吗?是否可以在 tomcat 配置中注入(inject)环境变量?

谢谢

最佳答案

我遇到了同样的问题,答案来自 @jamesfry帮我把它修好了。尽管我很难找到如何在 Kubernetes 中为容器设置“系统属性”。因此,根据 James 的回答,在您的“部署”中共享修复程序所需的确切代码更改:

containers:
- name: myapp
image: tomcat8-jre8:latest
imagePullPolicy: Always
env:
- name: JAVA_OPTS
value: -Dorg.apache.tomcat.util.digester.PROPERTY_SOURCE=org.apache.tomcat.util.digester.EnvironmentPropertySource
- name: DATABASE_HOST
valueFrom:
secretKeyRef:
name: my-secret
key: external.database.host
- name: DATABASE_USER
valueFrom:
secretKeyRef:
name: my-secret
key: external.database.user
- name: DATABASE_PASSWORD
valueFrom:
secretKeyRef:
name: my-secret
key: external.database.password

请注意,您的 JNDI 可以直接在部署文件中使用您的环境变量,如下所示:

<Resource factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
name="jdbc/mysource"
auth="Container"
type="javax.sql.DataSource"
driverClassName="org.postgresql.Driver"
url="jdbc:postgresql://${DATABASE_HOST}" # secret url
username="${DATABASE_USER}"
password="${DATABASE_PASSWORD}" />

而且您不需要触摸 catalina.properties。

关于tomcat - 在 tomcat catalina.properties [Kubernetes] 中注入(inject)环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60604514/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com