You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于从Google Cloud Composer连接Google Cloud SQL(MySQL)的技术方案问询

嘿,我来梳理下从新版Cloud Composer连接Cloud SQL(MySQL)并把数据导入BigQuery的可行方案,还有你关心的代理暴露和Service Broker相关问题:

连接Cloud SQL的几种方式

1. Cloud SQL代理(推荐生产环境使用)

这是Google官方推荐的安全连接方式,有两种落地形式:

  • 任务内临时启动代理:在Airflow任务(比如BashOperator或PythonOperator)里先下载启动代理,再执行数据导出+导入流程。示例命令如下:

    # 下载Cloud SQL代理二进制文件
    wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy
    chmod +x cloud_sql_proxy
    # 后台启动代理,绑定本地3306端口
    ./cloud_sql_proxy -instances=你的项目ID:地区:SQL实例名=tcp:3306 &
    # 导出MySQL数据到Cloud Storage
    mysqldump -h 127.0.0.1 -u 用户名 -p密码 数据库名 | gsutil cp - gs://你的存储桶名/数据备份.sql
    # 从GCS导入数据到BigQuery
    bq load --source_format=SQL 你的BigQuery数据集.表名 gs://你的存储桶名/数据备份.sql
    

    记得给Composer关联的服务账号添加Cloud SQL Client、Storage Object Creator、BigQuery Data Editor这几个权限,不然会遇到权限报错。

  • Sidecar容器常驻代理:如果不想每次任务都重复启动代理,可以给Composer的Airflow Worker Pod添加一个Cloud SQL代理的Sidecar容器。这样Worker Pod里的所有任务都能直接通过localhost:3306连接Cloud SQL,效率更高。典型的Pod配置片段如下:

    containers:
      - name: cloud-sql-proxy
        image: gcr.io/cloudsql-docker/gce-proxy:1.33.1
        command:
          - "/cloud_sql_proxy"
          - "-instances=你的项目ID:地区:SQL实例名=tcp:3306"
          - "-credential_file=/secrets/service_account.json"
        volumeMounts:
          - name: service-account-secret
            mountPath: /secrets/
            readOnly: true
    volumes:
      - name: service-account-secret
        secret:
          secretName: composer-service-account-secret
    

    你可以通过Composer的自定义Pod模板功能来配置这个Sidecar。

2. 私有IP直接连接(同VPC场景)

如果你的Cloud SQL实例和Composer的Kubernetes集群在同一个VPC网络里,可以直接用Cloud SQL的私有IP地址连接,不需要代理。只要给Composer服务账号授权Cloud SQL Client权限,任务里直接把私有IP作为MySQL主机地址就行,后续导出到GCS再导入BigQuery的流程和上面一致。

3. 公网IP连接(不推荐)

直接用Cloud SQL的公网IP,然后在Cloud SQL的“授权网络”列表里添加Composer集群的出口IP。但这种方式安全性差,容易被攻击,只适合测试环境临时用。

关于代理暴露和Service Broker的问题

能否在Composer的K8s Pod上暴露Cloud SQL代理?

当然可以!刚才提到的Sidecar容器方式就是把代理部署在Worker Pod内部,任务通过localhost访问。如果想让集群内其他Pod也能用到这个代理,你可以把Cloud SQL代理单独部署成一个K8s Deployment,再创建一个ClusterIP或NodePort Service暴露3306端口。不过对于Composer本身的任务来说,Sidecar模式已经足够贴合需求了,毕竟任务都是在Worker Pod里运行的。

是否可通过Kubernetes Service Broker引入Cloud SQL代理?

Google Cloud的Service Broker确实整合了Cloud SQL服务,你可以通过它在K8s集群里创建Cloud SQL实例的绑定,自动部署代理并生成Service供应用访问。不过对于Composer来说,直接用Sidecar或任务内启动代理的方式更直接——毕竟Composer的任务执行模型是基于Worker Pod的,Sidecar能更高效地为任务提供连接能力。如果你的集群已经配置了Service Broker,也可以尝试这种方式,但要确保Composer的Worker Pod能访问到Service Broker创建的代理Service。

内容的提问来源于stack exchange,提问作者Raj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:45:03