本指南介绍如何从 Istio 1.6 迁移到 GKE 集群上的 Anthos Service Mesh 1.6.14。如果您安装了旧版 Istio,则必须先将 Istio 升级到 1.6。
准备工作
在安装 Anthos Service Mesh 之前,请确保您已经:
- 设置您的环境以安装所需的工具。
- 设置您的项目以启用所需的 API 并设置权限。
- 设置您的集群以启用所需的集群选项。
- 查看准备从 Istio 迁移。
设置凭据和权限
初始化您的项目,以便准备好安装。除此之外,以下命令会创建一个服务账号,可让控制层面组件(例如边车代理)安全地访问您的项目的数据和资源:
curl --request POST \ --header "Authorization: Bearer $(gcloud auth print-access-token)" \ --data '' \ "https://meshconfig.googleapis.com/v1alpha1/projects/${PROJECT_ID}:initialize"
该命令会以空花括号作为响应:
{}
获取身份验证凭据以便与集群进行交互:
gcloud container clusters get-credentials ${CLUSTER_NAME} \ --project=${PROJECT_ID}
向当前用户授予集群管理员权限。您需要这些权限,以便为 Anthos Service Mesh 创建必要的基于角色的访问权限控制 (RBAC) 规则:
kubectl create clusterrolebinding cluster-admin-binding \ --clusterrole=cluster-admin \ --user="$(gcloud config get-value core/account)"
如果看到 "cluster-admin-binding" already exists
错误,您可以放心地忽略该错误并继续采用现有集群管理员绑定。
下载安装文件
-
将 Anthos Service Mesh 安装文件下载到当前工作目录中:
curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.6.14-asm.2-linux-amd64.tar.gz
-
下载签名文件并使用
openssl
验证签名:curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.6.14-asm.2-linux-amd64.tar.gz.1.sig openssl dgst -verify /dev/stdin -signature istio-1.6.14-asm.2-linux-amd64.tar.gz.1.sig istio-1.6.14-asm.2-linux-amd64.tar.gz <<'EOF' -----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF
预期输出为
Verified OK
-
将文件内容提取到文件系统上的任意位置。例如,如需将内容提取到当前工作目录,请运行以下命令:
tar xzf istio-1.6.14-asm.2-linux-amd64.tar.gz
该命令会在当前工作目录中创建一个名为
istio-1.6.14-asm.2
的安装目录,其中包含:samples
目录中的示例应用。- 用于安装 Anthos Service Mesh 的
istioctl
命令行工具位于bin
目录中。 - Anthos Service Mesh 配置文件位于
manifests/profiles
目录中。
-
将 Anthos Service Mesh 安装文件下载到当前工作目录中:
curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.6.14-asm.2-osx.tar.gz
-
下载签名文件并使用
openssl
验证签名:curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.6.14-asm.2-osx.tar.gz.1.sig openssl dgst -sha256 -verify /dev/stdin -signature istio-1.6.14-asm.2-osx.tar.gz.1.sig istio-1.6.14-asm.2-osx.tar.gz <<'EOF' -----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF
预期输出为
Verified OK
-
将文件内容提取到文件系统上的任意位置。例如,如需将内容提取到当前工作目录,请运行以下命令:
tar xzf istio-1.6.14-asm.2-osx.tar.gz
该命令会在当前工作目录中创建一个名为
istio-1.6.14-asm.2
的安装目录,其中包含:samples
目录中的示例应用。- 用于安装 Anthos Service Mesh 的
istioctl
命令行工具位于bin
目录中。 - Anthos Service Mesh 配置文件位于
manifests/profiles
目录中。
-
将 Anthos Service Mesh 安装文件下载到当前工作目录中:
curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.6.14-asm.2-win.zip
-
下载签名文件并使用
openssl
验证签名:curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.6.14-asm.2-win.zip.1.sig openssl dgst -verify - -signature istio-1.6.14-asm.2-win.zip.1.sig istio-1.6.14-asm.2-win.zip <<'EOF' -----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF
预期输出为
Verified OK
-
将文件内容提取到文件系统上的任意位置。例如,如需将内容提取到当前工作目录,请运行以下命令:
tar xzf istio-1.6.14-asm.2-win.zip
该命令会在当前工作目录中创建一个名为
istio-1.6.14-asm.2
的安装目录,其中包含:samples
目录中的示例应用。- 用于安装 Anthos Service Mesh 的
istioctl
命令行工具位于bin
目录中。 - Anthos Service Mesh 配置文件位于
manifests/profiles
目录中。
-
确保您位于 Anthos Service Mesh 安装的根目录。
cd istio-1.6.14-asm.2
-
为方便起见,请将
/bin
目录中的工具添加到 PATH:export PATH=$PWD/bin:$PATH
Linux
Mac OS
Windows
准备资源配置文件
运行 istioctl install
命令时,请在命令行中指定 -f istio-operator.yaml
。此文件包含 Anthos Service Mesh 所需的项目和集群的相关信息。您需要下载包含 istio-operator.yaml
和其他资源配置文件的软件包,以便设置项目和集群信息。
首先,根据您要使用的证书授权机构 (CA) 选择要下载的软件包:
asm
:thumb_up_alt此软件包可启用 Mesh CA(建议用于新安装)。asm-citadel
:您可以选择启用 Citadel 作为 CA。在选择此软件包之前,请参阅选择证书授权机构以了解详情。
如需准备资源配置文件,请执行以下操作:
为 Anthos Service Mesh 软件包资源配置文件创建一个新目录。我们建议您使用集群名称作为目录名称。
切换到您要在其中下载 Anthos Service Mesh 软件包的目录。
根据 CA 下载您要使用的软件包
Mesh CA
下载
asm
软件包以启用 Mesh CA:kpt pkg get \ https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages.git/asm@release-1.6-asm asm
Citadel
下载
asm-citadel
软件包,以启用 Citadel 作为 CA:kpt pkg get \ https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages.git/asm-citadel@release-1.6-asm asm
为在其中创建集群的项目设置项目 ID:
kpt cfg set asm gcloud.core.project ${PROJECT_ID}
为舰队宿主项目设置项目编号:
kpt cfg set asm gcloud.project.environProjectNumber ${FLEET_PROJECT_NUMBER}
设置集群名称:
kpt cfg set asm gcloud.container.cluster ${CLUSTER_NAME}
设置默认区域或地区:
kpt cfg set asm gcloud.compute.location ${CLUSTER_LOCATION}
设置您计划使用的配置文件:
如果您的所有集群都在同一项目中,请设置
asm-gcp
配置文件:kpt cfg set asm anthos.servicemesh.profile asm-gcp
如果您的服务网格包含或将包含不同项目中的多个集群,请设置
asm-gcp-multiproject
配置文件(Beta 版):kpt cfg set asm anthos.servicemesh.profile asm-gcp-multiproject
如果您设置了
asm-gcp-multiproject
配置文件并下载了asm
软件包以启用 Mesh CA,则需要为将形成多集群/多项目服务网格的其他项目配置信任网域别名。否则,请跳过此步骤。获取将进入多集群/多项目网格的所有集群的项目 ID。
针对每个集群的项目 ID,设置信任网域别名。例如,如果 3 个项目中存在集群,请运行以下命令,并将
PROJECT_ID_1
、PROJECT_ID_2
和PROJECT_ID_3
替换为每个集群的项目 ID。kpt cfg set asm anthos.servicemesh.trustDomainAliases PROJECT_ID_1.svc.id.goog PROJECT_ID_2.svc.id.goog PROJECT_ID_3.svc.id.goog
在其他项目中配置集群时,您可以使用相同的命令。
通过信任网域别名,Mesh CA 可对其他项目中的集群上的工作负载进行身份验证。除了设置信任网域别名之外,在安装 Anthos Service Mesh 之后,您还必须启用跨集群负载均衡。
输出
kpt
setter 的值:kpt cfg list-setters asm
在命令的输出中,验证以下 setter 的值是否正确:
- gcloud.compute.location
- gcloud.container.cluster
- gcloud.core.project
- gcloud.project.environProjectNumber
迁移到 Anthos Service Mesh
如需从 Istio 迁移,建议您遵循双控制层面升级过程(在 Istio 文档中称为 Canary 版升级)操作。通过双控制层面升级,您可以在现有控制层面的基础上安装新版本控制层面。安装新版本时,您要添加可标识新控制平面版本的 revision
标签。每个修订版本都是一个完整的 Anthos Service Mesh 控制平面实现,具有自己的 Deployment 和 Service。
然后,通过在工作负载上设置相同的 revision
标签以指向新的控制平面,并执行滚动重启以使用新的 Anthos Service Mesh 版本重新注入代理,从而迁移到新版本。通过这种方法,您可以监控升级对一小部分工作负载的影响。测试应用后,您可以将所有流量迁移到新版本。此方法比执行就地升级更安全,因为新控制层面会立即替换旧版控制层面。
更新控制平面
运行以下命令,使用您在 istio-operator.yaml
文件中设置的配置文件部署新的控制平面。如果您要启用支持的可选功能,请在以下命令行中添加 -f
和 YAML 文件名。如需了解详情,请参阅启用可选功能。
istioctl install \ -f asm/cluster/istio-operator.yaml \ --set revision=asm-1614-2
--set revision
参数会向 istiod
添加一个 istio.io/rev
标签。运行该命令后,您将并排运行两个控制层面 Deployment 和 Service:
kubectl get pods -n istio-system
输出示例:
NAME READY STATUS RESTARTS AGE istio-ingressgateway-c56675fcd-86zdn 1/1 Running 0 2m9s istio-ingressgateway-c56675fcd-vn4nv 1/1 Running 0 2m21s istiod-asm-1614-2-6d5cfd4b89-xztlr 1/1 Running 0 3m44s istiod-fb7f746f4-wcntn 1/1 Running 0 50m
重新部署工作负载
安装新修订版本对现有 Sidecar 代理没有影响。如需升级这些代理,您必须将其配置为指向新控制层面。这会在 Sidecar 注入期间根据命名空间标签 istio.io/rev
进行控制。
更新工作负载以注入新的 Anthos Service Mesh 版本:
kubectl label namespace NAMESPACE istio-injection- istio.io/rev=asm-1614-2 --overwrite
istio-injection
标签必须移除,因为它优先于istio.io/rev
标签。重启 pod 以触发重新注入:
kubectl rollout restart deployment -n NAMESPACE
验证 pod 是否配置为指向
istiod-asm-1614-2
控制平面:kubectl get pods -n NAMESPACE -l istio.io/rev=asm-1614-2
测试您的应用,验证工作负载是否正常工作。
如果您在其他命名空间中存在工作负载,请对每个命名空间重复上述步骤。
如果您确信应用按预期正常运行,请跳到完成迁移。否则,请按照以下步骤操作,回滚到以前的版本:
如需回滚,请执行以下操作:
更新要用旧版控制层面注入的工作负载:
kubectl label namespace NAMESPACE istio.io/rev- istio-injection=enabled --overwrite
重启 pod 以触发重新注入,以使代理具有之前的版本:
kubectl rollout restart deployment -n NAMESPACE
重新部署旧版
istio-ingressgateway
:kubectl -n istio-system rollout undo deploy istio-ingressgateway
移除新的控制层面:
kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod-asm-1614-2 -n istio-system --ignore-not-found=true
完成迁移
如果您确信应用正在按预期运行,请按以下步骤完成到 Anthos Service Mesh 的迁移:
如果要从 Istio on GKE 插件迁移,请停用该插件:
gcloud beta container clusters update CLUSTER_NAME \ --project=CLUSTER_PROJECT_ID \ --update-addons=Istio=DISABLED
运行以下命令以部署规范化服务控制器:
kubectl apply -f asm/canonical-service/controller.yaml
该命令会将规范化服务控制器部署到您的集群。规范化服务控制器会对属于同一逻辑服务的工作负载进行分组,且您必须使用它解锁 Google Cloud 控制台的服务信息中心中的额外功能。如需了解详情,请参阅启用和停用规范化服务控制器。
移除旧的控制层面:
kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod -n istio-system --ignore-not-found=true
查看 Anthos Service Mesh 信息中心
本部分仅适用于使用 asm-gcp
配置文件安装了 Anthos Service Mesh 的情况。如果您使用 asm-gcp-multiproject
配置文件安装 Anthos Service Mesh,则 Google Cloud 控制台的 Anthos Service Mesh 信息中心内不会显示遥测数据。
在集群上部署完工作负载并注入 Sidecar 代理后,您可以在 Google Cloud 控制台中探索 Anthos Service Mesh 页面,以了解 Anthos Service Mesh 提供的所有可观测性功能。请注意,部署工作负载后,遥测数据大约需要一两分钟才会显示在 Google Cloud 控制台中。
在 Google Cloud 控制台中访问 Anthos Service Mesh 的权限由 Identity and Access Management (IAM) 控制。如需访问 Anthos Service Mesh 页面,Project Owner 必须为用户授予 Project Editor 或 Viewer 角色,或者授予在 Google Cloud 控制台中控制对 Anthos Service Mesh 的访问权限中所述的限制性更强的角色。
在 Google Cloud 控制台中,前往 Anthos Service Mesh。
从菜单栏的下拉列表中选择 Google Cloud 项目。
如果您有多个服务网格,请从服务网格下拉列表中选择相应网格。
如需了解详情,请参阅在 Google Cloud 控制台中探索 Anthos Service Mesh。
除了 Anthos Service Mesh 页面,系统还会将与服务相关的指标(例如特定服务收到的请求数)发送到 Cloud Monitoring,这些指标显示在 Cloud Monitoring 的 Metrics Explorer 中。
如需查看指标,请执行以下操作:
在 Google Cloud 控制台中,转到监控页面:
选择资源 > Metrics Explorer。
如需查看指标的完整列表,请参阅 Cloud Monitoring 文档中的 Istio 指标。
注册您的集群
您必须向项目的队列注册集群,才能获取对 Google Cloud 控制台中的统一界面的访问权限。队列提供一种统一方法来查看和管理集群及其工作负载,包括 Google Cloud 之外的集群。
如需了解如何注册集群,请参阅向舰队注册集群。