You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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文件挂载实现替换:

  1. 创建包含属性模板的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完成创建。

  1. 编写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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 12:47:22