引言
- 在公有云 Kubernetes 环境中,创建 LoadBalancer 类型的服务时,云提供商会自动分配一个外部 IP 地址。然而,在本地或裸机 Kubernetes 集群中,这一功能默认不可用。这就是 MetalLB 的用武之地——它是一个裸机 Kubernetes 集群的负载均衡器实现,为集群提供了外部 IP 地址分配和负载均衡功能。
什么是 MetalLB?
安装MetalLB
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.13.10/config/manifests/metallb-native.yaml
kubectl apply -f metallb-native.yaml
[root@master51 ~]
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
controller-686c7db689-gpf7r 1/1 Running 0 6m5s 10.100.140.95 worker53 <none> <none>
speaker-bdvk5 1/1 Running 0 30s 10.0.0.53 worker53 <none> <none>
speaker-xfnch 1/1 Running 0 30s 10.0.0.52 worker52 <none> <none>
speaker-zshn9 1/1 Running 0 30s 10.0.0.51 master51 <none> <none>
[root@master51 ~]
配置MetalLB
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: shic
namespace: metallb-system
spec:
addresses:
- 10.0.0.150-10.0.0.180
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
name: metallb-l2-advert
namespace: metallb-system
spec:
ipAddressPools:
- shic
kubectl apply -f ipaddresspool.yaml
kubectl apply -f l2advertisement.yaml
使用MetalLB
......
apiVersion: v1
kind: Service
metadata:
name: svc-loadbalancer
spec:
selector:
app: web
ports:
- port: 90
targetPort: 80
nodePort: 30080
type: LoadBalancer
[root@master231 ~]
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.200.0.1 <none> 443/TCP 3h25m
svc-loadbalancer LoadBalancer 10.200.117.161 10.0.0.150 90:30080/TCP 9m28s
浏览器访问http://10.0.0.150:90
或curl http://10.0.0.150:90
或根据nodePort 访问:http://10.0.0.51:30080 http://10.0.0.52:30080 http://10.0.0.53:30080