将 Kubernetes 应用部署到非 Google Kubernetes Engine (GKE) 集群

如果您要将 Kubernetes 应用部署到非 Google Kubernetes Engine (GKE) 集群配置(例如运行 VMware 上的 Anthos 集群Anthos 集群或运行 Istio 的集群),则必须视情况完成本部分中的任务。

根据您要部署的应用,您可能还需要执行额外一些步骤才能在集群上运行应用。如需了解如何配置应用,请参阅应用供应商的文档。

转到 Cloud Marketplace 中的 Anthos 应用

部署到运行 Istio 的集群

在运行 Istio 的集群上,默认情况下与第三方服务(例如操作系统软件包代码库)的外部连接会被阻止。您必须配置 Istio 出站流量才能启用对外部服务的访问权限。

部署到 Anthos clusters on VMware

您只能将 VMware 上的 Anthos 集群部署到支持此配置的 Cloud Marketplace 应用。如需验证应用是否支持 VMware 上的 Anthos 集群,请打开应用的 Cloud Marketplace 列表,然后在“概览”中查找以下语句:“应用支持 GKE On-Prem 部署。”

验证应用支持 VMware 上的 Anthos 集群后,请在部署应用之前完成以下任务:

完成这些任务后,打开应用的 Cloud Marketplace 列表,然后按照步骤部署应用

设置对 Container Registry 的网络访问权限

要下载应用的容器映像,请确保您的集群具有对 Container Registry 的网络访问权限。您的集群主机必须能够 ping marketplace.gcr.io。要启用访问权限,您可能需要执行以下一项或多项操作:

设置 Docker 身份验证以访问 Container Registry

如需让 VMware 上的 Anthos 集群能够访问 Container Registry 中的应用映像,您必须创建 Google Cloud 服务帐号密钥,并使用该密钥为应用的命名空间添加注释。然后,在您部署应用时,该密钥会作为命名空间的默认 Kubernetes 服务帐号 (KSA) 的 imagePullSecret 进行修补。

首次将应用部署到 VMware 上的 Anthos 集群时,您还必须为 Cloud Marketplace 组件创建一个名为 application-system 的命名空间,并将 imagePullSecret 应用于该命名空间的默认服务帐号。

请按照以下步骤设置对 Container Registry 的身份验证:

  1. 创建一个新的 Google Cloud 服务帐号。您无需向服务帐号授予任何角色。

    如需了解创建服务帐号的步骤,请参阅创建和管理服务帐号

  2. 为该服务帐号创建一个密钥,并将其作为 JSON 文件下载。如需了解创建和下载密钥的步骤,请参阅创建和管理服务帐号密钥

  3. 如果适用,请将 JSON 密钥上传到您用于连接到 VMware 上的 Anthos 集群的工作站。

  4. 如果您是第一次从 Cloud Marketplace 部署应用,请按照以下步骤使用 Secret 设置 application-system 命名空间以,访问 Container Registry。如果您已经设置了命名空间,请跳过此步骤。

    1. 在集群中创建一个 application-system 命名空间。

    2. 使用以下命令创建包含 application-systemimagePullSecret 的 Secret:

      JSON_KEY_FILENAME=path_to/service_account_key.json
      IMAGEPULLSECRET_NAME=gcr-json-key
      kubectl create secret docker-registry $IMAGEPULLSECRET_NAME \
        --namespace="application-system" \
        --docker-server=gcr.io \
        --docker-username=_json_key \
        --docker-password="$(cat $JSON_KEY_FILENAME)"
      
    3. 使用以下命令将此 imagePullSecret 应用于 application-system 命名空间中的默认 ServiceAccount:

      kubectl patch sa default -n application-system -p '"imagePullSecrets": [{"name": "gcr-json-key" }]'
      
  5. 对于要将应用部署到的每个命名空间,您必须创建一个新的 Kubernetes Secret 并使用 Secret 注释该命名空间。您不能重复使用另一个命名空间的 Secret。

    1. 创建一个 Kubernetes Secret 以使用 Google Cloud 服务帐号密钥访问 Container Registry:

      JSON_KEY_FILENAME=path_to/service_account_key.json
      IMAGEPULLSECRET_NAME=gcr-json-key
      kubectl create secret docker-registry $IMAGEPULLSECRET_NAME \
        --namespace=$NAMESPACE_NAME \
        --docker-server=gcr.io \
        --docker-username=_json_key \
        --docker-password="$(cat ~/$JSON_KEY_FILENAME)"
      

      其中,$NAMESPACE_NAME 是您要用于应用的命名空间。

    2. 使用以下命令对应用的命名空间进行注释:

      kubectl annotate namespace $NAMESPACE_NAME marketplace.cloud.google.com/imagePullSecret=$IMAGEPULLSECRET_NAME
      

      部署 Kubernetes 应用程序中说明了在您从 Cloud Marketplace 部署应用程序时使用此命名空间。