在 GKE on AWS 上安装 Anthos Service Mesh

本指南介绍了如何在 GKE on AWS 上安装 Anthos Service Mesh 版本 1.10.6-asm.2。

Anthos Service Mesh 预安装了 Istio 入站流量网关。但是,如果您希望使用入站流量控制器,则可以使用 Anthos Service Mesh 来设置 Kubernetes Ingress 资源。本指南介绍了如何安装 Anthos Service Mesh 并视需要设置 Kubernetes Ingress 资源。

准备工作

在开始安装 Anthos Service Mesh 之前,请确保您已执行以下任务:

使用要求

  • 确保安装 Anthos Service Mesh 的用户集群至少具有 4 个 vCPU、15 GB 内存和 4 个节点。

  • 在部署工作负载之前,请查看为服务端口命名

  • 确保您的集群版本列在受支持的平台中。

限制

一个 Google Cloud 项目只能关联一个网格。

设置您的环境

在要安装 Anthos Service Mesh 的机器上,您需要以下工具。请注意,您只能在用户集群上安装 Anthos Service Mesh,不能在管理员集群上安装。

安装 Google Cloud CLI 后:

  1. 使用 Google Cloud CLI 进行身份验证:

    gcloud auth login
    
  2. 更新组件:

    gcloud components update
    
  3. 安装 kubectl

    gcloud components install kubectl
    
  4. 安装所需的 kpt 版本:

       curl -L https://github.com/GoogleContainerTools/kpt/releases/download/v0.39.2/kpt_linux_amd64 > kpt_0_39_2
       chmod +x kpt_0_39_2
       alias kpt="$(readlink -f kpt_0_39_2)"
    
  5. 将上下文切换到用户集群:

    kubectl config use-context CLUSTER_NAME
  6. 向您的用户账号(您的 Google Cloud 登录电子邮件地址)授予集群管理员权限。您需要这些权限,以便为 Anthos Service Mesh 创建必要的基于角色的访问权限控制 (RBAC) 规则:

    kubectl create clusterrolebinding cluster-admin-binding \
      --clusterrole=cluster-admin \
      --user=USER_ACCOUNT

下载安装文件

Linux

  1. 将 Anthos Service Mesh 安装文件下载到当前工作目录中:

    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.10.6-asm.2-linux-amd64.tar.gz
  2. 下载签名文件并使用 openssl 验证签名:

    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.10.6-asm.2-linux-amd64.tar.gz.1.sig
    openssl dgst -verify /dev/stdin -signature istio-1.10.6-asm.2-linux-amd64.tar.gz.1.sig istio-1.10.6-asm.2-linux-amd64.tar.gz <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF

    预期输出为 Verified OK

  3. 将文件内容提取到文件系统上的任意位置。例如,如需将内容提取到当前工作目录,请运行以下命令:

     tar xzf istio-1.10.6-asm.2-linux-amd64.tar.gz

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

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

    cd istio-1.10.6-asm.2

Mac OS

  1. 将 Anthos Service Mesh 安装文件下载到当前工作目录中:

    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.10.6-asm.2-osx.tar.gz
  2. 下载签名文件并使用 openssl 验证签名:

    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.10.6-asm.2-osx.tar.gz.1.sig
    openssl dgst -sha256 -verify /dev/stdin -signature istio-1.10.6-asm.2-osx.tar.gz.1.sig istio-1.10.6-asm.2-osx.tar.gz <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF

    预期输出为 Verified OK

  3. 将文件内容提取到文件系统上的任意位置。例如,如需将内容提取到当前工作目录,请运行以下命令:

    tar xzf istio-1.10.6-asm.2-osx.tar.gz

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

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

    cd istio-1.10.6-asm.2

Windows

  1. 将 Anthos Service Mesh 安装文件下载到当前工作目录中:

    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.10.6-asm.2-win.zip
  2. 下载签名文件并使用 openssl 验证签名:

    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.10.6-asm.2-win.zip.1.sig
    openssl dgst -verify - -signature istio-1.10.6-asm.2-win.zip.1.sig istio-1.10.6-asm.2-win.zip <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF

    预期输出为 Verified OK

  3. 将文件内容提取到文件系统上的任意位置。例如,如需将内容提取到当前工作目录,请运行以下命令:

    tar xzf istio-1.10.6-asm.2-win.zip

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

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

    cd istio-1.10.6-asm.2

安装 Anthos Service Mesh

本部分介绍了如何在用户集群上安装 Anthos Service Mesh,用于启用 asm-multicloud 配置文件的支持的功能页面上列出的支持的默认功能。您可以选择为公共子网或专用子网启用 Ingress。

公开

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

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

  3. 安装 Anthos Service Mesh:

    bin/istioctl install \
      -f manifests/profiles/asm-multicloud.yaml \
      --set revision=asm-1106-2
    

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

  4. 配置验证网络钩子,使其能够使用修订版本标签查找 istiod 服务:

    kubectl apply -f istiod-service.yaml
    

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

专用

在下面的代码中,您将 service.beta.kubernetes.io/aws-load-balancer-internal 注解添加到 Anthos Service Mesh 创建的所有服务中。如果存在此注解,则 GKE on AWS 会创建专用 Ingress 服务。

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

  2. 将以下 YAML 保存到名为 istio-operator-internal-lb.yaml 的文件:

    apiVersion: install.istio.io/v1alpha1
    kind: IstioOperator
    spec:
      components:
        ingressGateways:
        - enabled: true
          k8s:
            serviceAnnotations:
              service.beta.kubernetes.io/aws-load-balancer-internal: "true"
          name: istio-ingressgateway
    
  3. 运行以下命令以安装 Anthos Service Mesh。如果您要启用受支持的可选功能,请在以下命令行中添加 -f 和 YAML 文件名。如需了解详情,请参阅启用可选功能

    bin/istioctl install \
     -f manifests/profiles/asm-multicloud.yaml \
     --set revision=asm-1106-2 \
     -f istio-operator-internal-lb.yaml
    

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

  4. 配置验证网络钩子,使其能够使用修订版本标签查找 istiod 服务:

    kubectl apply -f istiod-service.yaml
    

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

检查控制层面组件

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

kubectl get pod -n istio-system

预期输出如下所示:

NAME                                      READY   STATUS      RESTARTS   AGE
istio-ingressgateway-74cc894bfd-786rg     1/1     Running     0          7m19s
istiod-78cdbbbdb-d7tps                    1/1     Running     0          7m36s
promsd-576b8db4d6-lqf64                   2/2     Running     1          7m19s

现在,您已经安装了预安装有入站网关的 Anthos Service Mesh 控制层面。如果您只需要使用 Ingress 控制器的 Ingress 功能,则可以在集群上安装应用了。请参阅创建示例 Deployment,了解如何配置 Ingress 资源。

如果您想要利用 Anthos Service Mesh 提供的所有功能,请继续进行安装的下一阶段,以注入边车代理并重启工作负载。

注入 Sidecar 代理

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-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
    

访问入站流量网关

Anthos Service Mesh 提供预配置的入站流量网关 istio-ingressgateway,该网关可用于管理流向服务网格上运行的应用的入站流量。如需允许从集群外部(例如通过浏览器)访问应用,请执行以下操作:

  • 您需要获取将 istio-ingressgateway 配置为使用的外部负载均衡器的外部 IP 地址或主机名和端口。

  • 您的应用必须定义网关和 VirtualService 资源,类似于 Online Boutique 示例应用的 frontend-gateway.yaml

如需获取 istio-ingressgateway 的外部地址,请执行以下操作:

  1. 创建 INGRESS_HOST 环境变量:

    export INGRESS_HOST=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')
    
  2. 创建 INGRESS_PORT 环境变量:

    export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].port}')
    
  3. 如需进行测试,请部署一个示例应用,例如 Online Boutique

  4. 如需通过浏览器访问该应用,请在网址中使用 $INGRESS_HOST:$INGRESS_PORT 的值。

后续步骤