Mengonfigurasi pengelolaan traffic lanjutan dengan Envoy
Konfigurasi ini didukung untuk pelanggan Pratinjau, tetapi kami tidak merekomendasikannya untuk pengguna Cloud Service Mesh baru. Untuk mengetahui informasi selengkapnya, lihat ringkasan perutean layanan Cloud Service Mesh.
Dokumen ini memberikan informasi tentang cara mengonfigurasi pengelolaan traffic lanjutan untuk deployment Cloud Service Mesh yang menggunakan Envoy.
Sebelum memulai
Sebelum mengonfigurasi pengelolaan traffic lanjutan, ikuti petunjuk di Bersiap untuk menyiapkan Cloud Service Mesh dengan Envoy, termasuk mengonfigurasi Cloud Service Mesh dan host virtual machine (VM) atau cluster Google Kubernetes Engine (GKE) yang Anda butuhkan. Buat resource Google Cloud yang diperlukan.
Ketersediaan fitur pengelolaan traffic lanjutan berbeda-beda sesuai dengan protokol permintaan yang Anda pilih. Protokol ini dikonfigurasi saat Anda mengonfigurasi perutean menggunakan proxy HTTP atau HTTPS target, proxy gRPC target, atau resource proxy TCP target:
- Dengan proxy HTTP target dan proxy HTTPS target, semua fitur yang dijelaskan dalam dokumen ini akan tersedia.
- Dengan proxy gRPC target, beberapa fitur tersedia.
- Dengan proxy TCP target, tidak ada fitur pengelolaan traffic lanjutan yang tersedia.
Untuk mengetahui informasi selengkapnya, lihat Fitur Cloud Service Mesh dan Pengelolaan traffic lanjutan. Untuk panduan penyiapan end-to-end, lihat Mengonfigurasi pengelolaan traffic lanjutan dengan layanan gRPC tanpa proxy.
Menyiapkan pemisahan traffic
Petunjuk ini mengasumsikan hal berikut:
- Deployment Cloud Service Mesh Anda memiliki peta URL bernama
review-url-map. - Peta URL mengirimkan semua traffic ke satu layanan backend bernama
review1, yang berfungsi sebagai layanan backend default. - Anda berencana merutekan 5% traffic ke versi baru layanan. Layanan tersebut berjalan di VM atau endpoint backend dalam grup endpoint jaringan (NEG) yang terkait dengan layanan backend
review2. - Tidak ada aturan host atau pencocok jalur yang digunakan.
Jika Anda membagi traffic ke layanan baru yang belum dirujuk oleh
peta URL sebelumnya, tambahkan layanan baru ke weightedBackendServices terlebih dahulu dan
beri bobot 0. Kemudian, tingkatkan bobot yang ditetapkan ke layanan tersebut secara bertahap.
Untuk menyiapkan pembagian traffic, ikuti langkah-langkah berikut:
Konsol
Di konsol Google Cloud , buka halaman Cloud Service Mesh.
Klik Routing rule maps.
Klik Buat peta aturan perutean.
Di halaman Buat peta aturan perutean, masukkan Nama.
Di menu Protocol, pilih HTTP.
Pilih aturan penerusan yang ada.
Di bagian Routing rules, pilih Advanced host, path and route rule.
Di bagian Pencocok host dan jalur, klik Tambahkan pencocok host dan jalur. Tindakan ini akan menambahkan pencocok jalur baru yang dapat Anda konfigurasi untuk memisahkan traffic.
Tambahkan setelan berikut ke kolom Path matcher:
- defaultService: global/backendServices/review1 name: matcher1 routeRules: - priority: 2 matchRules: - prefixMatch: '' routeAction: weightedBackendServices: - backendService: global/backendServices/review1 weight: 95 - backendService: global/backendServices/review2 weight: 5Klik Done.
Klik Simpan.
Setelah puas dengan versi baru, Anda dapat menyesuaikan bobot kedua layanan secara bertahap dan akhirnya mengirim semua traffic ke review2.
gcloud
Jalankan perintah
gcloud exportuntuk mendapatkan konfigurasi peta URL:gcloud compute url-maps export review-url-map \ --destination=review-url-map-config.yamlTambahkan bagian berikut ke file
review-url-map-config.yaml:hostRules: - description: '' hosts: - '*' pathMatcher: matcher1 pathMatchers: - defaultService: global/backendServices/review1 name: matcher1 routeRules: - priority: 2 matchRules: - prefixMatch: '' routeAction: weightedBackendServices: - backendService: global/backendServices/review1 weight: 95 - backendService: global/backendServices/review2 weight: 5Perbarui peta URL:
gcloud compute url-maps import review-url-map \ --source=review-url-map-config.yaml
Setelah puas dengan versi baru, Anda dapat menyesuaikan bobot kedua layanan secara bertahap dan akhirnya mengirim semua traffic ke review2.
Menyiapkan rilis parsial
Gunakan proses deployment parsial, yang terkadang disebut canarying, untuk merilis versi software baru ke sebagian kecil server sebelum Anda merilis versi baru ke server produksi lainnya.
Rilis parsial menggunakan weightedBackendServices. Untuk mengaktifkan rilis parsial, tetapkan layanan backend sebagai layanan pengujian atau canary, dan berikan bobot rendah, misalnya, 2 atau 5. Deploy versi software baru Anda hanya ke server tersebut. Jika Anda yakin bahwa versi baru tidak memiliki masalah, deploy versi tersebut ke layanan lainnya.
- Untuk mengaktifkan rilis sebagian, gunakan contoh kode YAML berikut:
pathMatchers:
- defaultService: DEFAULT_SERVICE_URL
name: matcher1
routeRules:
- matchRules:
- prefixMatch: '/'
routeAction:
weightedBackendServices:
- backendService: BACKEND_SERVICE_PARTIAL_URL
weight: 2
- backendService: BACKEND_SERVICE_URL
weight: 98
DEFAULT_SERVICE_URLadalah URL default untuk layanan Anda.BACKEND_SERVICE_PARTIAL_URLadalah URL untuk layanan backend yang menerima 2% traffic.BACKEND_SERVICE_URLadalah URL untuk layanan backend yang menerima 98% traffic.
Menyiapkan blue-green deployment
Deployment biru-hijau adalah model rilis yang mengurangi waktu yang diperlukan untuk mengalihkan traffic produksi ke rilis layanan baru, atau ke rollback rilis layanan sebelumnya. Deployment ini membuat kedua versi layanan tersedia dalam produksi dan mengalihkan traffic dari satu versi ke versi lainnya.
Blue-green deployment menggunakan weightedBackendServices. Dalam contoh YAML
berikutnya, backend ke SERVICE_BLUE_URL sepenuhnya di-deploy dengan rilis
produksi saat ini dan backend ke SERVICE_GREEN_URL sepenuhnya di-deploy
dengan rilis baru. Dalam konfigurasi contoh, deployment GREEN menerima 100% traffic produksi. Jika menemukan masalah, Anda dapat membalikkan
bobot untuk dua deployment, yang secara efektif mengembalikan rilis GREEN yang rusak
dan mengembalikan rilis BLUE yang diketahui berfungsi dengan baik. Dalam kedua kasus tersebut, traffic dapat digeser dengan cepat karena kedua versi tersedia untuk menerima traffic.
- Untuk mengaktifkan deployment biru-hijau, gunakan contoh kode YAML berikut:
pathMatchers:
- defaultService: DEFAULT_SERVICE_URL
name: matcher1
routeRules:
- matchRules:
- prefixMatch: '/'
routeAction:
weightedBackendServices:
- backendService: BACKEND_SERVICE_BLUE_URL
weight: 0
- backendService: BACKEND_SERVICE_GREEN_URL
weight: 100
DEFAULT_SERVICE_URLadalah URL default untuk layanan Anda.BACKEND_SERVICE_BLUE_URLadalah URL untuk layanan backend yang tidak menerima traffic Anda.BACKEND_SERVICE_GREEN_URLadalah URL untuk layanan backend yang menerima 100% traffic Anda.
Menyiapkan pencerminan traffic
Gunakan duplikasi traffic jika Anda ingin traffic diarahkan ke dua layanan backend yang berbeda untuk tujuan proses debug atau pengujian layanan baru.
Dalam contoh berikut, semua permintaan dikirim ke SERVICE_URL dan ke
MIRROR_SERVICE_URL. Hanya respons dari SERVICE_URL yang dikirim kembali ke
klien. MIRROR_SERVICE_URL tidak memiliki dampak klien.
Untuk menyiapkan pencerminan traffic, ikuti langkah-langkah berikut:
Konsol
Di konsol Google Cloud , buka halaman Cloud Service Mesh.
Klik Routing rule maps.
Klik Buat peta aturan perutean.
Di halaman Buat peta aturan perutean, masukkan Nama.
Di daftar Protocol, pilih HTTP.
Pilih aturan penerusan yang ada.
Di bagian Routing rules, pilih Advanced host, path and route rule.
Di bagian Pencocok host dan jalur, klik Tambahkan pencocok host dan jalur. Tindakan ini akan menambahkan pencocok jalur baru yang dapat Anda konfigurasi untuk mencerminkan traffic.
Tambahkan setelan berikut ke kolom Path matcher:
- defaultService: DEFAULT_SERVICE_URL name: matcher1 routeRules: - matchRules: - prefixMatch: '/' routeAction: weightedBackendServices: - backendService: BACKEND_SERVICE_URL weight: 100 requestMirrorPolicy: backendService: BACKEND_SERVICE_MIRROR_URLDEFAULT_SERVICE_URLadalah URL default untuk layanan Anda.BACKEND_SERVICE_URLadalah URL untuk backend yang di-mirror.BACKEND_SERVICE_MIRROR_URLadalah URL untuk layanan backend yang Anda cerminkan.
Klik Done.
Klik Save.
gcloud
Jalankan perintah
gcloud exportuntuk mendapatkan konfigurasi peta URL:gcloud compute url-maps export review-url-map \ --destination=review-url-map-config.yamlTambahkan bagian berikut ke file
review-url-map-config.yaml:hostRules: - description: '' hosts: - '*' pathMatcher: matcher1 pathMatchers: - defaultService: DEFAULT_SERVICE_URL name: matcher1 routeRules: - matchRules: - prefixMatch: '/' routeAction: weightedBackendServices: - backendService: BACKEND_SERVICE_URL weight: 100 requestMirrorPolicy: backendService: BACKEND_SERVICE_MIRROR_URLDEFAULT_SERVICE_URLadalah URL default untuk layanan Anda.BACKEND_SERVICE_URLadalah URL untuk backend yang di-mirror.BACKEND_SERVICE_MIRROR_URLadalah URL untuk layanan backend yang Anda cerminkan.
Perbarui peta URL:
gcloud compute url-maps import review-url-map \ --source=review-url-map-config.yaml
Menyiapkan pemutusan sirkuit
Pemutusan sirkuit memungkinkan Anda menetapkan batas kegagalan untuk mencegah permintaan klien membebani backend Anda secara berlebihan. Setelah permintaan mencapai batas yang Anda tetapkan, klien berhenti mengizinkan koneksi baru atau mengirim permintaan tambahan, sehingga memberikan waktu bagi backend Anda untuk pulih.
Akibatnya, pemutusan sirkuit mencegah kegagalan beruntun dengan menampilkan error kepada klien, bukan membebani backend secara berlebihan. Hal ini memungkinkan beberapa traffic ditayangkan sekaligus memberikan waktu untuk mengelola situasi kelebihan beban, seperti menangani lonjakan traffic dengan meningkatkan kapasitas melalui penskalaan otomatis.
Dalam contoh berikut, Anda menetapkan pemutus sirkuit sebagai berikut:
- Permintaan maksimum per koneksi: 100
- Jumlah koneksi maksimum: 1000
- Permintaan tertunda maksimum: 200
- Permintaan maksimum: 1.000
- Jumlah maksimum percobaan ulang: 3
Untuk menyiapkan pemutus sirkuit, ikuti langkah-langkah berikut:
Konsol
Di konsol Google Cloud , buka halaman Cloud Service Mesh.
Klik nama layanan backend yang ingin Anda perbarui.
Klik Edit.
Klik Konfigurasi lanjutan.
Di bagian Circuit breakers, centang kotak Enable.
Klik Edit.
- Di Permintaan maks per koneksi, masukkan
100. - Di Max connections, masukkan
1000. - Di Max pending requests, masukkan
200. - Di Max requests, masukkan
1000. - Di Jumlah maks percobaan ulang, masukkan
3.
- Di Permintaan maks per koneksi, masukkan
Klik Save, lalu klik Save lagi.
gcloud
Jalankan perintah
gcloud exportuntuk mengekspor konfigurasi layanan backend. GantiBACKEND_SERVICE_NAMEdengan nama layanan backend.gcloud compute backend-services export BACKEND_SERVICE_NAME \ --destination=BACKEND_SERVICE_NAME-config.yaml --globalPerbarui file
BACKEND_SERVICE_NAME.yaml sebagai berikut:affinityCookieTtlSec: 0 backends: - balancingMode: UTILIZATION capacityScaler: 1.0 group:https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroups/INSTANCE_GROUP_NAME maxUtilization: 0.8 circuitBreakers: maxConnections: 1000 maxPendingRequests: 200 maxRequests: 1000 maxRequestsPerConnection: 100 maxRetries: 3 connectionDraining: drainingTimeoutSec: 300 healthChecks: - https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/healthChecks/HEALTH_CHECK_NAME loadBalancingScheme: INTERNAL_SELF_MANAGED localityLbPolicy: ROUND_ROBIN name: BACKEND_SERVICE_NAME port: 80 portName: http protocol: HTTP sessionAffinity: NONE timeoutSec: 30Perbarui file konfigurasi layanan backend:
gcloud compute backend-services import BACKEND_SERVICE_NAME \ --source=BACKEND_SERVICE_NAME-config.yaml --global
Menyiapkan afinitas sesi berdasarkan HTTP_COOKIE
Pengelolaan traffic lanjutan memungkinkan Anda mengonfigurasi afinitas sesi berdasarkan cookie yang diberikan.
Untuk menyiapkan afinitas sesi menggunakan HTTP_COOKIE, ikuti langkah-langkah berikut:
Konsol
Di konsol Google Cloud , buka halaman Cloud Service Mesh.
Klik nama layanan backend yang ingin Anda perbarui.
Klik Edit.
Klik Konfigurasi lanjutan.
Di bagian Afinitas sesi, pilih Cookie HTTP.
Di bagian Locality Load balancing policy, pilih Ring hash.
- Di kolom Nama Cookie HTTP, masukkan
http_cookie. - Di kolom HTTP Cookie path, masukkan
/cookie_path. - Di kolom HTTP Cookie TTL, masukkan
100. - Di kolom Ukuran ring minimum, masukkan
10000.
- Di kolom Nama Cookie HTTP, masukkan
Klik Simpan.
gcloud
Jalankan perintah
gcloud exportuntuk mengekspor konfigurasi layanan backend. GantiBACKEND_SERVICE_NAMEdengan nama layanan backend.gcloud compute backend-services export BACKEND_SERVICE_NAME \ --destination=BACKEND_SERVICE_NAME-config.yaml --globalPerbarui file
YAMLsebagai berikut:sessionAffinity: 'HTTP_COOKIE' localityLbPolicy: 'RING_HASH' consistentHash: httpCookie: name: 'http_cookie' path: '/cookie_path' ttl: seconds: 100 nanos: 30 minimumRingSize: 10000Impor file konfigurasi layanan backend:
gcloud compute backend-services import BACKEND_SERVICE_NAME \ --source=BACKEND_SERVICE_NAME-config.yaml --global
Menyiapkan deteksi outlier
Deteksi pencilan mengontrol penghapusan host yang tidak responsif dari kumpulan load balancing. Cloud Service Mesh melakukannya dengan menggunakan serangkaian kebijakan yang menentukan kriteria untuk penghentian paksa VM atau endpoint backend yang tidak responsif di NEG, beserta kriteria yang menentukan kapan backend atau endpoint dianggap cukup responsif untuk menerima traffic lagi.
Dalam contoh berikut, layanan backend memiliki satu grup instance sebagai backend-nya. Setelan deteksi outlier menentukan bahwa analisis deteksi outlier dijalankan setiap detik. Jika endpoint menampilkan lima error 5xx
berturut-turut, endpoint tersebut akan dikeluarkan dari pertimbangan load balancing selama 30 detik untuk
pertama kalinya. Waktu penolakan sebenarnya untuk endpoint yang sama adalah 30 detik dikalikan dengan
jumlah penolakan yang terjadi.
Untuk menyiapkan deteksi anomali pada resource layanan backend, ikuti langkah-langkah berikut:
Konsol
Di konsol Google Cloud , buka halaman Cloud Service Mesh.
Klik nama layanan.
Klik Edit.
Klik Konfigurasi lanjutan.
Centang kotak Deteksi pencilan.
Klik Edit.
- Setel Consecutive errors ke
5. - Setel Interval ke
1000milidetik. - Setel Waktu pengecualian dasar ke
30000milidetik.
- Setel Consecutive errors ke
Klik Save, lalu klik Save lagi.
gcloud
Jalankan perintah
gcloud exportuntuk mengekspor konfigurasi layanan backend. GantiBACKEND_SERVICE_NAMEdengan nama layanan backend.gcloud compute backend-services export BACKEND_SERVICE_NAME \ --destination=BACKEND_SERVICE_NAME-config.yaml --globalPerbarui file
YAMLsebagai berikut, dengan mengganti nama layanan backend untukBACKEND_SERVICE_NAME:name: BACKEND_SERVICE_NAME loadBalancingScheme: INTERNAL_SELF_MANAGED backends: - balancingMode: UTILIZATION capacityScaler: 1.0 group: $INSTANCE_GROUP_URL healthChecks: - $HEALTH_CHECK_URL port: 80 portName: http protocol: HTTP outlierDetection: consecutiveErrors: 5, interval: seconds: 1, nanos: 0 baseEjectionTime: seconds: 30, nanos: 0Impor file konfigurasi layanan backend:
gcloud compute backend-services import BACKEND_SERVICE_NAME \ --source=BACKEND_SERVICE_NAME-config.yaml --global
Menetapkan kebijakan load balancing lokalitas
Gunakan kebijakan load balancing lokalitas untuk memilih algoritma load balancing berdasarkan bobot dan prioritas lokalitas yang disediakan oleh Cloud Service Mesh. Misalnya, Anda dapat melakukan round robin berbobot di antara endpoint yang sehat atau melakukan hashing yang konsisten.
Dalam contoh berikut, layanan backend memiliki satu grup instance sebagai backend-nya. Kebijakan load balancing lokalitas ditetapkan ke RING_HASH.
Untuk menetapkan kebijakan load balancing lokalitas, ikuti langkah-langkah berikut:
Konsol
Di konsol Google Cloud , buka halaman Cloud Service Mesh.
Klik nama layanan.
Klik Edit.
Klik Konfigurasi lanjutan.
Di bagian Traffic policy, pada menu Locality load balancing policy, pilih Ring hash.
Klik Simpan.
gcloud
Jalankan perintah
gcloud exportuntuk mengekspor konfigurasi layanan backend. GantiBACKEND_SERVICE_NAMEdengan nama layanan backend.gcloud compute backend-services export BACKEND_SERVICE_NAME \ --destination=BACKEND_SERVICE_NAME-config.yaml --globalPerbarui file
BACKEND_SERVICE_NAME.yaml sebagai berikut:name: shopping-cart-service loadBalancingScheme: INTERNAL_SELF_MANAGED backends: - balancingMode: UTILIZATION capacityScaler: 1.0 group: $INSTANCE_GROUP_URL healthChecks: - $HEALTH_CHECK_URL port: 80 portName: http protocol: HTTP localityLbPolicy: RING_HASH
Impor file konfigurasi layanan backend:
gcloud compute backend-services import BACKEND_SERVICE_NAME \ --source=BACKEND_SERVICE_NAME-config.yaml --global
Untuk mengetahui informasi selengkapnya tentang cara kerja kebijakan load balancing lokalitas, lihat dokumentasi untuk resource backendService.
Menyiapkan pengalihan URL
Petunjuk ini mengasumsikan hal berikut:
- Deployment Cloud Service Mesh Anda memiliki peta URL bernama
review-url-map. - Peta URL mengirimkan semua traffic ke satu layanan backend bernama
review1, yang berfungsi sebagai layanan backend default. - Anda ingin mengalihkan traffic dari satu host ke host lain.
Untuk menyiapkan pengalihan URL, ikuti langkah-langkah berikut:
Konsol
Di konsol Google Cloud , buka halaman Cloud Service Mesh.
Klik Routing rule maps.
Klik Buat peta aturan perutean.
Di halaman Buat peta aturan perutean, masukkan Nama.
Di menu Protocol, pilih HTTP.
Pilih aturan penerusan yang ada.
Di bagian Routing rules, pilih Advanced host, path and route rule.
Di bagian Pencocok host dan jalur, klik Tambahkan pencocok host dan jalur. Tindakan ini akan menambahkan pencocok jalur baru yang mengalihkan traffic.
Tambahkan setelan berikut ke kolom Path matcher:
- defaultService: global/backendServices/review1 name: matcher1 routeRules: - matchRules: - prefixMatch: '' urlRedirect: hostRedirect: '[REDIRECT_HOST]' pathRedirect: '[REDIRECT_URL]' redirectResponseCode: 'FOUND', stripQuery: TrueKlik Done.
Klik Save.
gcloud
Jalankan perintah
gcloud exportuntuk mendapatkan konfigurasi peta URL:gcloud compute url-maps export review-url-map \ --destination=review-url-map-config.yamlTambahkan bagian berikut ke file
review-url-map-config.yaml:hostRules: - description: '' hosts: - '*' pathMatcher: matcher1 pathMatchers: - defaultService: global/backendServices/review1 name: matcher1 routeRules: - matchRules: - prefixMatch: '' urlRedirect: hostRedirect: '[REDIRECT_HOST]' pathRedirect: '[REDIRECT_URL]' redirectResponseCode: 'FOUND', stripQuery: TruePerbarui peta URL:
gcloud compute url-maps import review-url-map \ --source=review-url-map-config.yaml
Menyiapkan pengarahan traffic dengan penulisan ulang URL
Pengarahan traffic memungkinkan Anda mengarahkan traffic ke berbagai layanan backend berdasarkan atribut permintaan seperti nilai header. Selain itu, Anda dapat mengonfigurasi tindakan seperti menulis ulang URL dalam permintaan sebelum permintaan diarahkan ke layanan backend.
Dalam contoh berikut, permintaan diarahkan ke SERVICE_ANDROID_URL jika
jalur permintaan diawali dengan /mobile/ dan User-Agent permintaan
berisi Android. Sebelum mengirim permintaan ke layanan backend, awalan URL
dapat diubah menjadi REWRITE_PATH_ANDROID, misalnya, /android/. Namun,
jika jalur diawali dengan /mobile/ dan memiliki User-Agent yang berisi
iPhone, traffic diarahkan ke SERVICE_IPHONE_URL dan awalan URL diubah
menjadi REWRITE_PATH_IPHONE. Semua permintaan lainnya yang diawali dengan
/mobile/ dan memiliki User-Agent dengan nilai selain Android atau iPhone akan
diarahkan ke SERVICE_GENERIC_DEVICE_URL.
pathMatchers:
- defaultService: [DEFAULT_SERVICE_URL]
name: matcher1
routeRules:
- matchRules:
- prefixMatch: /mobile/
headerMatches:
- headerName: User-Agent
regexMatch: .*Android.*
service: $[SERVICE_ANDROID_URL]
routeAction:
urlRewrite:
pathPrefixRewrite: [REWRITE_PATH_ANDROID]
- matchRules:
- prefixMatch: /mobile/
headerMatches:
- headerName: User-Agent
regexMatch: .*iPhone.*
service: [SERVICE_IPHONE_URL]
routeAction:
urlRewrite:
pathPrefixRewrite: [REWRITE_PATH_IPHONE]
- matchRules:
- prefixMatch: /mobile/
service: [SERVICE_GENERIC_DEVICE_URL]
Menyiapkan injeksi kesalahan
Injeksi kesalahan memungkinkan Anda menyuntikkan salah satu atau kedua penundaan tetap atau penghentian paksa, yang disebut pembatalan, ke rute tertentu untuk menguji ketahanan aplikasi.
Dalam contoh berikut, semua permintaan dikirim ke SERVICE_URL, dengan
penundaan tetap 10 detik ditambahkan ke 100% permintaan. Klien yang mengirimkan
permintaan melihat bahwa semua respons ditunda selama 10 detik. Selain itu, kesalahan
penghentian dengan respons 503 Service Unavailable diterapkan ke 50% permintaan. Klien melihat bahwa 50% permintaannya menerima respons 503.
Permintaan ini tidak mencapai layanan backend sama sekali.
pathMatchers:
- defaultService: [DEFAULT_SERVICE_URL]
name: matcher1
routeRules:
- matchRules:
- prefixMatch: '/'
routeAction:
weightedBackendServices:
- backendService: [SERVICE_URL]
weight: 100
faultInjectionPolicy:
delay:
fixedDelay:
seconds: 10
nanos: 0
percentage: 100
abort:
httpStatus: 503
percentage: 50
Menyiapkan pemfilteran konfigurasi berdasarkan kecocokan MetadataFilters
MetadataFilters diaktifkan dengan aturan penerusan dan HttpRouteRuleMatch.
Gunakan fitur ini untuk mengontrol aturan penerusan atau aturan rute tertentu sehingga
bidang kontrol mengirimkan aturan penerusan atau aturan rute hanya ke proxy yang
metadata nodenya cocok dengan setelan filter metadata. Jika Anda tidak menentukan
MetadataFilters, aturan akan dikirim ke semua proxy Envoy.
Fitur ini mempermudah pengoperasian deployment bertahap dari konfigurasi.
Misalnya, buat aturan penerusan bernama forwarding-rule1, yang ingin
Anda kirim hanya ke Envoy yang metadata nodenya berisi app: review dan
version: canary.
Untuk menambahkan MetadataFilters ke aturan penerusan, ikuti langkah-langkah berikut:
gcloud
Jalankan perintah
gcloud exportuntuk mendapatkan konfigurasi aturan penerusan:gcloud compute forwarding-rules export forwarding-rule1 \ --destination=forwarding-rule1-config.yaml \ --globalHapus aturan penerusan:
gcloud compute forwarding-rules delete forwarding-rule1 \ --globalPerbarui file
forwarding-rule1-config.yaml.Contoh berikut membuat filter metadata
MATCH_ALL:metadataFilters: - filterMatchCriteria: 'MATCH_ALL' filterLabels: - name: 'app' value: 'review' - name: 'version' value: 'canary'Contoh berikut membuat filter metadata
MATCH_ANY:metadataFilters: - filterMatchCriteria: 'MATCH_ANY' filterLabels: - name: 'app' value: 'review' - name: 'version' value: 'production'Hapus semua kolom hanya output dari file
forwarding-rule1-config.yaml. Untuk mengetahui informasi selengkapnya, lihat dokumentasi untukgcloud compute forwarding-rules import.Jalankan perintah
gcloud importuntuk memperbarui fileforwarding-rule1-config.yaml:gcloud compute forwarding-rules import forwarding-rule1 \ --source=forwarding-rule1-config.yaml \ --globalGunakan petunjuk ini untuk menambahkan metadata node ke Envoy sebelum memulai Envoy. Hanya nilai string yang didukung.
a. Untuk deployment berbasis VM, di
bootstrap_template.yaml, tambahkan berikut di bagianmetadata:app: 'review' version: 'canary'b. Untuk deployment berbasis Google Kubernetes Engine atau Kubernetes, di
trafficdirector_istio_sidecar.yaml, tambahkan kode berikut di bagianenv:- name: ISTIO_META_app value: 'review' - name: ISTIO_META_version value: 'canary'
Contoh pemfilteran metadata
Gunakan petunjuk berikut untuk skenario saat beberapa project berada dalam jaringan VPC Bersama yang sama dan Anda ingin resource Cloud Service Mesh setiap project layanan terlihat oleh proxy dalam project yang sama.
Penyiapan VPC Bersama adalah sebagai berikut:
- Nama project host:
vpc-host-project - Project layanan:
project1,project2 - Layanan backend dengan instance atau endpoint backend yang menjalankan proxy yang kompatibel dengan xDS di
project1danproject2
Untuk mengonfigurasi Cloud Service Mesh guna mengisolasi project1, ikuti langkah-langkah berikut:
gcloud
Buat semua aturan penerusan di
project1dengan filter metadata berikut:metadataFilters: - filterMatchCriteria: 'MATCH_ALL' filterLabels - name: 'project_name' value: 'project1' - name: 'version' value: 'production'Saat Anda mengonfigurasi proxy yang di-deploy ke instance atau endpoint di
project1, sertakan metadata berikut di bagian metadata node dari file bootstrap:project_name: 'project1' version: 'production'Pastikan bahwa proxy yang sudah di-deploy di
project2tidak menerima aturan penerusan yang dibuat pada langkah pertama. Untuk melakukannya, coba akses layanan diproject1dari sistem yang menjalankan proxy diproject2. Untuk informasi tentang cara memverifikasi bahwa konfigurasi Cloud Service Mesh berfungsi dengan benar, lihat Memverifikasi konfigurasi.
Untuk menguji konfigurasi baru pada subset proxy sebelum Anda menyediakannya untuk semua proxy, ikuti langkah-langkah berikut:
gcloud
Mulai proxy yang Anda gunakan untuk pengujian dengan metadata node berikut. Jangan sertakan metadata node ini untuk proxy yang tidak Anda gunakan untuk pengujian.
version: 'test'Untuk setiap aturan penerusan baru yang ingin Anda uji, sertakan filter metadata berikut:
metadataFilters: - filterMatchCriteria: 'MATCH_ALL' filterLabels: - name: 'version' value: 'test'Uji konfigurasi baru dengan mengirimkan traffic ke proxy pengujian, dan lakukan perubahan yang diperlukan. Jika konfigurasi baru berfungsi dengan benar, hanya proxy yang Anda uji yang menerima konfigurasi baru. Proxy yang tersisa tidak menerima konfigurasi baru dan tidak dapat menggunakannya.
Setelah Anda mengonfirmasi bahwa konfigurasi baru berfungsi dengan benar, hapus filter metadata yang terkait dengannya. Tindakan ini memungkinkan semua proxy menerima konfigurasi baru.
Pemecahan masalah
Gunakan informasi ini untuk memecahkan masalah saat traffic tidak dirutekan sesuai dengan aturan rute dan kebijakan traffic yang Anda konfigurasi.
Gejala:
- Peningkatan traffic ke layanan dalam aturan di atas aturan yang dimaksud.
- Peningkatan respons HTTP
4xxdan5xxyang tidak terduga untuk aturan rute tertentu.
Solusi: Karena aturan rute ditafsirkan dalam urutan prioritas, tinjau prioritas yang ditetapkan untuk setiap aturan.
Saat Anda menentukan aturan rute, pastikan aturan dengan prioritas yang lebih tinggi (yaitu, dengan nomor prioritas yang lebih rendah) tidak secara tidak sengaja merutekan traffic yang seharusnya dirutekan oleh aturan rute berikutnya. Perhatikan contoh berikut:
Aturan rute pertama
- Aturan rute cocok dengan pathPrefix =
/shopping/ - Tindakan pengalihan: mengirim traffic ke layanan backend
service-1 - Prioritas aturan:
4
- Aturan rute cocok dengan pathPrefix =
Aturan rute kedua
- Aturan rute cocok dengan regexMatch =
/shopping/cart/ordering/.* - Tindakan pengalihan: mengirim traffic ke layanan backend
service-2 - Prioritas aturan:
8
- Aturan rute cocok dengan regexMatch =
Dalam hal ini, permintaan dengan jalur /shopping/cart/ordering/cart.html
dirutekan ke service-1. Meskipun aturan kedua akan cocok, aturan tersebut diabaikan karena aturan pertama memiliki prioritas.
Memblokir traffic antar-layanan
Jika Anda ingin memblokir traffic antara Layanan A dan Layanan B, dan deployment Anda ada di GKE, siapkan keamanan layanan dan gunakan kebijakan otorisasi untuk memblokir traffic antar-layanan. Untuk mengetahui petunjuk lengkapnya, lihat Keamanan layanan Cloud Service Mesh dan petunjuk penyiapan dengan Envoy dan gRPC tanpa proxy.
Langkah berikutnya
- Untuk membantu Anda mengatasi masalah konfigurasi Cloud Service Mesh, lihat Memecahkan masalah deployment yang menggunakan Envoy.