Kubernetes 0-1 K8S自建LoadBalancer


Metallb介紹

一般只有雲平台支持LoadBalancer,如果脫離雲平台,自己搭建的K8S集群,Service的類型使用LoadBalancer是沒有任何效果的。為了讓私有網絡中的K8S集群也能體驗到LoadBalabcer,Metallb成為了解決方案。

Metallb運行在K8S集群中,監視集群內LoadBalancer類型的服務,然后從配置的IP池中為其分配一個可用IP,以ARP/NDP或BGP的方式將其廣播出去,這個可用IP成為了LoadBalancer的Url,可供集群外訪問。

Metallb搭建過程

創建命名空間 metallb-system:

vim metallb-namespace.yaml

寫入文件內容:

apiVersion: v1
kind: Namespace
metadata:
  name: metallb-system

下載metallb.yaml文件

wget https://raw.githubusercontent.com/metallb/metallb/v0.9.3/manifests/metallb.yaml -O metallb.yaml --no-check-certificate

定義LoadBalancer的IP池,先創建configmap

vim metallb-configMap.yaml

寫入文件內容:

apiVersion: v1
kind: ConfigMap
metadata:
  namespace: metallb-system
  name: config
data:
  config: |
    address-pools:
    - name: default
      protocol: layer2
      addresses:
      - 192.168.115.140-192.168.115.199

注意:IP池的網絡需要和K8S集群的IP處於同一網段,我的K8S集群網絡是192.168.115.13x,這里IP池則是給到192.168.115.140-192.168.115.199的范圍。

執行命令:

kubectl apply -f metallb-namespace.yaml
kubectl create secret generic -n metallb-system memberlist --from-literal=secretkey="$(openssl rand -base64 128)"
kubectl apply -f metallb.yaml
kubectl apply -f metallb-configMap.yaml

LoadBalancer測試

我們使用類型為LoadBalancer的Service進行測試,以nginx服務為例。

kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=LoadBalancer

查看nginx服務:

[root@k8s-master01 test]# kubectl get svc
NAME         TYPE           CLUSTER-IP   EXTERNAL-IP       PORT(S)        AGE
kubernetes   ClusterIP      10.0.0.1     <none>            443/TCP        11h
nginx        LoadBalancer   10.0.0.82    192.168.115.140   80:31610/TCP   8s

可以看到,已經為nginx服務分配了一個192.168.115.140 的IP,直接在瀏覽器中訪問,一切正常。

image-20200605102015143


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM