安装 Anthos Service Mesh

本页面介绍了如何:

  • 运行 asmcli 以全新安装 Anthos Service Mesh 1.10.6-asm.2。
  • 部署或重新部署工作负载以注入 Sidecar 代理。

准备工作

开始之前,请确保执行以下操作:

安装 Anthos Service Mesh

以下内容概述了如何安装 Anthos Service Mesh:

  1. 运行 asmcli install 以在单个集群上安装集群内控制层面。有关命令行示例,请参阅以下部分。这些示例同时包含必需参数和可能很有用的可选参数。我们建议您始终指定 output_dir 参数,以便轻松找到示例网关和 istioctl 等工具。请在右侧的导航栏中查看示例列表。

  2. (可选)安装入站流量网关

  3. 要完成 Anthos Service Mesh 的设置,您需要启用自动 Sidecar 注入并部署或重新部署工作负载

  4. 如果要在多个集群上安装 Anthos Service Mesh,请在每个集群上运行 asmcli install。在所有集群上安装 Anthos Service Mesh 后,请参阅在本地设置多集群网格

  5. 如果您的集群位于不同的网络(如处于孤岛模式时),您应该使用 --network_id 标志将唯一的网络名称传递给 asmcli

安装默认功能和 Mesh CA

本部分介绍如何运行 asmcli 以使用默认平台支持的功能安装 Anthos Service Mesh,并启用 Anthos Service Mesh 证书授权机构 (Mesh CA) 作为证书授权。

GKE

运行以下命令以使用默认功能安装新控制平面。在提供的占位符中输入值。

./asmcli install \
  --project_id PROJECT_ID \
  --cluster_name CLUSTER_NAME \
  --cluster_location CLUSTER_LOCATION \
  --fleet_id FLEET_PROJECT_ID \
  --output_dir DIR_PATH \
  --enable_all \
  --ca mesh_ca
  • --project_id--cluster_name--cluster_location 指定集群所在的项目 ID、集群名称以及集群区域或地区。
  • --fleet_id队列宿主项目的项目 ID。如果您未包含此选项,则 asmcli 会使用注册集群时在其中创建集群的项目。
  • --output_dir添加此选项可指定 asmcli 在其中下载 anthos-service-mesh 软件包并提取安装文件的目录,其中包含 istioctl、示例和清单。否则,asmcli 会将文件下载到 tmp 目录。您可以指定相对路径或完整路径。环境变量 $PWD 不适用于此处。
  • --enable_all 允许脚本执行以下操作:
    • 授予所需的 IAM 权限
    • 启用所需的 Google API。
    • 在集群上设置用于标识网格的标签。
    • 如果尚未注册集群,请注册集群
  • --ca mesh_ca使用 Mesh CA 作为证书授权机构。asmcli将 Mesh CA 配置为使用机群工作负载身份

本地

  1. 将当前上下文设置为用户集群:

    kubectl config use-context CLUSTER_NAME
    
  2. 运行以下命令以使用默认功能安装新控制平面。在提供的占位符中输入值。

    ./asmcli install \
      --fleet_id FLEET_PROJECT_ID \
      --kubeconfig KUBECONFIG_FILE \
      --output_dir DIR_PATH \
      --platform multicloud \
      --enable_all \
      --ca mesh_ca
    
    • --fleet_id队列宿主项目的项目 ID。
    • --kubeconfigkubeconfig 文件 的路径。您可以指定相对路径或完整路径。环境变量 $PWD 不适用于此处。
    • --output_dir添加此选项可指定 asmcli 在其中下载 anthos-service-mesh 软件包并提取安装文件的目录,其中包含 istioctl、示例和清单。否则,asmcli 会将文件下载到 tmp 目录。您可以指定相对路径或完整路径。环境变量 $PWD 不适用于此处。
    • --platform multicloud 指定本地是平台。
    • --enable_all 允许脚本执行以下操作:
      • 授予所需的 IAM 权限
      • 启用所需的 Google API。
      • 在集群上设置用于标识网格的标签。
      • 如果尚未注册集群,请注册集群
    • --ca mesh_ca使用 Mesh CA 作为证书授权机构。asmcli将 Mesh CA 配置为使用机群工作负载身份

使用 Istio CA 安装默认功能

本节介绍如何执行以下操作:

  • 为 Anthos Service Mesh 用于对工作负载签名的 Istio CA 生成证书和密钥。
  • 运行 asmcli 以安装具有默认功能的 Anthos Service Mesh 并启用 Istio CA。

为了获得最佳安全性,我们强烈建议您维护离线根 CA,并使用从属 CA 为每个集群颁发证书。如需了解详情,请参阅插入 CA 证书。在此配置中,服务网格中的所有工作负载都将使用相同的根证书授权机构 (CA)。每个 Anthos Service Mesh CA 使用中间 CA 签名密钥和证书(由根 CA 签名)。当网格中存在多个 CA 时,这会建立 CA 间的信任层次结构。您可以重复这些步骤,为任意数量的证书授权机构预配证书和密钥。

  1. 为证书和密钥创建一个目录:

    mkdir -p certs && \
    pushd certs
  2. 生成根证书和密钥:

    make -f ../tools/certs/Makefile.selfsigned.mk root-ca
    

    这会生成以下文件:

    • root-cert.pem:根证书
    • root-key.pem:根密钥
    • root-ca.conf:openssl 用于生成根证书的配置
    • root-cert.csr:根证书的 CSR
  3. 生成中间证书和密钥:

    make -f ../tools/certs/Makefile.selfsigned.mk cluster1-cacerts

    此操作会在名为 cluster1 的目录中生成以下文件:

    • ca-cert.pem:中间证书
    • ca-key.pem:中间密钥
    • cert-chain.pem:istiod 使用的证书链
    • root-cert.pem:根证书

    如果您使用离线计算机执行这些步骤,请将生成的目录复制到有权访问集群的计算机。

  4. 返回上一个目录:

    popd
  5. 运行 asmcli 以使用 Istio CA 安装网格:

    GKE

     ./asmcli install \
       --project_id PROJECT_ID \
       --cluster_name CLUSTER_NAME \
       --cluster_location CLUSTER_LOCATION \
       --fleet_id FLEET_PROJECT_ID \
       --output_dir DIR_PATH \
       --enable_all \
       --ca citadel \
       --ca_cert CA_CERT_FILE_PATH \
       --ca_key CA_KEY_FILE_PATH \
       --root_cert ROOT_CERT_FILE_PATH \
       --cert_chain CERT_CHAIN_FILE_PATH
    

    • --project_id--cluster_name--cluster_location 指定集群所在的项目 ID、集群名称以及集群区域或地区。
    • --fleet_id队列宿主项目的项目 ID。如果您未包含此选项,则 asmcli 会使用注册集群时在其中创建集群的项目。
    • --output_dir添加此选项可指定 asmcli 在其中下载 anthos-service-mesh 软件包并提取安装文件的目录,其中包含 istioctl、示例和清单。否则,asmcli 会将文件下载到 tmp 目录。您可以指定相对路径或完整路径。环境变量 $PWD 不适用于此处。
    • --enable_all 允许脚本执行以下操作:
      • 授予所需的 IAM 权限
      • 启用所需的 Google API。
      • 在集群上设置用于标识网格的标签。
      • 如果尚未注册集群,请注册集群

    • -ca citadel将 Istio CA 用作证书授权机构。
    • --ca_cert:中间证书
    • --ca_key:中间证书的密钥
    • --root_cert:根证书
    • --cert_chain:证书链

    本地

    1. 将当前上下文设置为用户集群:

      kubectl config use-context CLUSTER_NAME
      
    2. 运行以下命令以安装具有默认功能和 Istio CA 的 Anthos Service Mesh:

      ./asmcli install \
        --fleet_id FLEET_PROJECT_ID \
        --kubeconfig KUBECONFIG_FILE \
        --output_dir DIR_PATH \
        --platform multicloud \
        --enable_all \
        --ca citadel \
        --ca_cert CA_CERT_FILE_PATH \
        --ca_key CA_KEY_FILE_PATH \
        --root_cert ROOT_CERT_FILE_PATH \
        --cert_chain CERT_CHAIN_FILE_PATH
      
      • --fleet_id队列宿主项目的项目 ID。
      • --kubeconfigkubeconfig 文件 的路径。您可以指定相对路径或完整路径。环境变量 $PWD 不适用于此处。
      • --output_dir添加此选项可指定 asmcli 在其中下载 anthos-service-mesh 软件包并提取安装文件的目录,其中包含 istioctl、示例和清单。否则,asmcli 会将文件下载到 tmp 目录。您可以指定相对路径或完整路径。环境变量 $PWD 不适用于此处。
      • --platform multicloud 指定本地是平台。
      • --enable_all 允许脚本执行以下操作:
        • 授予所需的 IAM 权限
        • 启用所需的 Google API。
        • 在集群上设置用于标识网格的标签。
        • 如果尚未注册集群,请注册集群
      • -ca citadel将 Istio CA 用作证书授权机构。
      • --ca_cert:中间证书
      • --ca_key:中间证书的密钥
      • --root_cert:根证书
      • --cert_chain:证书链

安装(包含可选功能)

叠加文件是一个 YAML 文件,其中包含您传递给 asmcli 以配置控制平面的 IstioOperator 自定义资源 (CR)。您可以替换默认控制平面配置,并通过将 YAML 文件传递给 asmcli启用可选功能。您可以叠加多个文件,每个叠加文件会覆盖之前各层的配置。

GKE

运行以下命令以使用默认功能安装新控制平面。在提供的占位符中输入值。

./asmcli install \
  --project_id PROJECT_ID \
  --cluster_name CLUSTER_NAME \
  --cluster_location CLUSTER_LOCATION \
  --fleet_id FLEET_PROJECT_ID \
  --output_dir DIR_PATH \
  --enable_all \
  --ca mesh_ca \
  --custom_overlay OVERLAY_FILE
  • --project_id--cluster_name--cluster_location 指定集群所在的项目 ID、集群名称以及集群区域或地区。
  • --fleet_id队列宿主项目的项目 ID。如果您未包含此选项,则 asmcli 会使用注册集群时在其中创建集群的项目。
  • --output_dir添加此选项可指定 asmcli 在其中下载 anthos-service-mesh 软件包并提取安装文件的目录,其中包含 istioctl、示例和清单。否则,asmcli 会将文件下载到 tmp 目录。您可以指定相对路径或完整路径。环境变量 $PWD 不适用于此处。
  • --enable_all 允许脚本执行以下操作:
    • 授予所需的 IAM 权限
    • 启用所需的 Google API。
    • 在集群上设置用于标识网格的标签。
    • 如果尚未注册集群,请注册集群
  • --ca mesh_ca 将 Mesh CA 用作证书授权机构。请注意,asmcli 将 Mesh CA 配置为使用队列工作负载身份
  • --custom_overlay 指定叠加文件的名称。

本地

  1. 将当前上下文设置为用户集群:

    kubectl config use-context CLUSTER_NAME
    
  2. 运行以下命令以使用默认功能安装新控制平面。在提供的占位符中输入值。

    ./asmcli install \
      --fleet_id FLEET_PROJECT_ID \
      --kubeconfig KUBECONFIG_FILE \
      --output_dir DIR_PATH \
      --platform multicloud \
      --enable_all \
      --ca mesh_ca \
      --custom_overlay OVERLAY_FILE
    
    • --fleet_id队列宿主项目的项目 ID。
    • --kubeconfigkubeconfig 文件 的路径。您可以指定相对路径或完整路径。环境变量 $PWD 不适用于此处。
    • --output_dir添加此选项可指定 asmcli 在其中下载 anthos-service-mesh 软件包并提取安装文件的目录,其中包含 istioctl、示例和清单。否则,asmcli 会将文件下载到 tmp 目录。您可以指定相对路径或完整路径。环境变量 $PWD 不适用于此处。
    • --platform multicloud 指定本地是平台。
    • --enable_all 允许脚本执行以下操作:
      • 授予所需的 IAM 权限
      • 启用所需的 Google API。
      • 在集群上设置用于标识网格的标签。
      • 如果尚未注册集群,请注册集群
    • --ca mesh_ca 将 Mesh CA 用作证书授权机构。请注意,asmcli 将 Mesh CA 配置为使用队列工作负载身份
    • --custom_overlay 指定叠加文件的名称。

安装网关

Anthos Service Mesh 允许您将网关部署和管理为服务网格的一部分。网关描述了在网格边缘运行的负载均衡器,用于接收传入或传出 HTTP/TCP 连接。网关是 Envoy 代理,可让您精确控制进出网格的流量。

  1. 为入站流量网关创建命名空间(如果您还没有命名空间)。网关是用户工作负载,最佳做法是不应部署在控制平面命名空间中。将 GATEWAY_NAMESPACE 替换为您的命名空间名称。

    kubectl create namespace GATEWAY_NAMESPACE
    
  2. 通过在网关命名空间中应用修订版本标签,在网关上启用自动注入功能。边车注入器网络钩子会使用修订版本标签将注入的代理与特定控制平面修订版本相关联。您使用的修订版本标签取决于您部署的是代管式 Anthos Service Mesh 还是集群内控制平面

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

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

      输出类似于以下内容:

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

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

    2. 将修订版本标签应用于命名空间。在以下命令中,REVISION 是您在上一步中记下的 istiod 修订版本标签的值。

      kubectl label namespace GATEWAY_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. 切换到您在 --output_dir 中指定的目录。

  4. 您可以按原样部署位于 samples/gateways/istio-ingressgateway/ 目录中的示例入站流量网关配置,也可以根据需要对其进行修改。

    kubectl apply -n GATEWAY_NAMESPACE -f samples/gateways/istio-ingressgateway
    

详细了解网关的最佳做法

部署和重新部署工作负载

Anthos Service Mesh 使用 Sidecar 代理来增强网络安全性、可靠性和可观测性。借助 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-1106-2-5788d57586-bljj4   1/1     Running   0          23h   app=istiod,istio.io/rev=asm-1106-2,istio=istiod,pod-template-hash=5788d57586
    istiod-asm-1106-2-5788d57586-vsklm   1/1     Running   1          23h   app=istiod,istio.io/rev=asm-1106-2,istio=istiod,pod-template-hash=5788d57586

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

  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
    

后续步骤