Ansible AWX本地部署遇PostgreSQL密码认证失败及Secret配置异常求助
看起来你在AWX本地部署过程中碰到了两个挺棘手的PostgreSQL相关问题,我来帮你一步步排查分析:
问题一:未指定Secret时Web Pod报密码认证失败
你提到删除PVC重新部署没用,大概率是PostgreSQL的旧数据没彻底清干净,导致AWX生成的新密码和PostgreSQL里留存的旧密码不匹配。可以按以下步骤排查:
彻底清理PostgreSQL残留数据
- 先删除现有的PostgreSQL Pod和PVC:
kubectl delete pod ansible-awx-postgres-13-0 -n awx kubectl delete pvc postgres-13-ansible-awx-postgres-13-0 -n awx - 登录Kubernetes节点的宿主机,找到local-storage对应的存储目录(通常在
/var/lib/kubelet/pods/<PodID>/volumes/kubernetes.io~local-storage/<PVC名称>),手动删除整个目录下的所有PostgreSQL数据文件。 - 重新应用AWX Manifest,让Operator重新初始化PostgreSQL实例。
- 先删除现有的PostgreSQL Pod和PVC:
验证自动生成的Secret密码
AWX Operator会自动创建名为ansible-awx-postgres-configuration的Secret,你可以解密查看里面的密码:kubectl get secret ansible-awx-postgres-configuration -n awx -o jsonpath='{.data.password}' | base64 -d然后进入PostgreSQL Pod验证密码是否匹配:
kubectl exec -it ansible-awx-postgres-13-0 -n awx -- psql -U awx -d awx输入解密后的密码,如果能成功登录,说明密码没问题;如果登录失败,就需要彻底清理PostgreSQL数据后重新部署。
问题二:指定自定义Secret后仅Operator Pod运行
你的Secret配置存在几个关键错误,导致AWX无法正常创建相关资源:
Secret语法错误
你的secret.yaml里重复定义了type字段(type: unmanaged和type: Opaque),Kubernetes Secret只能有一个type值,需要删掉type: unmanaged;另外{{password}}是模板变量,你要替换成真实的密码字符串,不能直接保留这个变量。修正后的Secret示例:
apiVersion: v1 kind: Secret metadata: name: awx-postgres-password namespace: awx type: Opaque stringData: password: "YourSecurePassword123!"AWX Manifest参数误用
postgres_configuration_secret是用来配置外部PostgreSQL的参数,如果你用的是Operator内置的PostgreSQL,应该用postgres_password_secret来指定自定义密码,而不是前者。修正后的AWX Manifest:
apiVersion: awx.ansible.com/v1beta1 kind: AWX metadata: name: ansible-awx namespace: awx spec: service_type: nodeport postgres_storage_class: local-storage postgres_password_secret: awx-postgres-password重新部署流程
先清理旧的AWX资源,再重新应用配置:kubectl delete awx ansible-awx -n awx kubectl apply -f secret.yaml -n awx kubectl apply -f awx.yaml -n awx之后用
kubectl get pods -n awx观察Pod启动状态,等待所有组件就绪。
备注:内容来源于stack exchange,提问作者eia92

