同一区域EKS部署应用与Aurora MySQL RDS集群建立SSL连接方法问询
从us-east-1区域EKS应用连接同区域Aurora MySQL集群的SSL配置步骤
1. 准备RDS根证书
获取AWS us-east-1区域适用的RDS PEM格式根证书bundle,文件通常命名为global-bundle.pem,该证书可用于校验所有AWS区域RDS实例的服务端SSL证书。
2. 将证书存储为EKS Secret
在本地确认证书内容无误后,执行以下kubectl命令在你的应用所在命名空间创建Secret:
kubectl create secret generic rds-ssl-ca --from-file=./global-bundle.pem -n <你的应用部署命名空间>
3. 应用部署挂载证书
修改应用的Deployment配置文件,添加卷配置将Secret挂载到应用容器内可访问的路径:
- 在
spec.template.spec.volumes字段下新增卷定义:
volumes: - name: rds-ca-bundle secret: secretName: rds-ssl-ca
- 在
spec.template.spec.containers[*].volumeMounts字段下新增挂载配置:
volumeMounts: - name: rds-ca-bundle mountPath: /etc/ssl/certs/rds-global-bundle.pem subPath: global-bundle.pem readOnly: true
4. 修改数据库连接配置开启SSL
根据你的应用使用的数据库驱动,调整连接参数启用SSL并指定证书路径:
- JDBC驱动连接串示例:
jdbc:mysql://<你的Aurora集群访问端点>:3306/<数据库名称>?useSSL=true&requireSSL=true&verifyServerCertificate=true&caCertificate=/etc/ssl/certs/rds-global-bundle.pem
- Python PyMySQL驱动连接示例:
import pymysql conn = pymysql.connect( host="<Aurora集群访问端点>", user="<数据库用户名>", password="<数据库密码>", database="<数据库名称>", ssl={"ca": "/etc/ssl/certs/rds-global-bundle.pem"} )
- Node.js mysql2驱动连接示例:
const mysql = require('mysql2'); const conn = mysql.createConnection({ host: '<Aurora集群访问端点>', user: '<数据库用户名>', password: '<数据库密码>', database: '<数据库名称>', ssl: { ca: fs.readFileSync('/etc/ssl/certs/rds-global-bundle.pem') } });
注意事项
- 提前确认网络连通性:EKS Pod所在安全组需要放通到Aurora安全组3306端口的出方向规则,Aurora安全组需要放通EKS Pod CIDR段3306端口的入方向规则
- 生产环境必须开启
verifyServerCertificate参数,避免中间人攻击;仅测试场景可临时关闭该参数跳过证书校验 - 证书到期更新时,只需更新对应Secret内容后滚动重启应用即可,无需修改应用镜像
内容的提问来源于stack exchange,提问作者Pracheer Pancholi
相关产品推荐
相关产品推荐

