Menyiapkan pemilihan rute TLS Gateway
Panduan ini menunjukkan cara menyiapkan gateway masuk berbasis proxy Envoy dengan
Resource Gateway
dan TLSRoute
. Anda juga dapat melampirkan resource TLSRoute
.
Deployment yang Anda konfigurasi diilustrasikan dalam diagram berikut. J Load Balancer Jaringan passthrough eksternal regional mengarahkan traffic ke proxy Envoy yang bertindak sebagai atau gateway masuk. Proxy Envoy menggunakan perutean passthrough TLS dan traffic ke server HTTPS yang berjalan di instance VM backend.
Sebelum memulai
Pastikan Anda menyelesaikan tugas-tugas yang dijelaskan dalam Bersiaplah untuk melakukan penyiapan dengan Envoy dan workload tanpa proxy.
Mengonfigurasi aturan firewall
Di bagian ini, Anda akan membuat aturan firewall untuk mengizinkan health check yang masuk ke instance VM di jaringan Anda.
Buat aturan firewall:
gcloud compute firewall-rules create allow-gateway-health-checks \ --network=NETWORK_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
Konfigurasi aturan firewall untuk mengizinkan traffic dari sumber mana pun. Mengedit perintah untuk port dan rentang alamat IP sumber:
gcloud compute firewall-rules create allow-gateway-ingress-traffic \ --network=NETWORK_NAME \ --direction=INGRESS \ --action=ALLOW \ --rules=tcp:443 \ --source-ranges="0.0.0.0/0" \ --target-tags=gateway-proxy
Mengonfigurasi izin Identity and Access Management
Di bagian ini, Anda akan menetapkan akun layanan untuk {i>proxy<i} {i>gateway<i} dan menetapkan peran IAM yang benar ke akun layanan.
Buat identitas akun layanan untuk proxy gateway:
gcloud iam service-accounts create gateway-proxy
Tetapkan peran IAM yang diperlukan ke identitas akun layanan:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:gateway-proxy@PROJECT_ID." \ --role="roles/trafficdirector.client"
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:gateway-proxy@PROJECT_ID." \ --role="roles/logging.logWriter"
Mengonfigurasi resource Gateway
Di file bernama
gateway443.yaml
, buat spesifikasiGateway
untuk HTTP lalu lintas:name: gateway443 scope: gateway-proxy ports: - 443 type: OPEN_MESH
Buat resource
Gateway
menggunakan spesifikasigateway443.yaml
:gcloud network-services gateways import gateway443 \ --source=gateway443.yaml \ --location=global
Membuat grup instance terkelola dengan proxy Envoy
Di bagian ini, Anda akan membuat proxy Envoy yang terkait dengan traffic masuk.
Membuat template instance untuk VM yang menjalankan Envoy yang di-deploy secara otomatis proxy layanan. Cakupan Envoys ditetapkan ke
gateway-proxy
. Jangan lulus port penayangan sebagai parameter flag--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=NETWORK_NAME,no-address \ --service-account="gateway-proxy@PROJECT_ID." \ --service-proxy=enabled,scope=gateway-proxy
Buat grup instance terkelola regional dari template instance:
gcloud compute instance-groups managed create gateway-proxy \ --region=REGION \ --size=1 \ --template=gateway-proxy
Tetapkan nama port penayangan untuk grup instance terkelola:
gcloud compute instance-groups managed set-named-ports gateway-proxy \ --named-ports=https:443 \ --region=REGION
Menyiapkan Load Balancer Jaringan passthrough eksternal regional
Di bagian ini, Anda akan membuat Load Balancer Jaringan passthrough eksternal.
Buat alamat IP regional eksternal statis:
gcloud compute addresses create xnlb-REGION \ --region=REGION
Dapatkan alamat IP yang dicadangkan untuk load balancer eksternal:
gcloud compute addresses describe xnlb-REGION \ --region=REGION --format='value(address)'
Alamat IP ini digunakan sebagai variabel
IP_ADDRESS
nanti dalam panduan penyiapan ini.Buat health check untuk proxy gateway:
gcloud compute health-checks create tcp xnlb-REGION \ --region=REGION \ --use-serving-port
Buat layanan backend untuk 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=https
Tambahkan grup instance terkelola sebagai backend:
gcloud compute backend-services add-backend xnlb-REGION \ --instance-group=gateway-proxy \ --instance-group-region=REGION \ --region=REGION
Buat aturan penerusan untuk mengarahkan traffic ke proxy gateway:
gcloud compute forwarding-rules create xnlb-REGION \ --region=REGION \ --load-balancing-scheme=EXTERNAL \ --address=IP_ADDRESS \ --ip-protocol=TCP \ --ports=443 \ --backend-service=xnlb-REGION \ --backend-service-region=REGION
Mengonfigurasi grup instance terkelola yang menjalankan layanan HTTPS
Untuk tujuan demonstrasi, buat layanan backend dengan VM yang diskalakan secara otomatis di
grup instance terkelola. VM menggemakan detail tentang permintaan web menggunakan HTTPS
pada porta 443
.
Buat template instance dengan layanan HTTPS yang ditampilkan di port
443
:gcloud compute instance-templates create td-https-vm-template \ --scopes=https://www.googleapis.com/auth/cloud-platform \ --tags=https-td-server \ --image-family=debian-10 \ --image-project=debian-cloud \ --metadata=startup-script='#! /bin/bash sudo rm -rf /var/lib/apt/lists/* sudo apt-get -y clean sudo apt-get -y update sudo apt-get -y install apt-transport-https ca-certificates curl gnupg2 software-properties-common sudo curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add - sudo add-apt-repository -y "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable" sudo apt-get -y update sudo apt-get -y install docker-ce sudo which docker echo "{ \"registry-mirrors\": [\"https://mirror.gcr.io\"] }" | sudo tee -a /etc/docker/daemon.json sudo service docker restart sudo docker run -e HTTPS_PORT=9999 -p 443:9999 --rm -dt mendhak/http-https-echo:22'
Buat grup instance terkelola berdasarkan template instance:
gcloud compute instance-groups managed create https-td-mig-us-REGION \ --zone=ZONE \ --size=2 \ --template=td-https-vm-template
Tetapkan nama port penayangan untuk grup instance terkelola:
gcloud compute instance-groups managed set-named-ports https-td-mig-us-REGION \ --named-ports=https:443 \ --zone=ZONE
Membuat health check:
gcloud compute health-checks create https https-helloworld-health-check \ --port=443
Buat aturan firewall untuk mengizinkan koneksi health check yang masuk ke instance di jaringan Anda:
gcloud compute firewall-rules create https-vm-allow-health-checks \ --network NETWORK_NAME --action allow --direction INGRESS \ --source-ranges 35.191.0.0/16,130.211.0.0/22 \ --target-tags https-td-server \ --rules tcp:443
Membuat layanan backend global dengan skema load balancing
INTERNAL_SELF_MANAGED
dan menambahkan respons periksa:gcloud compute backend-services create https-helloworld-service \ --global \ --load-balancing-scheme=INTERNAL_SELF_MANAGED \ --port-name=https \ --health-checks https-helloworld-health-check
Tambahkan grup instance terkelola sebagai backend ke layanan backend:
gcloud compute backend-services add-backend https-helloworld-service \ --instance-group=https-td-mig-us-REGION \ --instance-group-zone=ZONE \ --global
Menyiapkan pemilihan rute dengan resource TLSRoute
Di bagian sebelumnya, Anda telah mengonfigurasi resource Gateway
dan server HTTPS.
Selanjutnya, hubungkan menggunakan resource TLSRoute
yang mengaitkan nama host SNI
dengan layanan backend.
Dalam file bernama
tls_route.yaml
, buat spesifikasiTLSRoute
:name: helloworld-tls-route gateways: - projects/PROJECT_NUMBER/locations/global/gateways/gateway443 rules: - matches: - sniHost: - example.com alpn: - h2 action: destinations: - serviceName: projects/PROJECT_NUMBER/locations/global/backendServices/https-helloworld-service
Dalam petunjuk sebelumnya,
TLSRoute
mencocokkanexample.com
sebagai SNI danh2
sebagai ALPN. Jika kecocokan diubah sebagai berikut,TLSRoute
cocok dengan SNI atau ALPN:- matches: - sniHost: - example.com - alpn: - h2
Gunakan spesifikasi
tls_route.yaml
untuk membuat resourceTLSRoute
:gcloud network-services tls-routes import helloworld-tls-route \ --source=tls_route.yaml \ --location=global
Cloud Service Mesh dikonfigurasi guna melakukan load balancing terhadap traffic untuk layanan
ditentukan dalam resource TLSRoute
di seluruh backend dalam instance terkelola
ras.
Memvalidasi deployment
Di bagian ini, Anda akan memverifikasi bahwa Anda dapat mengakses layanan dari
klien melalui Load Balancer Jaringan passthrough eksternal dan Cloud Service Mesh Gateway
resource Anda
Jalankan perintah
curl
berikut untuk memverifikasi konektivitas HTTP ke pengujian layanan yang Anda buat:curl https://example.com --resolve example.com:443:IP_ADDRESS -k
Perintah tersebut menampilkan respons dari salah satu VM dalam grup instance terkelola. Outputnya adalah sebagai berikut:
"path": "/", "headers": { "host": "example.com", "user-agent": "curl/7.81.0", "accept": "*/*" }, "method": "GET", "body": "", "fresh": false, "hostname": "example.com", "ip": "::ffff:10.142.0.2", "ips": [], "protocol": "https", "query": {}, "subdomains": [], "xhr": false, "os": { "hostname": "0cd3aec9b351" }, "connection": { "servername": "example.com" } }
Verifikasi dengan verifikasi negatif
Anda juga dapat menjalankan verifikasi negatif. Jika Anda menjalankan perintah di
permintaan akan dihapus karena tidak cocok dengan kecocokan TLSRoute
kriteria.
Dalam perintah berikut, SNI tidak cocok dengan example.com, sehingga Gateway
menolak koneksi:
curl https://invalid-server.com --resolve invalid-server.com:443:IP_ADDRESS -k
Dalam perintah berikut, ALPN tidak sesuai dengan h2 (protokol HTTP2), jadi
Gateway
menolak koneksi:
curl https://example.com --resolve example.com:443:IP_ADDRESS -k --http1.1
Dalam perintah berikut, klien membuat teks biasa (tidak dienkripsi)
koneksi, sehingga Gateway
menolak koneksi:
curl example.com:443 --resolve example.com:443:IP_ADDRESS -k
Semua perintah sebelumnya mengembalikan error berikut:
curl: (35) OpenSSL SSL_connect: Connection reset by peer in connection.
Langkah selanjutnya
- Untuk informasi tentang cara mencantumkan resource rute yang terkait dengan
Mesh
atauGateway
, lihat Mencantumkan resourceRoute
. Fitur ini sedang dalam Pratinjau.