【问题标题】:Using variables in Kubernetes via secret file通过秘密文件在 Kubernetes 中使用变量
【发布时间】:2021-07-29 17:52:48
【问题描述】:

我正在尝试在confMap 的一行中使用来自secret 的变量。该部署正在部署一个需要通过 url 连接到MongoDB 服务器的应用程序。 url 在confMap 中,usernamepassword 是存储在secret 中的变量。 我被困在里面太久了,无法解决。非常感谢您的帮助。文件如下:

deployent.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: echo-deployment
  labels:
    app: echo-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: echo-app
  template:
    metadata:
      labels:
        app: echo-app
    spec:
      containers:
      - name: echo-app-container
        image: gcr.io/echo-project-320612/echo:v1.1
        ports:
          - containerPort: 3000
        volumeMounts:
          - mountPath: /app/config 
            name: echo-confmap123
        env:
          - name: username
            valueFrom:
              secretKeyRef:
                name: echo-secret
                key: username
          - name: password
            valueFrom:
              secretKeyRef:
                name: echo-secret
                key: password
      volumes:
        - name: echo-confmap123
          configMap:
            name: echo-confmap

secret.yaml:

apiVersion: v1
kind: Secret
metadata:
  name: echo-secret
type: Opaque
stringData:
  username: usr123
  password: 123

配置地图:

apiVersion: v1
kind: ConfigMap
metadata:
  name: echo-confmap
data:
  default.yaml: |
    port: 3000
    loglevel: info
    persist: true
    dbname: my-database
    mongodburl: mongodb://$(username):$(password)@my-database-mongodb-0.my-database-mongodb-headless.default.svc.cluster.local,my-database-mongodb-1.my-database-mongodb-headless.default.svc.cluster.local,my-database-mongodb-2.my-database-mongodb-headless.default.svc.cluster.local:27017/my-database

错误:

[2021-07-29T17:54:41.949] [INFO] default - Starting echo app!
[2021-07-29T17:54:41.967] [INFO] default - Echo listening on port 3000!
[2021-07-29T17:54:41.989] [FATAL] default - Could not connect to MongoDB! MongoError: Authentication failed.
    at Function._getError (/app/node_modules/mongodb/lib/core/auth/scram.js:125:14)
    at /app/node_modules/mongodb/lib/core/auth/scram.js:175:31
    at Connection.messageHandler (/app/node_modules/mongodb/lib/core/connection/connect.js:334:5)
    at Connection.emit (events.js:314:20)
    at processMessage (/app/node_modules/mongodb/lib/core/connection/connection.js:364:10)
    at Socket.<anonymous> (/app/node_modules/mongodb/lib/core/connection/connection.js:533:15)
    at Socket.emit (events.js:314:20)
    at addChunk (_stream_readable.js:297:12)
    at readableAddChunk (_stream_readable.js:272:9)
    at Socket.Readable.push (_stream_readable.js:213:10) {
  name: 'MongoNetworkError',
  errorLabels: [ 'TransientTransactionError' ],
  [Symbol(mongoErrorContextSymbol)]: {}
}
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

【问题讨论】:

  • 欢迎来到 StackOverflow!你能指定错误吗? kubectl 描述 pod
  • 是的,我已将其添加到问题中。谢谢!
  • 这能回答你的问题吗? Import data to config map from kubernetes secret
  • 抱歉,没有成功。
  • 能不能进入容器里面,去文件的路径做个猫?

标签: kubernetes deployment environment-variables configmap kubernetes-secrets


【解决方案1】:

请检查您的 MongoDB URL 连接字符串,但如果身份验证失败,这意味着可能是用户名密码问题。

mongodb://myDBReader:D1fficultP%40ssw0rd@mongodb0.example.com:27017,mongodb1.example.com:27017,mongodb2.example.com:27017/?authSource=admin&replicaSet=myRepl

理想情况下,我们在每个服务 URL 的末尾传递端口号,如果有的话,还传递默认的管理数据库。

https://docs.mongodb.com/manual/reference/connection-string/

【讨论】:

  • 身份验证失败,因为看起来环境变量没有被解析 $(username) 和 $(password)
  • 您的 yaml 文件将无法从密钥中获取或解析用户名或密码。
  • 尝试在配置映射中的 default.yaml 中添加静态字符串并检查以验证
猜你喜欢
  • 2016-08-21
  • 2023-01-22
  • 1970-01-01
  • 2016-02-17
  • 2020-07-27
  • 2018-02-03
  • 2021-02-12
  • 1970-01-01
  • 2016-09-07
相关资源
最近更新 更多