0

我有一个 mongo 数据库和 mongo-express 作为 Kubernetes 集群中的 Docker 容器运行。根据文档,我通过将用户名和密码分别分配给 ME_CONFIG_BASICAUTH_USERNAME 和 ME_CONFIG_BASICAUTH_PASSWORD envs 来启用 mongo-express 基本身份验证。https://github.com/mongo-express/mongo-express

之后,基本身份验证弹出窗口起作用,并且正确验证了 env 凭据。

在此处输入图像描述

这种方法 - 在 mongo-express 清单文件中将凭据作为纯文本传递并不能让我满意。我想将这些敏感凭证作为 base64 编码字符串保存在秘密 Kubernetes 对象中。

问题是,如果我尝试将 mongo-express 基本身份验证凭据存储在秘密对象中,则此凭据不再有效,因此我无法登录 mongo-express UI。

我目前正在使用秘密值来存储 mongodb 凭据,并且没有问题。

在 mongo-express 容器中,credentails 已正确分配给它们的环境。从容器的角度来看,ME_CONFIG_BASICAUTH_USERNAME 和 ME_CONFIG_BASICAUTH_PASSWORD 环境变量的值是相同的,无论它们是从秘密分配的,还是作为 mongo-express 清单中的值。

在此处输入图像描述

我在 mongo-express 部署之前重新加载了机密。

在此处输入图像描述

简而言之,如果凭据作为值传递一切正常,如果作为秘密,则登录失败且没有错误。

已登录用户的所需视图。 在此处输入图像描述

mongo-express 清单文件:

# SERVICE
apiVersion: v1
kind: Service
metadata:
  name: mongo-express-service
  labels:
    app: mongo-express-service
spec:
  selector:
    app: mongo-express
  type: LoadBalancer
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8081
---
# DEPLOYMENT
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mongo-express-deployment
  labels:
    app: mongo-express-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mongo-express
  template:
    metadata:
      labels:
        app: mongo-express
    spec:
      containers:
        - name: mongo-express
          image: mongo-express
          ports:
            - containerPort: 8081
          env:
            - name: ME_CONFIG_MONGODB_ADMINUSERNAME
              valueFrom:
                secretKeyRef:
                  name: mongo-secret
                  key: mongo-root-username
            - name: ME_CONFIG_MONGODB_ADMINPASSWORD
              valueFrom:
                secretKeyRef:
                  name: mongo-secret
                  key: mongo-root-password
            - name: ME_CONFIG_BASICAUTH_USERNAME
              # value: admin
              valueFrom:
                secretKeyRef:
                  name: mongo-secret
                  key: mongo-basic-auth-username
            - name: ME_CONFIG_BASICAUTH_PASSWORD
              # value: admin
              valueFrom:
                secretKeyRef:
                  name: mongo-secret
                  key: mongo-basic-auth-password
            - name: ME_CONFIG_MONGODB_SERVER
              valueFrom:
                configMapKeyRef:
                  name: mongo-config
                  key: mongo-server

mongo 秘密 mainfest 文件:

# SECRET
apiVersion: v1
kind: Secret
metadata:
  name: mongo-secret
type: Opaque
data:
  mongo-root-username: XXXXXXXXXXXXXXXXXX
  mongo-root-password: XXXXXXXXXXXXXXXXXX
  mongo-basic-auth-username: YWRtaW4K
  mongo-basic-auth-password: YWRtaW4K
4

1 回答 1

0

我猜存储的秘密只能在部署阶段访问。ME Express 似乎不喜欢 base64 编码的这些值。尝试使用文档中的身份验证文件进行配置。将这些值进行 base64 编码没有多大意义:a) 网络用户无法访问它们。b) 它们很容易解码

ME_CONFIG_MONGODB_AUTH_USERNAME_FILE
ME_CONFIG_MONGODB_AUTH_PASSWORD_FILE
于 2022-01-25T08:22:48.113 回答