Dokumen ini menjelaskan cara menggunakan pengontrol Gateway Google Kubernetes Engine (GKE) untuk mengonfigurasi Cloud CDN. Anda dapat menemukan informasi mendetail tentang konsep, praktik terbaik, dan pemecahan masalah Cloud CDN di dokumentasi Cloud CDN.
Cloud CDN membantu meningkatkan latensi pengguna akhir dan mengurangi beban server asal dengan menyimpan konten ke dalam cache di dekat pengguna Anda. Anda dapat mengaktifkan kemampuan penayangan cache Cloud CDN menggunakan CustomResourceDefinition GCPHTTPFilter.
Dokumen ini ditujukan untuk Developer aplikasi, Arsitek cloud, dan Spesialis jaringan yang mendesain dan membangun arsitektur jaringan organisasi mereka. Untuk mempelajari lebih lanjut peran umum dan contoh tugas yang kami referensikan dalam konten Cloud de Confiance , lihat Peran dan tugas pengguna GKE umum.
Ringkasan
Integrasi GKE Gateway dengan Cloud CDN memungkinkan Anda menggunakan resource berbasis Kubernetes untuk mengelola penyimpanan cache di edge. Dengan menggunakan resource GCPHTTPFilter, Anda dapat menyesuaikan konfigurasi seperti mode cache dan time to live (TTL) untuk berbagai bagian traffic Anda.
Anda mengaktifkan Cloud CDN dengan membuat objek GCPHTTPFilter dan mereferensikan objek tersebut dalam aturan HTTPRoute. Anda dapat membuat beberapa objek GCPHTTPFilter untuk menentukan perilaku caching yang berbeda untuk berbagai jenis traffic. Misalnya, Anda dapat membuat satu filter untuk gambar statis dan filter lainnya untuk kebijakan default yang menggunakan nilai default yang direkomendasikan Cloud CDN.
Resource GCPHTTPFilter memungkinkan Anda mengonfigurasi hal berikut:
- Mode cache: mengontrol cara Cloud CDN meng-cache respons dari server asal Anda.
- Konfigurasi time to live (TTL): mengonfigurasi berapa lama objek tetap berada di cache.
- Kunci cache: menentukan elemen permintaan (header, cookie, string kueri) yang digunakan untuk membuat kunci cache.
- Caching negatif: menyimpan respons error umum atau pengalihan ke cache untuk mengurangi beban origin selama kegagalan.
- Kebijakan cache: mengontrol cara Cloud CDN menangani permintaan
yang dapat di-cache. Misalnya, Anda dapat mengaktifkan Cloud CDN untuk melakukan hal berikut:
- Pertahankan ketersediaan tinggi dengan terus menyajikan konten dalam cache meskipun layanan backend menjadi tidak tersedia.
- Tentukan header permintaan tertentu yang melewati cache untuk mengambil data langsung dari backend Anda.
- Gabungkan beberapa permintaan serentak untuk resource yang sama menjadi satu permintaan untuk mengurangi beban backend.
Resource GCPHTTPFilter harus berada di namespace yang sama dengan resource HTTPRoute tempat resource tersebut dilampirkan. Setelah Anda mengonfigurasi GCPHTTPFilter, filter tersebut akan digabungkan ke dalam rantai filter untuk rute Anda.
Diagram berikut mengilustrasikan cara Anda dapat menggunakan GCPHTTPFilter untuk menerapkan konfigurasi caching yang berbeda ke slice traffic tertentu dalam HTTPRoute:
Arsitektur ini memungkinkan Anda mengonfigurasi pengelolaan caching tepi otomatis dan terperinci. HTTPRoute mengonfigurasi cara permintaan masuk ditangani dengan mencocokkan traffic masuk berdasarkan atribut seperti jalur permintaan. Untuk mengaktifkan caching untuk rute tertentu, GCPHTTPFilters dilampirkan ke aturan dalam HTTPRoute. Setiap GCPHTTPFilter dapat menentukan logika pen-cache-an yang berbeda untuk gambar, aset web, dan konten lainnya. Logika penyimpanan ke cache ini kemudian diterapkan oleh Cloud CDN, yang menayangkan konten yang di-cache ke klien.
Persyaratan dan batasan
- Cluster Anda harus menggunakan GKE versi 1.35.2-gke.1751000 atau yang lebih baru.
- Anda harus mengonfigurasi Gateway eksternal global
dengan menggunakan GatewayClass
gke-l7-global-external-managedataugke-l7-global-external-managed-mc. - Anda harus telah mengonfigurasi resource HTTPRoute.
- Anda tidak dapat mengaktifkan Identity-Aware Proxy (IAP) dan Cloud CDN di Gateway yang sama. Jika IAP diperlukan, Anda harus menghapus objek GCPHTTPFilter sebelum mengaktifkan GCPBackendPolicy.
- Anda hanya dapat melampirkan satu objek GCPHTTPFilter ke aturan jalur tertentu dalam HTTPRoute.
Harga
Harga Cloud CDN berlaku saat caching diaktifkan. Untuk mengetahui informasi selengkapnya, lihat harga Cloud CDN.
Sebelum memulai
Sebelum memulai, pastikan Anda telah melakukan tugas berikut:
- Aktifkan Google Kubernetes Engine API. Aktifkan Google Kubernetes Engine API
- Untuk menggunakan Google Cloud CLI untuk tugas ini,
instal lalu
lakukan inisialisasi
gcloud CLI. Jika sebelumnya Anda telah menginstal gcloud CLI, dapatkan versi terbaru dengan menjalankan perintah
gcloud components update. Versi gcloud CLI yang lebih lama mungkin tidak mendukung menjalankan perintah dalam dokumen ini.
Peran dan izin
Untuk melihat resource Cloud de Confiance yang dikonfigurasi, pastikan Anda memiliki
roles/compute.networkViewerperan IAM.Pastikan Anda memiliki akses ke cluster GKE dan diberi otorisasi untuk melakukan tindakan yang diperlukan. Cuplikan berikut menunjukkan izin RBAC minimal yang diperlukan:
apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: gateway-caching-admin rules: # 1. Full access to manage HTTPRoutes - apiGroups: ["gateway.networking.k8s.io"] resources: ["httproutes"] verbs: ["get", "list", "watch", "create", "update", "patch", "delete"] # 2. Read-only access to view the Gateway - apiGroups: ["gateway.networking.k8s.io"] resources: ["gateways"] verbs: ["get", "list", "watch"] # 3. Full access to manage caching filters - apiGroups: ["networking.gke.io"] resources: ["gcphttpfilters"] verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
Untuk mengetahui informasi selengkapnya tentang penggunaan RBAC dan IAM, lihat Interaksi dengan Identity and Access Management.
Mengonfigurasi caching dengan GCPHTTPFilter
Untuk mengaktifkan dan mengonfigurasi Cloud CDN, Anda membuat satu atau beberapa resource GCPHTTPFilter, lalu mereferensikannya dalam objek HTTPRoute.
Membuat GCPHTTPFilter
Resource GCPHTTPFilter menentukan kebijakan penyimpanan data dalam cache Anda. Dalam contoh berikut, Anda membuat tiga GCPHTTPFilters:
- Filter pertama menyimpan gambar statis dalam cache untuk pengiriman yang lebih cepat kepada pengguna akhir.
- Filter kedua menyimpan cache aset web seperti file CSS.
- Filter ketiga berfungsi sebagai "catch-all" untuk traffic yang tersisa.
Buat filter pertama dengan menyimpan manifes berikut sebagai
store-caching-images-filter.yaml:apiVersion: networking.gke.io/v1 kind: GCPHTTPFilter metadata: name: store-caching-images-filter spec: cachePolicy: cacheKeyPolicy: includeQueryString: false cacheMode: CACHE_ALL_STATIC defaultTTL: 12hDalam manifes ini, hal berikut berlaku:
includeQueryString: menginstruksikan Cloud CDN untuk mengabaikan parameter kueri dalam kunci cache. Hal ini membantu memastikan bahwa permintaan gambar yang berbeda dari pengguna yang berbeda menerima salinan cache yang identik.cacheMode: ditetapkan keCACHE_ALL_STATIC, yang otomatis meng-cache konten statis seperti gambar.defaultTTL: menginstruksikan Cloud CDN untuk meng-cache gambar selama 12 jam. Anda dapat menentukan waktu dalam jam (j), menit (m), atau detik (d).
Buat filter kedua. Simpan manifes berikut sebagai
store-caching-webassets-filter.yaml:apiVersion: networking.gke.io/v1 kind: GCPHTTPFilter metadata: name: store-caching-webassets-filter spec: cachePolicy: cacheKeyPolicy: includeQueryString: false serveWhileStale: 24h cacheMode: CACHE_ALL_STATIC defaultTTL: 24hManifes ini memiliki beberapa setelan yang sama dengan filter pertama, kecuali perbedaan berikut:
serveWhileStale: ditetapkan ke 24 jam. Jika aset web (seperti file CSS) berakhir setelahdefaultTTL-nya, Cloud CDN akan terus menyajikan aset usang tersebut dari cache hingga 24 jam tambahan dan memvalidasi ulang konten di latar belakang.defaultTTL: ditetapkan ke durasi yang lebih lama, yaitu 24 jam.
Buat filter ketiga untuk menentukan kebijakan caching default tanpa parameter apa pun. Simpan manifes berikut sebagai
store-caching-default-filter.yaml:apiVersion: networking.gke.io/v1 kind: GCPHTTPFilter metadata: name: store-caching-default-filter spec: cachePolicy: {}Jika Anda tidak menentukan parameter apa pun di resource GCPHTTPFilter, GKE akan menggunakan nilai default untuk caching.
Terapkan filter ke cluster Anda:
kubectl apply -f store-caching-images-filter.yaml kubectl apply -f store-caching-webassets-filter.yaml kubectl apply -f store-caching-default-filter.yaml
Lampirkan filter ke HTTPRoute
Untuk menerapkan kebijakan penyimpanan cache, perbarui manifes HTTPRoute yang ada untuk mereferensikan filter.
Anda dapat mereferensikan berbagai filter dalam objek HTTPRoute yang sama untuk menerapkan aturan penyiapan cache yang konsisten. Anda juga dapat menggunakan kembali filter yang sama di berbagai aturan, misalnya, saat Anda memisahkan traffic antara versi backend yang berbeda selama peluncuran progresif.
Ubah manifes HTTPRoute yang ada (misalnya,
store-route-external.yaml) untuk menyertakan bagianfiltersdalam aturan perutean Anda:kind: HTTPRoute apiVersion: gateway.networking.k8s.io/v1 metadata: name: store-external spec: parentRefs: - kind: Gateway name: external-http hostnames: - "store.example.com" rules: # RULE 1: Default /img/ traffic to store-v1 - matches: - path: value: /img/ filters: - type: ExtensionRef extensionRef: group: networking.gke.io kind: GCPHTTPFilter name: store-caching-images-filter backendRefs: - name: store-v1 port: 8080 # RULE 2: Default /web/ traffic to store-v1 - matches: - path: value: /web/ filters: - type: ExtensionRef extensionRef: group: networking.gke.io kind: GCPHTTPFilter name: store-caching-webassets-filter backendRefs: - name: store-v1 port: 8080 # RULE 3: Canary /img/ traffic (header + path match) to store-v2 - matches: - headers: - name: env value: canary path: value: /img/ filters: - type: ExtensionRef extensionRef: group: networking.gke.io kind: GCPHTTPFilter name: store-caching-images-filter backendRefs: - name: store-v2 port: 8080 # RULE 4: Canary /web/ traffic (header + path match) to store-v2 - matches: - headers: - name: env value: canary path: value: /web/ filters: - type: ExtensionRef extensionRef: group: networking.gke.io kind: GCPHTTPFilter name: store-caching-webassets-filter backendRefs: - name: store-v2 port: 8080 # RULE 5: Default (catch-all) traffic to store-v1 - backendRefs: - name: store-v1 port: 8080 # If you need caching for default traffic, it can be enabled by placing # filters directly under backendRefs filters: - type: ExtensionRef extensionRef: group: networking.gke.io kind: GCPHTTPFilter name: store-caching-default-filterTerapkan konfigurasi HTTPRoute yang telah diupdate ke cluster Anda:
kubectl apply -f store-route-external.yamlPastikan HTTPRoute dan Gateway di-deploy:
kubectl describe httproute store-external kubectl describe gateway external-httpOutput menunjukkan bahwa Cloud CDN diaktifkan untuk resource HTTPRoute. Cloud CDN menerapkan kebijakan caching yang dikonfigurasi ke traffic Anda dan mempercepat penayangan gambar statis, aset web, dan traffic lainnya.
Membatalkan validasi konten yang di-cache
Untuk menghapus konten usang dari cache, Anda harus mengirimkan permintaan invalidasi. Untuk mengetahui informasi mendetail tentang cara kerja invalidasi, lihat bagian Menginvalidasi konten yang di-cache di dokumentasi Cloud CDN.
Temukan peta URL yang terkait dengan Gateway Anda:
kubectl describe gateway external-httpCari anotasi
networking.gke.io/url-maps. Contoh:Name: external-http Namespace: foo API Version: gateway.networking.k8s.io Kind: Gateway Annotations: networking.gke.io/backend-services: gkegw-service1 networking.gke.io/firewalls: gkegw-l7-fw networking.gke.io/forwarding-rules: gkegw-fr1 networking.gke.io/health-checks: gkegw-hc1 networking.gke.io/ssl-certificates: networking.gke.io/target-proxies: gkegw-tp1 networking.gke.io/url-maps: gkegw-url-map1Anda dapat membatalkan validasi konten menggunakan beberapa pencocok pembatalan validasi, termasuk host, jalur, tag cache, kode status respons, jenis MIME, dan backend. Misalnya, untuk mengirimkan permintaan pembatalan validasi menggunakan pencocok host dan kode status, jalankan perintah berikut:
gcloud compute url-maps invalidate-cdn-cache URL_MAP_NAME --host="store.example.com" --status=404Ganti
URL_MAP_NAMEdengan nama yang diidentifikasi di langkah sebelumnya, misalnya,gkegw-url-map1.
Memantau performa Cloud CDN
Anda dapat menggunakan Cloud Logging dan Cloud Monitoring untuk melacak rasio hit cache dan performa.
Log Cloud CDN dikaitkan dengan load balancer yang disediakan oleh Pengontrol Gateway GKE Anda. Log diindeks berdasarkan aturan penerusan dan peta URL load balancer. Untuk mengambil log terbaru, jalankan perintah berikut:
gcloud logging read 'resource.type="http_load_balancer" AND
resource.labels.url_map_name="URL_MAP_NAME" AND
logName="projects/PROJECT_ID/logs/cloudcdn_googleapis_com%2Frequests"'
--project PROJECT_ID --limit 100 --format json
Cloud CDN mengekspor metrik ke Cloud Monitoring. Anda dapat menggunakan filter
matched_url_path_rule dalam kueri pemantauan untuk mempersempit
metrik ke HTTPRoute tertentu.
Untuk mengetahui informasi selengkapnya tentang cara melihat log dan pemantauan untuk Cloud CDN, lihat Log dan metrik untuk caching.
Menonaktifkan Cloud CDN
Untuk menonaktifkan penyimpanan dalam cache, hapus referensi GCPHTTPFilter dari HTTPRoute Anda.
Edit manifes HTTPRoute Anda dan hapus blok
filtersyang mereferensikan GCPHTTPFilter. Contoh berikut menunjukkan manifes HTTPRoute dengan filter yang dihapus:kind: HTTPRoute apiVersion: gateway.networking.k8s.io/v1 metadata: name: store-external spec: parentRefs: - kind: Gateway name: external-http hostnames: - "store.example.com" rules: # RULE 1: Default /img/ traffic to store-v1 - matches: - path: value: /img/ backendRefs: - name: store-v1 port: 8080 # RULE 2: Canary /img/ traffic (header match) to store-v2 - matches: - headers: - name: env value: canary path: value: /img/ backendRefs: - name: store-v2 port: 8080 # RULE 3: Default (catch-all) traffic to store-v1 - backendRefs: - name: store-v1 port: 8080Terapkan manifes HTTPRoute yang telah diupdate ke cluster Anda:
kubectl apply -f store-route-external.yaml
Langkah berikutnya
- Baca ringkasan Cloud CDN.
- Baca praktik terbaik untuk penayangan konten.
- Pelajari cara memecahkan masalah pada Cloud CDN.
- Pelajari kemampuan GatewayClass.