安装 Anthos Service Mesh

本页面是多页指南中的一部分,介绍如何在 GKE 集群上为网格安装 Anthos Service Mesh 版本 1.8.6,该网格包含属于不同 Google Cloud 项目的多个集群。

准备工作

在安装 Anthos Service Mesh 之前,请确保您已经:

设置凭据和权限

  1. 初始化您的项目,以便准备好安装。除此之外,以下命令会创建一个服务账号,可让控制层面组件(例如边车代理)安全地访问您的项目的数据和资源。

    curl --request POST \
      --header "Authorization: Bearer $(gcloud auth print-access-token)" \
      --data '' \
      "https://meshconfig.googleapis.com/v1alpha1/projects/${PROJECT_ID}:initialize"

    该命令会以空花括号作为响应:{}

  2. 获取身份验证凭据以便与集群进行交互。此命令还会将 kubectl 的当前上下文设置为该集群。

    gcloud container clusters get-credentials ${CLUSTER_NAME} \
        --project=${PROJECT_ID}
    
  3. 向当前用户授予集群管理员权限。您需要这些权限,以便为 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 错误,您可以放心地忽略该错误并继续采用现有集群管理员绑定。

下载安装文件

    Linux

  1. 将 Anthos Service Mesh 安装文件下载到当前工作目录中:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.8.6-asm.8-linux-amd64.tar.gz
  2. 下载签名文件并使用 openssl 验证签名:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.8.6-asm.8-linux-amd64.tar.gz.1.sig
    openssl dgst -verify /dev/stdin -signature istio-1.8.6-asm.8-linux-amd64.tar.gz.1.sig istio-1.8.6-asm.8-linux-amd64.tar.gz <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF

    预期输出为 Verified OK

  3. 将文件内容提取到文件系统上的任意位置。例如,如需将内容提取到当前工作目录,请运行以下命令:
    tar xzf istio-1.8.6-asm.8-linux-amd64.tar.gz

    该命令会在当前工作目录中创建一个名为 istio-1.8.6-asm.8 的安装目录,其中包含:

    • samples 目录中的示例应用。
    • 用于安装 Anthos Service Mesh 的 istioctl 命令行工具位于 bin 目录中。
    • Anthos Service Mesh 配置文件位于 manifests/profiles 目录中。

  4. 确保您位于 Anthos Service Mesh 安装的根目录。
    cd istio-1.8.6-asm.8
  5. Mac OS

  6. 将 Anthos Service Mesh 安装文件下载到当前工作目录中:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.8.6-asm.8-osx.tar.gz
  7. 下载签名文件并使用 openssl 验证签名:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.8.6-asm.8-osx.tar.gz.1.sig
    openssl dgst -sha256 -verify /dev/stdin -signature istio-1.8.6-asm.8-osx.tar.gz.1.sig istio-1.8.6-asm.8-osx.tar.gz <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF

    预期输出为 Verified OK

  8. 将文件内容提取到文件系统上的任意位置。例如,如需将内容提取到当前工作目录,请运行以下命令:
    tar xzf istio-1.8.6-asm.8-osx.tar.gz

    该命令会在当前工作目录中创建一个名为 istio-1.8.6-asm.8 的安装目录,其中包含:

    • samples 目录中的示例应用。
    • 用于安装 Anthos Service Mesh 的 istioctl 命令行工具位于 bin 目录中。
    • Anthos Service Mesh 配置文件位于 manifests/profiles 目录中。

  9. 确保您位于 Anthos Service Mesh 安装的根目录。
    cd istio-1.8.6-asm.8
  10. Windows

  11. 将 Anthos Service Mesh 安装文件下载到当前工作目录中:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.8.6-asm.8-win.zip
  12. 下载签名文件并使用 openssl 验证签名:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.8.6-asm.8-win.zip.1.sig
    openssl dgst -verify - -signature istio-1.8.6-asm.8-win.zip.1.sig istio-1.8.6-asm.8-win.zip <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF

    预期输出为 Verified OK

  13. 将文件内容提取到文件系统上的任意位置。例如,如需将内容提取到当前工作目录,请运行以下命令:
    tar xzf istio-1.8.6-asm.8-win.zip

    该命令会在当前工作目录中创建一个名为 istio-1.8.6-asm.8 的安装目录,其中包含:

    • samples 目录中的示例应用。
    • 用于安装 Anthos Service Mesh 的 istioctl 命令行工具位于 bin 目录中。
    • Anthos Service Mesh 配置文件位于 manifests/profiles 目录中。

  14. 确保您位于 Anthos Service Mesh 安装的根目录。
    cd istio-1.8.6-asm.8

准备资源配置文件

运行 istioctl install 命令时,请在命令行中指定 -f istio-operator.yaml。此文件包含 Anthos Service Mesh 所需的项目和集群的相关信息。您需要下载包含 istio-operator.yaml 和其他资源配置文件的软件包,以便设置项目和集群信息。

如需准备资源配置文件,请执行以下操作:

Mesh CA

  1. 为 Anthos Service Mesh 软件包资源配置文件创建一个新目录。我们建议您使用集群名称作为目录名称。

  2. 切换到您要在其中下载 Anthos Service Mesh 软件包的目录。

  3. 验证“kpt”版本。确保运行的是 1.x 之前版本的 kpt:

    kpt version
    

    输出应类似如下所示:

    0.39.2

    如果您使用的是 kpt 1.x 版或更高版本,请参阅设置环境以下载您的操作系统所需的版本。

  4. 下载软件包:

    kpt pkg get \
    https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages.git/asm@release-1.8-asm asm
    
  5. 为在其中创建集群的项目设置项目 ID:

    kpt cfg set asm gcloud.core.project ${PROJECT_ID}
    
  6. 为舰队宿主项目设置项目编号:

    kpt cfg set asm gcloud.project.environProjectNumber ${FLEET_PROJECT_NUMBER}
    
  7. 设置集群名称:

    kpt cfg set asm gcloud.container.cluster ${CLUSTER_NAME}
    
  8. 设置默认区域或地区:

    kpt cfg set asm gcloud.compute.location ${CLUSTER_LOCATION}
    
  9. 设置验证网络钩子以使用修订版本标签:

    kpt cfg set asm anthos.servicemesh.rev asm-186-8
    

    安装 Anthos Service Mesh 时,您可以在 istiod 上设置修订版本标签。您需要在验证网络钩子上设置相同的修订版本。

  10. 由于多集群配置中的集群在不同项目中,因此您需要为将形成多集群/多项目服务网格的其他项目配置信任网域别名

    1. 获取将进入多集群/多项目网格的所有集群的项目 ID

    2. 针对每个集群的项目 ID,设置信任网域别名。例如,如果 3 个项目中存在集群,请运行以下命令,并将 PROJECT_ID_1PROJECT_ID_2PROJECT_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 之后,您还必须启用跨集群负载均衡

  11. 输出 kpt setter 的值:

    kpt cfg list-setters asm
    

    在命令的输出中,验证以下 setter 的值是否正确:

    • anthos.servicemesh.rev
    • anthos.servicemesh.trustDomainAliases
    • gcloud.compute.location
    • gcloud.container.cluster
    • gcloud.core.project
    • gcloud.project.environProjectNumber

    您可以忽略其他 setter 的值。

Citadel

  1. 为 Anthos Service Mesh 软件包资源配置文件创建一个新目录。我们建议您使用集群名称作为目录名称。

  2. 切换到您要在其中下载 Anthos Service Mesh 软件包的目录。

  3. 验证“kpt”版本。确保运行的是 1.x 之前版本的 kpt:

    kpt version
    

    输出应类似如下所示:

    0.39.2

    如果您使用的是 kpt 1.x 版或更高版本,请参阅设置环境以下载您的操作系统所需的版本。

  4. 下载软件包:

    kpt pkg get \
    https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages.git/asm@release-1.8-asm asm
    
  5. 为在其中创建集群的项目设置项目 ID:

    kpt cfg set asm gcloud.core.project ${PROJECT_ID}
    
  6. 为舰队宿主项目设置项目编号:

    kpt cfg set asm gcloud.project.environProjectNumber ${FLEET_PROJECT_NUMBER}
    
  7. 设置集群名称:

    kpt cfg set asm gcloud.container.cluster ${CLUSTER_NAME}
    
  8. 设置默认可用区或区域:

    kpt cfg set asm gcloud.compute.location ${CLUSTER_LOCATION}
    
  9. 将标记设置为您要安装的 Anthos Service Mesh 版本:

    kpt cfg set asm anthos.servicemesh.tag 1.8.6-asm.8
    
  10. 设置验证网络钩子以使用修订版本标签:

    kpt cfg set asm anthos.servicemesh.rev asm-186-8
    

    安装 Anthos Service Mesh 时,您可以在 istiod 上设置修订版本标签。您需要在验证网络钩子上设置相同的修订版本。

  11. 输出 kpt setter 的值:

    kpt cfg list-setters asm
    

    在命令的输出中,验证以下 setter 的值是否正确:

    • anthos.servicemesh.rev
    • anthos.servicemesh.tag
    • gcloud.compute.location
    • gcloud.container.cluster
    • gcloud.core.project
    • gcloud.project.environProjectNumber

    您可以忽略其他 setter 的值。

安装 Anthos Service Mesh

Mesh CA

  1. 验证当前的 kubeconfig 上下文是否指向要安装 Anthos Service Mesh 的集群:

    kubectl config current-context
    

    输出的格式如下:

    gke_PROJECT_ID_CLUSTER_LOCATION_CLUSTER_NAME

    kubeconfig 上下文和 kpt setter 的值必须匹配。如果需要,请运行 gcloud container clusters get-credentials 命令来设置当前的 kubeconfig 上下文。

  2. 如果需要,请切换到 istio-1.8.6-asm.8 目录。istioctl 客户端依赖于版本。请确保使用 istio-1.8.6-asm.8/bin 目录中的版本。

  3. 运行以下命令以安装 Anthos Service Mesh。如果您要启用受支持的可选功能,请在以下命令行中添加 -f 和 YAML 文件名。如需了解详情,请参阅启用可选功能

    bin/istioctl install \
      -f asm/istio/istio-operator.yaml \
      -f asm/istio/options/multiproject.yaml \
      -f asm/istio/options/multicluster.yaml \
      --revision=asm-186-8
    

    --revision 参数会将格式为 istio.io/rev=asm-186-8 的修订版本标签添加到 istiod。自动 Sidecar 注入器网络钩子使用修订版本标签将注入的 Sidecar 与特定 istiod 修订版本相关联。如需为命名空间启用 Sidecar 自动注入功能,您必须使用一个与 istiod Deployment 匹配的修订版本来为其添加标签。

    以下文件将替换 istio-operator.yaml 文件中的设置:

    • multiproject.yaml 文件设置 asm-gcp-multiproject 配置文件。

    • multicluster.yaml 文件配置 Anthos Service Mesh 进行多集群配置所需的设置。

  4. 配置验证网络钩子以使用修订版本标签查找 istiod

    kubectl apply -f asm/istio/istiod-service.yaml

    此命令会创建一个服务条目,可让验证网络钩子在配置应用之前自动检查配置。

  5. 将规范化服务控制器部署到您的集群:

    kubectl apply -f asm/canonical-service/controller.yaml

    规范化服务控制器按照所属的逻辑服务对工作负载进行分组。如需详细了解规范化服务,请参阅规范化服务概览。

Citadel

  1. 验证当前的 kubeconfig 上下文是否指向要安装 Anthos Service Mesh 的集群:

    kubectl config current-context
    

    输出的格式如下:

    gke_PROJECT_ID_CLUSTER_LOCATION_CLUSTER_NAME

    kubeconfig 上下文和 kpt setter 的值必须匹配。如果需要,请运行 gcloud container clusters get-credentials 命令来设置当前的 kubeconfig 上下文。

  2. 创建 istio-system 命名空间:

    kubectl create namespace istio-system
    
  3. 创建 Secret cacerts

    kubectl create secret generic cacerts  \
      -n istio-system \
      --from-file=ca-cert.pem \
      --from-file=ca-key.pem \
      --from-file=root-cert.pem \
      --from-file=cert-chain.pem
    

    如需了解详情,请参阅在现有 CA 证书中插入

  4. 如果需要,请切换到 istio-1.8.6-asm.8 目录。istioctl 客户端依赖于版本。请确保使用 istio-1.8.6-asm.8/bin 目录中的版本。

  5. 运行以下命令以安装 Anthos Service Mesh。如果您要启用受支持的可选功能,请在以下命令行中添加 -f 和 YAML 文件名。如需了解详情,请参阅启用可选功能

    bin/istioctl install \
      -f asm/istio/istio-operator.yaml \
      -f asm/istio/options/citadel-ca.yaml \
      -f asm/istio/options/multiproject.yaml \
      -f asm/istio/options/multicluster.yaml \
      --revision=asm-186-8
    

    --revision 参数会将格式为 istio.io/rev=asm-186-8 的修订版本标签添加到 istiod。自动 Sidecar 注入器网络钩子使用修订版本标签将注入的 Sidecar 与特定 istiod 修订版本相关联。如需为命名空间启用 Sidecar 自动注入功能,您必须使用一个与 istiod Deployment 匹配的修订版本来为其添加标签。

    以下文件将替换 istio-operator.yaml 文件中的设置:

    • citadel-ca.yaml 将 Citadel 配置为 CA。

    • multiproject.yaml 文件设置 asm-gcp-multiproject 配置文件。

    • multicluster.yaml 文件配置 Anthos Service Mesh 进行多集群配置所需的设置。

  6. 配置验证网络钩子以使用修订版本标签查找 istiod

    kubectl apply -f asm/istio/istiod-service.yaml

    此命令会创建一个服务条目,可让验证网络钩子在配置应用之前自动检查配置。

  7. 将规范化服务控制器部署到您的集群:

    kubectl apply -f asm/canonical-service/controller.yaml

    规范化服务控制器按照所属的逻辑服务对工作负载进行分组。如需详细了解规范化服务,请参阅规范化服务概览。

检查控制层面组件

检查 istio-system 中的控制层面 Pod 是否已启动:

kubectl get pod -n istio-system

预期输出如下所示:

NAME                                   READY   STATUS      RESTARTS   AGE
istio-ingressgateway-cff9f5c7d-qg4ls   1/1     Running   0          7m5s
istio-ingressgateway-cff9f5c7d-vlkzb   1/1     Running   0          7m20s
istiod-66b587859c-886gx                1/1     Running   0          7m33s
istiod-66b587859c-dfs2j                1/1     Running   0          7m33s

注入边车代理

Anthos Service Mesh 使用边车代理来增强网络安全性、可靠性和可观测性。借助 Anthos Service Mesh,这些功能可以从应用的主容器中抽象出来,并在作为同一 Pod 中单独的容器提供的常见进程外代理中实现。

您需要启用自动边车代理注入(自动注入),并为在安装 Anthos Service Mesh 之前集群上运行的所有工作负载重启 Pod,才能完成安装。

要启用自动注入功能,请使用安装 Anthos Service Mesh 时在 istiod 上设置的修订版本标签来为您的命名空间添加标签。Sidecar 注入器网络钩子会使用修订版本标签将注入的 Sidecar 与特定 istiod 修订版本相关联。添加标签后,必须重启命名空间中的所有现有 Pod,才能注入 Sidecar。

在将新工作负载部署到新命名空间中之前,请先确保配置自动注入,以便 Anthos Service Mesh 能够监控和保护流量。

如需启用自动注入,请运行以下命令:

  1. 使用以下命令查找 istiod 的修订版本标签:

    kubectl -n istio-system get pods -l app=istiod --show-labels
    

    输出类似于以下内容:

    NAME                                READY   STATUS    RESTARTS   AGE   LABELS
    istiod-asm-186-8-5788d57586-bljj4   1/1     Running   0          23h   app=istiod,istio.io/rev=asm-186-8,istio=istiod,pod-template-hash=5788d57586
    istiod-asm-186-8-5788d57586-vsklm   1/1     Running   1          23h   app=istiod,istio.io/rev=asm-186-8,istio=istiod,pod-template-hash=5788d57586

    在输出中的 LABELS 列下,记下 istiod 修订版本标签的值,该值位于前缀 istio.io/rev= 之后。在此示例中,该值为 asm-186-8

  2. 应用修订版本标签并移除 istio-injection 标签(如果存在)。在以下命令中,NAMESPACE 是您要启用自动注入的命名空间的名称,REVISION 是您在上一步中记下的修订版本标签。

    kubectl label namespace NAMESPACE istio-injection- istio.io/rev=REVISION --overwrite
    

    您可以忽略输出中的 "istio-injection not found" 消息。这意味着命名空间之前没有 istio-injection 标签,对于 Anthos Service Mesh 的新安装或新部署,这是预期现象。如果命名空间同时具有 istio-injection 和修订版本标签,自动注入将失败,因此 Anthos Service Mesh 文档中的所有 kubectl label 命令都包含移除 istio-injection 标签。

  3. 如果在安装 Anthos Service Mesh 之前集群上已运行工作负载,请重启 pod 以触发重新注入。

    如何重启 pod 取决于您的应用和集群所在的环境。例如,在预演环境中,您可能只需删除所有 pod 即可使其重启。但是,在生产环境中,您可能需要通过实现蓝绿部署流程来安全地重启 pod,以避免流量中断。

    您可以使用 kubectl 执行滚动重启:

    kubectl rollout restart deployment -n NAMESPACE
    
  4. 验证 pod 是否配置为指向新版 istiod

    kubectl get pods -n NAMESPACE -l istio.io/rev=REVISION
    

后续步骤