我有一个配置文件,如下。该文件是一个configmap,将由我的应用安装和读取。这里的问题是此配置文件具有一个带有我的数据库密码的属性。而且我不想暴露它。因此无论如何都将kubernetes秘密注入到这种配置文件中。谢谢
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>my_db_password</value>
</property>
答案 0 :(得分:0)
尝试以下步骤
1. add the password as an environment variable
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>${my_db_password}</value>
</property>
2. include the password in secret object
3. load the env variable from secret object. you need to define env from secret object ref in pod definition
答案 1 :(得分:0)
如果您不想直接将秘密公开给应用程序容器,则可以使用初始化容器和共享卷的组合。
init容器使用密钥从模板创建配置文件(例如,sed
替换占位符)并将文件放置在共享卷中。应用程序容器使用该卷来检索文件。 (鉴于您可以配置应用程序期望配置文件的路径。)
另一种选择是简单地将密钥用作应用程序的环境变量,并从常规配置中单独获取它。
答案 2 :(得分:0)
问题在于XML不会扩展该变量。不知道它是否适合您的用例,但是我们有一个带有一些XML配置的JVM应用程序,并做了以下工作以使其起作用:
Secret
Secret
环境变量中引用Depoyment
System Properties
注入到JAVA_OPT
变量中示例
部署文件:
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
labels:
app: myapp
spec:
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: myimage
ports:
- containerPort: 8080
env:
- name: DB_USER
valueFrom:
secretKeyRef:
name: my-secret-credentials
key: user
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: my-secret-credentials
key: password
- name: JAVA_OPTS
value: "-db.user=$(DB_USER) -Ddb.password=$(DB_PASSWORD)"
您的XML配置文件:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>"#{systemProperties['db.user']}"</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>"#{systemProperties['db.password']}"</value>
</property>
这样,您的秘密就可以安全地注入了。只需从部署yaml中的另一个环境变量引用环境变量时要注意,它使用括号而不是花括号。
希望有帮助
答案 3 :(得分:0)
我不知道这种方法是否适用于Hadoop 2。
在Hadoop 3+中,我对core-site.xml和hive-metastore.xml使用了以下配置,以从环境变量中设置配置值:
core-site.xml
<property>
<name>fs.defaultFS</name>
<value>${env.HADOOP_DEFAULT_FS}</value>
</property>
metastore-site.xml:
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>${env.METASTORE_PASSWORD}</value>
</property>
在将HADOOP_DEFAULT_FS和METASTORE_PASSWORD定义为k8s密钥的情况下,该密钥作为env变量附加到容器。