学习Kubernetes部署Mongo与Mongo Express遇数据库连接故障
Kubernetes中Mongo与Mongo Express部署连接问题排查
问题说明
正在学习Kubernetes,部署Mongo和Mongo Express节点时遇到连接问题。执行minikube service mongo-express-service启动服务后页面无法正常工作,报错信息:Could not connect to database using connectionString: mongodb://-n 'username'
相关配置与信息
1. 核心配置文件
Mongo-express Deployment及Service
apiVersion: apps/v1 kind: Deployment metadata: name: mongo-express labels: app: mongo-express 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_SERVER valueFrom: configMapKeyRef: name: mongodb-configmap key: database_url - name: ME_CONFIG_MONGODB_ADMINUSERNAME valueFrom: secretKeyRef: name: mongodb-secret key: mongo-root-username - name: ME_CONFIG_BASICAUTH_USERNAME valueFrom: secretKeyRef: name: mongodb-secret key: mongo-root-username - name: ME_CONFIG_MONGODB_ADMINPASSWORD valueFrom: secretKeyRef: name: mongodb-secret key: mongo-root-username - name: ME_CONFIG_BASICAUTH_PASSWORD valueFrom: secretKeyRef: name: mongodb-secret key: mongo-root-username --- apiVersion: v1 kind: Service metadata: name: mongo-express-service spec: selector: app: mongo-express type: LoadBalancer ports: - protocol: TCP port: 8081 targetPort: 8081 nodePort: 30000
ConfigMap
ConfigMap名称为mongodb-configmap,其中database_url键的值设置为mongodb-service(对应Mongo Service的名称)
Mongo Deployment及Service
apiVersion: apps/v1 kind: Deployment metadata: name: mongodb labels: app: mongodb spec: replicas: 1 selector: matchLabels: app: mongodb template: metadata: labels: app: mongodb spec: containers: - name: mongodb image: mongo ports: - containerPort: 27017 hostPort: 27017 env: - name: MONGO_INITDB_ROOT_USERNAME valueFrom: secretKeyRef: name: mongodb-secret key: mongo-root-username - name: MONGO_INITDB_ROOT_PASSWORD valueFrom: secretKeyRef: name: mongodb-secret key: mongo-root-password --- apiVersion: v1 kind: Service metadata: name: mongodb-service spec: selector: app: mongodb ports: - protocol: TCP port: 27017 targetPort: 27017
Secret
Secret名称为mongodb-secret,包含两个键:mongo-root-username(存储Mongo管理员用户名)、mongo-root-password(存储Mongo管理员密码)
问题排查与修复
核心问题
Mongo-express的环境变量配置存在明显错误:
ME_CONFIG_MONGODB_ADMINPASSWORD(Mongo认证密码)错误引用了mongo-root-username键ME_CONFIG_BASICAUTH_PASSWORD(Mongo Express自身登录密码)同样错误引用了mongo-root-username键
这两个错误会导致连接Mongo时使用用户名作为密码,认证失败,同时生成格式异常的连接字符串,最终出现页面无法访问的问题。
修复后的Mongo-express环境变量配置
env: - name: ME_CONFIG_MONGODB_SERVER valueFrom: configMapKeyRef: name: mongodb-configmap key: database_url - name: ME_CONFIG_MONGODB_ADMINUSERNAME valueFrom: secretKeyRef: name: mongodb-secret key: mongo-root-username - name: ME_CONFIG_BASICAUTH_USERNAME valueFrom: secretKeyRef: name: mongodb-secret key: mongo-root-username - name: ME_CONFIG_MONGODB_ADMINPASSWORD valueFrom: secretKeyRef: name: mongodb-secret key: mongo-root-password - name: ME_CONFIG_BASICAUTH_PASSWORD valueFrom: secretKeyRef: name: mongodb-secret key: mongo-root-password
修复步骤
- 编辑Mongo-express的Deployment配置文件,替换上述错误的环境变量配置
- 应用更新后的配置:
kubectl apply -f <你的mongo-express配置文件名>.yaml - 等待Pod重启完成后,再次执行
minikube service mongo-express-service测试服务连接
内容的提问来源于stack exchange,提问作者mohmad khaled
相关产品推荐
相关产品推荐

