Traffic Director xDS 控制层面 API

Traffic Director 及其客户端(Envoy 代理或无代理 gRPC 库)使用开源 xDS API 交换信息。当您配置 Traffic Director(例如,使用转发规则和后端服务等资源)时,Traffic Director 会将这些资源转换为 xDS 配置,供其客户端共享。

xDS 版本支持

xDS 是有版本控制的 API,Traffic Director 支持 xDS v2 和 xDS v3。下表按客户端类型介绍了 xDS API 支持。

xDS v2 xDS v3
Envoy 正式版支持 Envoy 版本 1.9.1 - 1.16.2 预览版本支持 Envoy 版本 1.15.0+
无代理 gRPC 正式版支持 gRPC 版本 1.30.0+ 暂不支持

请注意,Envoy 社区在最新版本的 Envoy 中已弃用对 xDS v2 的支持。该社区将计划在 2020 年终止 xDS v2 服务。 2021 年第一季度之后,新版 Envoy 将仅支持 xDS v3。如需了解详情,请参阅 Envoy 的支持的 API 版本

xDS v3 预览

手动部署 Envoy 时,Traffic Director 提供对 xDS v3 API 的预览支持。如需测试此预览支持,您可以按照适用于 Compute EngineGoogle Kubernetes Engine 的手动 Envoy 设置指南进行操作。请注意,您需要对设置指南进行以下修改。

服务帐号的新 Traffic Director 权限

该服务帐号需要具有 trafficdirector.configurations.gettrafficdirector.endpointmetrics.report 权限。您可以使用 IAM 角色 trafficdirector.client 来封装这两项权限。不再需要 compute.forwardingRules.get 权限。

如需将此 IAM 角色添加到服务帐号,请使用以下命令:

gcloud projects add-iam-policy-binding ${PROJECT} \
    --member serviceAccount:${SERVICE_ACCOUNT_EMAIL} \
    --role roles/trafficdirector.client

更新 Compute Engine 的参考软件包

如果您按照 Compute Engine 设置指南操作,请在创建实例模板时使用以下代码示例,而不是示例代码中提供的代码示例。

gcloud compute instance-templates create td-vm-template \
  --scopes=https://www.googleapis.com/auth/cloud-platform \
  --tags=http-td-tag,http-server,https-server \
  --image-family=debian-9 \
  --image-project=debian-cloud \
  --metadata=startup-script="#! /bin/bash

# Add a system user to run Envoy binaries. Login is disabled for this user
sudo adduser --system --disabled-login envoy
# Download and extract the Traffic Director tar.gz file
sudo wget -P /home/envoy https://storage.googleapis.com/traffic-director/traffic-director-xdsv3.tar.gz
sudo tar -xzf /home/envoy/traffic-director-xdsv3.tar.gz -C /home/envoy
sudo cat << END > /home/envoy/traffic-director-xdsv3/sidecar.env
ENVOY_USER=envoy
# Exclude the proxy user from redirection so that traffic doesn't loop back
# to the proxy
EXCLUDE_ENVOY_USER_FROM_INTERCEPT='true'
# Intercept all traffic by default
SERVICE_CIDR='*'
GCP_PROJECT_NUMBER=project number
VPC_NETWORK_NAME=network name
ENVOY_IMAGE='envoyproxy/envoy:v1.15.0'
ENVOY_PORT='15001'
ENVOY_ADMIN_PORT='15000'
LOG_DIR='/var/log/envoy/'
LOG_LEVEL='info'
XDS_SERVER_CERT='/etc/ssl/certs/ca-certificates.crt'
END
sudo apt-get update -y
sudo apt-get install apt-transport-https ca-certificates curl gnupg2 software-properties-common -y
sudo curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
sudo add-apt-repository 'deb [arch=amd64] https://download.docker.com/linux/debian stretch stable' -y
sudo apt-get update -y
sudo apt-get install docker-ce apache2 -y
sudo service apache2 restart
echo '<!doctype html><html><body><h1>'`/bin/hostname`'</h1></body></html>' | sudo tee /var/www/html/index.html
cd /home/envoy/traffic-director-xdsv3
sudo ./run.sh start"

更新 Google Kubernetes Engine 的参考软件包

如果您遵循 Google Kubernetes Engine 设置指南,请在将 Sidecar 代理注入 Google Kubernetes Engine / Kubernetes pod 步骤中替换以下行。

旧:

wget -q -O - \
https://storage.googleapis.com/traffic-director/demo/trafficdirector_client_sample.yaml \
| kubectl apply -f -

新内容:

wget -q -O - https://storage.googleapis.com/traffic-director/demo/trafficdirector_client_sample_xdsv3.yaml
sed -i "s/PROJECT_NUMBER/project number/g" trafficdirector_client_sample_xdsv3.yaml
sed -i "s/NETWORK_NAME/network name/g" trafficdirector_client_sample_xdsv3.yaml
kubectl apply -f trafficdirector_client_sample_xdsv3.yaml