Halaman ini menunjukkan cara mengonfigurasi load balancer yang dibuat oleh Google Kubernetes Engine (GKE) saat Anda men-deploy Gateway di cluster GKE.
Saat Anda men-deploy Gateway, konfigurasi GatewayClass 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 kebutuhan 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, Rute, atau Layanan. Kebijakan akan diproses oleh pengontrol Gateway dan resource load balancer yang mendasarinya akan dikonfigurasi (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
initialize
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, maka di project host, Anda perlu menetapkan peran
Compute Network User
ke akun Layanan GKE untuk project layanan tersebut.
Batasan dan Batasan
Selain pembatasan dan batasan pengontrol Gateway GKE, batasan berikut juga berlaku secara khusus untuk Kebijakan yang diterapkan pada resource Gateway:
Resource
GCPGatewayPolicy
hanya dapat ditambahkan kegateway.networking.k8s.io
Gateway
.Resource
GCPGatewayPolicy
harus ada dalam namespace yang sama denganGateway
target.Saat menggunakan Gateway cluster tunggal, resource
GCPBackendPolicy
danHealthCheckPolicy
harus merujuk ke resourceService
.
Hanya satu
GCPGatewayPolicy
yang dapat ditambahkan ke Layanan pada satu waktu. Jika dua kebijakanGCPGatewayPolicy
dibuat dan menargetkanService
atauServiceImport
yang sama, kebijakan terlama akan diprioritaskan dan kebijakan kedua akan gagal ditambahkan.Kebijakan hierarkis tidak didukung dengan Gateway GKE.
Resource
HealthCheckPolicy
danGCPBackendPolicy
harus ada dalam namespace yang sama dengan resourceService
atauServiceImport
target.Resource
GCPBackendPolicy
danHealthCheckPolicy
disusun sedemikian rupa sehingga hanya dapat mereferensikan satu layanan backend.
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.
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
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 5 detik. Untuk informasi selengkapnya, lihat Beberapa pemeriksaan dan frekuensi.TIMEOUT
: menentukan jumlah waktu yang diperlukan Google Cloud untuk menunggu respons terhadap pemeriksaan. NilaiTIMEOUT
harus kurang dari atau sama denganINTERVAL
. Unit dalam hitungan detik. Setiap pemeriksaan memerlukan kode respons HTTP 200 (OK) untuk dikirimkan sebelum waktu tunggu pemeriksaan.HEALTHY_THRESHOLD
danUNHEALTHY_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 kolomport
danportName
. Jikaport
atauportName
tidak ditentukan, kolom ini akan ditetapkan secara default keUSE_SERVING_PORT
.PATH
: menentukan jalur permintaan yang harus terhubung ke sistem pemeriksaan untuk health check HTTP, HTTPS, atau HTTP2. Jika Anda menghapus parameter ini, default Google Cloud adalah/
.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 dengancontainerPort
Pod yang aktif, meskipuncontainerPort
direferensikan olehtargetPort
dari Layanan. Anda tidak dibatasi padacontainerPorts
yang dirujuk olehtargetPort
Layanan.PORT_NAME
: menentukan nama port seperti yang ditetapkan dalam InstanceGroup.NamedPort.name. Jikaport
danportName
ditentukan, Google Cloud akan mempertimbangkan nilaiport
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 jalur permintaan untuk 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 menggunakanNONE
atauPROXY_V1
. Setelan defaultnya adalahNONE
.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 ke GCPBackendPolicy
untuk mengamankan layanan backend Anda.
Secara default, Gateway tidak menetapkan dan melampirkan kebijakan keamanan backend Google Cloud Armor.
Pastikan Anda membuat kebijakan keamanan backend Google Cloud Armor sebelum merujuk kebijakan di GCPBackendPolicy
.
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
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
perlu mengonfigurasi IAP secara eksplisit dalam GCPBackendPolicy
.
Untuk mengonfigurasi IAP dengan Gateway, lakukan hal berikut:
Aktifkan IAP untuk GKE Jangan mengonfigurasi backend (Mengonfigurasi BackendConfig) karena
BackendConfig
hanya valid jika terjadi deployment Ingress.Buat Secret untuk IAP:
Buka halaman Kredensial. Tombol: Membuka halaman Kredensial.
Klik nama klien dan download file klien OAuth.
Dari file klien OAuth, salin secret OAuth di papan klip.
Buat file dengan nama
iap-secret.txt
.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
Untuk menentukan kebijakan IAP yang merujuk secret:
Buat manifes
GCPBackendPolicy
berikut, ganti masing-masingSECRET_NAME
danCLIENT_ID
. Simpan manifes sebagaibackend-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
Terapkan manifes
backend-policy.yaml
:kubectl apply -f backend-policy.yaml
Verifikasi konfigurasi Anda:
Pastikan kebijakan diterapkan setelah membuat
GCPBackendPolicy
dengan IAP:kubectl get gcpbackendpolicy
Outputnya mirip dengan hal berikut ini:
NAME AGE backend-policy 45m
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
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 Anda, setelan localityLbPolicy
Gateway ditetapkan ke MAGLEV
.
Jika Anda menghapus konfigurasi afinitas sesi dari GCPBackendPolicy
,
Gateway akan mengembalikan setelan localityLbPolicy
ke nilai default, ROUND_ROBIN
.
Nilai ini ditetapkan secara otomatis di layanan backend yang dikelola GKE (dilampirkan ke load balancer) dan tidak tercermin dalam output perintah gcloud CLI, di UI, atau dengan Terraform.
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
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
Anda dapat menggunakan opsi berikut untuk sessionAffinity.type
: CLIENT_IP
,
CLIENT_IP_PROTO
, CLIENT_IP_PORT_PROTO
, GENERATED_COOKIE
, HEADER_FIELD
,
HTTP_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
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.
Anda dapat menonaktifkan logging akses di Gateway menggunakan GCPBackendPolicy
dengan tiga cara:
- Anda dapat keluar dari
GCPBackendPolicy
tanpa bagianlogging
- Anda dapat menetapkan
logging.enabled
kefalse
- Anda dapat menetapkan
logging.enabled
ketrue
dan menetapkanlogging.sampleRate
ke0
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
Manifes ini memiliki kolom berikut:
enable: true
: secara eksplisit mengaktifkan logging akses. 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 jikaenable
ditetapkan ketrue
.sampleRate
adalah kolom opsional, tetapi jika dikonfigurasi,enable: true
juga harus ditetapkan. Jikaenable
ditetapkan ketrue
dansampleRate
tidak disediakan, GKE menetapkanenable
kefalse
.
Pemecahan masalah
Beberapa GCPBackendPolicy
dilampirkan 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 Gateway GKE. Lihat Pembatasan dan Batasan untuk mengetahui detail selengkapnya.
Solusi:
Konfigurasikan satu GCPBackendPolicy
yang mencakup semua konfigurasi kustom dan
lampirkan ke Service
atau ServiceImport
.
Langkah selanjutnya
- Pelajari Pengontrol gateway lebih lanjut.
- Pelajari cara mereferensikan Gateway dari resource.