soc*_*pet 7 postgresql docker kubernetes skaffold
正如标题所示,我正在设置一个,POSTGRES_PASSWORD在使用 Skaffold 启动集群后(--port-forward这样我就可以使用 pgAdmin 访问数据库),我可以使用或不使用正确的密码访问数据库。POSTGRES_DB并按POSTGRES_USER预期工作。
我在 Docker Hub for Postgres 的文档中看到:
注 1:PostgreSQL 映像在本地设置身份验证,因此您可能会注意到从(在同一容器内)
trust连接时不需要密码。localhost但是,如果从不同的主机/容器连接,则需要密码。
我认为这--port-forward可能是罪魁祸首,因为它注册为localhost.
无论如何要防止这种行为?
我想担心的是有人可以访问我的笔记本电脑并轻松连接到数据库。
这是我的postgres.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: postgres-deployment
spec:
replicas: 1
selector:
matchLabels:
component: postgres
template:
metadata:
labels:
component: postgres
spec:
containers:
- name: postgres
image:testproject/postgres
ports:
- containerPort: 5432
env:
- name: POSTGRES_DB
value: dev
- name: POSTGRES_USER
value: dev
- name: POSTGRES_PASSWORD
value: qwerty
volumeMounts:
- name: postgres-storage
mountPath: /var/lib/postgresql/data
subPath: postgres
volumes:
- name: postgres-storage
persistentVolumeClaim:
claimName: postgres-storage
---
apiVersion: v1
kind: Service
metadata:
name: postgres-cluster-ip-service
spec:
type: ClusterIP
selector:
component: postgres
ports:
- port: 5432
targetPort: 5432
Run Code Online (Sandbox Code Playgroud)
还有skaffold.yaml:
apiVersion: skaffold/v1beta15
kind: Config
build:
local:
push: false
artifacts:
- image: testproject/postgres
docker:
dockerfile: ./db/Dockerfile.dev
sync:
manual:
- src: "***/*.sql"
dest: .
- image: testproject/server
docker:
dockerfile: ./server/Dockerfile.dev
sync:
manual:
- src: "***/*.py"
dest: .
deploy:
kubectl:
manifests:
- k8s/ingress.yaml
- k8s/postgres.yaml
- k8s/server.yaml
Run Code Online (Sandbox Code Playgroud)
太Dockerfile.dev:
FROM postgres:11-alpine
EXPOSE 5432
COPY ./db/*.sql /docker-entrypoint-initdb.d/
Run Code Online (Sandbox Code Playgroud)
好吧,重读postgresDocker 文档并发现了这一点:
POSTGRES_INITDB_ARGS
此可选环境变量可用于将参数发送到
postgres initdb. 该值是一个空格分隔的参数字符串,正如postgres initdb预期的那样。这对于添加数据页校验和等功能很有用:-e POSTGRES_INITDB_ARGS="--data-checksums".
这让我看到了initdb文档:
--auth=验证方法
该选项指定 pg_hba.conf 中使用的本地用户的身份验证方法(主机行和本地行)。除非您信任系统上的所有本地用户,否则请勿使用信任。trust 是默认值,以便于安装。
这让我看到了身份验证方法文档:
19.3.2。密码认证
基于密码的身份验证方法是
md5和password。这些方法的操作类似,只是通过连接发送密码的方式不同,即分别是 MD5 散列和明文。如果您完全担心密码“嗅探”攻击,那么这
md5是首选。如果可能的话password,应始终避免使用纯色。但是,md5不能与该功能一起使用db_user_namespace。如果连接受 SSL 加密保护,则可以安全地使用密码(尽管如果依赖使用 SSL,SSL 证书身份验证可能是更好的选择)。PostgreSQL 数据库密码与操作系统用户密码是分开的。每个数据库用户的密码都存储在
pg_authid系统目录中。可以使用 SQL 命令CREATE USER和来管理密码ALTER ROLE,例如CREATE USER foo WITH PASSWORD 'secret'。如果没有为用户设置密码,则存储的密码为空,并且该用户的密码验证将始终失败。
长话短说,我刚刚这样做了,现在只需要实际密码:
env:
...
- name: POSTGRES_INITDB_ARGS
value: "-A md5"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2490 次 |
| 最近记录: |