備註
因本人是K8S 初學者,文章有可能觀念有誤,若有誤導 請見諒
歡迎留言指正 謝謝
前言
機器環境可參考此篇文章 w4560000 - 以 kubeadm 架設 K8S Cluster
在雲端環境的K8S(ex: GKE),都有跟自有的雲端服務整合(負載平衡器 & 外部IP位址)
但在地端環境,則無法達成負載平衡,需要透過額外套件才能達成
MetalLB 是一個為了地端環境而生的負載平衡套件
有兩種使用方式 Layer2、BGP 說明可參考 Kubernetes 负载均衡器 MetalLB 使用指南
Layer2 可讓相同網段IP 當作 LoadBalance IP,實作起來較簡單
地端K8S,我主要是架設測是環境為用途,在測試環境中,不需要讓外網訪問,故使用L2即可
以 Layer2 實現 K8S Cluster Loadbalance
安裝 MetalLB
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.12.1/manifests/namespace.yaml
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.12.1/manifests/metallb.yaml
目前K8S Cluster 集群 IP
10.240.0.11 controller
10.240.0.20 worker-0
10.240.0.21 worker-1
10.240.0.22 worker-2
設定 10.240.0.1-10.240.0.9 作為 Loadbalance address-pools
cat <<EOF | kubectl create -f -
apiVersion: v1
kind: ConfigMap
metadata:
namespace: metallb-system
name: config
data:
config: |
address-pools:
- name: default
protocol: layer2
addresses:
- 10.240.0.1-10.240.0.9
EOF
測試結果
建立 Type為 LoadBalancer 的 Nginx 服務 用以測試
cat <<EOF | kubectl create -f -
apiVersion: v1
kind: Service
metadata:
name: myapp-svc
spec:
selector:
app: myapp
ports:
- protocol: TCP
port: 80
targetPort: 80
type: LoadBalancer
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-deployment
labels:
app: myapp
spec:
replicas: 2
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: nginx
image: nginx:1.19.4
ports:
- containerPort: 80
EOF
建立成功後 可以發現 EXTERNAL-IP 為 10.240.0.2
因metalLB 的 Controller 會自動分配IP給 LoadBalancer Type 的 Service
kubectl get svc
# 輸出
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 5d3h
myapp-svc LoadBalancer 10.102.7.250 10.240.0.2 80:30336/TCP 30m
curl -I http://10.240.0.2
# 輸出
HTTP/1.1 200 OK
Server: nginx/1.19.4
Date: Tue, 03 May 2022 17:45:36 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 27 Oct 2020 15:09:20 GMT
Connection: keep-alive
ETag: "5f983820-264"
Accept-Ranges: bytes
轉載請註明來源,若有任何錯誤或表達不清楚的地方,歡迎在下方評論區留言,也可以來信至 leozheng0621@gmail.com
如果文章對您有幫助,歡迎斗內(donate),請我喝杯咖啡