Halaman ini menunjukkan cara mengonfigurasi Load Balancer Aplikasi eksternal dengan membuat objek Ingress Kubernetes.
Sebelum membaca halaman ini, pastikan Anda sudah memahami konsep jaringan GKE.
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
.
Mengaktifkan add-on HttpLoadBalancing
Cluster Anda harus mengaktifkan add-on HttpLoadBalancing
. Add-on ini diaktifkan secara default. Dalam cluster Autopilot, Anda tidak dapat menonaktifkan add-on ini.
Anda dapat mengaktifkan add-on HttpLoadBalancing
menggunakan Konsol Google Cloud atau Google Cloud CLI.
Konsol
Buka halaman Google Kubernetes Engine di konsol Google Cloud.
Klik nama cluster yang ingin diubah.
Di bagian Networking, di kolom HTTP Load Balancing, klik edit Edit HTTP Load Balancing.
Centang kotak Enable HTTP load balancing.
Klik Save Changes.
gcloud
gcloud container clusters update CLUSTER_NAME --update-addons=HttpLoadBalancing=ENABLED
Ganti CLUSTER_NAME
dengan nama cluster Anda.
Membuat alamat IP statis
Load Balancer Aplikasi eksternal menyediakan satu alamat IP stabil yang dapat Anda gunakan untuk merutekan permintaan ke satu atau beberapa Layanan. Jika menginginkan alamat IP permanen, Anda harus mencadangkan alamat IP eksternal statis global sebelum membuat Ingress.
Jika Anda mengubah Ingress yang ada untuk menggunakan alamat IP statis, bukan alamat IP sementara, GKE dapat mengubah alamat IP load balancer saat GKE membuat ulang aturan penerusan load balancer.
Membuat Load Balancer Aplikasi eksternal
Dalam latihan ini, Anda akan mengonfigurasi Load Balancer Aplikasi eksternal untuk merutekan permintaan ke berbagai Layanan, bergantung pada jalur URL.
Untuk mengikuti panduan langkah demi langkah tugas ini langsung di Konsol Google Cloud, klik Pandu saya:
Membuat Deployment dan Layanan
Buat dua Deployment dengan Layanan bernama hello-world-1
dan hello-world-2
:
Simpan manifes berikut sebagai
hello-world-deployment-1.yaml
:apiVersion: apps/v1 kind: Deployment metadata: name: hello-world-deployment-1 spec: selector: matchLabels: greeting: hello version: one replicas: 3 template: metadata: labels: greeting: hello version: one spec: containers: - name: hello-app-1 image: "us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0" env: - name: "PORT" value: "50000"
Manifes ini menjelaskan contoh Deployment dengan tiga replika.
Terapkan manifes ke cluster:
kubectl apply -f hello-world-deployment-1.yaml
Simpan manifes berikut sebagai
hello-world-service-1.yaml
:apiVersion: v1 kind: Service metadata: name: hello-world-1 spec: type: NodePort selector: greeting: hello version: one ports: - protocol: TCP port: 60000 targetPort: 50000
Manifes ini menjelaskan Layanan dengan properti berikut:
- Setiap Pod yang memiliki label
greeting: hello
dan labelversion: one
adalah anggota Layanan. - GKE meneruskan permintaan yang dikirim ke Layanan di TCP port 60000 ke salah satu Pod anggota di port TCP 50000.
- Jenis Layanan adalah
NodePort
, yang diperlukan kecuali jika Anda menggunakan load balancing berbasis container. Jika menggunakan load balancing berbasis container, tidak ada batasan jenis layanan. Sebaiknya gunakantype: ClusterIP
.
- Setiap Pod yang memiliki label
Terapkan manifes ke cluster:
kubectl apply -f hello-world-service-1.yaml
Simpan manifes berikut sebagai
hello-world-deployment-2.yaml
:apiVersion: apps/v1 kind: Deployment metadata: name: hello-world-deployment-2 spec: selector: matchLabels: greeting: hello version: two replicas: 3 template: metadata: labels: greeting: hello version: two spec: containers: - name: hello-app-2 image: "us-docker.pkg.dev/google-samples/containers/gke/hello-app:2.0" env: - name: "PORT" value: "8080"
Manifes ini menjelaskan contoh Deployment dengan tiga replika.
Terapkan manifes ke cluster:
kubectl apply -f hello-world-deployment-2.yaml
Simpan manifes berikut sebagai
hello-world-service-2.yaml
:apiVersion: v1 kind: Service metadata: name: hello-world-2 spec: type: NodePort selector: greeting: hello version: two ports: - protocol: TCP port: 80 targetPort: 8080
Manifes ini menjelaskan Layanan dengan properti berikut:
- Setiap Pod yang memiliki label
greeting: hello
dan labelversion: two
adalah anggota Layanan. - GKE meneruskan permintaan yang dikirim ke Layanan di TCP port 80 ke salah satu Pod anggota di port TCP 8080.
- Setiap Pod yang memiliki label
Terapkan manifes ke cluster:
kubectl apply -f hello-world-service-2.yaml
Membuat Ingress
Buat Ingress yang menentukan aturan untuk permintaan pemilihan rute bergantung pada jalur URL dalam permintaan. Saat Anda membuat Ingress, pengontrol Ingress GKE akan membuat dan mengonfigurasi Load Balancer Aplikasi eksternal.
Simpan manifes berikut sebagai
my-ingress.yaml
:apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: my-ingress annotations: # If the class annotation is not specified it defaults to "gce". kubernetes.io/ingress.class: "gce" spec: rules: - http: paths: - path: /* pathType: ImplementationSpecific backend: service: name: hello-world-1 port: number: 60000 - path: /v2 pathType: ImplementationSpecific backend: service: name: hello-world-2 port: number: 80
Manifes ini menjelaskan Ingress dengan properti berikut:
Ada dua class Ingress GKE. Untuk menentukan class Ingress, Anda harus menggunakan anotasi
kubernetes.io/ingress.class
. Anda tidak dapat menentukan Ingress GKE menggunakanspec.ingressClassName
.Class
gce
men-deploy Load Balancer Aplikasi eksternal.Class
gce-internal
men-deploy Load Balancer Aplikasi internal.Saat Anda men-deploy resource Ingress tanpa anotasi
spec.ingressClassName
dankubernetes.io/ingress.class
, GKE akan membuat Load Balancer Aplikasi eksternal. Perilaku ini sama dengan yang terjadi jika Anda menentukan anotasikubernetes.io/ingress.class: gce
. Untuk informasi selengkapnya, lihat Perilaku pengontrol Ingress GKE.GKE membuat Layanan backend Google Cloud untuk setiap
backend.service
. Setiap layanan backend terkait dengan Layanan Kubernetes, dan setiap layanan backend harus merujuk ke health check Google Cloud. Health check ini berbeda dengan pemeriksaan keaktifan atau kesiapan Kubernetes karena health check diterapkan di luar cluster. Untuk mempelajari lebih lanjut, lihat Health checkSaat klien mengirim permintaan ke load balancer dengan jalur URL
/
, GKE akan meneruskan permintaan tersebut ke Layananhello-world-1
di port 60000. Saat klien mengirim permintaan ke load balancer menggunakan jalur URL/v2
, GKE akan meneruskan permintaan tersebut ke Layananhello-world-2
pada port 80. Untuk informasi selengkapnya tentang propertipath
danpathType
, lihat Jalur URL.
Terapkan manifes ke cluster:
kubectl apply -f my-ingress.yaml
Menguji Load Balancer Aplikasi eksternal
Tunggu sekitar lima menit hingga load balancer dikonfigurasi, lalu uji Load Balancer Aplikasi eksternal:
Lihat Ingress:
kubectl get ingress my-ingress --output yaml
Output akan menampilkan alamat IP Load Balancer Aplikasi eksternal:
status: loadBalancer: ingress: - ip: 203.0.113.1
Uji jalur
/
:curl LOAD_BALANCER_IP_ADDRESS/
Ganti
LOAD_BALANCER_IP_ADDRESS
dengan alamat IP eksternal load balancer.Output akan mirip dengan yang berikut ini:
Hello, world! Version: 1.0.0 Hostname: ...
Jika output berisi error 404, tunggu beberapa menit.
Uji jalur
/v2
:curl load-balancer-ip/v2
Output akan mirip dengan yang berikut ini:
Hello, world! Version: 2.0.0 Hostname: ...
Cara kerja Ingress untuk load balancing eksternal
Load Balancer Aplikasi eksternal bertindak sebagai proxy antara klien dan aplikasi Anda. Jika Anda ingin menerima permintaan HTTPS dari klien, load balancer harus memiliki sertifikat agar dapat membuktikan identitasnya kepada klien. Load balancer juga harus memiliki kunci pribadi untuk menyelesaikan handshake HTTPS. Untuk informasi selengkapnya, lihat:
- Menyiapkan HTTPS (TLS) antara klien dan load balancer.
- Menggunakan beberapa sertifikat SSL di Load Balancing HTTPS dengan Ingress.
Jalur URL
Satu-satunya karakter pengganti yang didukung untuk kolom path
dari suatu Ingress adalah karakter *
. Karakter *
harus mengikuti garis miring (/
) dan harus merupakan karakter terakhir dalam pola. Misalnya, /*
, /foo/*
, dan /foo/bar/*
adalah pola yang valid, tetapi *
, /foo/bar*
, dan /foo/*/bar
itu tidak.
Pola yang lebih spesifik lebih diutamakan daripada pola yang kurang spesifik. Jika Anda memiliki /foo/*
dan /foo/bar/*
, /foo/bar/bat
akan diambil untuk mencocokkan /foo/bar/*
. Untuk informasi selengkapnya tentang batasan jalur dan pencocokan pola, lihat dokumentasi Maps URL.
Untuk cluster GKE yang menjalankan versi lebih lama dari 1.21.3-gke.1600, satu-satunya nilai yang didukung untuk kolom pathType
adalah ImplementationSpecific
.
Untuk cluster yang menjalankan versi 1.21.3-gke.1600 atau yang lebih baru, nilai Prefix
dan Exact
juga didukung untuk pathType
.
Menonaktifkan HTTP
Jika ingin semua traffic antara klien dan load balancer menggunakan HTTPS, Anda dapat menonaktifkan HTTP. Untuk informasi selengkapnya, lihat Menonaktifkan HTTP.
HTTPS antara load balancer dan aplikasi
Jika aplikasi Anda, yang berjalan di Pod GKE, dapat menerima permintaan HTTPS, Anda dapat mengonfigurasi load balancer untuk menggunakan HTTPS saat meneruskan permintaan ke aplikasi Anda. Untuk informasi selengkapnya, lihat HTTPS (TLS) antara load balancer dan aplikasi.
HTTP/2 antara klien dan load balancer
Klien dapat menggunakan HTTP/2 untuk mengirimkan permintaan ke load balancer. Konfigurasi tidak diperlukan.
HTTP/2 antara load balancer dan aplikasi
Jika aplikasi Anda, yang berjalan di Pod GKE, mampu menerima permintaan HTTP/2, Anda dapat mengonfigurasi load balancer untuk menggunakan HTTP/2 saat meneruskan permintaan ke aplikasi Anda. Untuk informasi selengkapnya, lihat HTTP/2 untuk load balancing dengan Ingress.
Grup endpoint jaringan
Jika cluster Anda mendukung Load balancing berbasis container, sebaiknya gunakan grup endpoint jaringan (NEG). Untuk GKE cluster 1.17 dan yang lebih baru, serta dalam kondisi tertentu, load balancing berbasis container bersifat default dan tidak memerlukan anotasi Layanan cloud.google.com/neg: '{"ingress": true}'
eksplisit.
VPC Bersama
Jika cluster GKE tempat Anda men-deploy resource Ingress berada dalam project layanan, dan Anda ingin bidang kontrol GKE mengelola resource firewall di project host Anda, akun layanan GKE project layanan tersebut harus memberikan izin IAM yang sesuai pada project host sesuai Mengelola resource firewall untuk cluster dengan VPC Bersama. Hal ini memungkinkan pengontrol Ingress membuat aturan firewall untuk mengizinkan traffic masuk dan traffic untuk health check Google Cloud.
Berikut contoh peristiwa yang mungkin ada dalam log resource Ingress. Error ini terjadi saat pengontrol Ingress tidak dapat membuat aturan firewall guna mengizinkan traffic masuk untuk health check Google Cloud jika izin tidak dikonfigurasi dengan benar.
Firewall change required by security admin: `gcloud compute firewall-rules update <RULE_NAME> --description "GCE L7 firewall rule" --allow tcp:<PORT> --source-ranges 130.211.0.0/22,35.191.0.0/16 --target-tags <TARGET_TAG> --project <HOST_PROJECT>
Jika memilih untuk menyediakan aturan firewall secara manual dari project host, Anda dapat membisukan peristiwa firewallXPNError
dengan menambahkan anotasi networking.gke.io/suppress-firewall-xpn-error: "true"
ke resource Ingress.
Ringkasan anotasi Ingress eksternal
Anotasi Ingress
Anotasi | Deskripsi |
---|---|
kubernetes.io/ingress.allow-http | Menentukan apakah traffic HTTP diizinkan antara klien dan load balancer HTTP(S). Nilai yang mungkin adalah "benar" dan "salah". Defaultnya adalah "benar". Lihat Menonaktifkan HTTP. |
ingress.gcp.kubernetes.io/pre-shared-cert | Gunakan anotasi ini untuk melampirkan resource sertifikat ke resource Ingress GKE. Untuk informasi selengkapnya, lihat Menggunakan beberapa sertifikat SSL dengan Load Balancer Aplikasi eksternal. |
kubernetes.io/ingress.global-static-ip-name | Gunakan anotasi ini untuk menentukan bahwa load balancer harus menggunakan alamat IP eksternal statis yang telah Anda buat sebelumnya. Lihat Alamat IP statis untuk load balancer HTTP(S). |
networking.gke.io/v1beta1.FrontendConfig | Gunakan anotasi ini untuk menyesuaikan konfigurasi load balancer yang ditampilkan kepada klien. Untuk informasi selengkapnya, lihat Konfigurasi Ingress. |
networking.gke.io/suppress-firewall-xpn-error | Untuk Load Balancer Ingress, jika Kubernetes tidak dapat mengubah aturan firewall karena izin tidak memadai, peristiwa firewallXPNError akan dibuat setiap beberapa menit. Di GLBC 1.4 dan yang lebih baru, Anda dapat membisukan peristiwa firewallXPNError dengan menambahkan anotasi networking.gke.io/suppress-firewall-xpn-error: "true" ke resource masuk. Anda dapat menghapus anotasi ini untuk membunyikannya. Nilai yang mungkin adalah true dan false .
Nilai defaultnya adalah false .
|
Anotasi layanan yang terkait dengan Ingress
Anotasi | Deskripsi |
---|---|
cloud.google.com/app-protocols | Gunakan anotasi ini untuk menetapkan protokol komunikasi antara load balancer dan aplikasi. Protokol yang memungkinkan adalah HTTP, HTTPS, dan HTTP2. Lihat HTTPS antara load balancer dan aplikasi serta HTTP/2 untuk load balancing dengan Ingress. |
cloud.google.com/backend-config | Gunakan anotasi ini untuk mengonfigurasi layanan backend yang terkait dengan Layanan. Untuk informasi selengkapnya, lihat Konfigurasi Ingress. |
cloud.google.com/neg | Gunakan anotasi ini untuk menentukan bahwa load balancer harus menggunakan grup endpoint jaringan. Lihat Menggunakan Load Balancing Berbasis Container. |
Langkah berikutnya
- Baca ringkasan konseptual tentang Ingress untuk Load Balancer Aplikasi eksternal di GKE.
- Coba tutorial di Menyiapkan Load Balancer Aplikasi eksternal dengan Ingress.
Baca ringkasan konseptual Layanan di GKE.
Terapkan Ingress eksternal dasar.