You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Helm Release添加带配置值的Sidecar容器

为Keto Helm Release添加gcloud-sqlproxy边车容器的Terraform配置方案

问题描述

我想用Terraform的helm_release Provider为Keto的Helm Release附加gcloud-sqlproxy边车容器,但不知道如何传递sqlproxy所需的配置值。Keto文档显示deploy.extraContainers字段可设置容器名称和镜像,但不清楚如何添加sqlproxy需要的额外配置(比如命令参数、端口映射等)。以下是我的初步尝试:

locals {
  db_username = "postgres"
  sql_port = "5432"
}

resource "helm_release" "keto" {
  name       = "ory"
  repository = "https://k8s.ory.sh/helm/charts"
  chart      = "keto"

  values = [
    <<EOT
    serviceAccount:
      create: false
      name: ${module.service_account.value.id}
    job:
      serviceAccount:
        create: false
        name: ${module.service_account.value.id}
    keto:
      config:
        dsn: postgres://${local.db_username}:${random_password.password.result}@pg-sqlproxy-gcloud-sqlproxy:${local.sql_port}/db
    deploy:
      extraContainers:
        name: gcloud-sqlproxy
        image: # what to place here? how to add extra values here?
    EOT
  ]
}

解决方案

deploy.extraContainers支持完整的Kubernetes容器配置字段,只需按照Kubernetes容器定义格式补充所有必要参数即可。以下是完整配置示例:

locals {
  db_username = "postgres"
  sql_port = "5432"
  # 替换为你的Cloud SQL实例连接名,格式:项目ID:区域:实例名
  sql_instance_connection_name = "your-gcp-project:us-central1:your-sql-instance"
}

resource "helm_release" "keto" {
  name       = "ory"
  repository = "https://k8s.ory.sh/helm/charts"
  chart      = "keto"
  # 根据需求指定chart版本
  version    = "0.13.0"

  values = [
    <<EOT
    serviceAccount:
      create: false
      name: ${module.service_account.value.id}
    job:
      serviceAccount:
        create: false
        name: ${module.service_account.value.id}
    keto:
      config:
        dsn: postgres://${local.db_username}:${random_password.password.result}@localhost:${local.sql_port}/db
    deploy:
      extraContainers:
        - name: gcloud-sqlproxy
          image: gcr.io/cloudsql-docker/gce-proxy:latest
          command:
            - "/cloud_sql_proxy"
          args:
            - "-instances=${local.sql_instance_connection_name}=tcp:0.0.0.0:${local.sql_port}"
            # 若需IAM数据库认证,添加以下参数
            # - "-enable_iam_login"
          ports:
            - containerPort: ${local.sql_port}
              name: sqlproxy
          securityContext:
            runAsNonRoot: true
          resources:
            requests:
              cpu: 100m
              memory: 128Mi
            limits:
              cpu: 200m
              memory: 256Mi
    EOT
  ]
}

关键配置说明

  • 镜像选择:使用官方gcloud sqlproxy镜像gcr.io/cloudsql-docker/gce-proxy:latest,也可指定具体版本号。
  • 命令与参数:通过command和args指定sqlproxy启动参数,核心是-instances传入Cloud SQL实例连接名,同时映射端口到容器的5432端口。
  • 端口映射:通过ports字段暴露sqlproxy端口,Keto主容器可通过localhost:5432访问(边车与主容器共享网络命名空间,因此DSN地址改为localhost)。
  • 权限配置:已指定拥有Cloud SQL访问权限的ServiceAccount,sqlproxy会自动使用该账号权限连接,无需额外挂载密钥文件。
  • 资源限制:根据实际需求添加资源请求和限制,避免资源占用过高。

内容的提问来源于stack exchange,提问作者baskInEminence

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 04:53:18