我正在尝试使用 env
ConfigMap 和 Secret 设置 mongo 的两个 MONGO_INITDB_ROOT_USERNAME
变量 - MONGO_INITDB_ROOT_PASSWORD
和 kubernetes
如下:
当我不使用配置映射和密码时,即我对用户名和密码进行硬编码时,它可以工作,但是当我尝试用配置映射和密码替换它时,它说
<块引用>'身份验证失败。'
我的用户名和密码是一样的,就是admin
这是这些 obects 的 yaml
定义,有人能帮我看看有什么问题吗?
apiVersion: v1
kind: ConfigMap
metadata:
name: mongodb-username
data:
username: admin
---
apiVersion: v1
kind: Secret
metadata:
name: mongodb-password
data:
password: YWRtaW4K
type: Opaque
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: mongodbtest
spec:
# serviceName: mongodbtest
replicas: 1
selector:
matchLabels:
app: mongodbtest
template:
metadata:
labels:
app: mongodbtest
selector: mongodbtest
spec:
containers:
- name: mongodbtest
image: mongo:3
# env:
# - name: MONGO_INITDB_ROOT_USERNAME
# value: admin
# - name: MONGO_INITDB_ROOT_PASSWORD
# value: admin
env:
- name: MONGO_INITDB_ROOT_USERNAME
valueFrom:
configMapKeyRef:
name: mongodb-username
key: username
- name: MONGO_INITDB_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mongodb-password
key: password
答案 0 :(得分:1)
最后我在几个小时后找到了解决方案,这不是我在 kubernetes 方面所做的,而是在我进行 base64
编码时。
正确的编码方式是使用以下命令:
echo -n 'admin' | base64
这就是我的问题。
答案 1 :(得分:0)
apiVersion: v1
data:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD : password
kind: ConfigMap
metadata:
name: mongo-cred
namespace: default
将其注入到部署中
envFrom:
- configMapRef:
name: mongo-cred
部署将类似于
apiVersion: apps/v1
kind: Deployment
metadata:
name: mongodbtest
spec:
# serviceName: mongodbtest
replicas: 1
selector:
matchLabels:
app: mongodbtest
template:
metadata:
labels:
app: mongodbtest
selector: mongodbtest
spec:
containers:
- name: mongodbtest
image: mongo:3
envFrom:
- configMapRef:
name: mongo-cred
如果您想秘密保存数据,最好的做法是使用加密 base64 存储数据和敏感数据。
envFrom:
- secretRef:
name: mongo-cred
你可以用
创建秘密apiVersion: v1
data:
MONGO_INITDB_ROOT_USERNAME: YWRtaW4K #base 64 encoded
MONGO_INITDB_ROOT_PASSWORD : YWRtaW4K
kind: secret
type: Opaque
metadata:
name: mongo-cred
namespace: default
答案 2 :(得分:0)
您的部署 yaml 没问题,只需将 spec.containers[0].env
更改为 spec.containers[0].envFrom
:
spec:
containers:
- name: mongodbtest
image: mongo:3
envFrom:
- configMapRef:
name: mongodb-username
- secretRef:
name: mongodb-password
这会将您的密钥和 configmap 的所有密钥作为部署中的环境变量。