• 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的地址来建立连接了。

  • 相关阅读:
    go 类型
    C++ Reference: Standard C++ Library reference: C Library: cwchar: fputws
    微服务 - Consul集群化 · 服务注册 · 健康检测 · 服务发现 · 负载均衡
    【附源码】计算机毕业设计SSM网络考试系统设计
    Maven笔记
    Java应用程序性能分析与调优实践
    文档在线预览(五)在服务器部署组件来实现在线预览
    Day25力扣打卡
    OpenGL运行环境的搭建(GLFW+GLAD+OpenGL以及在Vistual Studio中的 配置)
    MFC 模态对话框的实现原理
  • 原文地址:https://blog.csdn.net/gzroy/article/details/132907781