APIs do plano de controle xDS do Traffic Director

O Traffic Director e seus clientes (proxies Envoy ou bibliotecas gRPC sem proxy) trocam informações usando a API xDS de código aberto. Quando você configura o Traffic Director (por exemplo, usando regras de encaminhamento e serviços de back-end), ele converte esses recursos para a configuração do xDS, que é compartilhada com os clientes.

Compatibilidade com a versão xDS

O xDS é uma API com controle de versões e o Traffic Director é compatível com xDS v2 e xDS v3. A tabela a seguir descreve a compatibilidade da API xDS por tipo de cliente.

xDS v2 xDS v3
Envoy Suporte GA com versões 1.9.1 e 1.16.2 do Envoy Visualização da compatibilidade com o Envoy 1.15.0 e versões posteriores
gRPC sem proxy Suporte GA com o gRPC versão 1.30.0 e posteriores Não compatível no momento

Observe que a comunidade Envoy teve o suporte suspenso para xDS v2 em versões recentes do Envoy. A comunidade planeja finalizar a vida útil do suporte para xDS v2 no final de 2020. Após o primeiro trimestre de 2021, as novas versões do Envoy serão compatíveis somente com o xDS v3. Para mais informações, consulte Versões compatíveis da API do Envoy.

Visualização xDS v3

O Traffic Director tem suporte a visualização para APIs xDS v3 ao implantar manualmente o Envoy. Para testar essa compatibilidade com visualização, siga os guias de configuração manual do Envoy para Compute Engine ou Google Kubernetes Engine. Você precisará fazer as modificações a seguir nos guias de configuração.

Novas permissões do Traffic Director na conta de serviço

A conta de serviço precisa ter as permissões trafficdirector.configurations.get e trafficdirector.endpointmetrics.report. É possível usar o papel de IAM trafficdirector.client, que abrange as duas permissões. A permissão compute.forwardingRules.get não é mais necessária.

Para adicionar esse papel do IAM à conta de serviço, use o seguinte comando:

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

Atualizar o pacote de referência do Compute Engine

Se você estiver seguindo o guia de configuração do Compute Engine, use o exemplo de código a seguir ao criar o modelo de instância, em vez do exemplo de código fornecido no guia de configuração.

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"

Atualizar o pacote de referência do Google Kubernetes Engine

Se você estiver seguindo o guia de configuração do Google Kubernetes Engine, substitua as seguintes linhas durante a etapa injetando um proxy sidecar em pods do Google Kubernetes Engine / Kubernetes.

Antigo:

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

Novo:

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