您可以创建一个部署和一个服务来将CloudSQL代理暴露给其他Pod,方法如下:
apiVersion: v1
kind: Service
metadata:
name: cloudsqlproxy
spec:
ports:
- port: 3306
targetPort: database-port
selector:
app: cloudsqlproxy
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: cloudsqlproxy
spec:
template:
metadata:
labels:
app: cloudsqlproxy
spec:
volumes:
- name: service-account-token
secret:
secretName: service-account-token
containers:
- name: cloudsql-proxy
image: gcr.io/cloudsql-docker/gce-proxy:1.11
imagePullPolicy: Always
command:
- /cloud_sql_proxy
- -instances=<project>:<cloudsqlinstance>=tcp:0.0.0.0:3306
- -credential_file=/secrets/cloudsql/credentials.json
ports:
- name: database-port
containerPort: 3306
volumeMounts:
- name: service-account-token
mountPath: /secrets/cloudsql
readOnly: true
在任何一个pod中,你的数据库 MYSQL_HOST:MYSQL_PORT
都将是 cloudsqlproxy:3306
如果要通过同一个代理使用多个数据库,则代理的部署结构相同,只不过现在需要从pod中公开2个端口,如下所示:
apiVersion: extensions/v1beta1
...
spec:
template:
...
spec:
volumes:
...
containers:
- name: cloudsql-proxy
...
ports:
- name: database-port1
containerPort: 3306
- name: database-port2
containerPort: 3307
...
然后您需要创建两个服务来为这些端口进行发现,如下所示:
apiVersion: v1
kind: Service
metadata:
name: cloudsqlproxy-db1
spec:
ports:
- port: 3306
targetPort: database-port1
selector:
app: cloudsqlproxy
---
apiVersion: v1
kind: Service
metadata:
name: cloudsqlproxy-db2
spec:
ports:
- port: 3306
targetPort: database-port2
selector:
app: cloudsqlproxy
所以,当两个服务都设置为端口
3306
时,您可以在该端口连接到每个数据库:
mysql --host=cloudsqlproxy-db1 --port=3306 ...
mysql --host=cloudsqlproxy-db2 --port=3306 ...
参考资料:https://github.com/GoogleCloudPlatform/cloudsql-proxy/blob/master/Kubernetes.md
这篇文章介绍了如何在Kubernetes中使用Google Cloud SQL Proxy。Google Cloud SQL Proxy是一种用于连接Google Cloud SQL数据库的代理程序,它可以帮助您更安全地访问和管理数据库。
tcp:5432
更改为tcp:0.0.0.0:5432
对我起了作用,因为tcp:5432
隐式地转换为tcp:127.0.0.1:5432
。 - Cole