# Install MetalLB use Rancher ## 安裝 MetalLB ![image](https://hackmd.io/_uploads/H1GefUiV6.png) ![image](https://hackmd.io/_uploads/ByKWz8j4T.png) ## 設定 MetalLB * 規劃 LoadBalancer 可用 ip 範圍 ![image](https://hackmd.io/_uploads/BJgVM8jVp.png) ``` apiVersion: metallb.io/v1beta1 kind: IPAddressPool metadata: name: mlb1 namespace: metallb-system spec: addresses: - 192.168.11.75-192.168.11.76 --- apiVersion: metallb.io/v1beta1 kind: L2Advertisement metadata: name: mlb1 namespace: metallb-system ``` * 檢查 metallb 狀態 ``` $ kubectl get pod -n metallb-system -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES metallb-controller-5ccf8fb898-wwcqr 1/1 Running 0 15m 10.42.149.95 rke2 <none> <none> metallb-speaker-cjr6r 4/4 Running 0 15m 192.168.11.101 rke2 <none> <none> ``` ## 測試 * 建立deployment ``` $ echo ' apiVersion: apps/v1 kind: Deployment metadata: name: s1.dep spec: replicas: 2 selector: matchLabels: app: s1.dep template: metadata: labels: app: s1.dep spec: containers: - name: app image: quay.io/flysangel/image:app.golang' | kubectl apply -f - deployment.apps/s1.dep created ``` * 建立 LoadBalancer service ``` $ echo ' apiVersion: v1 kind: Service metadata: name: s1 annotations: metallb.universe.tf/address-pool: mlb1 spec: ports: - port: 80 targetPort: 8080 selector: app: s1.dep type: LoadBalancer' | kubectl apply -f - service/s1 created ``` ``` $ kubectl get pod NAME READY STATUS RESTARTS AGE s1.dep-69546455d6-24nhz 1/1 Running 0 11m s1.dep-69546455d6-8pbb8 1/1 Running 0 11m $ kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.43.0.1 <none> 443/TCP 3h51m s1 LoadBalancer 10.43.160.239 192.168.11.75 80:30143/TCP 7m57s ``` * 驗證 LoadBalancer 功能 ``` $ curl -w "\n" http://192.168.11.75/hostname {"message":"s1.dep-69546455d6-24nhz"} $ curl -w "\n" http://192.168.11.75/hostname {"message":"s1.dep-69546455d6-24nhz"} $ curl -w "\n" http://192.168.11.75/hostname {"message":"s1.dep-69546455d6-8pbb8"} ```