当前位置: 首页 > 知识库问答 >
问题:

从kubernetes秘密导入数据到配置映射

淳于凯
2023-03-14

我正在使用包含应用程序数据库配置的kubernetes ConfigMap,并且有一个具有数据库密码的秘密。我需要在ConfigMap中使用这个秘密,因此当我尝试在ConfigMap中添加环境变量并从秘密中指定pod部署中的值时,我无法使用密码连接到mysql,因为ConfigMap中的值采用了变量的确切字符串。

apiVersion: v1
kind: ConfigMap
metadata:
  name: config
data:
  APP_CONFIG: |
    port: 8080
    databases:
      default:
        connector: mysql
        host: "mysql"
        port: "3306"
        user: "root"
        password: "$DB_PASSWORD"

还有deployment.yaml

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: app
  labels:
    app: backend
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: backend
    spec:
      containers:
      - name: app
        image: simple-app-image
        ports:
          - name: "8080"
            containerPort: 8080
        env:
          - name: APP_CONFIG
            valueFrom:
              configMapKeyRef:
                name: config
                key: APP_CONFIG
          - name: DB_PASSWORD
            valueFrom:
              secretKeyRef:
                name: "mysql-secret"
                key: "mysql-root-password"

注意:这个秘密是存在的,我可以获得“mysql root password”值并使用它登录数据库

共有2个答案

师向文
2023-03-14

我会将整个配置映射转换为一个机密,并将数据库密码直接部署在其中。然后,您可以将机密作为文件装载到卷中,并像容器中的常规配置文件一样使用它。

越飞语
2023-03-14

库伯内特斯不能代替你,你应该用容器入口的shell来代替。

这是一个工作示例。我修改默认入口点以使用该替换创建一个新变量。在此命令之后,您应该添加所需的入口点。

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: app
  labels:
    app: backend
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: backend
    spec:
      containers:
      - name: app
        image: simple-app-image
        command:
          - /bin/bash
          - -c
        args:
          - "NEW_APP_CONFIG=$(echo $APP_CONFIG | envsubst) && echo $NEW_APP_CONFIG && <INSERT IMAGE ENTRYPOINT HERE>"
        ports:
          - name: "app"
            containerPort: 8080
        env:
          - name: APP_CONFIG
            valueFrom:
              configMapKeyRef:
                name: config
                key: APP_CONFIG
          - name: DB_PASSWORD
            valueFrom:
              secretKeyRef:
                name: "mysql-secret"
                key: "mysql-root-password"
 类似资料:
  • 我想知道如何让它在Java中工作。 谢谢,德里克

  • 我成功地实现了在terraform中创建敏感资源的流程,在任何时候都不会透露敏感细节是什么,因此在我们的github repo中不会以纯文本存储。我让TF创建一个服务帐户,它与SA密钥相关,然后创建一个引用SA密钥输出的GCP密钥。 我现在想看看是否有任何方法可以对一些预定义的数据库密码执行相同的操作。流量会略有不同: 手动创建GCP secret(在secrets manager中),该密码的值

  • 我想将数据从postgres导入到配置单元,然后输入以下命令: 但我看到这条失败的消息: 问题是什么?我如何修复这个故障???

  • 我试图使用将数据从复制到。但是,尽管我在文件中设置了变量,但仍然出现了以下错误。下面是我的代码: bashrc文件中的变量: 错误: 我还需要在这里添加/修改什么??

  • 最近,我了解了HashiCorp Vault及其与Kubernetes结合的用法。我发现了两篇非常棒的博客文章,关于如何通过使用init-container和共享卷(post1,post2)来使用HashiCorp Vault来动态生成cred。Kubernetes还提供了一种使用Kubernetes机密处理凭据的好方法,它还允许用户通过环境变量读取凭据。因此,它为秘密存储提供了一个很好的抽象。

  • 我在系统中安装了hadoop 2.7.1和sqoop 1.4.6。我正在尝试将一个表从MySQL导入到HDFS。我收到以下错误: