Configuração do Traffic Director para um gateway de entrada
Neste guia, demonstramos como configurar o Traffic Director com um gateway de entrada.
Nesta configuração, um balanceador de carga de rede direciona o tráfego da Internet para sua
malha de serviço por meio de um gateway de entrada. Um recurso Gateway
gerencia um
proxy do Envoy que atua como um gateway na malha de serviço. Um gateway também é conhecido como proxy intermediário ou entrada. Os proxies do Envoy implantados para atuar como um
gateway de entrada são proxies independentes, em vez de um sidecar para uma carga de trabalho. Nesse
modo, o Envoy detecta uma lista bem definida de endereços e portas IP e
encaminha o tráfego de acordo com as regras de roteamento que você configurar. Um novo recurso de API Gateway
é usado para configurar esses clientes Envoy.
Configure o roteamento para garantir que o tráfego destinado aos proxies Gateway
seja
direcionado às VMs que hospedam os Envoys. O serviço de entrada pode ser pareado com um balanceador de carga HTTP(S) externo ou interno, mas essas configurações não estão incluídas nesta configuração de demonstração.
A comunicação entre serviços e o recurso Mesh
por trás do Gateway não são abordados neste guia.
Pré-requisitos
Verifique se você seguiu os pré-requisitos nos seguintes guias:
- Preparar a configuração do Traffic Director com o Envoy
- Guias de configuração do roteamento de serviços do Traffic Director
Configurar regras de firewall
Nesta seção, você configura duas regras de firewall. Uma delas permite que as sondagens da verificação de integridade sejam realizadas na rede da nuvem privada virtual. A outra permite o tráfego de qualquer origem na rede.
Configure regras de firewall para permitir verificações de integridade.
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
Configure regras de firewall para permitir tráfego de qualquer origem. Edite os comandos para suas portas e intervalos de endereços IP de origem.
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
Configurar as permissões do Gerenciamento de identidade e acesso
Nesta seção, você designa a conta de serviço para os proxies de gateway e atribui a eles os papéis corretos do IAM.
Crie uma identidade de conta de serviço para os proxies de gateway.
gcloud iam service-accounts create gateway-proxy
Atribua os papéis do IAM necessários à identidade da conta de serviço.
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"
Configurar o recurso Gateway
Nesta seção, você configura o recurso de gateway.
Em um arquivo chamado
gateway80.yaml
, crie a especificaçãoGateway
para o tráfego HTTP.cat <<EOF | tee gateway80.yaml name: gateway80 scope: gateway-proxy ports: - 80 type: OPEN_MESH EOF
Crie o recurso
Gateway
da especificaçãogateway80.yaml
:gcloud alpha network-services gateways import gateway80 \ --source=gateway80.yaml \ --location=global
Criar um grupo de instâncias gerenciadas com proxies do Envoy
Nesta seção, você cria os proxies do Envoy que estão associados ao gateway de entrada.
Crie um modelo de instância para uma VM que executa um proxy de serviço do Envoy implantado automaticamente. Os Envoys têm um escopo de
gateway-proxy
. Não transmita a porta de exibição como um parâmetro de--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 \
Crie um grupo de instâncias gerenciadas por região a partir do modelo de instância.
gcloud compute instance-groups managed create gateway-proxies-${REGION} \ --region=${REGION} \ --size=2 \ --template=gateway-proxy \ --target-distribution-shape=EVEN
Defina uma porta nomeada para ativar a verificação de integridade TCP no balanceador de carga de rede.
gcloud compute instance-groups managed set-named-ports \ gateway-proxies-${REGION} \ --region=${REGION} \ --named-ports=healthz:80
Ative o escalonamento automático para o grupo de instâncias.
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
Configurar o balanceamento de carga de rede regional
Nesta seção, você cria o balanceador de carga de rede, um serviço de back-end, uma regra de encaminhamento e uma verificação de integridade.
Crie o balanceador de carga de rede.
gcloud compute addresses create xnlb-${REGION} \ --region=${REGION}
Consiga o endereço IP reservado para o balanceador de carga de rede.
export IP_ADDRESS=$(gcloud compute addresses describe xnlb-${REGION} \ --region=${REGION} --format='value(address)')
Crie uma verificação de integridade para os proxies de gateway.
gcloud compute health-checks create tcp xnlb-${REGION} \ --region=${REGION} \ --port-name=healthz
Crie um serviço de back-end para os proxies de gateway.
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
Adicione o grupo de instâncias gerenciadas como os back-ends.
gcloud compute backend-services add-backend xnlb-${REGION} \ --instance-group=gateway-proxies-${REGION} \ --instance-group-region=${REGION} \ --region=${REGION}
Crie uma regra de encaminhamento que aponte para os proxies de gateway.
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}
Configurar o servidor HTTP
Nesta seção, você cria um serviço de teste na malha de serviço.
Crie um modelo de instância com um serviço de teste na porta 10000 usando o utilitário
netcat
.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"
Crie o grupo gerenciado de instâncias com base no modelo.
gcloud compute instance-groups managed create tcp-td-mig-us-east1 \ --zone=us-east1-a \ --size=1 \ --template=tcp-td-vm-template
Crie uma verificação de integridade HTTP.
gcloud compute health-checks create http helloworld-health-check
Crie uma regra de firewall para permitir conexões de verificação de integridade de entrada com instâncias na sua rede.
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
Crie um serviço de back-end global com um esquema de balanceamento de carga de
INTERNAL_SELF_MANAGED
e anexe a verificação de integridade.gcloud compute backend-services create tcp-helloworld-service \ --global \ --load-balancing-scheme=INTERNAL_SELF_MANAGED \ --protocol=HTTP \ --health-checks helloworld-health-check
Adicione o grupo de instâncias gerenciadas ao serviço de back-end.
gcloud compute backend-services add-backend tcp-helloworld-service \ --instance-group td-mig-us-east1 \ --instance-group-zone us-east1-a \ --global
Configure o roteamento com HTTPRoute
Agora você tem um recurso Gateway
do Traffic Director e um serviço configurado. Em seguida,
você os conecta usando um recurso HTTPRoute
que associa um nome de host
a um serviço de back-end. O HTTPRoute
também faz referência ao Gateway
.
Em um arquivo chamado
http_route.yaml
, crie a especificaçãoHTTPRoute
. A especificação faz referência aogateway80
, que é o recursoGateway
criado anteriormente e aponta para o serviço de back-endhttp-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"
Use a especificação em
http_route.yaml
para criar o recursoHTTPRoute
.gcloud alpha network-services http-routes import helloworld-http-route \ --source=http_route.yaml \ --location=global
Verifique se é possível acessar o serviço de um cliente externo por meio do balanceador de carga de rede e do Traffic Director
Gateway
.curl -H "Host: helloworld-gce" ${IP_ADDRESS}