17-Metallb第三方组件实现暴露LoadBalancer应用
一、metallb概述
如果我们需要在自己的Kubernetes中暴露LoadBalancer的应用,那么Metallb是一个不错的解决方案。
Metallb官网地址:
https://metallb.universe.tf/installation/
二、修改kube-proxy的configMap
[root@master231 metallb]# kubectl get configmap kube-proxy -n kube-system -o yaml | \
sed -e "s/strictARP: false/strictARP: true/" | \
sed -e 's#mode: ""#mode: "ipvs"#' | \
kubectl apply -f - -n kube-system
三、下载metallb
[root@master231 metallb]# wget https://raw.githubusercontent.com/metallb/metallb/v0.14.9/config/manifests/metallb-native.yaml
四、所有K8S节点导入镜像
需要用到如下镜像:
quay.io/metallb/controller:v0.14.9
quay.io/metallb/speaker:v0.14.9
直接执行列表清单拉取也可以
五、部署metallb
[root@master231 metallb]# kubectl apply -f metallb-native.yaml
六、查看metallb的状态
[root@master231 metallb]# watch kubectl get all -o wide -n metallb-system
Every 2.0s: kubectl get all -o wide -n metallb-system master231: Wed Apr 9 11:56:34 2025
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod/controller-686c7db689-5859z 1/1 Running 0 2m54s 10.100.203.160 worker232 <none> <none>
pod/speaker-54qjt 1/1 Running 0 2m54s 10.0.0.232 worker232 <none> <none>
pod/speaker-cmnps 1/1 Running 0 2m54s 10.0.0.231 master231 <none> <none>
pod/speaker-qcfpx 1/1 Running 0 2m54s 10.0.0.233 worker233 <none> <none>
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
service/metallb-webhook-service ClusterIP 10.200.27.157 <none> 443/TCP 2m55s component=controller
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE CONTAINERS IMAGES
SELECTOR
daemonset.apps/speaker 3 3 3 3 3 kubernetes.io/os=linux 2m55s speaker quay.io/met
allb/speaker:v0.14.9 app=metallb,component=speaker
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
deployment.apps/controller 1/1 1 1 2m55s controller quay.io/metallb/controller:v0.14.9 app=metallb,com
ponent=controller
NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR
replicaset.apps/controller-686c7db689 1 1 1 2m55s controller quay.io/metallb/controller:v0.14.9 app=metal
lb,component=controller,pod-template-hash=686c7db689
七、创建MetalLB地址池
[root@master231 metallb]# cat metallb-ip-pool.yaml
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: linux96
namespace: metallb-system
spec:
addresses:
- 10.0.0.150-10.0.0.180
---
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
name: oldboyedu
namespace: metallb-system
spec:
ipAddressPools:
- linux96
[root@master231 metallb]# kubectl apply -f metallb-ip-pool.yaml
ipaddresspool.metallb.io/linux96 created
l2advertisement.metallb.io/oldboyedu created
八、验证LoadBalancer是否可用
[root@master231 metallb]# cat deploy-ns-svc.yaml
apiVersion: v1
kind: Namespace
metadata:
name: oldboyedu
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: deploy-xiuxian
namespace: oldboyedu
labels:
apps: xiuxian
spec:
replicas: 5
selector:
matchLabels:
version: v1
template:
metadata:
labels:
version: v1
school: oldboyedu
class: linux96
spec:
containers:
- image: registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1
name: xiuxian
---
apiVersion: v1
kind: Service
metadata:
name: svc-xiuxian-lb
namespace: oldboyedu
spec:
type: LoadBalancer
ports:
- port: 90
protocol: TCP
targetPort: 80
nodePort: 30120
selector:
version: v1
[root@master231 metallb]# kubectl apply -f deploy-ns-svc.yaml
[root@master231 metallb]# kubectl get svc -n oldboyedu
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
svc-xiuxian-lb LoadBalancer 10.200.150.228 10.0.0.150 90:30120/TCP 7s
[root@master231 metallb]#
[root@master231 metallb]# kubectl get deploy,svc,rs,po,svc -n oldboyedu
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/deploy-xiuxian 5/5 5 5 35s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/svc-xiuxian-lb LoadBalancer 10.200.150.228 10.0.0.150 90:30120/TCP 15s
NAME DESIRED CURRENT READY AGE
replicaset.apps/deploy-xiuxian-9ddcfd7db 5 5 5 35s
NAME READY STATUS RESTARTS AGE
pod/deploy-xiuxian-9ddcfd7db-87v6w 1/1 Running 0 35s
pod/deploy-xiuxian-9ddcfd7db-gczbw 1/1 Running 0 35s
pod/deploy-xiuxian-9ddcfd7db-pjhxs 1/1 Running 0 35s
pod/deploy-xiuxian-9ddcfd7db-vnf9x 1/1 Running 0 35s
pod/deploy-xiuxian-9ddcfd7db-wfbqp 1/1 Running 0 35s
九、访问测试
基于NodePort端口访问
http://10.0.0.231:30120/
http://10.0.0.232:30120/
http://10.0.0.233:30120/
基于LoadBalancer访问
10.0.0.150:90
本文来自博客园,作者:丁志岩,转载请注明原文链接:https://www.cnblogs.com/dezyan/p/18817402

浙公网安备 33010602011771号