如何实现从本地环境安全访问部署于GKE的Cloud Auth代理?
实现本地到GKE部署的Cloud Auth代理的加密连接
两种可行方案
方案一:给Cloud Auth代理本身配置TLS加密
生成TLS证书
用openssl生成自签名证书(生产环境建议用可信CA签发):openssl req -x509 -newkey rsa:4096 -keyout proxy-key.pem -out proxy-cert.pem -days 365 -nodes填写证书信息时,Common Name(CN)设为你本地访问代理用的域名或公网IP。
将证书挂载到GKE代理容器
先把证书和密钥转成Kubernetes Secret:apiVersion: v1 kind: Secret metadata: name: auth-proxy-tls type: kubernetes.io/tls data: tls.crt: <base64编码的proxy-cert.pem内容> tls.key: <base64编码的proxy-key.pem内容>再更新代理的Deployment,启用TLS监听:
spec: containers: - name: cloud-sql-auth-proxy image: gcr.io/cloudsql-docker/gce-proxy:latest command: - "/cloud_sql_proxy" - "-instances=<你的Cloud SQL实例连接名>=tcp:0.0.0.0:8080" - "-tls-cert=/tls/tls.crt" - "-tls-key=/tls/tls.key" volumeMounts: - name: tls-secret mountPath: /tls readOnly: true volumes: - name: tls-secret secret: secretName: auth-proxy-tls本地客户端配置证书信任
连接时指定CA证书,以MySQL客户端为例:mysql -h <代理公网IP> -P 8080 -u <数据库用户名> -p --ssl-ca=proxy-cert.pem应用代码中需对应配置SSL根证书路径。
方案二:通过GKE Ingress实现HTTPS转发(生产环境推荐)
配置Ingress与SSL证书
先申请Google管理的SSL证书(或上传自有证书),再创建Ingress资源转发HTTPS流量:apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: auth-proxy-ingress annotations: networking.gke.io/managed-certificates: <你的证书名称> kubernetes.io/ingress.class: "gce" spec: rules: - host: <你的自定义域名> http: paths: - path: / pathType: Prefix backend: service: name: <代理的Service名称> port: number: 8080配置代理的Service为ClusterIP
确保代理Service为ClusterIP类型,让Ingress能正常转发:apiVersion: v1 kind: Service metadata: name: cloud-sql-auth-proxy-service spec: type: ClusterIP selector: app: cloud-sql-auth-proxy ports: - port: 8080 targetPort: 8080本地通过HTTPS访问
直接用https://<你的自定义域名>:443访问代理,Google管理的证书会被主流客户端自动信任,无需额外配置。
关键注意事项
- 自签名证书需确保本地客户端信任,否则会触发SSL验证错误。
- 方案二无需手动维护证书续期,更适合长期生产使用。
- 需配置GKE防火墙规则,允许本地IP访问对应端口(方案一为8080,方案二为443)。
内容的提问来源于stack exchange,提问作者Alok
相关产品推荐
相关产品推荐

