Dokumen ini menunjukkan contoh penggunaan pengelolaan traffic untuk beberapa kasus penggunaan tertentu. Banyak kasus penggunaan lainnya yang dapat terjadi.
Dokumen ini berisi contoh untuk load balancer berikut:
- Load Balancer Aplikasi eksternal regional
- Load Balancer Aplikasi internal regional
- Load Balancer Aplikasi internal lintas region
Load Balancer Aplikasi eksternal regional versus Load Balancer Aplikasi internal regional. Untuk konfigurasi pengelolaan traffic load balancer regional, dokumentasi API peta URL regional dan API layanan backend regional menyediakan daftar lengkap kolom, termasuk semantik terkait hubungan, pembatasan, dan kardinalitas.
Satu-satunya perbedaan antara kedua load balancer ini adalah skema load balancing, sebagai berikut:
- Load Balancer Aplikasi eksternal regional menggunakan
EXTERNAL_MANAGED
. - Load Balancer Aplikasi internal regional menggunakan
INTERNAL_MANAGED
.
Load Balancer Aplikasi internal regional versus Load Balancer Aplikasi internal lintas region. Untuk konfigurasi pengelolaan traffic:
Load Balancer Aplikasi internal regional menggunakan API peta URL regional , dan dokumentasi API layanan backend regional menyediakan daftar lengkap kolom, termasuk semantik terkait hubungan, pembatasan, dan kardinalitas.
Load Balancer Aplikasi internal lintas region menggunakan API peta URL global , dan dokumentasi API layanan backend global menyediakan daftar lengkap kolom, termasuk semantik terkait hubungan, pembatasan, dan kardinalitas.
Selain fitur pemilihan rute lanjutan yang dijelaskan di halaman ini, Load Balancer Aplikasi tertentu terintegrasi dengan Ekstensi Layanan agar Anda dapat memasukkan logika kustom ke jalur data load balancing dengan mengonfigurasi pemanggilan Ekstensi Layanan.
Mengonfigurasi pengelolaan traffic
Dalam lingkungan konfigurasi pilihan Anda, Anda menyiapkan pengelolaan traffic menggunakan konfigurasi YAML. Peta URL dan layanan backend masing-masing memiliki file YAML sendiri. Bergantung pada fungsi yang diinginkan, Anda harus menulis file YAML peta URL, file YAML layanan backend, atau keduanya.
Untuk membantu menulis file YAML, Anda dapat menggunakan contoh di halaman ini dan dokumentasi Cloud Load Balancing API.
Untuk Load Balancer Aplikasi internal regional dan Load Balancer Aplikasi eksternal regional, API peta URL regional dan dokumentasi API layanan backend regional menyediakan daftar lengkap kolom, termasuk semantik terkait hubungan, batasan, dan kardinalitas.
Memetakan traffic ke satu layanan
Mengirim semua traffic ke satu layanan. Pastikan untuk mengganti placeholder.
defaultService: regions/REGION/backendServices/BACKEND_SERVICE_1
hostRules:
- hosts:
- '*'
pathMatcher: matcher1
name: URL_MAP_NAME
pathMatchers:
- defaultService: regions/REGION/backendServices/BACKEND_SERVICE_1
name: matcher1
routeRules:
- matchRules:
- prefixMatch: /PREFIX
priority: 1
routeAction:
weightedBackendServices:
- backendService: regions/REGION/backendServices/BACKEND_SERVICE_1
weight: 100
Memisahkan traffic antara dua layanan
Memisahkan traffic antara dua atau di antara beberapa layanan. Pastikan untuk mengganti placeholder.
defaultService: regions/REGION/backendServices/BACKEND_SERVICE_1
hostRules:
- hosts:
- '*'
pathMatcher: matcher1
name: URL_MAP_NAME
pathMatchers:
- defaultService: regions/REGION/backendServices/BACKEND_SERVICE_1
name: matcher1
routeRules:
- matchRules:
- prefixMatch: /PREFIX
priority: 2
routeAction:
weightedBackendServices:
- backendService: regions/REGION/backendServices/BACKEND_SERVICE_1
weight: 95
- backendService: regions/REGION/backendServices/BACKEND_SERVICE_2
weight: 5
Mengonfigurasi pengalihan URL
Contoh berikut menampilkan kode respons 3xx yang dapat dikonfigurasi. Contoh ini juga
menetapkan header respons Location
dengan URI yang sesuai, yang menggantikan host
dan jalur seperti yang ditentukan dalam tindakan pengalihan.
defaultService: regions/REGION/backendServices/BACKEND_SERVICE_1
name: regional-lb-map
region: region/REGION
hostRules:
- hosts:
- '*'
pathMatcher: matcher1
pathMatchers:
- defaultService: regions/REGION/backendServices/BACKEND_SERVICE_1
name: matcher1
routeRules:
- matchRules:
- prefixMatch: /PREFIX
priority: PRIORITY # 0 is highest
urlRedirect:
hostRedirect: "new-host-name.com" # Omit to keep the requested host
pathRedirect: "/new-path" # Omit to keep the requested path; mutually exclusive to prefixRedirect
prefixRedirect: "/newPrefix" # Omit to keep the requested path; mutually exclusive to pathRedirect
redirectResponseCode: FOUND
stripQuery: True
Duplikasi traffic
Selain meneruskan permintaan ke layanan backend yang dipilih, Anda dapat mengirim permintaan identik ke layanan backend mirror yang dikonfigurasi secara aktif dan dilupakan. Load balancer tidak menunggu respons dari backend tempat ia mengirimkan permintaan yang dicerminkan. Pencerminan berguna untuk menguji layanan backend versi baru. Anda juga dapat menggunakannya untuk men-debug error produksi pada versi debug layanan backend, bukan pada versi produksi.
defaultService: regions/REGION/backendServices/BACKEND_SERVICE_1
name: regional-lb-map
region: region/REGION
hostRules:
- hosts:
- '*'
pathMatcher: matcher1
pathMatchers:
- defaultService: regions/REGION/backendServices/BACKEND_SERVICE_1
name: matcher1
routeRules:
- matchRules:
- prefixMatch: /PREFIX
priority: 1
routeAction:
weightedBackendServices:
- backendService: regions/REGION/backendServices/BACKEND_SERVICE_1
weight: 100
requestMirrorPolicy:
backendService: regions/REGION/backendServices/BACKEND_SERVICE_2
Tulis ulang URL yang diminta
Tulis ulang bagian nama host dari URL, bagian jalur URL, atau keduanya, sebelum mengirim permintaan ke layanan backend yang dipilih. Pastikan untuk mengganti placeholder.
defaultService: regions/REGION/backendServices/BACKEND_SERVICE_1
name: regional-lb-map
region: region/REGION
hostRules:
- hosts:
- '*'
pathMatcher: matcher1
pathMatchers:
- defaultService: regions/REGION/backendServices/BACKEND_SERVICE_1
name: matcher1
routeRules:
- matchRules:
- prefixMatch: /PREFIX
priority: PRIORITY # 0 is highest
routeAction:
weightedBackendServices:
- backendService: regions/REGION/backendServices/BACKEND_SERVICE_1
weight: 100
urlRewrite:
hostRewrite: "new-host-name.com" # Omit to keep the requested host
pathPrefixRewrite: "/new-path/" # Omit to keep the requested path
Mencoba ulang permintaan
Konfigurasikan kondisi saat load balancer mencoba ulang permintaan yang gagal, lamanya load balancer menunggu sebelum mencoba ulang, dan jumlah maksimum percobaan ulang yang diizinkan.
defaultService: regions/REGION/backendServices/BACKEND_SERVICE_1
name: regional-lb-map
region: region/REGION
hostRules:
- hosts:
- '*'
pathMatcher: matcher1
pathMatchers:
- defaultService: regions/REGION/backendServices/BACKEND_SERVICE_1
name: matcher1
routeRules:
- matchRules:
- prefixMatch: /PREFIX
priority: PRIORITY # 0 is highest
routeAction:
weightedBackendServices:
- backendService: regions/REGION/backendServices/BACKEND_SERVICE_1
weight: 100
retryPolicy:
retryConditions: 502, 504
numRetries: 3
perTryTimeout:
seconds: 1
nanos: 500000000
Menentukan waktu tunggu rute
Tentukan waktu tunggu untuk rute yang dipilih. Waktu tunggu dihitung sejak permintaan diproses sepenuhnya hingga respons diproses sepenuhnya. Waktu tunggu mencakup semua percobaan ulang. Pastikan untuk mengganti placeholder.
defaultService: regions/REGION/backendServices/BACKEND_SERVICE_1
name: regional-lb-map
region: region/REGION
hostRules:
- hosts:
- '*'
pathMatcher: matcher1
pathMatchers:
- defaultService: regions/REGION/backendServices/BACKEND_SERVICE_1
name: matcher1
routeRules:
- matchRules:
- prefixMatch: /PREFIX
priority: PRIORITY # 0 is highest
routeAction:
weightedBackendServices:
- backendService: regions/REGION/backendServices/BACKEND_SERVICE_1
weight: 100
timeout:
seconds: 30
nanos: 500000000
Mengonfigurasi injeksi kesalahan
Membuat error saat melayani permintaan untuk menyimulasikan kegagalan, termasuk latensi tinggi, overload layanan, kegagalan layanan, dan partisi jaringan. Fitur ini berguna untuk menguji ketahanan layanan terhadap simulasi kesalahan.
defaultService: regions/REGION/backendServices/BACKEND_SERVICE_1
name: regional-lb-map
region: region/REGION
hostRules:
- hosts:
- '*'
pathMatcher: matcher1
pathMatchers:
- defaultService: regions/REGION/backendServices/BACKEND_SERVICE_1
name: matcher1
routeRules:
- matchRules:
- prefixMatch: /PREFIX
priority: PRIORITY # 0 is highest
routeAction:
weightedBackendServices:
- backendService: regions/REGION/backendServices/BACKEND_SERVICE_1
weight: 100
faultInjectionPolicy:
delay:
fixedDelay:
seconds: 10
nanos: 500000000
percentage: 25
abort:
httpStatus: 503
percentage: 50
Konfigurasi CORS
Konfigurasi kebijakan berbagi resource lintas origin (CORS) untuk menangani setelan guna menerapkan permintaan CORS.
defaultService: regions/REGION/backendServices/BACKEND_SERVICE_1
name: regional-lb-map
region: region/REGION
hostRules:
- hosts:
- '*'
pathMatcher: matcher1
pathMatchers:
- defaultService: regions/REGION/backendServices/BACKEND_SERVICE_1
name: matcher1
routeRules:
- matchRules:
- prefixMatch: /PREFIX
priority: PRIORITY # 0 is highest
routeAction:
weightedBackendServices:
- backendService: regions/REGION/backendServices/BACKEND_SERVICE_1
weight: 100
corsPolicy:
allowOrigins: my-domain.com
allowMethods: GET, POST
allowHeaders: Authorization, Content-Type
maxAge: 1200
allowCredentials: True
Menambahkan dan menghapus header permintaan dan respons
Tambahkan dan hapus header permintaan sebelum mengirim permintaan ke layanan backend. Selain itu, tambahkan dan hapus header respons setelah menerima respons dari layanan backend.
Load Balancer Aplikasi eksternal regional dan Load Balancer Aplikasi internal juga mendukung penggunaan variabel dalam header kustom. Anda dapat menentukan satu atau beberapa variabel di kolom nilai header kustom (headerValue
) yang kemudian diterjemahkan ke nilai per permintaan yang sesuai. Untuk mengetahui daftar nilai header yang didukung, lihat
Membuat header kustom di peta
URL.
defaultService: regions/REGION/backendServices/BACKEND_SERVICE_1
name: regional-lb-map
region: region/REGION
hostRules:
- hosts:
- '*'
pathMatcher: matcher1
pathMatchers:
- defaultService: regions/REGION/backendServices/BACKEND_SERVICE_1
name: matcher1
routeRules:
- matchRules:
- prefixMatch: /PREFIX
priority: PRIORITY # 0 is highest
routeAction:
weightedBackendServices:
- backendService: regions/REGION/backendServices/BACKEND_SERVICE_1
weight: 100
headerAction:
requestHeadersToAdd:
- headerName: header-1-name
headerValue: header-1-value
replace: True
requestHeadersToRemove:
- header-2-name
- header-3-name
responseHeadersToAdd:
- headerName: header-4-name
headerValue: header-4-value
replace: True
responseHeadersToRemove:
- header-5-name
- header-6-name
Mengonfigurasi deteksi pencilan
Tentukan kriteria untuk mengeluarkan VM backend atau endpoint yang tidak responsif di NEG, beserta kriteria yang menentukan kapan backend atau endpoint dianggap cukup sehat untuk menerima traffic lagi. Pastikan untuk mengganti {i>placeholder<i}.
loadBalancingScheme: LOAD_BALANCING_SCHEME
localityLbPolicy: RANDOM
name: regions/REGION/backendServices/BACKEND_SERVICE_1
outlierDetection:
baseEjectionTime:
nanos: 0
seconds: '30'
consecutiveErrors: 5
consecutiveGatewayFailure: 3
enforcingConsecutiveErrors: 2
enforcingConsecutiveGatewayFailure: 100
enforcingSuccessRate: 100
interval:
nanos: 0
seconds: '1'
maxEjectionPercent: 50
successRateMinimumHosts: 5
successRateRequestVolume: 100
successRateStdevFactor: 1900
region: region/REGION
Mengonfigurasi pemutusan sirkuit
Pemutusan sirkuit memungkinkan Anda menetapkan batas kegagalan agar permintaan klien tidak membebani backend Anda. Setelah permintaan mencapai batas yang telah Anda tetapkan, load balancer akan berhenti mengizinkan koneksi baru atau mengirim permintaan tambahan, sehingga backend Anda memiliki waktu untuk pulih. Dengan demikian, pemecahan sirkuit mencegah kegagalan beruntun dengan menampilkan error ke klien, bukan melebihi beban backend. Hal ini memungkinkan beberapa traffic untuk ditayangkan sekaligus memberikan waktu untuk mengelola situasi kelebihan beban, seperti menangani lonjakan traffic dengan meningkatkan kapasitas melalui penskalaan otomatis.
Menetapkan batas atas permintaan per koneksi, serta volume koneksi ke layanan backend. Selain itu, batasi jumlah permintaan yang tertunda dan percobaan ulang.
loadBalancingScheme: LOAD_BALANCING_SCHEME # EXTERNAL_MANAGED or INTERNAL_MANAGED
localityLbPolicy: RANDOM
affinityCookieTtlSec: 0
backends:
- balancingMode: UTILIZATION
capacityScaler: 1.0
group: region/REGION/instanceGroups/INSTANCE_GROUP
maxUtilization: 0.8
circuitBreakers:
maxConnections: 1000
maxPendingRequests: 200
maxRequests: 1000
maxRequestsPerConnection: 100
maxRetries: 3
connectionDraining:
drainingTimeoutSec: 0
healthChecks:
- region/REGION/healthChecks/HEALTH_CHECK
Menyiapkan pemisahan traffic: langkah-langkah mendetail
Contoh ini menunjukkan langkah-langkah berikut:
Buat template yang berbeda untuk layanan yang berbeda.
Buat grup instance untuk template tersebut.
Buat aturan pemilihan rute yang menyiapkan pemisahan traffic sebesar 95% / 5%.
Kirim perintah curl yang menunjukkan bahwa persentase pemisahan traffic kurang lebih cocok dengan konfigurasi.
Petunjuk ini mengasumsikan hal berikut:
- Wilayahnya adalah
us-west1
. Proxy target dan aturan penerusan telah dibuat, beserta peta URL bernama
regional-lb-map
.Peta URL mengirimkan semua traffic ke satu layanan backend, yang disebut
red-service
, yang merupakan layanan backend default.Anda menyiapkan jalur alternatif yang mengirimkan 5% traffic ke
blue-service
dan 95% traffic kegreen-service
.Pencocok jalur digunakan.
Anda menggunakan Cloud Shell atau lingkungan lain yang telah menginstal bash.
Menentukan layanan
Fungsi bash berikut membuat layanan backend, termasuk template instance dan grup instance terkelola.
function make_service() { local name="$1" local region="$2" local zone="$3" local network="$4" local subnet="$5" local subdir="$6" www_dir="/var/www/html/$subdir" (set -x; \ gcloud compute instance-templates create "${name}-template" \ --region="$region" \ --network="$network" \ --subnet="$subnet" \ --tags=allow-ssh,load-balanced-backend \ --image-family=debian-10 \ --image-project=debian-cloud \ --metadata=startup-script="#! /bin/bash apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl sudo mkdir -p $www_dir /bin/hostname | sudo tee ${www_dir}index.html systemctl restart apache2"; \ gcloud compute instance-groups managed create \ "${name}-instance-group" \ --zone="$zone" \ --size=2 \ --template="${name}-template"; \ gcloud compute backend-services create "${name}-service" \ --load-balancing-scheme=LOAD_BALANCING_SCHEME\ --protocol=HTTP \ --health-checks=regional-lb-basic-check \ --health-checks-region="$region" \ --region="$region"; \ gcloud compute backend-services add-backend "${name}-service" \ --balancing-mode='UTILIZATION' \ --instance-group="${name}-instance-group" \ --instance-group-zone="$zone" \ --region="$region") }
Membuat layanan
Panggil fungsi untuk membuat tiga layanan, red
, green
, dan blue
. Layanan
red
bertindak sebagai layanan default untuk permintaan ke /
. Layanan green
dan
blue
disiapkan di /PREFIX
masing-masing untuk menangani 95% dan 5% traffic.
make_service red us-west1 us-west1-a lb-network backend-subnet "" make_service green us-west1 us-west1-a lb-network backend-subnet /PREFIX make_service blue us-west1 us-west1-a lb-network backend-subnet /PREFIX
Membuat peta URL
gcloud
Ekspor peta URL yang sudah ada menggunakan perintah
gcloud compute url-maps export
:gcloud compute url-maps export regional-lb-map \ --destination=regional-lb-map-config.yaml \ --region=us-west1
Update file peta URL
regional-lb-map-config.yaml
dengan menambahkan berikut ini ke akhir file:hostRules: - hosts: - '*' pathMatcher: matcher1 pathMatchers: - defaultService: regions/us-west1/backendServices/red-service name: matcher1 routeRules: - priority: 2 matchRules: - prefixMatch: /PREFIX routeAction: weightedBackendServices: - backendService: regions/us-west1/backendServices/green-service weight: 95 - backendService: regions/us-west1/backendServices/blue-service weight: 5
Perbarui peta URL menggunakan perintah
gcloud compute url-maps import
:gcloud compute url-maps import regional-lb-map \ --region=us-west1 \ --source=regional-lb-map-config.yaml
Menguji konfigurasi
Untuk menguji konfigurasi, pastikan terlebih dahulu bahwa permintaan ke alamat IP load balancer yang disiapkan sebelumnya ditangani oleh konfigurasi red
default.
Kemudian, periksa untuk memastikan permintaan yang dikirim ke
FORWARDING_RULE_IP_ADDRESS/PREFIX
telah dibagi seperti yang diharapkan.
Siapkan afinitas sesi berdasarkan HTTP_COOKIE
Kontrol traffic memungkinkan Anda mengonfigurasi afinitas sesi berdasarkan cookie yang disediakan. Untuk mengonfigurasi afinitas sesi berbasis HTTP_COOKIE bagi layanan backend
bernama red-service
, ikuti petunjuk berikut.
Gunakan perintah
gcloud compute backend-services export
untuk mendapatkan konfigurasi layanan backend.gcloud compute backend-services export red-service \ --destination=red-service-config.yaml \ --region=us-west1
Perbarui file
red-service-config.yaml
sebagai berikut:sessionAffinity: 'HTTP_COOKIE' localityLbPolicy: 'RING_HASH' consistentHash: httpCookie: name: 'http_cookie' path: '/cookie_path' ttl: seconds: 100 nanos: 500000000 minimumRingSize: 10000
Di file
red-service-config.yaml
, hapus baris berikut:sessionAffinity: NONE
Perbarui file konfigurasi layanan backend:
gcloud compute backend-services import red-service \ --source=red-service-config.yaml \ --region=us-west1
Pemecahan masalah
Gunakan informasi ini untuk memecahkan masalah saat lalu lintas tidak dirutekan sesuai dengan aturan rute dan kebijakan lalu lintas yang telah dikonfigurasi.
Gejala:
- Peningkatan traffic ke layanan pada aturan di atas aturan yang dimaksud.
- Peningkatan tak terduga pada respons HTTP 4xx dan 5xx untuk aturan rute tertentu.
Solusi: Periksa urutan aturan rute Anda. Aturan rute ditafsirkan dalam urutan yang ditentukan.
Aturan rute dalam peta URL ditafsirkan sesuai urutan yang ditentukan. Hal ini berbeda dengan cara penafsiran aturan jalur oleh pencocokan awalan terpanjang. Untuk aturan jalur, Load Balancer Aplikasi internal hanya akan memilih satu aturan jalur; tetapi, jika Anda menggunakan aturan rute, lebih dari satu aturan mungkin berlaku.
Saat Anda menentukan aturan rute, pastikan bahwa aturan di bagian atas daftar tidak secara tidak sengaja mengarahkan traffic yang seharusnya dirutekan oleh aturan rute berikutnya. Layanan yang menerima lalu lintas yang salah arah kemungkinan akan menolak permintaan, dan layanan di aturan rute Anda akan menerima pengurangan lalu lintas atau tidak ada lalu lintas sama sekali.