使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。

为入站流量网关设置 Traffic Director

本指南演示了如何使用 Ingress Gateway 配置 Traffic Director。

在此配置中,网络负载平衡器通过入站流量网关将流量从互联网定向到服务网格。Gateway 资源管理一个充当服务网格的网关的 Envoy 代理。网关也称为中间代理或入站流量。部署为入站流量网关的 Envoy 代理是独立的代理,而不是 Sidecar 到工作负载。在此模式下,Envoy 会侦听您定义的明确 IP 地址和端口列表,并根据您配置的路由规则转发流量。新的 Gateway API 资源用于配置此类 Envoy 客户端。

具有 Envoy 代理、网络负载平衡器和网关资源的入站流量网关
包含 Envoy 代理、网络负载平衡器和 Gateway 资源的 Ingress 网关(点击可放大)

设置路由,确保发往 Gateway 代理的流量定向到托管 Envoy 的虚拟机。入站流量服务可以与外部 HTTP(S) 负载平衡器或内部 TCP/UDP 负载平衡器配对,但此演示设置不包含此类配置。

本指南不涵盖网关到服务之间的服务通信和 Mesh 资源。

前提条件

请确保您已遵循以下指南中的前提条件:

配置防火墙规则

在本部分中,您将配置两条防火墙规则。一条规则允许运行状况检查探测 Virtual Private Cloud 网络。另一条规则允许来自任何来源的流量进入网络。

  1. 配置防火墙规则以允许进行运行状况检查。

    gcloud compute firewall-rules create allow-gateway-health-checks \
      --network=${VPC_NAME} \
      --direction=INGRESS \
      --action=ALLOW \
      --rules=tcp \
      --source-ranges="35.191.0.0/16,209.85.152.0/22,209.85.204.0/22" \
      --target-tags=gateway-proxy
    
  2. 配置防火墙规则以允许来自任何来源的流量。修改端口和来源 IP 地址范围的命令。

    gcloud compute firewall-rules create allow-gateway-ingress-traffic \
      --network=${VPC_NAME} \
      --direction=INGRESS \
      --action=ALLOW \
      --rules=tcp:80,tcp:443 \
      --source-ranges="0.0.0.0/0" \
      --target-tags=gateway-proxy
    

配置 Identity and Access Management 权限

在本部分中,您将为网关代理指定服务帐号,并为其分配正确的 IAM 角色。

  1. 为网关代理创建服务帐号身份。

    gcloud iam service-accounts create gateway-proxy
    
  2. 将所需的 IAM 角色分配给服务帐号身份。

    gcloud projects add-iam-policy-binding ${PROJECT_ID} \
      --member="serviceAccount:gateway-proxy@${PROJECT_ID}.iam.gserviceaccount.com" \
      --role="roles/trafficdirector.client"
    
    gcloud projects add-iam-policy-binding ${PROJECT_ID} \
      --member="serviceAccount:gateway-proxy@${PROJECT_ID}.iam.gserviceaccount.com" \
      --role="roles/logging.logWriter"
    

配置 Gateway 资源

在本部分中,您将配置网关资源。

  1. 在名为 gateway80.yaml 的文件中,为 HTTP 流量创建 Gateway 规范。

    cat <<EOF | tee gateway80.yaml
    name: gateway80
    scope: gateway-proxy
    ports:
    - 80
    type: OPEN_MESH
    EOF
    
  2. 根据 gateway80.yaml 规范创建 Gateway 资源:

    gcloud alpha network-services gateways import gateway80 \
        --source=gateway80.yaml \
        --location=global
    

使用 Envoy 代理创建代管实例组

在本部分中,您将创建与入站流量网关关联的 Envoy 代理。

  1. 为运行自动部署的 Envoy 服务代理的虚拟机创建实例模板。Envoy 的范围为 gateway-proxy。请勿将传送端口作为 --service-proxy 的参数传递。

    gcloud beta compute instance-templates create gateway-proxy \
      --machine-type=n1-standard-1 \
      --boot-disk-size=10GB \
      --scopes=https://www.googleapis.com/auth/cloud-platform \
      --tags=gateway-proxy \
      --network-interface=network=${VPC_NAME},no-address \
      --service-account="gateway-proxy@${PROJECT_ID}.iam.gserviceaccount.com" \
      --service-proxy=enabled,scope=gateway-proxy \
    
  2. 通过实例模板创建区域托管实例组。

    gcloud compute instance-groups managed create gateway-proxies-${REGION} \
      --region=${REGION} \
      --size=2 \
      --template=gateway-proxy \
      --target-distribution-shape=EVEN
    
  3. 设置已命名端口,以便为网络负载平衡器启用 TCP 运行状况检查。

    gcloud compute instance-groups managed set-named-ports \
      gateway-proxies-${REGION} \
      --region=${REGION} \
      --named-ports=healthz:80
    
  4. 为实例组启用自动扩缩。

    gcloud compute instance-groups managed set-autoscaling \
      gateway-proxies-${REGION} \
      --region=${REGION} \
      --cool-down-period=60 \
      --min-num-replicas=3 \
      --max-num-replicas=10 \
      --mode=on \
      --target-cpu-utilization=0.6
    

设置地区级网络负载平衡

在本部分中,您将创建网络负载平衡器、后端服务、转发规则和运行状况检查。

  1. 创建网络负载平衡器。

    gcloud compute addresses create xnlb-${REGION} \
      --region=${REGION}
    
  2. 获取为网络负载平衡器预留的 IP 地址。

    export IP_ADDRESS=$(gcloud compute addresses describe xnlb-${REGION} \
      --region=${REGION} --format='value(address)')
    
  3. 为网关代理创建运行状况检查。

    gcloud compute health-checks create tcp xnlb-${REGION} \
      --region=${REGION} \
      --port-name=healthz
    
  4. 为网关代理创建后端服务。

    gcloud compute backend-services create xnlb-${REGION} \
      --health-checks=xnlb-${REGION} \
      --health-checks-region=${REGION} \
      --load-balancing-scheme=EXTERNAL \
      --protocol=TCP \
      --region=${REGION} \
      --port-name=healthz
    
  5. 将代管实例组添加为后端。

    gcloud compute backend-services add-backend xnlb-${REGION} \
      --instance-group=gateway-proxies-${REGION} \
      --instance-group-region=${REGION} \
      --region=${REGION}
    
  6. 创建指向网关代理的转发规则。

    gcloud compute forwarding-rules create xnlb-${REGION} \
      --region=${REGION} \
      --load-balancing-scheme=EXTERNAL \
      --address=${IP_ADDRESS} \
      --ip-protocol=TCP \
      --ports=80 \
      --backend-service=xnlb-${REGION} \
      --backend-service-region=${REGION}
    

配置 HTTP 服务器

在本部分中,您将在服务网格中创建测试服务。

  1. 使用 netcat 实用程序,在端口 10000 上使用测试服务创建实例模板

    gcloud compute instance-templates create tcp-td-vm-template \
      --scopes=https://www.googleapis.com/auth/cloud-platform \
      --tags=allow-health-checks \
      --image-family=debian-9 \
      --image-project=debian-cloud \
      --metadata=startup-script="#! /bin/bash
    
    sudo apt-get update -y
    sudo apt-get install apache2 -y
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>'\`/bin/hostname\`'</h1></body></html>' | sudo tee /var/www/html/index.html"
    
  2. 基于该模板创建一个代管式实例组。

    gcloud compute instance-groups managed create tcp-td-mig-us-east1 \
      --zone=us-east1-a \
      --size=1 \
      --template=tcp-td-vm-template
    
  3. 创建 HTTP 运行状况检查。

    gcloud compute health-checks create http helloworld-health-check
    
  4. 创建防火墙规则以允许传入的运行状况检查连接到网络中的实例。

    gcloud compute firewall-rules create tcp-vm-allow-health-checks \
       --network default \
       --action allow \
       --direction INGRESS \
       --source-ranges 35.191.0.0/16,209.85.152.0/22,209.85.204.0/22 \
       --target-tags allow-health-checks \
       --rules tcp:80
    
  5. 使用负载平衡方案 INTERNAL_SELF_MANAGED 创建全局后端服务并挂接运行状况检查。

    gcloud compute backend-services create tcp-helloworld-service \
        --global \
        --load-balancing-scheme=INTERNAL_SELF_MANAGED \
        --protocol=HTTP \
        --health-checks helloworld-health-check
    
  6. 将代管实例组添加到后端服务。

    gcloud compute backend-services add-backend tcp-helloworld-service \
      --instance-group td-mig-us-east1 \
      --instance-group-zone us-east1-a \
      --global
    

使用 HTTPRoute 设置路由

现在,您已经配置了 Traffic Director Gateway 资源和一项服务。接下来,您将使用 HTTPRoute 资源将主机名与后端服务相关联。HTTPRoute 也会引用 Gateway

  1. 在名为 http_route.yaml 的文件中,创建 HTTPRoute 规范。该规范引用了 gateway80(即您之前创建的 Gateway 资源),并且指向后端服务 http-helloworld-service

    name: helloworld-http-route
    hostnames:
    - helloworld-gce
    gateways:
    - projects/$PROJECT_NUMBER/locations/global/gateways/gateway80
    rules:
    - action:
      destinations:
       - serviceName: "projects/$PROJECT_NUMBER/locations/global/backendServices/http-helloworld-service"
    
  2. 根据 http_route.yaml 中的规范创建 HTTPRoute 资源。

    gcloud alpha network-services http-routes import helloworld-http-route \
        --source=http_route.yaml \
        --location=global
    
  3. 验证您可以通过网络负载平衡器和 Traffic Director Gateway 从外部客户端访问该服务。

    curl -H "Host: helloworld-gce" ${IP_ADDRESS}