我想将我的Kubernetes集群连接到Google Cloud SQL.
我有至少10个不同部署的pod,目前使用JDBC url +用户名/密码连接到MySQL [部署到k8s的docker镜像].
是否可以使用单个Google Cloud SQL Proxy实例并通过此代理将所有pod连接到Cloud SQL数据库?理想情况下,我想用代理替换容器中运行的mysql.
我宁愿不必在每个部署中运行代理.我发现的唯一样本似乎表明需要在每个部署中声明代理.
我找到了解决方案.
使用下面的yml部署代理,并将部署公开为服务.最重要的是,让代理监听0.0.0.0,而不是默认127.0.0.1.根据Google Cloud sql文档的所有秘密
apiVersion: extensions/v1beta1 kind: Deployment metadata: name: mysql spec: replicas: 1 template: metadata: name: mysql labels: name: mysql spec: containers: - image: b.gcr.io/cloudsql-docker/gce-proxy:1.05 name: cloudsql-proxy command: ["/cloud_sql_proxy", "--dir=/cloudsql", "-instances=MYSQL:ZONE:DATABASE_INSTANCE=tcp:0.0.0.0:3306", "-credential_file=/secrets/cloudsql/credentials.json"] volumeMounts: - name: cloudsql-oauth-credentials mountPath: /secrets/cloudsql readOnly: true - name: ssl-certs mountPath: /etc/ssl/certs ports: - containerPort: 3306 name: mysql volumes: - name: cloudsql-oauth-credentials secret: secretName: cloudsql-oauth-credentials - name: ssl-certs hostPath: path: /etc/ssl/certs
该解决方案比在与客户端软件相同的部署中使用代理稍微昂贵,因为存在额外的TCP连接.
但是有很多好处:
更简单,不需要修改现有的K8S部署文件
允许将实现切换到MySQL Docker容器或使用Google Cloud SQL代理,而无需对客户端配置进行任何修改.