Configurazione di Traffic Director per un gateway in entrata
Questa guida illustra come configurare Traffic Director con un gateway in entrata.
In questa configurazione, un bilanciatore del carico di rete indirizza il traffico da Internet al mesh di servizi tramite un gateway in entrata. Una risorsa Gateway
gestisce un proxy Envoy che funge da gateway nella rete mesh di servizi. Un gateway è anche noto come traffico in entrata o proxy intermedio. I proxy Envoy di cui è stato eseguito il deployment come gateway in entrata sono proxy autonomi piuttosto che sidecar per un carico di lavoro. In
questa modalità, Envoy ascolta un elenco ben definito di indirizzi IP e porte e
inoltra il traffico in base alle regole di routing configurate. Per configurare i client Envoy viene utilizzata una nuova risorsa API Gateway
.
Gateway
(fai clic per ingrandire)Configura il routing per garantire che il traffico destinato ai proxy Gateway
sia indirizzato alle VM che ospitano gli Envoy. Il servizio in entrata può essere accoppiato con un bilanciatore del carico HTTP(S) esterno o con un bilanciatore del carico TCP/UDP interno, ma queste configurazioni non sono incluse in questa configurazione dimostrativa.
Questa guida non illustra la comunicazione service-to-service e la risorsa Mesh
dietro il gateway.
Prerequisiti
Assicurati di aver rispettato i prerequisiti nelle seguenti guide:
- Preparazione alla configurazione di Traffic Director con Envoy
- Guide alla configurazione del routing del servizio Traffic Director
Configurazione delle regole del firewall
In questa sezione configurerai due regole firewall. Una regola consente i probe del controllo di integrità nella rete Virtual Private Cloud. L'altra regola consente il traffico da qualsiasi origine alla rete.
Configura regole del firewall per consentire i controlli di integrità.
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
Configura regole del firewall per consentire il traffico da qualsiasi origine. Modifica i comandi per porte e intervalli di indirizzi IP di origine.
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
Configurazione delle autorizzazioni per Identity and Access Management
In questa sezione devi designare l'account di servizio per i proxy gateway e assegnare loro i ruoli IAM corretti.
Crea un'identità dell'account di servizio per i proxy gateway.
gcloud iam service-accounts create gateway-proxy
Assegna i ruoli IAM richiesti all'identità dell'account di servizio.
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"
Configurazione della risorsa Gateway
In questa sezione configurerai la risorsa gateway.
In un file denominato
gateway80.yaml
, crea la specificaGateway
per il traffico HTTP.cat <<EOF | tee gateway80.yaml name: gateway80 scope: gateway-proxy ports: - 80 type: OPEN_MESH EOF
Crea la risorsa
Gateway
dalla specificagateway80.yaml
:gcloud alpha network-services gateways import gateway80 \ --source=gateway80.yaml \ --location=global
Creazione di un gruppo di istanze gestite con proxy Envoy
In questa sezione creerai i proxy Envoy associati al gateway in entrata.
Crea un modello di istanza per una VM che esegue un proxy di servizio Envoy con deployment automatico. Gli Envoy hanno un ambito di
gateway-proxy
. Non trasferire la porta di gestione come parametro--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 \
Crea un gruppo di istanze gestite a livello di area geografica dal modello di istanza.
gcloud compute instance-groups managed create gateway-proxies-${REGION} \ --region=${REGION} \ --size=2 \ --template=gateway-proxy \ --target-distribution-shape=EVEN
Imposta una porta denominata per attivare il controllo di integrità TCP per il bilanciatore del carico di rete.
gcloud compute instance-groups managed set-named-ports \ gateway-proxies-${REGION} \ --region=${REGION} \ --named-ports=healthz:80
Abilita la scalabilità automatica per il gruppo di istanze.
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
Configurazione del bilanciamento del carico di rete a livello di area geografica
In questa sezione creerai il bilanciatore del carico di rete, un servizio di backend, una regola di forwarding e il controllo di integrità.
Crea il bilanciatore del carico di rete.
gcloud compute addresses create xnlb-${REGION} \ --region=${REGION}
Recupera l'indirizzo IP riservato al bilanciatore del carico di rete.
export IP_ADDRESS=$(gcloud compute addresses describe xnlb-${REGION} \ --region=${REGION} --format='value(address)')
Crea un controllo di integrità per i proxy gateway.
gcloud compute health-checks create tcp xnlb-${REGION} \ --region=${REGION} \ --port-name=healthz
Crea un servizio di backend per i proxy 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
Aggiungi il gruppo di istanze gestite come backend.
gcloud compute backend-services add-backend xnlb-${REGION} \ --instance-group=gateway-proxies-${REGION} \ --instance-group-region=${REGION} \ --region=${REGION}
Crea una regola di forwarding che punti ai proxy del 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}
Configurazione del server HTTP
In questa sezione creerai un servizio di test nel mesh di servizi.
Crea un modello di istanza con un servizio di test sulla porta 10000 usando l'utilità
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"
Crea un gruppo di istanze gestite basato sul modello.
gcloud compute instance-groups managed create tcp-td-mig-us-east1 \ --zone=us-east1-a \ --size=1 \ --template=tcp-td-vm-template
Crea un controllo di integrità HTTP.
gcloud compute health-checks create http helloworld-health-check
Crea una regola firewall per consentire le connessioni di controllo di integrità in entrata alle istanze nella rete.
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
Crea un servizio di backend globale con uno schema di bilanciamento del carico di
INTERNAL_SELF_MANAGED
e collega il controllo di integrità.gcloud compute backend-services create tcp-helloworld-service \ --global \ --load-balancing-scheme=INTERNAL_SELF_MANAGED \ --protocol=HTTP \ --health-checks helloworld-health-check
Aggiungi il gruppo di istanze gestite al servizio di backend.
gcloud compute backend-services add-backend tcp-helloworld-service \ --instance-group td-mig-us-east1 \ --instance-group-zone us-east1-a \ --global
Configurazione del routing con HTTPRoute
Ora hai configurato una risorsa Gateway
di Traffic Director e un servizio. Successivamente,
connettili utilizzando una risorsa HTTPRoute
che associa un nome host
a un servizio di backend. Anche HTTPRoute
fa riferimento a Gateway
.
In un file denominato
http_route.yaml
, crea la specificaHTTPRoute
. La specifica fa riferimento agateway80
, che è la risorsaGateway
creata in precedenza e rimanda al servizio di backendhttp-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"
Utilizza la specifica in
http_route.yaml
per creare la risorsaHTTPRoute
.gcloud alpha network-services http-routes import helloworld-http-route \ --source=http_route.yaml \ --location=global
Verifica di poter accedere al servizio da un client esterno tramite il bilanciatore del carico di rete e Traffic Director
Gateway
.curl -H "Host: helloworld-gce" ${IP_ADDRESS}