如何为本地REST API配置证书以连接GCP PostgreSQL数据库?
用Kubernetes Secrets管理GCP PostgreSQL SSL证书并配置Spring Boot连接
我来帮你一步步搞定这个问题~你已经完成了公网IP授权,接下来只需要把GCP的SSL证书放进Kubernetes Secrets,再让你的应用挂载并使用这些证书就行,具体步骤如下:
1. 准备GCP的SSL证书文件
首先确保你已经从GCP控制台下载了三个关键的SSL文件:
server-ca.pem:GCP PostgreSQL的根证书client-cert.pem:客户端证书client-key.pem:客户端私钥
把这三个文件放在本地同一个目录下,方便后续创建Secret。
2. 创建Kubernetes Secret
用kubectl命令从本地文件创建Secret,这个Secret会安全存储你的SSL证书:
kubectl create secret generic pg-ssl-secrets \ --from-file=server-ca.pem=./server-ca.pem \ --from-file=client-cert.pem=./client-cert.pem \ --from-file=client-key.pem=./client-key.pem
pg-ssl-secrets是Secret的名字,你可以根据自己的业务需求修改--from-file参数把本地文件映射成Secret里的键值对,键名和文件名保持一致
创建完成后,你可以用kubectl describe secret pg-ssl-secrets验证Secret是否成功生成。
3. 在Deployment中挂载Secret到容器
修改你的Kubernetes Deployment配置,把刚才创建的Secret挂载到应用容器的某个目录(比如/etc/postgresql/ssl/),这样应用就能访问到证书文件了。下面是Deployment的关键配置片段:
apiVersion: apps/v1 kind: Deployment metadata: name: your-app-deployment spec: replicas: 1 template: spec: containers: - name: your-app-container image: your-app-image:tag volumeMounts: - name: pg-ssl-vol mountPath: /etc/postgresql/ssl/ readOnly: true volumes: - name: pg-ssl-vol secret: secretName: pg-ssl-secrets # PostgreSQL要求私钥权限为0600,这里设置默认权限符合要求 defaultMode: 0600
volumeMounts指定容器内的挂载路径,设为只读更安全volumes关联到之前创建的Secret,defaultMode确保私钥文件权限符合数据库要求
4. 配置Spring Boot的application.properties
现在修改你的application.properties,添加SSL连接相关的配置,指向挂载的证书路径:
# 基础数据库连接配置 spring.datasource.url=jdbc:postgresql://<你的GCP PG公网IP>:5432/<数据库名>?sslmode=verify-ca&sslrootcert=/etc/postgresql/ssl/server-ca.pem&sslcert=/etc/postgresql/ssl/client-cert.pem&sslkey=/etc/postgresql/ssl/client-key.pem spring.datasource.username=<数据库用户名> spring.datasource.password=<数据库密码> spring.datasource.driver-class-name=org.postgresql.Driver # 可选:开启SSL调试(排查连接问题时用) logging.level.org.postgresql=DEBUG
sslmode=verify-ca表示验证服务器证书的合法性,确保连接安全- 三个
ssl*参数对应挂载的证书文件路径,要和Deployment里的mountPath完全一致
5. 验证连接
部署更新后的Deployment,然后查看应用日志确认连接状态:
kubectl logs -f your-app-pod-name
如果日志里没有SSL相关的错误,说明连接成功啦!如果遇到权限问题,可以进入容器检查证书文件的权限:
kubectl exec -it your-app-pod-name -- ls -l /etc/postgresql/ssl/
内容的提问来源于stack exchange,提问作者Ilham Jilani
相关产品推荐
相关产品推荐

