当前位置: 首页 > news >正文

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

apiVersion: batch/v1
kind: Job
metadata:name: cloud-sql-proxylabels:app.kubernetes.io/name: cloud-sql-proxynamespace: abc
spec:parallelism: 1template:spec:containers:- command:- /cloud_sql_proxy- -instances=XXXX=tcp:0.0.0.0:5432- -ip_address_types=PRIVATEimage: gcr.io/gce-proxy:1.28.0imagePullPolicy: IfNotPresentname: cloud-sql-proxyresources: {}terminationMessagePath: /dev/termination-logterminationMessagePolicy: Fileports:- containerPort: 5432name: pg-portprotocol: TCPserviceAccountName: cloud-sql-pgdnsPolicy: ClusterFirstrestartPolicy: OnFailureschedulerName: default-schedulersecurityContext: {}terminationGracePeriodSeconds: 30ttlSecondsAfterFinished: 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

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

为这个service account赋予cloud sql权限

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

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

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

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

kubectl annotate serviceaccount \YOUR_KSA_NAME  \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的地址和端口

apiVersion: v1
kind: Service
metadata:name: cloudsql-servicenamespace: abc
spec:type: LoadBalancerselector:job-name: cloud-sql-proxyports:- protocol: TCPport: 5432targetPort: 5432

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

http://www.lryc.cn/news/169606.html

相关文章:

  • Python:为何成为当下最热门的编程语言?
  • 【echarts入门】:vue项目中应用echarts
  • Seata 源码篇之AT模式启动流程 - 上 - 02
  • FFMPEG视频压缩与Python使用方法
  • SpringMVC自定义注解---[详细介绍]
  • 5.4 转换数据
  • 雷池社区WAF:保护您的网站免受黑客攻击 | 开源日报 0918
  • 链表反转-LeetCode206
  • 北邮22级信通院数电:Verilog-FPGA(3)实验“跑通第一个例程”modelsim仿真及遇到的问题汇总(持续更新中)
  • 4G工业路由器,开启智能工厂,这就是关键所在
  • 计组-机器字长、存储字长、指令字长以及和他们有关的机器位数
  • 解决express服务器接收post请求报错:“req.body==> undefined“
  • 5.zigbee的开发,串口putchar重定向(使用print),单播实验,usb抓包实验
  • 解决AU报“MME无法使用“问题
  • Maven 安装配置
  • vscode 配置网址
  • git 本地工作区和仓库区基本使用
  • 有效的括号(栈的高频面试题)
  • GIS跟踪监管系统电子围栏
  • 蓝桥杯2023年第十四届省赛真题-买瓜--Java题解
  • Chatbot到底提供了哪些便利?来看看“中文版Chatbase”
  • 2023-09-18 LeetCode每日一题(打家劫舍 III)
  • Python一行代码实现文件共享【内网穿透公网访问】
  • uni-app 之 下拉刷新,上拉加载,获取网络列表数据
  • 笔记1.2 计算机网络结构
  • 使用Ansible Template模块进行配置文件管理
  • Secrets of RLHF in Large Language Models Part I: PPO
  • Java手写AVL树应用拓展案例
  • vue3+ts+uniapp小程序封装获取授权hook函数
  • 绘图(一)弹球小游戏