设置高级配置

本文档包含可能有助于配置 Cloud Service Mesh 的一些注意事项。

为 Cloud Service Mesh 配置单个 Compute Engine 虚拟机

使用此过程作为示例,说明如何实现边车代理部署和流量拦截,以便为虚拟机提供对 Cloud Service Mesh 服务的访问权限。

如需使用此过程,您需要安装 Docker。请按照 Docker 的说明安装 Docker Engine。

如果您按照此过程在单个虚拟机上配置 Cloud Service Mesh,则某些设置任务需要访问 Linux 主机的权限。主机可以是在您的 Virtual Private Cloud 网络上运行的本地机器或虚拟机。

首先,下载并准备配置文件和示例脚本。

  1. 登录您在设置过程中使用的 Linux 主机。

  2. 将所需文件的归档文件下载到 Linux 主机并解压缩归档文件:

    wget https://storage.googleapis.com/traffic-director/traffic-director-xdsv3.tar.gz
    tar -xzvf traffic-director-xdsv3.tar.gz; cd traffic-director-xdsv3
    

    归档文件包含以下文件:

    • sidecar.env – 具有环境变量的配置文件。
    • iptables.sh – 用于设置 netfilter 规则的脚本。
    • bootstrap_template.yaml – Envoy 的引导模板文件。
    • run.sh – 顶级脚本,使用 sidecar.env 配置文件来设置用于拦截的 iptables 并运行 Envoy Sidecar 代理。
  3. 在运行 Sidecar 代理的每个主机上,创建一个系统用户以运行 Envoy 代理进程。这是 Envoy 代理用户。Envoy 代理用户的登录已停用。

    sudo adduser --system --disabled-login envoy
    
  4. 修改 sidecar.env 文件以修改配置。请阅读配置文件中的内嵌注释,详细了解每个变量。

    1. sidecar.env 文件中,将 ENVOY_USER 变量设置为您选择作为 Envoy 代理用户的用户名。

接下来,对于运行的应用使用 Cloud Service Mesh 的每个虚拟机主机,执行以下步骤:

  1. 将带有修改后的 sidecar.env 文件的整个 traffic-director-xdsv3 目录复制到每个虚拟机主机,其运行您预计使用 Cloud Service Mesh 的应用。
  2. run.sh 脚本添加到系统的启动脚本中,以确保在每次虚拟机重新启动后运行该脚本。
  3. 在每个虚拟机主机上,运行 run.sh 脚本:

    cd traffic-director-xdsv3
    sudo ./run.sh start
    
  4. 验证 Envoy 代理是否已正常启动。

    sudo ./run.sh status
    

    您会看到以下输出内容:

    OK: Envoy seems to be running.
    OK: Traffic interception seems to be enabled.
    

    您可以使用以下方式验证流量拦截方向:

    sudo iptables -S -t nat | grep ISTIO_REDIRECT
    

    预期输出为

    -N ISTIO_REDIRECT
    -A ISTIO_OUTPUT -j ISTIO_REDIRECT
    -A ISTIO_REDIRECT -p tcp -j REDIRECT --to-ports 15001`
    

路由规则映射

在路由规则映射中配置路由的方法有两种。

您可以根据服务的实际目标 VIP 和端口启用路由。如果您将服务的 VIP 配置为转发规则的 IPAddress 参数,则只有流向此地址及关联端口的流量才与规则匹配,然后系统会根据网址映射中指定的主机和路径参数路由这些流量。

或者,您可以将转发规则的地址设置为 0.0.0.0。这将配置代理以仅根据目标端口匹配流量,而不考虑请求的目标 IP 地址。然后,系统会根据网址映射中指定的主机和路径参数路由流量。

根据这两种方法,与目标 VIP 和端口的组合关联或仅与目标端口关联(当 VIP 设置为 0.0.0.0 时)的主机名(该主机名在主机规则中配置),在您的服务网格配置中必须是唯一的。也就是说,您不能拥有两项不同的服务,它们使用同一个主机名,但具有不同的后端集。

无论选择哪种方法,流向您服务主机名/FQDN 解析到的 VIP 以及服务所侦听端口的流量都一定会被拦截并重定向到 Sidecar 代理。如需了解完整的主机配置信息,请参阅为 Cloud Service Mesh 配置单个 Compute Engine 虚拟机

VPC 网络中的每个转发规则在各个 VPC 网络中都必须具有唯一的 IP 地址和端口组合,包括 0.0.0.0 地址。如果您在特定 VPC 网络中创建了多个具有相同 IP 地址和端口的转发规则,则只有第一个转发规则才有效。其他规则会被忽略。

如需避免丢失流量,请按照下面的高级流量拦截配置部分操作。

高级流量拦截配置

如果您的虚拟机运行的应用需要访问 Cloud Service Mesh 配置的服务,您必须在虚拟机上安装边车代理并配置流量拦截,以允许边车代理管理路由到这些服务后端的流量。

如果您的部署不接受拦截所有传出虚拟机流量,您可以将特定流量重定向到 Sidecar 代理,而其余流量将遵循主机网络配置定义的常规路由。

为此,请在使用虚拟机和手动 Envoy 部署的 Cloud Service Mesh 设置中修改 Compute Engine 虚拟机主机设置,如下所示:

  1. 确定由 Cloud Service Mesh 控制的服务应解析到的 IP 地址范围。目标为这些 IP 地址的流量会被拦截并重定向到 Sidecar 代理。该范围取决于您的部署。

  2. sidecar.env 文件中,将 SERVICE_CIDR 的值设置为此范围。前往这些 IP 地址的流量会通过 netfilter 重定向到边车代理,并根据 Cloud Service Mesh 提供的配置进行负载均衡。

  3. Sidecar 代理并不严格要求以被排除在流量拦截之外的专门用户的身份运行。不过,我们仍建议您这样做。

  4. 按照主过程中所述执行 run.sh 脚本后,iptables 便会配置为仅针对此特定范围进行拦截和重定向。

  5. 运行以下命令以验证 netfilter 是否配置正确。请使用您配置为拦截的 IP 地址范围的值替换 ${SERVICE_CIDR}。

    sudo iptables -L -t nat | grep -E "(ISTIO_REDIRECT).+${SERVICE_CIDR})"