为 Gemini 视频提示配置存储空间

借助 Gemini on Google Distributed Cloud (GDC) air-gapped,您可以通过两种主要方法提交视频提示:

  • 内嵌 Base64 编码:将视频编码为 Base64 格式,并将其作为内嵌数据在 API 请求中发送。
  • 存储桶:将视频上传到存储桶,并在请求中提供存储桶中视频的网址。

本页面将引导您设置 GDC 上 Gemini 视频提示所需的其他存储桶配置,以便推理网关可以访问该存储桶。

准备工作

在 GDC 中为 Gemini 视频提示设置存储桶之前,您必须满足以下前提条件:

  • 安装 jqyq CLI 工具。如需详细了解包含 jqyq 的工具容器设置,请参阅 OOPS-P0065 运行手册。
  • aics-system 命名空间中获取推理网关 Secret 管理员 (inference-gateway-secret-admin) 角色,以创建 Secret 资源。如需了解详情,请参阅 IAM-R0005 runbook。
  • 创建 Gemini 组织

为视频提示配置存储桶

配置对象存储桶,以允许客户组织中的用户发送视频提示。

aics-system 项目中创建存储桶,并使用以下值:

  • 存储分区名称aics-inference-gateway
  • Namespaceaics-system
  • 说明Bucket for video prompts

默认情况下,存储桶会自动使用 V2 encryption 进行加密,并且位置与您创建资源的管理 kube-apiserver 位于同一可用区。因此,您必须在管理 API 服务器中从客户组织(位于 Gemini 可用区)创建区域性 Bucket 资源。如需详细了解 Storage API,请参阅 Storage API 概览

Bucket 资源必须如以下示例所示:

apiVersion: object.gdc.goog/v1
kind: Bucket
metadata:
  labels:
    object.gdc.goog/bucket-type: normal
    object.gdc.goog/encryption-version: v2
    object.gdc.goog/tenant-category: system
  name: aics-inference-gateway
  namespace: aics-system
spec:
  description: Bucket for video prompts
  location: GEMINI_ZONE
  storageClass: Standard

GEMINI_ZONE 替换为 Gemini 可用区的名称。

配置对存储桶的访问权限

请按照以下步骤配置对您为视频提示创建的存储桶的访问权限:

  1. 在管理 API 服务器中,从客户组织创建服务账号:

    KUBECONFIG=CUS_ORG_MGMT_KUBECONFIG_PATH
    
    kubectl --kubeconfig ${KUBECONFIG:?} apply -f - << EOF
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: aics-inference-gateway
      namespace: aics-system
    EOF
    

    CUS_ORG_MGMT_KUBECONFIG_PATH 替换为客户组织的管理 API 服务器的 kubeconfig 文件的路径。

  2. 应用 RoleRoleBinding 资源,以授予服务账号对存储桶的读写权限:

    kubectl --kubeconfig ${KUBECONFIG:?} apply -f - << EOF
    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
      labels:
        logging.private.gdch.goog/loggingpipeline-name: default
      name: aics-inference-gateway-buckets-role
      namespace: aics-system
    rules:
    - apiGroups:
      - object.gdc.goog
      resourceNames:
      - aics-inference-gateway
      resources:
      - buckets
      verbs:
      - read-object
      - write-object
    EOF
    
    kubectl --kubeconfig ${KUBECONFIG:?} apply -f - << EOF
    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      labels:
        logging.private.gdch.goog/loggingpipeline-name: default
      name: audit-logs-loki-pa-buckets-binding
      namespace: aics-system
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: Role
      name: aics-inference-gateway-buckets-role
    subjects:
    - kind: ServiceAccount
      name: aics-inference-gateway
      namespace: aics-system
    EOF
    
  3. 从客户组织的管理 API 服务器复制访问密钥。此访问密钥会装载到推理网关部署中,推理网关会使用此密钥访问相应存储桶。请按照以下步骤将访问密钥从一个 API 服务器复制到另一个 API 服务器:

    1. 获取包含访问密钥的 Secret 的名称:

      MGMT_KUBECONFIG=CUS_ORG_MGMT_KUBECONFIG_PATH
      
      kubectl get secret -n aics-system \
        --kubeconfig {MGMT_KUBECONFIG:?} | grep object-storage-key
      

      CUS_ORG_MGMT_KUBECONFIG_PATH 替换为客户组织的管理 API 服务器的 kubeconfig 文件的路径。

      输出必须类似于以下示例:

      object-storage-key-sysstd-sa-5adjkgdmmn6fyd4o6ybnrnuaiomsbihq4jluymifw4jvcf7w7aya   Opaque                           3      14m
      
    2. 复制访问密钥:

      SECRET_NAME=object-storage-key-sysstd-sa-5adjkgdmmn6fyd4o6ybnrnuaiomsbihq4jluymifw4jvcf7w7aya
      
      kubectl get secret/$SECRET_NAME -n aics-system
        --kubeconfig {MGMT_KUBECONFIG:?} -o yaml | yq .data > access-key.yaml
      
    3. 在组织基础架构集群中创建具有访问密钥的新 Secret:

      CP_KUBECONFIG=CUS_ORG_CP_KUBECONFIG_PATH
      
      (echo "apiVersion: v1"; echo "kind: Secret"; echo "metadata:"; echo "  name: object-storage-key-std-sa"; \
      echo "  namespace: aics-system"; echo "data:"; sed 's/^/  /' access-key.yaml | cat -) > object-storage-key-std-sa.yaml
      
      kubectl apply --kubeconfig {CP_KUBECONFIG} -f object-storage-key-std-sa.yaml
      

      CUS_ORG_CP_KUBECONFIG_PATH 替换为客户组织的组织基础架构集群的 kubeconfig 文件路径。

后续步骤