在Kubernetes集群中部署ArangoDB时修改默认用户名密码的可行方案
在Kubernetes中配置ArangoDB集群的用户名和密码
问题原因
你之前直接通过env字段设置ARANGO_ROOT_PASSWORD等变量未生效,核心原因是:ArangoDB Operator在Production环境下会接管认证配置,直接设置环境变量会被Operator覆盖;且首次部署后,密码已存储在数据库系统集合中,后续修改环境变量无法同步数据库内的密码。
解决方案
1. 首次部署时配置认证信息
通过spec.auth字段指定密码对应的Secret,这是ArangoDB Operator官方推荐的配置方式:
修改你的my_arango.yml,添加auth配置段:
apiVersion: "database.arangodb.com/v1" kind: "ArangoDeployment" metadata: name: "arangodb-cluster" spec: metrics: mode: sidecar enabled: true image: 'arangodb/arangodb-exporter:0.1.8' tls: false annotations: prometheus.io/scrape: 'true' prometheus.io/port: '9101' prometheus.io/scrape_interval: '5s' mode: Cluster environment: Production tls: caSecretName: None agents: count: 3 args: - --log.level=debug resources: requests: storage: 500Mi storageClassName: nfs-csi dbservers: count: 3 resources: requests: storage: 500Mi storageClassName: nfs-csi coordinators: count: 3 image: "arangodb/arangodb:3.10.3" # 添加认证配置 auth: # 指定root用户密码的Secret名称 rootPasswordSecretName: "arangodb-root-secret" # 如需创建额外普通用户,添加以下配置 users: - username: "newusername" passwordSecretName: "arangodb-user-secret"
提前创建对应的Secret:
- 创建root密码Secret:
kubectl create secret generic arangodb-root-secret --from-literal=password="your-new-root-password"
- 创建普通用户Secret(如果配置了额外用户):
kubectl create secret generic arangodb-user-secret --from-literal=password="your-new-user-password"
最后重新部署:
kubectl apply -f my_arango.yml
2. 已部署集群修改密码
如果集群已经运行,需要通过ArangoDB内置工具修改数据库内的密码,步骤如下:
- 进入任意coordinator Pod:
kubectl exec -it $(kubectl get pods -l role=coordinator -o jsonpath='{.items[0].metadata.name}') -- arangosh --server.username root --server.password old-root-password
- 在
arangosh交互界面执行修改命令:
// 修改root用户密码 require("@arangodb/users").update("root", "new-root-password"); // 如果修改普通用户密码 require("@arangodb/users").update("newusername", "new-user-password");
- (可选)同步更新对应的Secret,保持配置一致性:
# 更新root密码Secret kubectl create secret generic arangodb-root-secret --from-literal=password="new-root-password" --dry-run=client -o yaml | kubectl replace -f - # 更新普通用户Secret(如果有) kubectl create secret generic arangodb-user-secret --from-literal=password="new-user-password" --dry-run=client -o yaml | kubectl replace -f -
内容的提问来源于stack exchange,提问作者Rajadurai M
相关产品推荐
相关产品推荐

