MetalLB 在 Kubernetes Bare Metal 上安裝 Layer 2 Load Balancer
準備
假設你已經先裝好 Kubernetes cluster 了,由於是 bare metal,你必須把 Kubernetes 裝載三台不同電腦上,或是使用三個 Raspberry Pi,然後使用 kubeadm
指令串起來。
Cluster Addresses
我們現在有三台電腦,它的名稱與 IP 分別是:
Master:192.168.1.100
Node1:192.168.1.101
Node2:192.168.1.102
當你在安裝電腦時,名稱與 IP 必須是唯一的,否則在 join 的時候會出現錯誤。
這裡使用的 IP 是 DHCP 所分配的 IP,IP 的範圍是 192.168.1.100—192.168.1.150
,如果你有足夠的 public IP address,可以分別對每台電腦做設定。
假設我申請了
17.95.16.0-17.95.16.32
,就可以把 IP 設定成這樣:
- Master:17.95.16.1
- Node1:17.95.16.2
- Node2:17.95.16.3
雖然只用了三個,但我們保留剩下的
17.95.16.10-17.95.16.32
讓 Load Balancer 來分配這些網址
Metallb
安裝 metallb 的步驟非常的簡單:
1 | kubectl apply -f https://raw.githubusercontent.com/google/metallb/v0.7.3/manifests/metallb.yaml |
然後查看目前的狀態,是否有一個 controller 跟多個 speaker:
1 | kubectl get pods -n metallb-system |
因為我們還沒有提供 load balance 的網址給他,所以接下來要設定 ConfigMap
Configure
架設我們想提供 load balance 的網址是 192.168.1.240-192.168.1.250
,看一下我們的設定檔:
1 | apiVersion: v1 |
我們把 protocol: layer2
套用在 192.168.1.240-192.168.1.250
這個網段上
如果想要使用外網的話,直接把網段的範圍改成外網即可
MetalLB 提供了 layer2 跟 bgp 兩種 protocol,這裡使用 layer2,如果使用 bgp 的話還需要另外做設定,可以參考官方文件。
套用上面的 ConfigMap:
1 | kubectl apply -f https://raw.githubusercontent.com/google/metallb/v0.7.3/manifests/example-layer2-config.yaml |
查看 Log:
1 | kubectl logs -l component=speaker -n metallb-system |
測試
執行一些簡單的容器,然後使用 LoadBalancer 暴露它:
1 | kubectl run hello-world --image=k8s.gcr.io/echoserver:1.10 --port=8080 --replicas=3 |
查看 pods 是否有在運行
1 | kubectl get pods |
我們現在有外部 IP 了!馬上測試看看能不能連得到:
1 | curl 192.168.1.240:8080 |
如果有看到跟請求 http 有關的資訊的話,就代表你成功了。