ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

在 Kubernetes 中安全连接 Cloud SQL:gcloud-sqlproxy Helm Chart 实战指南

在 Kubernetes 中安全连接 Cloud SQL:gcloud-sqlproxy Helm Chart 实战指南 【免费下载链接】charts⚠️(OBSOLETE) Curated applications for Kubernetes项目地址https://gitcode.com/gh_mirrors/chart/charts点击查看免费下载本文基于 Helm Charts 仓库stable/目录下的 gcloud-sqlproxy chart 及其 README 编写聚焦如何通过 Cloud SQL Proxy 在 GKE/GCE Kubernetes 集群内安全访问 Google Cloud SQL 的 PostgreSQL / MySQL 实例。读完本文你将掌握该 Chart 的安装、配置参数、模板实现原理与排障要点能够在不需要为数据库配置 IP 白名单或 SSL 的情况下让集群内应用以稳定的内部 DNS 地址直连托管数据库。一、为什么需要 Cloud SQL ProxyCloud SQL Proxy官方称为 sql-proxy为 Cloud SQL 的 PostgreSQL / MySQL 实例提供安全访问通道无需为集群节点白名单化 IP 地址也无需自行配置 SSL。官方文档描述的核心理念是把数据库流量代理进集群内部应用只需连接本地代理端口即可。使用 Cloud SQL Proxy 访问 Cloud SQL 实例具有两项关键优势安全连接代理自动加密进出数据库的流量通过 SSL 证书校验客户端与服务端身份避免明文传输与中间人风险。更简单的连接管理代理负责与 Google Cloud SQL 完成认证消除了为 GKE/GCE Kubernetes 节点提供静态 IP 地址的需求。节点规模变化、IP 变动都不会影响数据库访问。该 Chart 的定位就是用 Helm 在 Kubernetes 集群中创建 Cloud SQL Proxy 的 Deployment 与 Service把上述能力以声明式资源的方式交付。注意本 Chart 在仓库中已被标记为DEPRECATED已废弃。Chart.yaml中deprecated: true并注明由新仓库继续维护NOTES.txt也在打印信息开头明确提示 THIS CHART IS DEPRECATED。新项目建议直接使用新的上游 Chart本文仅用于理解旧 Chart 的实现思路与既有存量部署的运维参考。二、前置条件Prerequisites在安装本 Chart 之前需要准备以下条件前置项说明GKE 集群Kubernetes cluster on Google Container Engine (GKE)GCE 集群Kubernetes cluster on Google Compute Engine (GCE)Cloud SQL Administration API需要在 GCP 项目中启用 Cloud SQL 管理 APIGCP Service Account为 Proxy 创建专用服务账号并为其授予访问目标 Cloud SQL 实例的权限服务账号的创建与授权流程需要按 Google 官方指引完成在 Cloud Console 中创建服务账号、下载 JSON 密钥文件、授权该账号访问 Cloud SQL 实例。下载到的service-account.json密钥文件将用于 Chart 安装时的serviceAccountKey参数。三、安装 Chart从远程仓库部署Chart 支持通过helm upgrade或helm install安装。官方 README 给出的标准安装命令如下release 名为pg-sqlproxy命名空间为sqlproxy$ helm upgrade pg-sqlproxy stable/gcloud-sqlproxy --namespace sqlproxy \ --set serviceAccountKey$(cat service-account.json | base64) \ --set cloudsql.instances[0].instanceINSTANCE \ --set cloudsql.instances[0].projectPROJECT \ --set cloudsql.instances[0].regionREGION \ --set cloudsql.instances[0].port5432 -i该命令的核心动作拆解如下serviceAccountKey把服务账号 JSON 密钥文件做base64 编码后传入。Chart 会据此创建一个新的 Kubernetes Secret 来保存凭证详见下文 secrets.yaml 解析。cloudsql.instances[0].*声明第一个 Cloud SQL 实例的实例名、所属项目、所属区域和代理监听端口。其中port5432对应 PostgreSQLMySQL 实例应使用3306。-i等价于--install若 release 不存在则执行安装。安装完成后集群内应用即可通过 Proxy 访问数据库。替换数据库连接配置中的主机名同一命名空间内访问使用pg-sqlproxy-gcloud-sqlproxy跨命名空间访问使用pg-sqlproxy-gcloud-sqlproxy.sqlproxy其余数据库连接参数端口、账号、密码等无需任何改动。安装时的关键提示Tip使用helm list可以查看当前所有 release 及其状态。Tip如果在渲染templates/secrets.yaml时遇到 YAML 解析错误可能是因为base64命令的输出带换行可改用base64 -w 0单行输出解决。Tip如果使用的是 MySQL 实例可以把 release 名替换为mysql-sqlproxy端口从5432改为3306。Tip由于 Kubernetes 端口名称的长度限制每个实例的instance值前 15 个字符必须唯一——它会被截断用作 Service 的端口名。通过 values 文件安装除--set内联参数外也可以把所有配置写入 YAML 文件后一次性传入$ helm install --name my-release -f values.yaml stable/gcloud-sqlproxy仓库提供了开箱即用的默认 values.yaml可直接作为自定义配置的起点。例如在values.yaml中配置两个实例PostgreSQL 5432 MySQL 3306后Proxy 会在两个端口上分别监听。四、模板源码解析Chart 是如何工作的从仓库源码结构看该 Chart 由 8 个模板文件组成分别对应不同 Kubernetes 资源。理解这些模板有助于排查安装失败、按需定制。1. Deployment核心代理进程deployment.yaml 是整个 Chart 的核心。需要注意模板开头有一个守护条件{{- if ne (index .Values.cloudsql.instances 0).instance instance }}即当首个实例的 instance 仍是默认占位值instance时整个 Deployment 不会渲染——这也是为什么忘记配置实例时 Pod 无法进入 Running 状态的原因之一NOTES.txt 会打印对应 ERROR 提示。Deployment 的关键实现细节镜像{{ .Values.image }}:{{ .Values.imageTag }}默认b.gcr.io/cloudsql-docker/gce-proxy:1.11拉取策略默认IfNotPresent。启动命令直接调用/cloud_sql_proxy参数由模板拼接生成--dir/cloudsql指定 Unix socket 目录挂载自emptyDir卷cloudsql。-instancesPROJECT:REGION:INSTANCEtcp:0.0.0.0:PORT,...把cloudsql.instances列表逐个拼进-instances参数以tcp:0.0.0.0:PORT形式对外暴露 TCP 端口多个实例以逗号分隔。-credential_file/secrets/cloudsql/credentials.json仅当提供了serviceAccountKey或existingSecret时注入凭证卷挂载于/secrets/cloudsql。容器端口遍历cloudsql.instances端口名取instanceShortName未设置时取instance前 15 个字符即前面提到的 15 字符唯一性约束的来源。调度约束nodeSelector、affinity、tolerations全部透传便于把 Proxy 固定到特定节点池或与数据库同区域。副本数由replicasCount控制默认 1。2. Secret服务账号凭证注入secrets.yaml 在未提供existingSecret时创建一个Opaque类型的 Secret把serviceAccountKey写入data.credentials.json。也就是说方案 AserviceAccountKey直接提供 → Chart 自动创建 Secret默认命名为 release 名 gcloud-sqlproxy。方案 BexistingSecretexistingSecretKey→ 复用集群中已有的 Secret如由外部 Sealed Secrets 或 CI 流程管理此时serviceAccountKey会被忽略。两种方案最终都通过 Deployment 的secret卷挂载到/secrets/cloudsql目录实现凭证的运行时注入避免把明文密钥写进镜像或 Deployment 定义。3. Service集群内稳定访问入口svc.yaml 创建ClusterIP类型的 Service为每个 Cloud SQL 实例暴露一个 TCP 端口portService 对外端口等于该实例配置的port。targetPort对应 Deployment 中按实例截断/缩写生成的容器端口名。selector按app: release-gcloud-sqlproxy标签匹配后端 Pod。应用访问的 DNS 名pg-sqlproxy-gcloud-sqlproxy.sqlproxy正是由Service 名 命名空间组成Kubernetes 集群内 DNS 自动解析到该 Service 的 ClusterIP。4. PDB 与 RBAC高可用与权限模型pdb.yaml当podDisruptionBudget非空时创建PodDisruptionBudget默认配置maxUnavailable: 1保证节点维护voluntary disruption期间至少保留一个代理副本在线避免数据库连接中断。role.yaml、rolebinding.yaml、serviceaccount.yaml三者仅在rbac.create: true时创建为 Proxy Pod 关联专用 ServiceAccount并授予对secrets资源的get/watch/list权限RBAC 场景下从 Secret 读取凭证所需的最小权限集。默认rbac.create: false即依赖集群默认的节点作用域凭证如 GKE 工作负载身份或节点 scopes。5. NOTES.txt安装反馈与自检NOTES.txt 会在安装时打印三类信息未提供任何凭证时给出WARNING提示将依赖节点 scope 或外部方式提供的默认 API 访问能力实例仍为占位值instance时给出ERROR提示部署不完整并给出补齐参数的helm upgrade命令配置完整时列出每个实例可访问的端口及集群内 DNS 名称方便立即接入应用。五、完整配置参数详解原 README 提供了如下参数表下文在保留全部参数的基础上结合 values.yaml 源码补充了默认值与说明参数描述默认值imageSQLProxy 镜像b.gcr.io/cloudsql-docker/gce-proxyimageTagSQLProxy 镜像 tag1.11imagePullPolicy镜像拉取策略IfNotPresentreplicasCount副本数量1serviceAccountKey服务账号密钥 JSON 文件需 base64 编码未使用既有 Secret 时必须提供Chart 会据此创建新 Secret必须提供existingSecret存放 Cloud SQL 凭证的既有 Secret 名称existingSecretKey既有 Secret 中存放凭证的 keycloudsql.instancesPostgreSQL/MySQL 实例列表[{instance: instance, project: project, region: region, port: 5432}]必须提供resourcesCPU/内存资源请求与限制Memory:100/150MiCPU:100/150mnodeSelector节点选择器空rbac.create是否创建 RBAC 配置与 ServiceAccountfalsevalues.yaml 中的高级字段除上表之外values.yaml 还定义了以下可用字段供深度定制cloudsql.instances[].instanceShortName实例名前 15 字符不唯一时的可选缩写用于覆盖被截断的实例名作为端口标识符。若多个实例前缀相同必须显式设置不同的instanceShortName否则端口名冲突会导致 Service 创建失败。cloudsql.instances[].project/region实例所属 GCP 项目与区域二者与instance共同构成-instances参数中的实例三元组。cloudsql.instances[].portProxy 对外暴露的端口PostgreSQL 为5432MySQL 为3306也可使用你为实例自定义的其他端口不同实例应使用不同端口。tolerations/affinity容忍度与亲和性配置默认空用于把代理调度到特定节点。podDisruptionBudgetPDB 策略体默认maxUnavailable: 1设为空可禁用 PDB。所有参数均可通过helm install --set keyvalue[,keyvalue]指定或写入 YAML 文件后以-f values.yaml传入。六、卸载 Chart要卸载/删除 release$ helm delete my-release-name该命令会移除与该 Chart 关联的所有 Kubernetes 组件Deployment、Service、Secret、RBAC 资源、PDB并删除该 release 记录。若后续需要彻底清除 release 历史可追加--purge参数依 Helm 版本而定。七、常见问题速查现象原因与处理渲染templates/secrets.yaml报 YAML 解析错误base64 输出含换行符改用base64 -w 0Pod 无法进入 Running多为未提供有效服务账号凭证或实例仍为占位值instance查看NOTES.txt打印的 WARNING/ERROR 提示多实例时 Service 创建失败实例名前 15 字符重复需为冲突实例设置唯一的instanceShortName应用连接超时确认连接主机名是否带命名空间后缀跨命名空间必须使用release-gcloud-sqlproxy.namespace延伸阅读本文涉及的模板实现可深入阅读 stable/gcloud-sqlproxy/templates 下的全部 YAMLChart 元数据与废弃说明见 Chart.yaml仓库的 Chart 废弃流程定义可参考根目录 PROCESSES.md。若部署的是存量环境升级前请先核对镜像1.11版本与当前 Kubernetes API 版本的兼容性模板中使用的是extensions/v1beta1与rbac.authorization.k8s.io/v1beta1等旧版 API在新集群上可能需要进行适配。赞分享【免费下载链接】charts⚠️(OBSOLETE) Curated applications for Kubernetes项目地址https://gitcode.com/gh_mirrors/chart/charts点击查看免费下载相关推荐Falco Helm Chart 实战指南在 Kubernetes 中部署云原生运行时安全Falco Helm Chart 实战指南在 Kubernetes 中部署云原生运行时安全 导读 本文以 chart/falco/README.md http云原生运行时防护IDS应用安全vcluster Helm Chart 部署实战指南在现有 Kubernetes 集群上安装、连接与管理虚拟集群vcluster Helm Chart 部署实战指南在现有 Kubernetes 集群上安装、连接与管理虚拟集群 本篇技术指南围绕 vcluster 官方 H云原生集群管理虚拟化多集群在 Kubernetes 上使用 Helm Chart 部署 MEAN 应用kubernetes-handbook 中的 mean Chart 实战指南在 Kubernetes 上使用 Helm Chart 部署 MEAN 应用kubernetes handbook 中的 mean Chart 实战指南 导读教程云原生容器编排创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表