在本地安装 Anthos Service Mesh

本指南说明了如何在现有 GKE On VMware 集群上执行 Anthos Service Mesh 版本 1.6.14-asm.2 的清洁安装。如果您安装了先前版本的 Anthos Service Mesh,请参阅在 GKE On VMware 上升级 Anthos Service Mesh。安装将在集群上针对 asm-multicloud 配置文件启用支持的功能

关于控制层面组件

GKE on VMware 预安装有以下 Istio 组件:

  • Citadel 安装在 kube-system 命名空间中。
  • Pilot 和 Istio 入站流量网关安装在 gke-system 命名空间中。

GKE on VMware 使用这些组件来启用入站流量,以及保护由 Google 控制的组件之间的通信。如果您只需要入站流量功能,则无需安装 OSS Istio 或 Anthos Service Mesh。如需详细了解如何配置入站流量,请参阅启用入站流量

安装 Anthos Service Mesh 时,其组件会安装在 istio-system 命名空间中。由于 Anthos Service Mesh 组件位于不同的命名空间中,因此不会与 GKE on VMware 预安装的 Istio 组件发生冲突。

准备工作

在开始设置之前,请查看以下要求。

使用要求

  • 您必须有 Anthos 订阅。或者,用户可以选择仅适用于 Google Cloud 上的 GKE Enterprise 的随用随付结算选项。如需了解详情,请参阅 GKE Enterprise 价格指南

  • 验证您安装 Anthos Service Mesh 的用户集群至少具有 4 个 vCPU、15 GB 内存和 4 个副本。

  • 您必须使用以下语法命名服务端口:name: protocol[-suffix],其中方括号表示必须以短划线开头的可选后缀。如需了解详情,请参阅为服务端口命名

  • 验证是否已在支持的环境中列出了您的集群版本。如需检查集群版本,您可以使用 gkectl 命令行工具。

    gkectl version

    成功的输出如下所示:

     1.4.0-gke.13 (git-b39331512)
    

    如果您未安装 gkectl,请参阅 GKE On-Prem 下载

设置您的环境

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

安装 gcloud CLI 后:

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

    gcloud auth login
    
  2. 更新组件:

    gcloud components update
    
  3. 安装 kubectl

    gcloud components install kubectl
    
  4. 如果您要使用 Online Boutique 示例应用来部署和测试您的安装,请安装 kpt

    gcloud components install kpt
    
  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.6.14-asm.2-linux-amd64.tar.gz
  2. 下载签名文件并使用 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

  3. 将文件内容提取到文件系统上的任意位置。例如,如需将内容提取到当前工作目录,请运行以下命令:
    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 配置文件位于 install/kubernetes/operator/profiles 目录中。

  4. Mac OS

  5. 将 Anthos Service Mesh 安装文件下载到当前工作目录中:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.6.14-asm.2-osx.tar.gz
  6. 下载签名文件并使用 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

  7. 将文件内容提取到文件系统上的任意位置。例如,如需将内容提取到当前工作目录,请运行以下命令:
    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 配置文件位于 install/kubernetes/operator/profiles 目录中。

  8. Windows

  9. 将 Anthos Service Mesh 安装文件下载到当前工作目录中:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.6.14-asm.2-win.zip
  10. 下载签名文件并使用 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

  11. 将文件内容提取到文件系统上的任意位置。例如,如需将内容提取到当前工作目录,请运行以下命令:
    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 配置文件位于 install/kubernetes/operator/profiles 目录中。

  12. 确保您位于 Anthos Service Mesh 安装的根目录。
    cd istio-1.6.14-asm.2
  13. 为方便起见,请将 /bin 目录中的工具添加到 PATH:
    export PATH=$PWD/bin:$PATH

创建 istio-system 命名空间

为控制层面组件创建一个名为 istio-system 的命名空间:

kubectl create namespace istio-system

配置验证网络钩子

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

将以下 YAML 复制到名为 istiod-service.yaml 的文件中:

apiVersion: v1
kind: Service
metadata:
  name: istiod
  namespace: istio-system
  labels:
    istio.io/rev: asm-1614-2
    app: istiod
    istio: pilot
    release: istio
spec:
  ports:
    - port: 15010
      name: grpc-xds # plaintext
      protocol: TCP
    - port: 15012
      name: https-dns # mTLS with k8s-signed cert
      protocol: TCP
    - port: 443
      name: https-webhook # validation and injection
      targetPort: 15017
      protocol: TCP
    - port: 15014
      name: http-monitoring # prometheus stats
      protocol: TCP
  selector:
    app: istiod
    istio.io/rev: asm-1614-2

安装 Anthos Service Mesh

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

    istioctl install \
      --set profile=asm-multicloud \
      --set revision=asm-1614-2
    

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

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

    kubectl apply -f istiod-service.yaml
    

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

自动双向 TLS(自动 mTLS)默认情况下处于启用状态。通过自动 mTLS,客户端边车代理会自动检测服务器是否具有 Sidecar。客户端 Sidecar 会将 mTLS 发送到具有 Sidecar 的工作负载,并将纯文本流量发送到没有 Sidecar 的工作负载。

检查控制层面组件

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

在部署工作负载之前,请配置边车代理注入,以便 Anthos Service Mesh 能够监控和保护流量。

安装 Anthos Service Mesh 之前在集群上运行的任何工作负载都需要注入或更新边车代理,以使其具有当前 Anthos Service Mesh 版本。在部署新工作负载之前,请配边车代理注入,以便 Anthos Service Mesh 能够监控和保护流量。

要启用 Sidecar 自动注入,请使用您在 istiod 上设置的同一修订版本来为命名空间添加标签。运行以下命令以显示 istiod 上的标签:

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

确认输出中包含修订版本标签 istio.io/rev=asm-1614-2。这是您用于启用自动注入的标签。您可以使用一个命令来启用自动注入,例如:

kubectl label namespace NAMESPACE istio-injection- istio.io/rev=asm-1614-2 --overwrite

其中,NAMESPACE 是应用服务的命名空间的名称;如果未显式创建命名空间,则为 default

如需了解详情,请参阅注入 Sidecar 代理

配置外部 IP 地址

默认的 Anthos Service Mesh 安装假定为 LoadBalancer 服务自动分配外部 IP 地址。在 GKE on VMware 上并非如此。因此,您需要为 Anthos Service Mesh 入站流量网关资源手动分配 IP 地址。

要配置外部 IP 地址,请根据集群的负载均衡模式,按照以下某一部分的说明执行操作:

配置集成式负载均衡模式

  1. 打开 istio-ingressgateway Service 的配置:

    kubectl edit svc -n istio-system istio-ingressgateway
    

    istio-ingressgateway Service 的配置会在 shell 的默认文本编辑器中打开。

  2. 在文件中的规范 (spec) 块下添加以下行:

    loadBalancerIP: <your static external IP address>
    

    例如:

    spec:
     loadBalancerIP: 203.0.113.1
    
  3. 保存文件。

配置手动负载均衡模式

要在所选的负载均衡器上使用 VIP 地址公开 NodePort 类型的服务,您需要先找出 nodePort 值:

  1. 在 shell 中查看 istio-ingressgateway Service 的配置:

    kubectl get svc -n istio-system istio-ingressgateway -o yaml
    

    系统会显示 Anthos Service Mesh 网关的每个端口。命令输出如下所示:

     ...
     ports:
     - name: status-port
       nodePort: 30391
       port: 15020
       protocol: TCP
       targetPort: 15020
     - name: http2
       nodePort: 31380
       port: 80
       protocol: TCP
       targetPort: 80
     - name: https
       nodePort: 31390
       port: 443
       protocol: TCP
       targetPort: 443
     - name: tcp
       nodePort: 31400
       port: 31400
       protocol: TCP
       targetPort: 31400
     - name: https-kiali
       nodePort: 31073
       port: 15029
       protocol: TCP
       targetPort: 15029
     - name: https-prometheus
       nodePort: 30253
       port: 15030
       protocol: TCP
       targetPort: 15030
     - name: https-grafana
       nodePort: 30050
       port: 15031
       protocol: TCP
       targetPort: 15031
     - name: https-tracing
       nodePort: 31204
       port: 15032
       protocol: TCP
       targetPort: 15032
     - name: tls
       nodePort: 30158
       port: 15443
       protocol: TCP
       targetPort: 15443
     ...
    
  2. 通过负载均衡器公开这些端口。

    例如,名为 http2 的服务端口具有 port 80 和 nodePort 31380。假设您的用户集群的节点地址是 192.168.0.10192.168.0.11192.168.0.12,并且负载均衡器的 VIP 地址是 203.0.113.1

    配置负载均衡器以将发送到 203.0.113.1:80 的流量转发到 192.168.0.10:31380192.168.0.11:31380192.168.0.12:31380。您可以选择要在此给定 VIP 地址上公开的服务端口。

后续步骤