Dokumen ini menunjukkan cara mengekspos aplikasi yang berjalan di cluster Google Kubernetes Engine (GKE) ke internet menggunakan Layanan LoadBalancer eksternal protokol campuran untuk traffic TCP dan UDP.
Untuk mempelajari lebih lanjut Load Balancer Jaringan passthrough eksternal, lihat Load Balancer Jaringan passthrough eksternal berbasis layanan backend.
Ringkasan
Anda dapat mengekspos aplikasi yang menggunakan protokol TCP dan UDP dengan menggunakan dua Layanan LoadBalancer GKE terpisah dengan alamat IP bersama yang dikoordinasikan secara manual. Namun, pendekatan ini tidak efisien karena memerlukan pengelolaan beberapa Layanan untuk satu aplikasi dan dapat menyebabkan masalah seperti error konfigurasi atau kuota alamat IP yang habis.
Layanan LoadBalancer protokol campuran memungkinkan Anda menggunakan satu Layanan untuk mengelola traffic untuk TCP dan UDP. Menggunakan satu Layanan menyederhanakan konfigurasi Anda dengan memungkinkan Anda menggunakan satu alamat IPv4 dan sekumpulan aturan penerusan yang digabungkan untuk kedua protokol. Fitur ini didukung untuk Load Balancer Jaringan passthrough eksternal.
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. gcloud CLI versi sebelumnya mungkin tidak mendukung menjalankan perintah dalam dokumen ini.
- Pastikan Anda sudah memiliki cluster Autopilot atau Standard. Untuk membuat cluster baru, lihat Membuat cluster Autopilot.
Persyaratan
Untuk membuat Layanan LoadBalancer eksternal yang menggunakan protokol campuran, cluster Anda harus memenuhi persyaratan berikut:
- Load balancing protokol campuran hanya tersedia di cluster yang baru dibuat pada versi 1.34.1-gke.2190000 atau yang lebih baru.
- Anda harus mengaktifkan add-on
HttpLoadBalancingdi cluster Anda. - Untuk Service LoadBalancer eksternal baru, guna menerapkan load balancer, tetapkan
kolom
spec.loadBalancerClasskenetworking.gke.io/l4-regional-externaldalam manifes Service. Untuk Layanan yang sudah ada, manifes Anda sudah memiliki anotasicloud.google.com/l4-rbs: "enabled", dan Anda dapat membiarkan anotasi tersebut apa adanya.
Batasan
- Load balancer protokol campuran hanya mendukung alamat IPv4.
Anda tidak dapat menggunakan protokol campuran dalam manifes Layanan dengan finalizer berikut:
gke.networking.io/l4-ilb-v1gke.networking.io/l4-netlb-v1
Jika manifes Anda memiliki finalizer ini, Anda harus menghapus dan membuat ulang Layanan sesuai dengan persyaratan sebelumnya.
Harga
Google Cloud menagih Anda per aturan penerusan, untuk alamat IP eksternal apa pun, dan untuk data yang dikirim. Tabel berikut menjelaskan jumlah aturan penerusan dan alamat IP eksternal yang digunakan untuk konfigurasi tertentu. Untuk mengetahui informasi selengkapnya, lihat Harga jaringan VPC.
| Jenis | Lapisan Transport | Lapisan Internet | Jumlah Aturan Penerusan | Jumlah Alamat IP Eksternal |
|---|---|---|---|---|
| Eksternal | Tunggal (TCP atau UDP) | IPv4 | 1 | 1 |
| IPv6 | 1 | 1 | ||
| IPv4 dan IPv6(DualStack) | 2 | 2 | ||
| Campuran (TCP dan UDP) | IPv4 | 2 | 1 |
Men-deploy workload
Bagian ini menunjukkan cara men-deploy contoh workload yang memproses port TCP dan UDP. Perhatikan bahwa konfigurasi Deployment sama, baik Anda menggunakan Layanan LoadBalancer protokol campuran atau dua Layanan LoadBalancer protokol tunggal yang terpisah.
Manifes berikut adalah untuk aplikasi contoh yang memproses traffic TCP dan UDP di port 8080. Simpan manifes berikut sebagai
mixed-app-deployment.yaml:apiVersion: apps/v1 kind: Deployment metadata: name: mixed-app-deployment spec: replicas: 3 selector: matchLabels: app: mixed-app template: metadata: labels: app: mixed-app spec: containers: - image: gcr.io/kubernetes-e2e-test-images/agnhost:2.6 name: agnhost args: ["serve-hostname", "--port=8080", "--tcp=true", "--udp=true", "--http=false"] ports: - name: tcp8080 protocol: TCP containerPort: 8080 - name: udp8080 protocol: UDP containerPort: 8080Terapkan manifes ke cluster Anda:
kubectl apply -f mixed-app-deployment.yaml
Membuat load balancer protokol campuran
Buat Layanan berjenis LoadBalancer yang mengekspos deployment ke traffic TCP dan UDP.
Simpan manifes berikut sebagai
mixed-protocol-lb.yaml:apiVersion: v1 kind: Service metadata: name: mixed-protocol-lb spec: loadBalancerClass: "networking.gke.io/l4-regional-external" type: LoadBalancer selector: app: mixed-app ports: - name: tcp-port protocol: TCP port: 8080 - name: udp-port protocol: UDP port: 8080Service sebelumnya memiliki dua port, satu untuk TCP dan satu untuk UDP, keduanya di port 8080.
Terapkan manifes ke cluster Anda:
kubectl apply --server-side -f mixed-protocol-lb.yaml
Memverifikasi load balancer protokol campuran
Setelah membuat Layanan, pastikan GKE berhasil membuat load balancer.
Periksa Layanan:
kubectl describe service mixed-protocol-lbOutput akan menampilkan alamat IP eksternal load balancer dan aturan penerusan untuk TCP dan UDP. Verifikasi detail berikut dalam output:
- Kolom
status.loadBalancer.ingress.ipdiisi. - Pastikan anotasi berikut untuk load balancer eksternal Anda ada:
service.kubernetes.io/tcp-forwarding-ruleservice.kubernetes.io/udp-forwarding-rule
- Bagian
Eventstidak berisi pesan error.
- Kolom
Memperbarui load balancer protokol campuran
Anda dapat memperbarui port pada load balancer protokol campuran dengan mengedit manifes Service. Untuk mengedit Service, jalankan perintah berikut:
kubectl edit service SERVICE_NAME
Ganti SERVICE_NAME dengan nama Layanan Anda.
Memperbarui port
Untuk memperbarui port pada load balancer protokol campuran, ubah bagian ports
manifes Service. Anda dapat menambahkan, menghapus, atau mengubah port.
Contoh berikut menambahkan port UDP untuk streaming dan port TCP untuk metadata server game:
apiVersion: v1
kind: Service
metadata:
name: mixed-protocol-lb
spec:
loadBalancerClass: "networking.gke.io/l4-regional-external"
type: LoadBalancer
selector:
app: mixed-app
ports:
- name: tcp-port
protocol: TCP
port: 8080
- name: streaming
protocol: UDP
port: 10100
- name: gameserver-metadata
protocol: TCP
port: 10400
- name: https
protocol: TCP
port: 443
Memperbarui load balancer protokol tunggal ke protokol campuran
Untuk mengubah load balancer protokol tunggal menjadi load balancer protokol campuran, edit Layanan untuk menyertakan port untuk protokol TCP dan UDP.
Contoh berikut menambahkan port UDP untuk DNS ke load balancer khusus TCP yang ada:
apiVersion: v1
kind: Service
metadata:
name: already-existing-single-protocol-lb
spec:
loadBalancerClass: "networking.gke.io/l4-regional-external"
type: LoadBalancer
selector:
app: mixed-app
ports:
- name: http
protocol: TCP
port: 80
- name: https
protocol: TCP
port: 443
- name: dns
protocol: UDP
port: 53
Memperbarui load balancer protokol campuran ke protokol tunggal
Untuk mengubah load balancer protokol campuran menjadi load balancer protokol tunggal, hapus semua port untuk salah satu protokol.
Contoh berikut menghapus port UDP untuk DNS, yang mengonversi load balancer menjadi hanya TCP:
apiVersion: v1
kind: Service
metadata:
name: already-existing-mixed-protocol-lb
spec:
loadBalancerClass: "networking.gke.io/l4-regional-external"
type: LoadBalancer
selector:
app: mixed-app
ports:
- name: http
protocol: TCP
port: 80
- name: https
protocol: TCP
port: 443
Menghapus LoadBalancer protokol campuran
Untuk menghapus Layanan LoadBalancer eksternal mixed-protocol-lb, jalankan
perintah berikut:
kubectl delete service mixed-protocol-lb
GKE akan otomatis menghapus semua resource load balancer yang dibuat untuk Layanan.
Pemecahan masalah
Bagian ini menjelaskan cara menyelesaikan masalah umum terkait Layanan LoadBalancer dengan protokol campuran.
Memeriksa peristiwa error
Langkah pertama dalam memecahkan masalah adalah memeriksa peristiwa yang terkait dengan Layanan Anda.
Dapatkan detail Layanan Anda:
kubectl describe service mixed-protocol-lbTinjau bagian
Eventsdi akhir output untuk melihat pesan error.
Error: Protokol Campuran tidak didukung untuk LoadBalancer
Jika Anda membuat Layanan dengan anotasi cloud.google.com/l4-rbs: "enabled", Anda mungkin melihat peristiwa peringatan dari pengontrol layanan asli setelah membuat load balancer protokol campuran: mixed-protocol is not
supported for LoadBalancer.
Anda dapat mengabaikan pesan ini dengan aman karena pengontrol baru, yang mendukung protokol campuran, menyediakan load balancer dengan benar.
Definisi port hilang setelah update
Gejala:
Saat Anda memperbarui Layanan yang menggunakan port yang sama untuk TCP dan UDP (misalnya, port 8080), salah satu definisi port tidak ada dalam Layanan yang diperbarui.
Penyebab:
Ini adalah masalah umum di Kubernetes. Saat Anda memperbarui Layanan dengan beberapa
protokol di port yang sama, penghitungan patch sisi klien dapat menggabungkan
daftar port secara salah, yang menyebabkan salah satu definisi port dihapus.
Masalah ini memengaruhi klien yang menggunakan patching sisi klien, seperti kubectl apply dan
klien Go dengan patch gabungan.
Solusi:
Solusi untuk masalah ini bergantung pada klien Anda.
Untuk kubectl: Gunakan tanda
--server-sidedengankubectl apply:kubectl apply --server-side -f YOUR_SERVICE_MANIFEST.yamlGanti
YOUR_SERVICE_MANIFESTdengan nama Manifes layanan Anda.Untuk go-client: Jangan gunakan patch gabungan. Sebagai gantinya, gunakan panggilan update untuk mengganti Layanan. Hal ini memerlukan permintaan
PUTHTTP dengan spesifikasi objek Service secara keseluruhan.
Langkah berikutnya
- Pelajari lebih lanjut cara mengekspos aplikasi menggunakan Service.
- Baca Layanan LoadBalancer.