Dokumen ini menunjukkan cara mengonfigurasi Google Distributed Cloud untuk menggunakan load balancing gabungan dengan load balancer MetalLB. Dokumen ini ditujukan untuk spesialis Jaringan yang mendesain dan membangun arsitektur 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, lihat Peran dan tugas pengguna umum GKE Enterprise. Google Cloud
Di Google Distributed Cloud, MetalLB berjalan dalam mode layer-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 untuk dipilih dan ditetapkan oleh pengontrol MetalLB ke Layanan berjenis
LoadBalancer
. VIP ingress ada di kumpulan ini.VIP yang ditetapkan untuk server Kubernetes API cluster pengguna, dan VIP ingress yang telah Anda pilih untuk dikonfigurasi bagi proxy ingress.
Node pool yang diaktifkan untuk menggunakan MetalLB. MetalLB akan di-deploy di node dalam kumpulan node 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 serangkaian alamat
yang tersedia untuk Layanan. 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 pemblokiran IP berikut menunjukkan penetapan alamat IP untuk node pekerja 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
Go memberlist library
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
Di
file konfigurasi cluster admin,
tetapkan loadBalancer.kind
ke "MetalLB"
.
loadBalancer: kind: "MetalLB"
Isi file konfigurasi cluster admin Anda, lalu buat cluster admin seperti yang dijelaskan dalam Membuat cluster admin.
Menentukan kumpulan alamat
Pengontrol MetalLB menetapkan alamat IP untuk Layanan. 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 Layanan LoadBalancer yang kemungkinan akan aktif. Kemudian, tentukan alamat IP yang cukup
di bagian
loadBalancer.metalLB.addressPools
file konfigurasi cluster pengguna Anda.
Alamat di pool 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"
Jika perlu menyesuaikan alamat dalam pool setelah cluster dibuat, Anda
dapat menggunakan gkectl update cluster
. Untuk mengetahui informasi selengkapnya, lihat
Memperbarui MetalLB.
Mengaktifkan MetalLB untuk cluster pengguna baru
Di file konfigurasi cluster pengguna:
- Tetapkan
loadBalancer.kind
ke"MetalLB"
. - Tentukan satu atau beberapa kumpulan alamat untuk Layanan. VIP ingress harus berada di salah satu kumpulan ini.
Tetapkan
enableLoadBalancer
ketrue
untuk setidaknya satu node pool di cluster Anda. Jika disetel ketrue
, kolom ini memungkinkan speaker MetalLB berjalan di node dalam pool.Perhatikan perbedaan berikut dalam perilaku kolom
enableLoadBalancer
saatenableAdvancedCluster
disetel ketrue
(cluster lanjutan diaktifkan): Pada versi 1.31 saat cluster lanjutan diaktifkan, kolom ini tidak berpengaruh karena speaker MetalLB selalu berjalan di node bidang kontrol cluster pengguna. Pada versi 1.32 saat cluster lanjutan diaktifkan, batasan ini telah dihapus, dan Anda harus menentukan setidaknya satu node pool tempat speaker MetalLB berjalan.
Isi file konfigurasi cluster pengguna Anda, lalu buat cluster pengguna seperti yang dijelaskan dalam Membuat cluster pengguna.
Penetapan manual Alamat layanan
Jika Anda tidak ingin pengontrol MetalLB otomatis menetapkan alamat IP dari pool tertentu ke Layanan, tetapkan kolom manualAssign
dari pool ke true
. Kemudian, developer dapat membuat Layanan berjenis 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 menyetel kolom avoidBuggyIPs
kumpulan alamat ke true
, pengontrol MetalLB tidak akan menggunakan alamat dari kumpulan yang berakhiran .0 atau .255. Hal ini
menghindari masalah perangkat konsumen yang penuh bug yang secara keliru menghentikan 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
Buat Service jenis LoadBalancer
Berikut 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 menampilkan alamat IP eksternal yang ditetapkan secara otomatis 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"
Panggil Layanan:
curl EXTERNAL_IP_ADDRESS:60000
Output menampilkan pesan Hello, world!
:
Hello, world! Version: 2.0.0
Memperbarui MetalLB
Setelah membuat cluster, Anda dapat memperbarui 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_KUBECONIFG --config USER_CLUSTER_CONFIG
Pod MetalLB dan ConfigMap
Pengontrol MetalLB berjalan sebagai Deployment, dan speaker MetalLB berjalan sebagai
DaemonSet di node dalam kumpulan yang memiliki enableLoadBalancer
yang ditetapkan ke true
. Pengontrol MetalLB mengelola alamat IP yang ditetapkan ke Layanan. 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 dalam ConfigMap dalam format yang diketahui 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 Layanan, sehingga Anda tidak perlu memilih alamat IP secara manual untuk setiap Layanan.
Instance aktif MetalLB untuk Layanan yang berbeda dapat berjalan di node yang berbeda.
Anda dapat membagikan alamat IP di antara berbagai Layanan.
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 Service tertentu melewati satu node yang menjalankan speaker MetalLB. Artinya, alamat IP klien biasanya tidak terlihat oleh container yang berjalan di Pod.