Dokumen ini menunjukkan cara mengonfigurasi Google Distributed Cloud untuk menggunakan beban paket menyeimbangkan dengan Load balancer MetalLB. Halaman ini ditujukan untuk Spesialis jaringan yang merancang dan merancang jaringan untuk organisasi, dan menginstal, mengkonfigurasi, dan mendukung peralatan jaringan. Untuk mempelajari informasi lebih lanjut tentang peran umum dan contoh tugas yang kami rujuk di Google Cloud konten, lihat Peran dan tugas pengguna GKE Enterprise yang umum.
Di Google Distributed Cloud, MetalLB berjalan di 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 yang 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 file konfigurasi cluster admin berikut menampilkan 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 file konfigurasi cluster pengguna berikut menampilkan konfigurasi:
Kumpulan alamat untuk pengontrol MetalLB yang dapat dipilih dan ditetapkan ke Layanan dari jenis
LoadBalancer
. VIP masuknya ada di kolam ini.VIP yang ditetapkan untuk server Kubernetes API cluster pengguna, dan VIP masuk yang telah Anda pilih untuk dikonfigurasi untuk proxy masuknya.
Kumpulan node 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 menetapkan sekumpulan alamat
yang tersedia untuk Layanan. Saat developer aplikasi membuat jenis Layanan
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. Ini termasuk 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
Koleksi daftar anggota Go
untuk melakukan pemilihan pemimpin. Library memberlist
menggunakan port TCP 7946 dan UDP
7946 untuk bertukar informasi. Pastikan porta tersebut dapat
diakses oleh aliran masuk dan
traffic keluar di semua node load balancer.
Mengaktifkan MetalLB untuk cluster admin baru
Di
konfigurasi cluster admin
file,
setel loadBalancer.kind
ke "MetalLB"
.
loadBalancer: kind: "MetalLB"
Isi sisa file konfigurasi cluster admin Anda, lalu buat admin seperti yang dijelaskan di Buat cluster admin.
Menentukan kumpulan alamat
Pengontrol MetalLB melakukan pengelolaan alamat IP untuk Layanan. Jadi, ketika pengembang aplikasi membuat Layanan tipe LoadBalancer di cluster pengguna, mereka tidak perlu menentukan alamat IP untuk Layanan secara manual. Sebagai gantinya, Pengontrol MetalLB memilih alamat IP dari kumpulan alamat yang Anda tentukan pada waktu pembuatan cluster.
Pikirkan tentang berapa banyak Layanan jenis LoadBalancer yang kemungkinan akan aktif
pada cluster pengguna Anda pada waktu tertentu. Lalu di bagian
loadBalancer.metalLB.addressPools
bagian dari
file konfigurasi cluster pengguna, tentukan alamat IP yang cukup untuk mengakomodasi
Layanan tersebut.
Tujuan vip masuk untuk cluster pengguna Anda harus berada di antara alamat yang Anda tentukan di kumpulan alamat. Hal ini karena proxy masuk diekspos oleh Layanan jenis LoadBalancer.
Jika developer aplikasi Anda tidak perlu membuat jenis Layanan LoadBalancer, maka Anda tidak perlu menentukan alamat selain traffic masuk VIP.
Alamat harus dalam format CIDR atau format rentang. Jika Anda ingin menentukan alamat individu, 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 kumpulan setelah cluster dibuat, Anda
dapat menggunakan gkectl update cluster
. Untuk 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 masuk harus ada di salah satu kumpulan tersebut.
- Tetapkan
enableLoadBalancer
ketrue
untuk setidaknya satu kumpulan node di cluster Anda.
Isi sisa file konfigurasi cluster pengguna Anda, dan buat seperti yang dijelaskan dalam Buat cluster pengguna.
Penetapan manual alamat Layanan
Jika Anda tidak ingin pengontrol MetalLB menetapkan IP secara otomatis
dari kumpulan tertentu ke Layanan, setel bidang manualAssign
pada
kumpulan ke true
. Kemudian developer dapat membuat Layanan jenis LoadBalancer
dan secara manual menentukan
salah satu alamat dari kumpulan. Contoh:
loadBalancer: metalLB: addressPools: - name: "my-address-pool-2" addresses: - "192.0.2.73-192.0.2.80" manualAssign: true
Menghindari alamat IP yang berisi bug
Jika Anda menetapkan kolom avoidBuggyIPs
dari kumpulan alamat ke true
, MetalLB
{i>controller<i} tidak akan menggunakan alamat dari
kumpulan yang berakhiran .0 atau .255. Ini
menghindari masalah perangkat konsumen yang berisi bug, yang secara keliru menurunkan 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 Layanan 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 ditentukan di file konfigurasi cluster pengguna.
Simpan manifes dalam file bernama my-dep-svc.yaml
. Kemudian, buat Deployment
dan objek 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 menunjukkan alamat IP eksternal yang otomatis ditetapkan ke Layanan. 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
Verifikasi bahwa alamat IP eksternal yang ditetapkan diambil dari kumpulan alamat yang Anda yang ditentukan di 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"
Hubungi 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 kumpulan node Anda. Buat perubahan yang diinginkan di
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 pada node dalam kumpulan yang memiliki enableLoadBalancer
yang ditetapkan ke true
. Tujuan
Pengontrol MetalLB mengelola alamat IP yang ditetapkan ke Layanan. MetalLB
pembicara melakukan pemilihan ketua dan mengumumkan Service VIP.
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 dikenal oleh MetalLB.
Jangan mengubah ConfigMap secara langsung. Sebagai gantinya, gunakan gkectl update cluster
sebagai
yang telah dijelaskan sebelumnya. Untuk melihat ConfigMap untuk pemecahan 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, jadi Anda tidak harus memilih alamat IP secara manual untuk setiap Layanan.
Instance MetalLB aktif 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 persyaratan untuk Seesaw, tetapi tidak untuk F5 BIG-IP.
Tidak ada metrik untuk traffic.
Tidak ada failover tanpa hit; koneksi yang ada direset selama failover.
Traffic eksternal ke Pod dari Service tertentu melewati satu node yang menjalankan speaker MetalLB. Ini berarti bahwa alamat IP klien biasanya tidak terlihat oleh container yang berjalan di Pod.