metallb部署使用

简介

k8s 不提供裸机的 loadbalancer service,如果你在裸机中安装k8s并且创建了loadbalancer 类型的service,那么它会一直保持在pending的状态,所以如果你是裸机安装k8s的话一般会使用nodeport去暴露集群中的服务,如果你要使用loadbalancer service,那么就要用到metallb了

继续简介

metallb支持两种工作模式,一种是layer 2 mode,也就是工作在2层来负责相应arp请求,对于局域网中的人来说仿佛就是给服务分配了一个ip,但是2层模式不是真正的负载均衡,因为所有的流量会经过集群中的一个节点,当这个节点挂了的话,metallb会迁移ip到另外一个节点上,另外一种是bgp模式,在bgp模式下,集群中每一个节点都会和路由器建立bgp会话,所以bgp模式是高可用的,但是需要你的路由器支持bgp。这边我的路由器是不支持bgp的,所以就采用二层模式

安装

其实安装很简单

首先你要确认你的k8s kube-proxy 是不是使用ipvs模式的,如果是那么你要开启strictARP选项,编辑kube-proxy的configmap

kubectl edit configmap -n kube-system kube-proxy

打开

strictARP: true

之后创建一个namespace

kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.9.5/manifests/namespace.yaml

创建deployment等

kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.9.5/manifests/metallb.yaml

创建memberlist secret,这个secret是用来加密speaker之间的通信

kubectl create secret generic -n metallb-system memberlist --from-literal=secretkey="$(openssl rand -base64 128)"

配置二层

新增下面的配置

1
2
3
4
5
6
7
8
9
10
11
12
13
apiVersion: v1
kind: ConfigMap
metadata:
namespace: metallb-system
name: config
data:
config: |
address-pools:
- name: default
protocol: layer2
addresses:
- 192.168.1.240-192.168.1.250

注意这里的addresses需要和k8s的节点处于同一个网段

之后apply

kubectl apply -f layer2.yaml

测试

之后直接安装一个traefik测试一下,我这里使用的是helm安装,所以修改下面字段

1
2
3
service:
enabled: true
type: LoadBalancer

之后看下有没有分配好ip就好了

kubectl get svc -A

欢迎关注我的博客www.bboy.app
Have Fun

欢迎关注我的其它发布渠道