Postgresql psycopg2.OperationalError:致命:用户的密码身份验证失败;用户名";在Minikube
我正在开发一个多容器Flask应用程序,它包括一个Web容器(Flask应用程序)、一个Postgres容器(用于DB服务)和一个Redis容器(用于缓存服务) Web应用程序具有Postgresql psycopg2.OperationalError:致命:用户的密码身份验证失败;用户名";在Minikube,postgresql,kubernetes,flask-sqlalchemy,kubernetes-ingress,minikube,Postgresql,Kubernetes,Flask Sqlalchemy,Kubernetes Ingress,Minikube,我正在开发一个多容器Flask应用程序,它包括一个Web容器(Flask应用程序)、一个Postgres容器(用于DB服务)和一个Redis容器(用于缓存服务) Web应用程序具有Web\u部署.yaml和Web\u服务.yaml文件。 Postgres应用程序具有Postgres_部署.yaml和Postgres_服务.yaml文件。 Redis应用程序具有Redis_部署.yaml和Redis_服务.yaml文件 我的web\u部署.yaml文件如下所示: apiVersion: apps/
Web\u部署.yaml
和Web\u服务.yaml
文件。
Postgres应用程序具有Postgres_部署.yaml
和Postgres_服务.yaml
文件。
Redis应用程序具有Redis_部署.yaml
和Redis_服务.yaml
文件
我的web\u部署.yaml
文件如下所示:
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-deployment
spec:
replicas: 3
template:
metadata:
labels:
component: my-web-app
spec:
containers:
- name: my-web-app-container
image: web_app_image:latest
ports:
- containerPort: 80
env:
- name: REDIS_HOST
value: redis-service
- name: REDIS_PORT
value: '6379'
- name: POSTGRES_USER
value: username
- name: POSTGRES_HOST
value: postgres-service
- name: POSTGRES_PORT
value: '5432'
- name: POSTGRES_DB
value: postgres_db
- name: PGPASSWORD
valueFrom:
secretKeyRef:
name: pgpassword
key: PGPASSWORD
selector:
matchLabels:
component: my-web-app
apiVersion: apps/v1
kind: Deployment
metadata:
name: postgres-deployment
spec:
replicas: 1
selector:
matchLabels:
component: postgres
template:
metadata:
labels:
component: postgres
spec:
volumes:
- name: postgres-storage
persistentVolumeClaim:
claimName: database-persistent-volume-claim
containers:
- name: postgres
image: postgres:12-alpine
ports:
- containerPort: 5432
volumeMounts:
- name: postgres-storage
mountPath: /var/lib/postgresql/data
subPath: postgres
env:
- name: POSTGRES_PASSWORD
valueFrom:
secretKeyRef:
name: pgpassword
key: PGPASSWORD
apiVersion: apps/v1
kind: Deployment
metadata:
name: postgres-deployment
spec:
replicas: 1
selector:
matchLabels:
component: postgres
template:
metadata:
labels:
component: postgres
spec:
volumes:
- name: postgres-storage
persistentVolumeClaim:
claimName: database-persistent-volume-claim
containers:
- name: postgres
image: postgres:12-alpine
ports:
- containerPort: 5432
volumeMounts:
- name: postgres-storage
mountPath: /var/lib/postgresql/data
subPath: postgres
env:
- name: POSTGRES_USER
value: username
- name: POSTGRES_DB
value: postgres_db
- name: POSTGRES_PASSWORD
valueFrom:
secretKeyRef:
name: pgpassword
key: PGPASSWORD
postgres\u部署.yaml
文件如下所示:
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-deployment
spec:
replicas: 3
template:
metadata:
labels:
component: my-web-app
spec:
containers:
- name: my-web-app-container
image: web_app_image:latest
ports:
- containerPort: 80
env:
- name: REDIS_HOST
value: redis-service
- name: REDIS_PORT
value: '6379'
- name: POSTGRES_USER
value: username
- name: POSTGRES_HOST
value: postgres-service
- name: POSTGRES_PORT
value: '5432'
- name: POSTGRES_DB
value: postgres_db
- name: PGPASSWORD
valueFrom:
secretKeyRef:
name: pgpassword
key: PGPASSWORD
selector:
matchLabels:
component: my-web-app
apiVersion: apps/v1
kind: Deployment
metadata:
name: postgres-deployment
spec:
replicas: 1
selector:
matchLabels:
component: postgres
template:
metadata:
labels:
component: postgres
spec:
volumes:
- name: postgres-storage
persistentVolumeClaim:
claimName: database-persistent-volume-claim
containers:
- name: postgres
image: postgres:12-alpine
ports:
- containerPort: 5432
volumeMounts:
- name: postgres-storage
mountPath: /var/lib/postgresql/data
subPath: postgres
env:
- name: POSTGRES_PASSWORD
valueFrom:
secretKeyRef:
name: pgpassword
key: PGPASSWORD
apiVersion: apps/v1
kind: Deployment
metadata:
name: postgres-deployment
spec:
replicas: 1
selector:
matchLabels:
component: postgres
template:
metadata:
labels:
component: postgres
spec:
volumes:
- name: postgres-storage
persistentVolumeClaim:
claimName: database-persistent-volume-claim
containers:
- name: postgres
image: postgres:12-alpine
ports:
- containerPort: 5432
volumeMounts:
- name: postgres-storage
mountPath: /var/lib/postgresql/data
subPath: postgres
env:
- name: POSTGRES_USER
value: username
- name: POSTGRES_DB
value: postgres_db
- name: POSTGRES_PASSWORD
valueFrom:
secretKeyRef:
name: pgpassword
key: PGPASSWORD
在尝试为web容器与postgres容器建立连接时,我遇到了以下问题:
File "/usr/local/lib/python3.8/site-packages/sqlalchemy/util/compat.py", line 211, in raise_
raise exception
File "/usr/local/lib/python3.8/site-packages/sqlalchemy/pool/base.py", line 599, in __connect
connection = pool._invoke_creator(self)
File "/usr/local/lib/python3.8/site-packages/sqlalchemy/engine/create.py", line 578, in connect
return dialect.connect(*cargs, **cparams)
File "/usr/local/lib/python3.8/site-packages/sqlalchemy/engine/default.py", line 584, in connect
return self.dbapi.connect(*cargs, **cparams)
File "/usr/local/lib/python3.8/site-packages/psycopg2/__init__.py", line 127, in connect
conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
psycopg2.OperationalError: FATAL: password authentication failed for user "username"
我成功地修复了它 错误在于,我刚刚在
posgres_deployment.yaml
文件中提到了密码,但我还应该提到数据库名称和用户名,web_deployment.yaml正使用这些名称访问此db服务
现在,更正后的新postgres_deployment.yaml
文件如下所示:
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-deployment
spec:
replicas: 3
template:
metadata:
labels:
component: my-web-app
spec:
containers:
- name: my-web-app-container
image: web_app_image:latest
ports:
- containerPort: 80
env:
- name: REDIS_HOST
value: redis-service
- name: REDIS_PORT
value: '6379'
- name: POSTGRES_USER
value: username
- name: POSTGRES_HOST
value: postgres-service
- name: POSTGRES_PORT
value: '5432'
- name: POSTGRES_DB
value: postgres_db
- name: PGPASSWORD
valueFrom:
secretKeyRef:
name: pgpassword
key: PGPASSWORD
selector:
matchLabels:
component: my-web-app
apiVersion: apps/v1
kind: Deployment
metadata:
name: postgres-deployment
spec:
replicas: 1
selector:
matchLabels:
component: postgres
template:
metadata:
labels:
component: postgres
spec:
volumes:
- name: postgres-storage
persistentVolumeClaim:
claimName: database-persistent-volume-claim
containers:
- name: postgres
image: postgres:12-alpine
ports:
- containerPort: 5432
volumeMounts:
- name: postgres-storage
mountPath: /var/lib/postgresql/data
subPath: postgres
env:
- name: POSTGRES_PASSWORD
valueFrom:
secretKeyRef:
name: pgpassword
key: PGPASSWORD
apiVersion: apps/v1
kind: Deployment
metadata:
name: postgres-deployment
spec:
replicas: 1
selector:
matchLabels:
component: postgres
template:
metadata:
labels:
component: postgres
spec:
volumes:
- name: postgres-storage
persistentVolumeClaim:
claimName: database-persistent-volume-claim
containers:
- name: postgres
image: postgres:12-alpine
ports:
- containerPort: 5432
volumeMounts:
- name: postgres-storage
mountPath: /var/lib/postgresql/data
subPath: postgres
env:
- name: POSTGRES_USER
value: username
- name: POSTGRES_DB
value: postgres_db
- name: POSTGRES_PASSWORD
valueFrom:
secretKeyRef:
name: pgpassword
key: PGPASSWORD