Mengonfigurasi resource Gateway menggunakan Kebijakan


Halaman ini menunjukkan cara mengonfigurasi load balancer yang dibuat Google Kubernetes Engine (GKE) saat Anda men-deploy Gateway di cluster GKE.

Saat Anda men-deploy Gateway, konfigurasi GatewayClass akan menentukan load balancer yang dibuat GKE. Load balancer terkelola ini telah dikonfigurasi sebelumnya dengan setelan default yang dapat Anda ubah menggunakan Kebijakan.

Anda dapat menyesuaikan resource Gateway agar sesuai dengan persyaratan infrastruktur atau aplikasi dengan melampirkan Kebijakan ke Gateway, Layanan, atau ServiceImports. Setelah menerapkan atau mengubah Kebijakan, Anda tidak perlu menghapus atau membuat ulang resource Gateway, Route, atau Service. Kebijakan diproses oleh pengontrol Gateway dan resource load balancer yang mendasarinya (di-)konfigurasi ulang sesuai dengan Kebijakan (baru).

Sebelum memulai

Sebelum memulai, pastikan Anda telah menjalankan tugas berikut:

  • Aktifkan Google Kubernetes Engine API.
  • Aktifkan Google Kubernetes Engine API
  • Jika ingin 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 gcloud components update.

Persyaratan GKE Gateway Controller

  • Untuk Standard, GKE versi 1.24 atau yang lebih baru.
  • Untuk Autopilot, GKE versi 1.26 atau yang lebih baru.
  • Google Cloud CLI versi 407.0.0 atau yang lebih baru.
  • Gateway API hanya didukung di cluster native VPC.
  • Jika menggunakan GatewayClass internal, Anda harus mengaktifkan subnet khusus proxy.
  • Cluster Anda harus mengaktifkan add-on HttpLoadBalancing.
  • Jika menggunakan Istio, Anda harus mengupgrade Istio ke salah satu versi berikut:
    • 1.15.2 atau yang lebih baru
    • 1.14.5 atau yang lebih baru
    • 1.13.9 atau yang lebih baru.
  • Jika menggunakan VPC Bersama, di project host, Anda harus menetapkan peran Compute Network User ke Akun Layanan GKE untuk project layanan.

Pembatasan dan Batasan

Selain pembatasan dan batasan pengontrol Gateway GKE, batasan berikut berlaku khusus untuk Kebijakan yang diterapkan pada resource Gateway:

  • Resource GCPGatewayPolicy hanya dapat ditambahkan ke gateway.networking.k8s.io Gateway.

  • Resource GCPGatewayPolicy harus ada dalam namespace yang sama dengan Gateway target.

  • Saat menggunakan Gateway cluster tunggal, resource GCPBackendPolicy dan HealthCheckPolicy harus merujuk ke resource Service.

  • Saat menggunakan Gateway multi-cluster, GCPBackendPolicy, dan HealthCheckPolicy, resource harus merujuk ke resource ServiceImport.
  • Hanya satu GCPGatewayPolicy yang dapat dilampirkan ke Layanan dalam satu waktu. Jika dua kebijakan GCPGatewayPolicy dibuat dan menargetkan Service atau ServiceImport yang sama, kebijakan terlama akan diprioritaskan dan kebijakan kedua akan gagal dilampirkan.

  • Kebijakan hierarkis tidak didukung dengan GKE Gateway.

  • Resource HealthCheckPolicy dan GCPBackendPolicy harus ada dalam namespace yang sama dengan resource Service atau ServiceImport target.

  • Resource GCPBackendPolicy dan HealthCheckPolicy disusun sedemikian rupa sehingga hanya dapat mereferensikan satu layanan backend.

  • GCPBackendPolicy tidak mendukung opsi HEADER_FIELD atau HTTP_COOKIE untuk afinitas sesi.

Mengonfigurasi akses global untuk Gateway internal regional

Bagian ini menjelaskan fungsionalitas yang tersedia di cluster GKE yang menjalankan versi 1.24 atau yang lebih baru.

Untuk mengaktifkan akses global dengan Gateway internal, lampirkan kebijakan ke resource Gateway.

Manifes GCPGatewayPolicy berikut mengaktifkan Gateway internal regional untuk akses global:

apiVersion: networking.gke.io/v1
kind: GCPGatewayPolicy
metadata:
  name: my-gateway-policy
  namespace: default
spec:
  default:
    allowGlobalAccess: true
  targetRef:
    group: gateway.networking.k8s.io
    kind: Gateway
    name: my-gateway

Mengonfigurasi region untuk Gateway multi-cluster

Bagian ini menjelaskan fungsi yang tersedia di cluster GKE yang menjalankan versi 1.30.3-gke.1225000 atau yang lebih baru.

Jika fleet Anda memiliki cluster di beberapa region, Anda mungkin perlu men-deploy Gateway regional di region yang berbeda untuk berbagai kasus penggunaan, misalnya, redundansi lintas region, latensi rendah, dan kedaulatan data. Di cluster konfigurasi Gateway multi-cluster, Anda dapat menentukan region tempat Anda ingin men-deploy Gateway regional. Jika Anda tidak menentukan region, region default-nya adalah region cluster konfigurasi.

Untuk mengonfigurasi region untuk Gateway multi-cluster, gunakan kolom region di GCPGatewayPolicy. Dalam contoh berikut, Gateway dikonfigurasi di region us-central1:

apiVersion: networking.gke.io/v1
kind: GCPGatewayPolicy
metadata:
  name: my-gateway-policy
  namespace: default
spec:
  default:
    region: us-central1
  targetRef:
    group: gateway.networking.k8s.io
    kind: Gateway
    name: my-regional-gateway

Mengonfigurasi Kebijakan SSL untuk mengamankan traffic client-to-load-balancer

Bagian ini menjelaskan fungsionalitas yang tersedia di cluster GKE yang menjalankan versi 1.24 atau yang lebih baru.

Untuk mengamankan traffic client-to-load-balancer, konfigurasikan kebijakan SSL dengan menambahkan nama kebijakan Anda ke GCPGatewayPolicy. Secara default, Gateway tidak memiliki Kebijakan SSL apa pun yang ditentukan dan dilampirkan.

Pastikan Anda membuat kebijakan SSL sebelum merujuk kebijakan di GCPGatewayPolicy Anda.

Manifes GCPGatewayPolicy berikut menentukan kebijakan keamanan bernama gke-gateway-ssl-policy:

apiVersion: networking.gke.io/v1
kind: GCPGatewayPolicy
metadata:
  name: my-gateway-policy
  namespace: team1
spec:
  default:
    sslPolicy: gke-gateway-ssl-policy
  targetRef:
    group: gateway.networking.k8s.io
    kind: Gateway
    name: my-gateway

Mengonfigurasi health check

Bagian ini menjelaskan fungsionalitas yang tersedia di cluster GKE yang menjalankan versi 1.24 atau yang lebih baru.

Anda dapat menggunakan HealthCheckPolicy untuk mengontrol setelan health check load balancer. Setiap jenis health check (http, https, grpc, dan http2) memiliki parameter yang dapat Anda tentukan. Google Cloud membuat health check unik untuk setiap layanan backend untuk setiap Layanan GKE.

Agar load balancer berfungsi secara normal, Anda mungkin perlu mengonfigurasi HealthCheckPolicy kustom untuk load balancer jika jalur health check Anda bukan "/" standar. Konfigurasi ini juga diperlukan jika jalur memerlukan header khusus atau jika Anda perlu menyesuaikan parameter health check. Misalnya, jika jalur permintaan default adalah "/", tetapi layanan Anda tidak dapat diakses di jalur permintaan tersebut dan sebagai gantinya menggunakan "/health" untuk melaporkan statusnya, Anda harus mengonfigurasi requestPath di HealthCheckPolicy Anda.

Manifes HealthCheckPolicy berikut menunjukkan semua kolom yang tersedia saat mengonfigurasi kebijakan health check:

Layanan

apiVersion: networking.gke.io/v1
kind: HealthCheckPolicy
metadata:
  name: lb-healthcheck
  namespace: lb-service-namespace
spec:
  default:
    checkIntervalSec: INTERVAL
    timeoutSec: TIMEOUT
    healthyThreshold: HEALTHY_THRESHOLD
    unhealthyThreshold: UNHEALTHY_THRESHOLD
    logConfig:
      enabled: ENABLED
    config:
      type: PROTOCOL
      httpHealthCheck:
        portSpecification: PORT_SPECIFICATION
        port: PORT
        portName: PORT_NAME
        host: HOST
        requestPath: REQUEST_PATH
        response: RESPONSE
        proxyHeader: PROXY_HEADER
      httpsHealthCheck:
        portSpecification: PORT_SPECIFICATION
        port: PORT
        portName: PORT_NAME
        host: HOST
        requestPath: REQUEST_PATH
        response: RESPONSE
        proxyHeader: PROXY_HEADER
      grpcHealthCheck:
        grpcServiceName: GRPC_SERVICE_NAME
        portSpecification: PORT_SPECIFICATION
        port: PORT
        portName: PORT_NAME
      http2HealthCheck:
        portSpecification: PORT_SPECIFICATION
        port: PORT
        portName: PORT_NAME
        host: HOST
        requestPath: REQUEST_PATH
        response: RESPONSE
        proxyHeader: PROXY_HEADER
  targetRef:
    group: ""
    kind: Service
    name: lb-service

Layanan Multi-cluster

apiVersion: networking.gke.io/v1
kind: HealthCheckPolicy
metadata:
  name: lb-healthcheck
  namespace: lb-service-namespace
spec:
  default:
    checkIntervalSec: INTERVAL
    timeoutSec: TIMEOUT
    healthyThreshold: HEALTHY_THRESHOLD
    unhealthyThreshold: UNHEALTHY_THRESHOLD
    logConfig:
      enabled: ENABLED
    config:
      type: PROTOCOL
      httpHealthCheck:
        portSpecification: PORT_SPECIFICATION
        port: PORT
        portName: PORT_NAME
        host: HOST
        requestPath: REQUEST_PATH
        response: RESPONSE
        proxyHeader: PROXY_HEADER
      httpsHealthCheck:
        portSpecification: PORT_SPECIFICATION
        port: PORT
        portName: PORT_NAME
        host: HOST
        requestPath: REQUEST_PATH
        response: RESPONSE
        proxyHeader: PROXY_HEADER
      grpcHealthCheck:
        grpcServiceName: GRPC_SERVICE_NAME
        portSpecification: PORT_SPECIFICATION
        port: PORT
        portName: PORT_NAME
      http2HealthCheck:
        portSpecification: PORT_SPECIFICATION
        port: PORT
        portName: PORT_NAME
        host: HOST
        requestPath: REQUEST_PATH
        response: RESPONSE
        proxyHeader: PROXY_HEADER
  targetRef:
    group: net.gke.io
    kind: ServiceImport
    name: lb-service

Ganti kode berikut:

  • INTERVAL: menentukan interval pemeriksaan, dalam detik, untuk setiap pemeriksaan health check. Ini adalah waktu dari awal satu pemeriksaan hingga awal pemeriksaan berikutnya. Jika Anda menghilangkan parameter ini, durasi default Google Cloud adalah 15 detik jika tidak ada HealthCheckPolicy yang ditentukan, dan 5 detik jika HealthCheckPolicy ditentukan tanpa nilai checkIntervalSec. Untuk informasi selengkapnya, lihat Beberapa pemeriksaan dan frekuensi.
  • TIMEOUT: menentukan jumlah waktu yang diperlukan Google Cloud untuk menunggu respons terhadap pemeriksaan. Nilai TIMEOUT harus kurang dari atau sama dengan INTERVAL. Unit dalam hitungan detik. Setiap pemeriksaan memerlukan kode respons HTTP 200 (OK) untuk dikirimkan sebelum waktu tunggu pemeriksaan.
  • HEALTHY_THRESHOLDdan UNHEALTHY_THRESHOLD: menentukan jumlah upaya koneksi berurutan yang harus berhasil atau gagal, minimal satu kali, untuk mengubahstatus kondisi dari bagus menjadi tidak bagus atau tidak bagus menjadi bagus. Jika Anda menghilangkan salah satu parameter ini, default Google Cloud adalah 2.
  • PROTOCOL: menentukan protokol yang digunakan oleh sistem pemeriksaan untuk health check. Untuk mengetahui informasi selengkapnya, lihat Kriteria keberhasilan untuk HTTP, HTTPS, dan HTTP/2 serta Kriteria keberhasilan untuk gRPC. Parameter ini wajib diisi.
  • ENABLED: menentukan apakah logging diaktifkan atau dinonaktifkan.
  • PORT_SPECIFICATION: menentukan apakah health check menggunakan port tetap (USE_FIXED_PORT), port bernama (USE_NAMED_PORT), atau port inferensi (USE_SERVING_PORT). Jika tidak ditentukan, health check akan mengikuti perilaku yang ditentukan di kolom port dan portName. Jika port atau portName tidak ditentukan, kolom ini akan ditetapkan secara default ke USE_SERVING_PORT.
  • PORT: HealthCheckPolicy hanya mendukung penentuan port health check load balancer menggunakan nomor port. Jika Anda menghilangkan parameter ini, nilai default Google Cloud adalah 80. Karena load balancer mengirimkan pemeriksaan ke alamat IP Pod secara langsung, Anda harus memilih port yang cocok dengan containerPort Pod yang aktif, meskipun containerPort direferensikan oleh targetPort dari Layanan. Anda tidak dibatasi pada containerPorts yang dirujuk oleh targetPort Layanan.
  • PORT_NAME: menentukan nama port seperti yang ditetapkan dalam InstanceGroup.NamedPort.name. Jika port dan portName ditentukan, Google Cloud akan mempertimbangkan nilai port terlebih dahulu.
  • HOST: nilai header host dalam permintaan health check. Nilai ini menggunakan definisi RFC 1123 dari nama host, kecuali alamat IP numerik tidak diizinkan. Jika tidak ditentukan atau dibiarkan kosong, nilai ini akan ditetapkan secara default ke alamat IP health check.
  • REQUEST_PATH: menentukan request-path dari permintaan health check. Jika tidak ditentukan atau dibiarkan kosong, setelan defaultnya adalah /.
  • RESPONSE: menentukan byte yang akan dicocokkan dengan awal data respons. Jika tidak ditentukan atau dibiarkan kosong, GKE akan mengartikan bahwa respons apa pun sebagai responsif. Data respons hanya bisa berupa ASCII.
  • PROXY_HEADER: menentukan jenis header proxy. Anda dapat menggunakan NONE atau PROXY_V1. Setelan defaultnya adalah NONE.
  • GRPC_SERVICE_NAME: nama opsional Layanan gRPC. Hapus kolom ini untuk menentukan semua Layanan.

Untuk mengetahui informasi selengkapnya tentang kolom HealthCheckPolicy, lihat referensi healthChecks.

Mengonfigurasi kebijakan keamanan backend Google Cloud Armor untuk mengamankan layanan backend Anda

Bagian ini menjelaskan fungsionalitas yang tersedia di cluster GKE yang menjalankan versi 1.24 atau yang lebih baru.

Konfigurasikan kebijakan keamanan backend Google Cloud Armor dengan menambahkan nama kebijakan keamanan Anda ke GCPBackendPolicy untuk mengamankan layanan backend. Secara default, Gateway tidak memiliki kebijakan keamanan backend Google Cloud Armor yang ditentukan dan dilampirkan.

Pastikan Anda membuat kebijakan keamanan backend Google Cloud Armor sebelum merujuk kebijakan tersebut di GCPBackendPolicy Anda. Jika mengaktifkan Gateway regional, Anda harus membuat kebijakan keamanan backend Google Cloud Armor regional.

Manifes GCPBackendPolicy berikut menentukan kebijakan keamanan backend bernama example-security-policy:

Layanan

apiVersion: networking.gke.io/v1
kind: GCPBackendPolicy
metadata:
  name: my-backend-policy
  namespace: lb-service-namespace
spec:
  default:
    securityPolicy: example-security-policy
  targetRef:
    group: ""
    kind: Service
    name: lb-service

Layanan Multi-cluster

apiVersion: networking.gke.io/v1
kind: GCPBackendPolicy
metadata:
  name: my-backend-policy
  namespace: lb-service-namespace
spec:
  default:
    securityPolicy: example-security-policy
  targetRef:
    group: net.gke.io
    kind: ServiceImport
    name: lb-service

Mengonfigurasi IAP

Bagian ini menjelaskan fungsionalitas yang tersedia di cluster GKE yang menjalankan versi 1.24 atau yang lebih baru.

Identity-Aware Proxy (IAP) menerapkan kebijakan kontrol akses pada layanan backend yang terkait dengan HTTPRoute. Dengan penerapan ini, hanya pengguna atau aplikasi terautentikasi dengan peran Identity and Access Management (IAM) yang tepat yang dapat mengakses layanan backend ini.

Secara default, tidak ada IAP yang diterapkan ke layanan backend, Anda harus mengonfigurasi IAP secara eksplisit di GCPBackendPolicy.

Untuk mengonfigurasi IAP dengan Gateway, lakukan hal berikut:

  1. Aktifkan IAP untuk GKE Jangan mengonfigurasi backend (Mengonfigurasi BackendConfig) karena BackendConfig hanya valid jika terjadi deployment Ingress.

  2. Buat Secret untuk IAP:

    1. Di konsol Google Cloud, buka halaman Credentials.

      Buka Kredensial

    2. Klik nama klien dan download file klien OAuth.

    3. Dari file klien OAuth, salin secret OAuth di papan klip.

    4. Buat file dengan nama iap-secret.txt.

    5. Tempel secret OAuth di file iap-secret.txt menggunakan perintah berikut:

      echo -n CLIENT_SECRET > iap-secret.txt
      kubectl create secret generic SECRET_NAME --from-file=key=iap-secret.txt
      
  3. Untuk menentukan kebijakan IAP yang merujuk secret:

    1. Buat manifes GCPBackendPolicy berikut, ganti masing-masing SECRET_NAME dan CLIENT_ID. Simpan manifes sebagai backend-policy.yaml:

      Layanan

      apiVersion: networking.gke.io/v1
      kind: GCPBackendPolicy
      metadata:
        name: backend-policy
      spec:
        default:
          iap:
            enabled: true
            oauth2ClientSecret:
              name: SECRET_NAME
            clientID: CLIENT_ID
        targetRef:
          group: ""
          kind: Service
          name: lb-service
      

      Layanan Multi-cluster

      apiVersion: networking.gke.io/v1
      kind: GCPBackendPolicy
      metadata:
        name: backend-policy
      spec:
        default:
          iap:
            enabled: true
            oauth2ClientSecret:
              name: SECRET_NAME
            clientID: CLIENT_ID
        targetRef:
          group: net.gke.io
          kind: ServiceImport
          name: lb-service
      
    2. Terapkan manifes backend-policy.yaml:

      kubectl apply -f backend-policy.yaml
      
  4. Verifikasi konfigurasi Anda:

    1. Pastikan kebijakan diterapkan setelah membuat GCPBackendPolicy dengan IAP:

      kubectl get gcpbackendpolicy
      

      Outputnya mirip dengan hal berikut ini:

      NAME             AGE
      backend-policy   45m
      
    2. Untuk mendapatkan detail selengkapnya, gunakan perintah describe:

      kubectl describe gcpbackendpolicy
      

      Outputnya mirip dengan hal berikut ini:

      Name:         backend-policy
      Namespace:    default
      Labels:       <none>
      Annotations:  <none>
      API Version:  networking.gke.io/v1
      Kind:         GCPBackendPolicy
      Metadata:
        Creation Timestamp:  2023-05-27T06:45:32Z
        Generation:          2
        Resource Version:    19780077
        UID:                 f4f60a3b-4bb2-4e12-8748-d3b310d9c8e5
      Spec:
        Default:
          Iap:
            Client ID:  441323991697-luotsrnpboij65ebfr13hlcpm5a4heke.apps.googleusercontent.com
            Enabled:    true
            oauth2ClientSecret:
              Name:  my-iap-secret
        Target Ref:
          Group:
          Kind:   Service
          Name:   lb-service
      Status:
        Conditions:
          Last Transition Time:  2023-05-27T06:48:25Z
          Message:
          Reason:                Attached
          Status:                True
          Type:                  Attached
      Events:
        Type     Reason  Age                 From                   Message
        ----     ------  ----                ----                   -------
        Normal   ADD     46m                 sc-gateway-controller  default/backend-policy
        Normal   SYNC    44s (x15 over 43m)  sc-gateway-controller  Application of GCPGatewayPolicy "default/backend-policy" was a success
      

Mengonfigurasi waktu tunggu layanan backend

Bagian ini menjelaskan fungsionalitas yang tersedia di cluster GKE yang menjalankan versi 1.24 atau yang lebih baru.

Manifes GCPBackendPolicy berikut menentukan periode waktu tunggu layanan backend selama 40 detik. Setelan default kolom timeoutSec adalah 30 detik.

Layanan

apiVersion: networking.gke.io/v1
kind: GCPBackendPolicy
metadata:
  name: my-backend-policy
  namespace: lb-service-namespace
spec:
  default:
    timeoutSec: 40
  targetRef:
    group: ""
    kind: Service
    name: lb-service

Layanan Multi-cluster

apiVersion: networking.gke.io/v1
kind: GCPBackendPolicy
metadata:
  name: my-backend-policy
  namespace: lb-service-namespace
spec:
  default:
    timeoutSec: 40
  targetRef:
    group: net.gke.io
    kind: ServiceImport
    name: lb-service

Mengonfigurasi afinitas sesi

Bagian ini menjelaskan fungsionalitas yang tersedia di cluster GKE yang menjalankan versi 1.24 atau yang lebih baru.

Anda dapat mengonfigurasi afinitas sesi berdasarkan kriteria berikut:

  • Alamat IP klien
  • Cookie yang dihasilkan

Saat Anda mengonfigurasi afinitas sesi untuk Layanan, setelan localityLbPolicy Gateway ditetapkan ke MAGLEV.

Saat Anda menghapus konfigurasi afinitas sesi dari GCPBackendPolicy, Gateway akan mengembalikan setelan localityLbPolicy ke nilai default, ROUND_ROBIN.

Manifes GCPBackendPolicy berikut menentukan afinitas sesi berdasarkan alamat IP klien:

Layanan

apiVersion: networking.gke.io/v1
kind: GCPBackendPolicy
metadata:
  name: my-backend-policy
  namespace: lb-service-namespace
spec:
  default:
    sessionAffinity:
      type: CLIENT_IP
  targetRef:
    group: ""
    kind: Service
    name: lb-service

Layanan Multi-cluster

apiVersion: networking.gke.io/v1
kind: GCPBackendPolicy
metadata:
  name: my-backend-policy
  namespace: lb-service-namespace
spec:
  default:
    sessionAffinity:
      type: CLIENT_IP
  targetRef:
    group: net.gke.io
    kind: ServiceImport
    name: lb-service

Manifes GCPBackendPolicy berikut menentukan afinitas sesi berdasarkan cookie yang dihasilkan dan mengonfigurasi TTL cookie ke 50 detik:

Layanan

apiVersion: networking.gke.io/v1
kind: GCPBackendPolicy
metadata:
  name: my-backend-policy
  namespace: lb-service-namespace
spec:
  default:
    sessionAffinity:
      type: GENERATED_COOKIE
      cookieTtlSec: 50
  targetRef:
    group: ""
    kind: Service
    name: lb-service

Layanan Multi-cluster

apiVersion: networking.gke.io/v1
kind: GCPBackendPolicy
metadata:
  name: my-backend-policy
  namespace: lb-service-namespace
spec:
  default:
    sessionAffinity:
      type: GENERATED_COOKIE
      cookieTtlSec: 50
  targetRef:
    group: net.gke.io
    kind: ServiceImport
    name: lb-service

Anda dapat menggunakan nilai berikut untuk kolom sessionAffinity.type:

  • CLIENT_IP
  • GENERATED_COOKIE
  • NONE

Mengonfigurasi waktu tunggu pengosongan koneksi

Bagian ini menjelaskan fungsionalitas yang tersedia di cluster GKE yang menjalankan versi 1.24 atau yang lebih baru.

Anda dapat mengonfigurasi waktu tunggu pengosongan koneksi menggunakan GCPBackendPolicy. Waktu tunggu pengosongan koneksi adalah waktu, dalam detik, untuk menunggu koneksi dikosongkan. Durasi waktu tunggu bisa dari 0 hingga 3600 detik. Nilai defaultnya adalah 0, yang juga menonaktifkan pengosongan koneksi.

Manifes GCPBackendPolicy berikut menentukan waktu tunggu pengosongan koneksi selama 60 detik:

Layanan

apiVersion: networking.gke.io/v1
kind: GCPBackendPolicy
metadata:
  name: my-backend-policy
  namespace: lb-service-namespace
spec:
  default:
    connectionDraining:
      drainingTimeoutSec: 60
  targetRef:
    group: ""
    kind: Service
    name: lb-service

Layanan Multi-cluster

apiVersion: networking.gke.io/v1
kind: GCPBackendPolicy
metadata:
  name: my-backend-policy
  namespace: lb-service-namespace
spec:
  default:
    connectionDraining:
      drainingTimeoutSec: 60
  targetRef:
    group: net.gke.io
    kind: ServiceImport
    name: lb-service

Selama durasi waktu tunggu yang ditentukan, GKE menunggu penyelesaian permintaan yang ada ke backend yang dihapus. Load balancer tidak mengirim permintaan baru ke backend yang dihapus. Setelah durasi waktu tunggu tercapai, GKE akan menutup semua koneksi yang tersisa ke backend.

Logging akses HTTP

Bagian ini menjelaskan fungsionalitas yang tersedia di cluster GKE yang menjalankan versi 1.24 atau yang lebih baru.

Secara default:

  • Pengontrol Gateway mencatat semua permintaan HTTP dari klien ke Cloud Logging.
  • Frekuensi sampling adalah 1.000.000, yang berarti semua permintaan dicatat ke dalam log.

Anda dapat menonaktifkan logging akses di Gateway menggunakan GCPBackendPolicy dengan tiga cara:

  • Anda dapat membiarkan GCPBackendPolicy tanpa bagian logging
  • Anda dapat menetapkan logging.enabled ke false
  • Anda dapat menetapkan logging.enabled ke true dan menetapkan logging.sampleRate ke 0

Anda juga dapat mengonfigurasi frekuensi sampling logging akses.

Manifes GCPBackendPolicy berikut mengubah frekuensi sampel default logging akses dan menetapkannya ke 50% permintaan HTTP untuk resource Layanan tertentu:

Layanan

apiVersion: networking.gke.io/v1
kind: GCPBackendPolicy
metadata:
  name: my-backend-policy
  namespace: lb-service-namespace
spec:
  default:
    logging:
      enabled: true
      sampleRate: 500000
  targetRef:
    group: ""
    kind: Service
    name: lb-service

Layanan Multi-cluster

apiVersion: networking.gke.io/v1
kind: GCPBackendPolicy
metadata:
  name: my-backend-policy
  namespace: lb-service-namespace
spec:
  default:
    logging:
      enabled: true
      sampleRate: 500000
  targetRef:
    group: net.gke.io
    kind: ServiceImport
    name: lb-service

Manifes ini memiliki kolom berikut:

  • enable: true: mengaktifkan logging akses secara eksplisit. Log tersedia di Logging.
  • sampleRate: 500000: menentukan bahwa 50% paket dicatat ke dalam log. Anda dapat menggunakan nilai antara 0 dan 1.000.000. GKE mengonversi nilai ini menjadi nilai floating point di rentang [0, 1] dengan membagi dengan 1.000.000. Kolom ini hanya relevan jika enable ditetapkan ke true. sampleRate adalah kolom opsional, tetapi jika dikonfigurasi, enable: true juga harus ditetapkan. Jika enable ditetapkan ke true dan sampleRate tidak disediakan, GKE menetapkan enable ke false.

Mengonfigurasi penskalaan otomatis berbasis traffic untuk Gateway cluster tunggal

Pastikan cluster GKE Anda menjalankan versi 1.31.1-gke.2008000 atau yang lebih baru.

Untuk mengaktifkan penskalaan otomatis berbasis traffic dan load balancing berbasis kapasitas di Gateway satu cluster, Anda dapat mengonfigurasi Kapasitas layanan. Kapasitas layanan adalah kemampuan untuk menentukan jumlah kapasitas traffic yang dapat diterima Layanan sebelum Pod diskalakan otomatis atau traffic diluapkan ke cluster lain yang tersedia.

Untuk mengonfigurasi kapasitas Layanan, buat Layanan dan GCPBackendPolicy terkait. Manifes GCPBackendPolicy menggunakan kolom maxRatePerEndpoint yang menentukan nilai Permintaan per Detik (RPS) maksimum per Pod dalam Layanan. Manifes GCPBackendPolicy berikut menentukan RPS maksimum 10:

apiVersion: networking.gke.io/v1
kind: GCPBackendPolicy
metadata:
  name: store
spec:
  default:
    maxRatePerEndpoint: 10
  targetRef:
    group: ""
    kind: Service
    name: store

Untuk mempelajari penskalaan otomatis berbasis traffic lebih lanjut, lihat Penskalaan otomatis berdasarkan traffic load balancer.

Pemecahan masalah

Beberapa GCPBackendPolicy yang terpasang ke Service yang sama

Gejala:

Kondisi status berikut mungkin terjadi saat Anda melampirkan GCPBackendPolicy ke Service atau ServiceImport:

status:
  conditions:
    - lastTransitionTime: "2023-09-26T20:18:03Z"
      message: conflicted with GCPBackendPolicy "[POLICY_NAME]" of higher precedence, hence not applied
      reason: Conflicted
      status: "False"
      type: Attached

Alasan:

Kondisi status ini menunjukkan bahwa Anda mencoba menerapkan GCPBackendPolicy kedua ke Service atau ServiceImport yang sudah memiliki GCPBackendPolicy terlampir.

Beberapa GCPBackendPolicy yang dilampirkan ke Service atau ServiceImport yang sama tidak didukung dengan GKE Gateway. Lihat Batasan dan Batasan untuk mengetahui detail selengkapnya.

Solusi:

Konfigurasikan satu GCPBackendPolicy yang menyertakan semua konfigurasi kustom dan lampirkan ke Service atau ServiceImport Anda.

Kebijakan keamanan Google Cloud Armor tidak ditemukan

Gejala:

Pesan error berikut mungkin muncul saat Anda mengaktifkan Google Cloud Armor di Gateway regional:

Invalid value for field 'resource': '{
"securityPolicy":"projects/123456789/regions/us-central1/securityPolicies/<policy_name>"}'.
The given security policy does not exist.

Alasan:

Pesan error menunjukkan bahwa kebijakan keamanan Google Cloud Armor regional yang ditentukan tidak ada di project Google Cloud Anda.

Solusi:

Buat kebijakan keamanan Google Cloud Armor regional di project Anda dan referensikan kebijakan ini di GCPBackendPolicy Anda.

Langkah selanjutnya