在Helidon MicroProfile应用中访问Kubernetes(OKE)集群Secret示例咨询
在OKE集群中通过Secret配置JDBC密码到属性文件的示例
步骤1:创建存储密码的Secret
先将数据库密码存入Kubernetes Secret,有两种常用创建方式:
方式1:命令行直接创建
假设目标密码为myDBPassword,执行以下命令:
kubectl create secret generic db-secret --from-literal=db-password=myDBPassword
方式2:YAML文件创建
先编写db-secret.yaml文件(注意密码需用Base64编码,可通过echo -n 'myDBPassword' | base64生成编码值):
apiVersion: v1 kind: Secret metadata: name: db-secret type: Opaque data: db-password: bXlEQlBhc3N3b3Jk
再执行部署命令:
kubectl apply -f db-secret.yaml
步骤2:在Pod中注入Secret并替换属性文件参数
以下两种方法可实现将Secret中的密码写入目标属性参数oracle.ucp.jdbc.PoolDataSource.test_ds.password="":
方法1:环境变量+启动脚本替换
在Deployment配置中,先将Secret注入为环境变量,再通过启动脚本替换属性文件的参数:
apiVersion: apps/v1 kind: Deployment metadata: name: my-app spec: replicas: 1 selector: matchLabels: app: my-app template: metadata: labels: app: my-app spec: containers: - name: my-app-container image: your-app-image:latest env: - name: DB_PASSWORD valueFrom: secretKeyRef: name: db-secret key: db-password command: ["/bin/sh", "-c"] args: - | sed -i "s/oracle.ucp.jdbc.PoolDataSource.test_ds.password=\"\"/oracle.ucp.jdbc.PoolDataSource.test_ds.password=\"$DB_PASSWORD\"/" /path/to/application.properties java -jar /path/to/your-app.jar
说明:
- 替换
/path/to/application.properties为容器内属性文件的实际路径 sed命令会精准替换目标参数的空值为Secret中的密码
方法2:ConfigMap模板+Secret文件挂载
如果属性文件可做成模板,可通过ConfigMap提供模板,结合Secret文件挂载实现替换:
- 创建包含属性模板的ConfigMap:
apiVersion: v1 kind: ConfigMap metadata: name: app-config data: application.properties: | oracle.ucp.jdbc.PoolDataSource.test_ds.password="${DB_PASSWORD}" # 其他应用配置参数...
执行kubectl apply -f app-config.yaml完成创建。
- 编写Deployment配置:
apiVersion: apps/v1 kind: Deployment metadata: name: my-app spec: replicas: 1 selector: matchLabels: app: my-app template: metadata: labels: app: my-app spec: containers: - name: my-app-container image: your-app-image:latest volumeMounts: - name: config-volume mountPath: /tmp/config - name: secret-volume mountPath: /tmp/secret readOnly: true command: ["/bin/sh", "-c"] args: - | DB_PASSWORD=$(cat /tmp/secret/db-password) envsubst '${DB_PASSWORD}' < /tmp/config/application.properties > /path/to/application.properties java -jar /path/to/your-app.jar volumes: - name: config-volume configMap: name: app-config - name: secret-volume secret: secretName: db-secret
说明:
- ConfigMap挂载后提供带占位符
${DB_PASSWORD}的属性模板 - Secret以文件形式挂载,通过读取文件内容获取密码
envsubst命令替换占位符,生成最终可用的属性文件
验证配置结果
部署完成后,可进入容器查看属性文件是否替换成功:
kubectl exec -it <你的Pod名称> -- cat /path/to/application.properties
确认oracle.ucp.jdbc.PoolDataSource.test_ds.password的值已正确设置为Secret中的密码。
内容的提问来源于stack exchange,提问作者Ravisankar Jampani
相关产品推荐
相关产品推荐

