如何将kubernetes秘密注入配置文件
我有一个配置文件,如下所示。此文件是configmap,将由我的应用程序装载和读取。这里的问题是,此配置文件有一个带有my db password的属性。我不想让它暴露出来。因此,无论如何都有必要将kubernetes秘密注入到这样的配置文件中。谢谢如何将kubernetes秘密注入配置文件,kubernetes,Kubernetes,我有一个配置文件,如下所示。此文件是configmap,将由我的应用程序装载和读取。这里的问题是,此配置文件有一个带有my db password的属性。我不想让它暴露出来。因此,无论如何都有必要将kubernetes秘密注入到这样的配置文件中。谢谢 <?xml version="1.0" encoding="UTF-8" standalone="no"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?&g
<?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>
javax.jdo.option.ConnectionUserName
蜂箱
javax.jdo.option.ConnectionPassword
我的密码
尝试以下步骤
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。将密码添加为环境变量
javax.jdo.option.ConnectionUserName
蜂箱
javax.jdo.option.ConnectionPassword
${my_db_password}
2.在机密对象中包含密码
3.从secret对象加载env变量。您需要从pod定义中的secret object ref定义环境
如果不想直接向应用程序容器公开机密,可以将init容器与共享卷结合使用
init容器使用secret从模板创建配置文件(f.e.sed
替换占位符),并将文件放置在共享卷中。应用程序容器使用卷检索文件。(假设您可以配置应用程序需要配置文件的路径。)
另一种选择是简单地将secret用作应用程序的环境变量,并将其与常规配置分开检索。问题在于XML不会扩展该变量。不确定它是否适合您的用例,但我们有一个带有一些XML配置的JVM应用程序,并执行了以下操作以使其正常工作:
Secret
Depoyment
环境变量中的Secret
系统属性
注入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>
javax.jdo.option.ConnectionUserName
“#{systemProperties['db.user']}”
javax.jdo.option.ConnectionPassword
“#{systemProperties['db.password']}”
这样你的秘密就可以安全地注射了。请注意,当从部署yaml中的另一个环境变量引用环境变量时,它使用括号而不是大括号
希望这能有所帮助我不知道这种方法是否适用于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>
fs.defaultFS
${env.HADOOP\u DEFAULT\u FS}
metastore-site.xml:
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>${env.METASTORE_PASSWORD}</value>
</property>
javax.jdo.option.ConnectionPassword
${env.METASTORE_PASSWORD}
其中HADOOP_DEFAULT_FS和METASTORE_PASSWORD被定义为k8s secret,作为环境变量附加到容器。是什么导致环境变量引用被扩展?有多种方法。您可以尝试使用envsubst