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

  • 相关阅读:
    使用IntelliJ Idea开发Spark应用程序
    国产单路AHDRX芯片XS9950,替代TP9950
    Linux---用户组命令(groupadd、groupdel、groupmod、newgrp、getent)
    1.4.8 实验8:stp
    Linux 环境变量配置的 6 种方法
    关于神经网络的思考
    算法——快乐数
    Java基础知识
    【计算机网络】数据链路层重点协议
    oracle如果不适用toad或者plsql工具如何获取索引建表语句
  • 原文地址:https://blog.csdn.net/gzroy/article/details/132907781