Anthos Service Mesh 1.6

在 GKE on AWS 上安装 Anthos Service Mesh

本指南介绍了如何在现有 GKE on AWS 集群上执行 Anthos Service Mesh 版本 1.6.8-asm.0 的清洁安装。

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

  • curl 命令行工具。
  • Cloud SDKgcloud 命令行工具)。

安装 Cloud SDK 后:

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

    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

下载安装文件

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

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

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

    预期输出为 Verified OK

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

    tar xzf istio-1.6.8-asm.0-linux-amd64.tar.gz

    该命令会在当前工作目录中创建一个名为 istio-1.6.8-asm.0 的安装目录。istio-1.6.8-asm.0/bin 目录包含 istioctl 命令行工具,用于安装 Anthos Service Mesh。

  4. 确保您位于 Anthos Service Mesh 安装的根目录。

    cd istio-1.6.8-asm.0
  5. 为方便起见,请将 /bin 目录添加到 PATH 中:

    export PATH=$PWD/bin:$PATH
  6. 为控制层面组件创建一个名为 istio-system 的命名空间:

    kubectl create namespace istio-system

安装 Anthos Service Mesh

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

公共

安装 Anthos Service Mesh:

istioctl install --set profile=asm-multicloud

专用

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

  1. 将以下 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"
    
  2. 安装 Anthos Service Mesh:

    istioctl install --set profile=asm-multicloud \
     -f istio-operator-internal-lb.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

注入 Sidecar 代理

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

在部署工作负载之前,请务必配置 Sidecar 代理注入,以便 Anthos Service Mesh 可以监控和保护流量。

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

您可以使用一个命令启用自动 Sidecar 注入,例如:

kubectl label namespace NAMESPACE istio-injection=enabled --overwrite

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

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

访问入站流量网关

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 的值。