将 Kubernetes 应用部署到非 GKE 集群

如果要将 Kubernetes 应用部署到非 GKE 集群配置,例如运行 GKE On-PremAnthos 集群或运行 Istio 的集群,您必须完成此部分中的任务(如适用)。

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

转到 Cloud Marketplace 中的 Anthos 应用

部署到运行 Istio 的集群

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

部署到 GKE On-Prem

您只能将 GKE On-Prem 集群部署到支持此配置的 Cloud Marketplace 应用。要验证应用是否支持 GKE On-Prem,请打开应用的 Cloud Marketplace 产品详情,然后在“概览”中查找以下语句:“应用支持 GKE On-Prem 部署”。

验证应用支持 GKE On-Prem 后,请在部署应用之前完成以下任务:

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

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

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

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

若要使您的 GKE On-Prem 集群可以访问 Container Registry 中的应用映像,您必须创建 Google Cloud 服务帐号密钥,并用该密钥注释应用的命名空间。然后,在您部署应用时,该密钥会作为命名空间的默认 Kubernetes 服务帐号 (KSA) 的 imagePullSecret 进行修补。

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

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

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

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

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

  3. 如果适用,请将 JSON 密钥上传到用于连接到 GKE On-Prem 集群的工作站。

  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 部署应用程序时使用此命名空间。