Halaman ini menunjukkan cara mengonfigurasi Load Balancer Aplikasi eksternal dengan membuat objek Ingress Kubernetes.
Sebelum membaca halaman ini, pastikan Anda memahami konsep jaringan GKE.
Sebelum memulai
Sebelum memulai, pastikan Anda telah melakukan 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 perintah
gcloud components update. Versi gcloud CLI yang lebih lama mungkin tidak mendukung perintah yang dijalankan dalam dokumen ini.
- Pastikan Anda memiliki cluster Autopilot atau Standard. Untuk membuat cluster baru, lihat Membuat cluster Autopilot.
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 Google Cloud konsol atau
Google Cloud CLI.
Konsol
Buka halaman Google Kubernetes Engine di Google Cloud konsol.
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 untuk tugas ini langsung di Google Cloud konsol, 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.yamlSimpan 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: 50000Manifes ini menjelaskan Layanan dengan properti berikut:
- Setiap Pod yang memiliki label
greeting: hellodan labelversion: oneadalah 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, tetapi sebaiknya gunakan Layanantype ClusterIPkecuali jika Anda secara eksplisit memerlukan nodePort yang disediakan oleh Layanan NodePort. Layanan LoadBalancer tidak didukung sebagai backend Ingress.
- Setiap Pod yang memiliki label
Terapkan manifes ke cluster:
kubectl apply -f hello-world-service-1.yamlSimpan 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.yamlSimpan 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: 8080Manifes ini menjelaskan Layanan dengan properti berikut:
- Setiap Pod yang memiliki label
greeting: hellodan labelversion: twoadalah 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: 80Manifes 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
gcemen-deploy Load Balancer Aplikasi eksternal.Class
gce-internalmen-deploy Load Balancer Aplikasi internal.Saat Anda men-deploy resource Ingress tanpa anotasi
spec.ingressClassNamedankubernetes.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 Google Cloud Layanan backend untuk setiap
backend.service. Setiap layanan backend terkait dengan Layanan Kubernetes, dan setiap layanan backend harus merujuk ke Google Cloud health check. 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 kehello-world-1Layanan pada port 60000. Saat klien mengirim permintaan ke load balancer menggunakan jalur URL/v2, GKE akan meneruskan permintaan tersebut ke Layananhello-world-2pada port 80. Untuk informasi selengkapnya tentangpathdanpathTypeproperti, lihat Jalur URL.Jika Anda ingin mencadangkan alamat IP eksternal statis global, sertakan anotasi
kubernetes.io/ingress.global-static-ip-namedalam objek Ingress seperti yang ditunjukkan di sini:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: my-ingress annotations: kubernetes.io/ingress.global-static-ip-name: my-static-address ```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 yamlOutput akan menampilkan alamat IP Load Balancer Aplikasi eksternal:
status: loadBalancer: ingress: - ip: 203.0.113.1Uji jalur
/:curl LOAD_BALANCER_IP_ADDRESS/Ganti
LOAD_BALANCER_IP_ADDRESSdengan 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/v2Output akan mirip dengan yang berikut ini:
Hello, world! Version: 2.0.0 Hostname: ...
Cara kerja Ingress untuk load balancing eksternal
Bagian ini menjelaskan komponen dan konfigurasi yang memungkinkan load balancing eksternal untuk aplikasi GKE Anda, termasuk pencocokan jalur URL, grup endpoint jaringan, dan integrasi VPC Bersama.
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.
Network endpoint groups
Jika cluster Anda mendukung
Load balancing berbasis container,
sebaiknya gunakan grup endpoint jaringan (NEG). Saat Anda membuat Ingress, GKE akan membuat Load Balancer Aplikasi di project, dan NEG dibuat di setiap zona tempat cluster berjalan. Endpoint di NEG dan endpoint Layanan tetap disinkronkan. Untuk GKE
cluster 1.17 dan yang lebih baru, load balancing berbasis container bersifat default dan tidak
memerlukan anotasi Layanan cloud.google.com/neg: '{"ingress": true}' eksplisit, dalam kondisi tertentu.
Untuk cluster di mana NEG bukan default, sangat direkomendasikan untuk menggunakan load balancing berbasis container, tetapi harus diaktifkan secara eksplisit per Layanan. Anotasi harus diterapkan ke Layanan dengan cara berikut:
kind: Service
...
annotations:
cloud.google.com/neg: '{"ingress": true}'
...
Saat Anda menambahkan anotasi ini, BackendService baru akan dibuat untuk Layanan yang ada. Hal ini dapat mengakibatkan penonaktifan sementara untuk Layanan Anda.
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 Google Cloud health check.
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 Google Cloud health check 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
networking.gke.io/suppress-firewall-xpn-error: "true" anotasi ke
resource Ingress.
Ringkasan anotasi Ingress eksternal
Anda dapat menggunakan anotasi berikut untuk mengonfigurasi perilaku resource Ingress eksternal dan objek Layanan Kubernetes terkait.
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. |
| 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.