Mengonfigurasi Cloud CDN untuk Gateway

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:

Gambar 1. Konfigurasi caching yang berbeda dibuat dengan GCPHTTPFilter dalam HTTPRoute.
Gambar 1. Konfigurasi caching 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-managed atau gke-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

  1. Untuk melihat resource Cloud de Confiance yang dikonfigurasi, pastikan Anda memiliki roles/compute.networkViewer peran IAM.

  2. 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.
  1. 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: 12h
    

    Dalam 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 ke CACHE_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).
  2. 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: 24h
    

    Manifes ini memiliki beberapa setelan yang sama dengan filter pertama, kecuali perbedaan berikut:

    • serveWhileStale: ditetapkan ke 24 jam. Jika aset web (seperti file CSS) berakhir setelah defaultTTL-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.
  3. 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.

  4. 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.

  1. Ubah manifes HTTPRoute yang ada (misalnya, store-route-external.yaml) untuk menyertakan bagian filters dalam 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-filter
    
  2. Terapkan konfigurasi HTTPRoute yang telah diupdate ke cluster Anda:

    kubectl apply -f store-route-external.yaml
    
  3. Pastikan HTTPRoute dan Gateway di-deploy:

    kubectl describe httproute store-external
    kubectl describe gateway external-http
    

    Output 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.

  1. Temukan peta URL yang terkait dengan Gateway Anda:

    kubectl describe gateway external-http
    

    Cari 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-map1
    
  2. Anda 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=404
    

    Ganti URL_MAP_NAME dengan 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.

  1. Edit manifes HTTPRoute Anda dan hapus blok filters yang 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: 8080
    
  2. Terapkan manifes HTTPRoute yang telah diupdate ke cluster Anda:

    kubectl apply -f store-route-external.yaml
    

Langkah berikutnya