如果您要将 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 部署应用,则必须使用具有 Kubernetes
cluster-admin
角色的 Kubernetes 服务帐号 (KSA) 的令牌或凭据登录 VMware 上的 Anthos 集群。如果您要使用命令行进行部署,则必须具有 VMware 集群上的 Anthos 集群的
cluster-admin
角色。您必须设置对 Container Registry 的网络访问权限,以便您的集群可以下载应用的容器映像。
您必须在 VMware 上的 Anthos 集群中设置 Docker 身份验证才能访问 Container Registry,进而访问应用的映像。
完成这些任务后,打开应用的 Cloud Marketplace 列表,然后按照步骤部署应用。
设置对 Container Registry 的网络访问权限
要下载应用的容器映像,请确保您的集群具有对 Container Registry 的网络访问权限。您的集群主机必须能够 ping marketplace.gcr.io
。要启用访问权限,您可能需要执行以下一项或多项操作:
创建防火墙规则以允许访问
marketplace.gcr.io
。如果您使用的是 HTTP 或 HTTPS 代理,请允许
marketplace.gcr.io/*
,并配置 Docker 守护程序以通过代理拉取映像。如需了解详细步骤,请参阅代理和防火墙规则。
如果您使用的是 Virtual Private Cloud (VPC),请将主机配置为专用 Google 访问通道。
如果您要为 VMware 上的 Anthos 集群安装使用私有注册表,请设置 Docker 注册表并从应用复制映像。
如需了解详细步骤,请参阅配置私有 Docker 注册表以进行安装。
设置 Docker 身份验证以访问 Container Registry
如需让 VMware 上的 Anthos 集群能够访问 Container Registry 中的应用映像,您必须创建 Google Cloud 服务帐号密钥,并使用该密钥为应用的命名空间添加注释。然后,在您部署应用时,该密钥会作为命名空间的默认 Kubernetes 服务帐号 (KSA) 的 imagePullSecret
进行修补。
首次将应用部署到 VMware 上的 Anthos 集群时,您还必须为 Cloud Marketplace 组件创建一个名为 application-system
的命名空间,并将 imagePullSecret
应用于该命名空间的默认服务帐号。
请按照以下步骤设置对 Container Registry 的身份验证:
创建一个新的 Google Cloud 服务帐号。您无需向服务帐号授予任何角色。
如需了解创建服务帐号的步骤,请参阅创建和管理服务帐号。
为该服务帐号创建一个密钥,并将其作为 JSON 文件下载。如需了解创建和下载密钥的步骤,请参阅创建和管理服务帐号密钥。
如果适用,请将 JSON 密钥上传到您用于连接到 VMware 上的 Anthos 集群的工作站。
如果您是第一次从 Cloud Marketplace 部署应用,请按照以下步骤使用 Secret 设置
application-system
命名空间以,访问 Container Registry。如果您已经设置了命名空间,请跳过此步骤。在集群中创建一个
application-system
命名空间。使用以下命令创建包含
application-system
的imagePullSecret
的 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)"
使用以下命令将此
imagePullSecret
应用于application-system
命名空间中的默认 ServiceAccount:kubectl patch sa default -n application-system -p '"imagePullSecrets": [{"name": "gcr-json-key" }]'
对于要将应用部署到的每个命名空间,您必须创建一个新的 Kubernetes Secret 并使用 Secret 注释该命名空间。您不能重复使用另一个命名空间的 Secret。
创建一个 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
是您要用于应用的命名空间。使用以下命令对应用的命名空间进行注释:
kubectl annotate namespace $NAMESPACE_NAME marketplace.cloud.google.com/imagePullSecret=$IMAGEPULLSECRET_NAME
在部署 Kubernetes 应用程序中说明了在您从 Cloud Marketplace 部署应用程序时使用此命名空间。