• GCP设置Proxy来连接Cloud SQL


    在之前的文章用Google CDC来同步Cloud SQL的数据到Bigquery_gzroy的博客-CSDN博客中,我通过在一个VM上设置反向代理的方式,使得Datastream可以通过私用连接连到Cloud SQL数据库进行数据复制。但是这种方式不太方便,主要是VM的状态我们不太方便去进行监控,而且资源也占用较大。那么我们是否可以在Kubernetes上面起Pod来提供这个反向代理的连接呢?答案是采用GCP的cloud sql auth proxy来做。

    首先我们建立一个job的yaml文件,来启动Pod

    1. apiVersion: batch/v1
    2. kind: Job
    3. metadata:
    4. name: cloud-sql-proxy
    5. labels:
    6. app.kubernetes.io/name: cloud-sql-proxy
    7. namespace: abc
    8. spec:
    9. parallelism: 1
    10. template:
    11. spec:
    12. containers:
    13. - command:
    14. - /cloud_sql_proxy
    15. - -instances=XXXX=tcp:0.0.0.0:5432
    16. - -ip_address_types=PRIVATE
    17. image: gcr.io/gce-proxy:1.28.0
    18. imagePullPolicy: IfNotPresent
    19. name: cloud-sql-proxy
    20. resources: {}
    21. terminationMessagePath: /dev/termination-log
    22. terminationMessagePolicy: File
    23. ports:
    24. - containerPort: 5432
    25. name: pg-port
    26. protocol: TCP
    27. serviceAccountName: cloud-sql-pg
    28. dnsPolicy: ClusterFirst
    29. restartPolicy: OnFailure
    30. schedulerName: default-scheduler
    31. securityContext: {}
    32. terminationGracePeriodSeconds: 30
    33. ttlSecondsAfterFinished: 3600

    其中instance参数需要填写我们的cloud sql的connection name, serviceAccountName需要填写我们K8S里面的service account。

    然后我们需要绑定K8S service account和GCP service account,因为需要用到GCP的SA账号来去调用cloud sql的资源,这里是用到了GCP kubernetes workload identity的概念。

    运行以下命令创建一个GCP的service account

    1. gcloud iam service-accounts create gke-quickstart-service-account \
    2. --display-name="GKE Quickstart Service Account"

    为这个service account赋予cloud sql权限

    1. gcloud projects add-iam-policy-binding YOUR_PROJECT_ID \
    2. --member="serviceAccount:gke-quickstart-service-account@YOUR_PROJECT_ID.iam.gserviceaccount.com" \
    3. --role="roles/cloudsql.client"

    把GCP的账号和K8S的账号绑定

    1. gcloud iam service-accounts add-iam-policy-binding \
    2. --role="roles/iam.workloadIdentityUser" \
    3. --member="serviceAccount:YOUR_PROJECT_ID.svc.id.goog[YOUR_K8S_NAMESPACE/YOUR_KSA_NAME]" \
    4. gke-quickstart-service-account@YOUR_PROJECT_ID.iam.gserviceaccount.com

    运行K8S命令来对这个账号做annotation

    1. kubectl annotate serviceaccount \
    2. YOUR_KSA_NAME \
    3. iam.gke.io/gcp-service-account=gke-quickstart-service-account@YOUR_PROJECT_ID.iam.gserviceaccount.com

    之后运行kubectl apply -f部署这个Job就会看到有一个sql proxy的pod成功运行了。

    然后可以建一个LoadBalancer的Service来暴露这个Pod的地址和端口

    1. apiVersion: v1
    2. kind: Service
    3. metadata:
    4. name: cloudsql-service
    5. namespace: abc
    6. spec:
    7. type: LoadBalancer
    8. selector:
    9. job-name: cloud-sql-proxy
    10. ports:
    11. - protocol: TCP
    12. port: 5432
    13. targetPort: 5432

    最后我们在datastream里面就可以用Loadbalancer的地址来建立连接了。

  • 相关阅读:
    数据结构与算法C语言版学习笔记(4)-栈与队列再回顾
    2022-10-31-基于用户的协同过滤推荐算法实现+MAE+RMSE的求解+项目代码+运行结果图
    Javascript 手写 LRU 算法
    python从入门到实践:python常用模块
    Webpack 5 超详细解读(五)
    【单片机】17-温度传感器DS18B20
    系统设计综述——个人思考总结
    Jinja2模板注入 | python模板注入特殊属性 / 对象讲解
    基于quartz的定时任务动态启停实现分析(人人平台为例)
    小程序 scroll-view 性能问题
  • 原文地址:https://blog.csdn.net/gzroy/article/details/132907781