Dokumen ini menunjukkan cara mengonfigurasi Google Distributed Cloud untuk menggunakan load balancing yang dipaketkan dengan load balancer MetalLB. Dokumen ini ditujukan untuk Spesialis jaringan yang mendesain dan merancang jaringan untuk organisasi mereka, serta menginstal, mengonfigurasi, dan mendukung peralatan jaringan. Untuk mempelajari lebih lanjut peran umum dan contoh tugas yang kami referensikan dalam konten Google Cloud, lihat Peran dan tugas pengguna GKE umum.
Di Google Distributed Cloud, MetalLB berjalan dalam mode lapisan-2.
Contoh konfigurasi MetalLB
Berikut adalah contoh konfigurasi untuk cluster yang menjalankan load balancer MetalLB:
Diagram sebelumnya menunjukkan deployment MetalLB. MetalLB berjalan langsung di node cluster. Dalam contoh ini, cluster admin dan cluster pengguna berada di dua VLAN terpisah, dan setiap cluster berada di subnet terpisah:
| Cluster | Subnet |
|---|---|
| Cluster admin | 172.16.20.0/24 |
| Cluster pengguna | 172.16.40.0/24 |
admin-cluster.yaml
Bagian berikut dari file konfigurasi cluster admin menunjukkan konfigurasi yang terlihat dalam diagram sebelumnya:
Bidang kontrol ketersediaan tinggi
Load balancer MetalLB
VIP di MetalLB untuk server Kubernetes API cluster admin
network:
...
controlPlaneIPBlock:
netmask: "255.255.255.0"
gateway: "172.16.20.1"
ips:
- ip: "172.16.20.50"
hostname: "admin-cp-1"
- ip: "172.16.20.51"
hostname: "admin-cp-2"
- ip: "172.16.20.52"
hostname: "admin-cp-3"
loadBalancer:
kind: "MetalLB"
...
vips:
controlPlaneVIP: "172.16.20.100"
...
adminMaster:
cpus: 4
memoryMB: 16384
replicas: 3
user-cluster.yaml
Bagian berikut dari file konfigurasi cluster pengguna menunjukkan konfigurasi:
Kumpulan alamat yang dapat dipilih oleh pengontrol MetalLB dan ditetapkan ke Service dengan jenis
LoadBalancer. VIP ingress berada di pool ini.VIP yang ditetapkan untuk server Kubernetes API cluster pengguna, dan VIP ingress yang telah Anda pilih untuk dikonfigurasi untuk proxy ingress.
Node pool yang diaktifkan untuk menggunakan MetalLB. MetalLB akan di-deploy pada node di node pool ini.
enableControlplaneV2: true
...
network:
hostConfig:
...
ipMode:
type: "static"
ipBlockFilePath: "config-folder/user-cluster-ipblock.yaml"
...
controlPlaneIPBlock:
netmask: "255.255.255.0"
gateway: "172.16.40.1"
ips:
- ip: "172.16.40.21"
hostname: "user-cp"
loadBalancer:
kind: MetalLB
metalLB:
addressPools:
- name: "address-pool-1"
addresses:
- "172.16.40.101-172.16.40.112
avoidBuggyIPs: true
...
vips:
controlPlaneVIP: "172.16.20.100"
ingressVIP: "172.16.40.101"
...
nodePools:
- name: "node-pool-1"
cpus: 4
memoryMB: 8192
replicas: 3
enableLoadBalancer: true
Konfigurasi dalam contoh sebelumnya menentukan kumpulan alamat yang tersedia untuk Service. Saat developer aplikasi membuat Service jenis LoadBalancer di cluster pengguna, pengontrol MetalLB akan memilih alamat IP dari kumpulan ini.
user-cluster-ipblock.yaml
Contoh file blok IP berikut menunjukkan penetapan alamat IP untuk worker node di cluster pengguna. Hal ini mencakup alamat IP tambahan untuk digunakan selama upgrade, update, dan perbaikan otomatis cluster.
blocks:
- netmask: "255.255.255.0"
gateway: "17.16.40.1"
ips:
- ip: 172.16.40.22
hostname: user-vm-1
- ip: 172.16.40.23
hostname: user-vm-2
- ip: 172.16.40.24
hostname: user-vm-3
- ip: 172.16.40.25
hostname: user-vm-4
- ip: 172.16.40.26
hostname: user-vm-5
- ip: 172.16.40.27
hostname: user-vm-6
Menyiapkan MetalLB
Membuka port firewall
MetalLB menggunakan
library daftar anggota Go
untuk melakukan pemilihan pemimpin. Library memberlist menggunakan port TCP 7946 dan port UDP 7946 untuk bertukar informasi. Pastikan port tersebut dapat diakses untuk traffic masuk dan keluar di semua node load balancer.
Mengaktifkan MetalLB untuk cluster admin baru
Dalam
file konfigurasi cluster admin,
tetapkan loadBalancer.kind ke "MetalLB".
loadBalancer: kind: "MetalLB"
Isi sisa file konfigurasi cluster admin, dan buat cluster admin seperti yang dijelaskan dalam Membuat cluster admin.
Menentukan kumpulan alamat
Pengontrol MetalLB menetapkan alamat IP untuk Service. Saat developer aplikasi membuat Service jenis LoadBalancer di cluster pengguna, pengontrol MetalLB akan otomatis menetapkan alamat IP untuk Service tersebut. Pengontrol MetalLB memilih alamat IP dari kumpulan alamat yang Anda tentukan.
Untuk memastikan cluster pengguna Anda memiliki alamat IP yang cukup, pertimbangkan jumlah maksimum
Service LoadBalancer yang mungkin aktif. Kemudian, tentukan alamat IP yang cukup
di bagian
loadBalancer.metalLB.addressPools
pada file konfigurasi cluster pengguna Anda.
Alamat dalam kumpulan harus dalam format CIDR atau format rentang. Untuk menentukan alamat individual, gunakan CIDR /32. Contoh:
addresses:
- "192.0.2.0/26"
- "192.0.2.64-192.0.2.72"
- "192.0.2.75/32"
Mengecualikan alamat IP yang digunakan untuk tujuan lain
Jangan sertakan alamat IP berikut di kumpulan alamat mana pun:
VIP bidang kontrol:
Alamat IP node bidang kontrol:
Alamat IP gateway:
Alamat IP untuk Service:
Alamat IP untuk Pod:
Alamat IP worker node cluster pengguna
Alamat IP server vCenter, server DNS, server NTP, dan workstation admin
Setelah cluster dibuat, Anda dapat menggunakan gkectl update cluster untuk menambahkan kumpulan alamat IP. Kemampuan Anda untuk mengubah alamat IP di kumpulan alamat yang ada bergantung pada versi cluster dan apakah cluster lanjutan diaktifkan.
Untuk mengetahui informasi selengkapnya, lihat Mengupdate MetalLB.
Mengaktifkan MetalLB untuk cluster pengguna baru
Dalam file konfigurasi cluster pengguna:
- Tetapkan
loadBalancer.kindke"MetalLB". - Tentukan satu atau beberapa kumpulan alamat untuk Layanan. VIP ingress harus berada di salah satu kumpulan ini.
Tetapkan
enableLoadBalancerketrueuntuk setidaknya satu node pool di cluster Anda. Jika ditetapkan ketrue, kolom ini memungkinkan speaker MetalLB berjalan di node dalam pool. Perhatikan bahwa versi node pool load balancer harus cocok dengan versi cluster selama upgrade; ketidaksesuaian versi tidak didukung untuk node pool load balancer.Perhatikan perbedaan berikut dalam perilaku kolom
enableLoadBalancersaatenableAdvancedClusterditetapkan ketrue(cluster lanjutan diaktifkan): Di versi 1.31 saat cluster lanjutan diaktifkan, kolom ini tidak berpengaruh karena speaker MetalLB selalu berjalan di node bidang kontrol cluster pengguna. Di versi 1.32, saat cluster lanjutan diaktifkan, batasan ini telah dihapus, dan Anda harus menentukan setidaknya satu node pool tempat speaker MetalLB berjalan.
Isi sisa file konfigurasi cluster pengguna, dan buat cluster pengguna seperti yang dijelaskan dalam Membuat cluster pengguna.
Penetapan alamat Layanan secara manual
Jika Anda tidak ingin pengontrol MetalLB menetapkan alamat IP secara otomatis dari kumpulan tertentu ke Service, tetapkan kolom manualAssign kumpulan ke true. Kemudian, developer dapat membuat Service jenis LoadBalancer
dan menentukan salah satu alamat dari kumpulan secara manual. Contoh:
loadBalancer:
metalLB:
addressPools:
- name: "my-address-pool-2"
addresses:
- "192.0.2.73-192.0.2.80"
manualAssign: true
Menghindari alamat IP yang bermasalah
Jika Anda menetapkan kolom avoidBuggyIPs dari kumpulan alamat ke true, pengontrol MetalLB tidak akan menggunakan alamat dari kumpulan yang diakhiri dengan .0 atau .255. Hal ini
menghindari masalah perangkat konsumen yang bermasalah yang salah menghapus traffic yang dikirim
ke alamat IP khusus tersebut. Contoh:
loadBalancer:
metalLB:
addressPools:
- name: "my-address-pool-1"
addresses:
- "192.0.2.0/24"
avoidBuggyIPs: true
Membuat Service jenis LoadBalancer
Berikut adalah dua manifes: satu untuk Deployment dan satu untuk Service:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment
spec:
selector:
matchLabels:
greeting: hello
replicas: 3
template:
metadata:
labels:
greeting: hello
spec:
containers:
- name: hello
image: gcr.io/google-samples/hello-app:2.0
---
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
type: LoadBalancer
selector:
greeting: hello
ports:
- name: metal-lb-example-port
protocol: TCP
port: 60000
targetPort: 8080
Perhatikan bahwa manifes Service tidak menentukan alamat IP eksternal. Pengontrol MetalLB akan memilih alamat IP eksternal dari kumpulan alamat yang Anda tentukan dalam file konfigurasi cluster pengguna.
Simpan manifes dalam file bernama my-dep-svc.yaml. Kemudian, buat objek Deployment dan Service:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG apply -f my-dep-svc.yaml
Lihat Service:
kubectl --kubeconfig USER_CLUSTER_KUBECONIFG get service my-service --output wide
Output akan menampilkan alamat IP eksternal yang otomatis ditetapkan ke Service. Contoh:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR my-service LoadBalancer 10.96.2.166 192.0.2.2 60000:31914/TCP 28s
Pastikan alamat IP eksternal yang ditetapkan diambil dari kumpulan alamat yang Anda tentukan dalam file konfigurasi cluster pengguna. Misalnya, 192.0.2.2 berada di kumpulan alamat ini:
metalLB:
addressPools:
- name: "address-pool-1"
addresses:
- "192.0.2.0/24"
- "198.51.100.1-198.51.100.3"
Memanggil Layanan:
curl EXTERNAL_IP_ADDRESS:60000
Output akan menampilkan pesan Hello, world!:
Hello, world! Version: 2.0.0
Mengupdate MetalLB
Setelah membuat cluster, Anda dapat mengupdate kumpulan alamat MetalLB dan kolom enableLoadBalancer di node pool. Buat perubahan yang diinginkan dalam
file konfigurasi cluster pengguna, lalu panggil gkectl update cluster:
gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
Jika cluster lanjutan diaktifkan, Anda tidak dapat mengubah alamat IP kumpulan alamat yang ada.
Penambahan, penghapusan, dan pengurutan ulang alamat IP tidak didukung. Pada versi 1.33
dan yang lebih baru, semua cluster baru adalah cluster lanjutan. Untuk menambahkan alamat IP, tambahkan kumpulan alamat baru yang berisi alamat IP baru, dan biarkan kumpulan alamat yang ada tidak berubah. Misalnya, konfigurasi berikut menambahkan
address-pool-2 dan membiarkan address-pool-1 tidak berubah:
loadBalancer:
kind: MetalLB
metalLB:
addressPools:
- name: "address-pool-1"
addresses:
- "172.16.40.101-172.16.40.112"
avoidBuggyIPs: true
- name: "address-pool-2"
addresses:
- "172.16.40.121-172.16.40.130"
avoidBuggyIPs: true
Pengontrol MetalLB dapat menetapkan alamat IP dari kumpulan alamat mana pun yang tidak memiliki manualAssign yang ditetapkan ke true, sehingga kumpulan alamat baru akan menambahkan kapasitas.
Agar perilaku yang sama tetap berlaku untuk alamat IP baru, tetapkan manualAssign dan
avoidBuggyIPs pada kumpulan alamat baru ke nilai yang sama dengan kumpulan alamat
yang ada.
Untuk mengetahui detail tentang perubahan yang didukung di setiap versi, lihat
kolom addresses
dalam referensi file konfigurasi cluster pengguna.
Pod dan ConfigMap MetalLB
Pengontrol MetalLB berjalan sebagai Deployment, dan speaker MetalLB berjalan sebagai DaemonSet pada node di pool yang memiliki enableLoadBalancer yang ditetapkan ke true. Pengontrol MetalLB mengelola alamat IP yang ditetapkan ke Service. Speaker MetalLB
melakukan pemilihan pemimpin dan mengumumkan VIP Layanan.
Lihat semua Pod MetalLB:
kubectl --kubeconfig USER_CLUSTER_KUBECONIFG get pods --namespace kube-system --selector app=metallb
Anda dapat menggunakan log dari Pod MetalLB untuk memecahkan masalah.
Konfigurasi MetalLB disimpan di ConfigMap dalam format yang dikenali oleh MetalLB.
Jangan mengubah ConfigMap secara langsung. Sebagai gantinya, gunakan gkectl update cluster seperti
yang dijelaskan sebelumnya. Untuk melihat ConfigMap guna memecahkan masalah:
kubectl --kubeconfig USER_CLUSTER_KUBECONIFG get configmap metallb-config --namespace kube-system
Manfaat menggunakan MetalLB
MetalLB berjalan langsung di node cluster Anda, sehingga tidak memerlukan VM tambahan.
Pengontrol MetalLB melakukan pengelolaan alamat IP untuk Service, sehingga Anda tidak perlu memilih alamat IP secara manual untuk setiap Service.
Instance aktif MetalLB untuk berbagai Service dapat berjalan di node yang berbeda.
Anda dapat membagikan alamat IP di antara berbagai Service.
MetalLB dibandingkan dengan F5 BIG-IP dan Seesaw
VIP harus berada di subnet yang sama dengan node cluster. Hal ini juga merupakan persyaratan untuk Seesaw, tetapi tidak untuk F5 BIG-IP.
Tidak ada metrik untuk traffic.
Tidak ada failover tanpa gangguan; koneksi yang ada akan direset selama failover.
Traffic eksternal ke Pod dari Service tertentu melewati satu node yang menjalankan speaker MetalLB. Artinya, alamat IP klien biasanya tidak terlihat oleh container yang berjalan di Pod.
- Cisco Application Centric Infrastructure (ACI) dengan Dataplane IP Learning tidak kompatibel dengan load balancer Seesaw dan MetalLB. Sebaiknya gunakan load balancing manual, atau nonaktifkan Dataplane IP Learning saat menggunakan Seesaw atau MetalLB sebagai load balancer Anda. Selain itu, Seesaw berada dalam mode pemeliharaan. Mulai Google Distributed Cloud versi 1.32, upgrade diblokir untuk cluster yang menggunakan Seesaw. Anda harus memigrasikan cluster ke fitur yang direkomendasikan sebelum mengupgrade ke 1.32.