环境
系统:rocky9.4
k8s版本:v1.31.1 单节点
路由器:routerOS v7.15.3
安装metallb
我是使用truecharts helm安装的operator,然后在手动配置的
kubectl create ns metallb创建metallb命名空间
helm install metallb oci://tccr.io/truecharts/metallb -n metallb安装的时候可能会报错什么名字重复只需要在更新一下就可以了
helm upgrade metallb oci://tccr.io/truecharts/metallb -n metallb配置metallb bgp
mkdir metallb ; cd metallb创建一个目录放配置文件
创建一个文件叫bgp.yaml
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: first-pool
namespace: metallb
spec:
addresses:
- 10.0.1.1/24 # 可分配的 IP 地址
---
apiVersion: metallb.io/v1beta2
kind: BGPPeer
metadata:
name: bgppeer
namespace: metallb
spec:
myASN: 64502 # MetalLB 使用的 AS 号
peerASN: 64501 # 路由器的 AS 号
peerAddress: 10.0.0.254 # 路由器地址
---
apiVersion: metallb.io/v1beta1
kind: BGPAdvertisement
metadata:
name: local
namespace: metallb
spec:
ipAddressPools:
- first-pool
aggregationLength: 32
localPref: 100
communities:
- 65535:65282
routerOS 配置
过滤器接受全部
Routing-Filters:accept;
测试
都创建好了,需要创建一个load balance的svc 才会建立session和路由
下面是创建一个nginx和svc nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: docker.io/nginx:latest
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx2
labels:
app: nginx
spec:
selector:
app: nginx
ports:
- name: nginx-port
protocol: TCP
port: 80
targetPort: 80
type: LoadBalancerkubectl create ns test
kubectl apply -f nginx -n test创建test命名空间并创建nginx和loadbalance svc
kubectl get svc -n test我们可以看到外部IP已经从我们设置的IP pool分配出来了,routerOS的路由表里也学习到了路由,网站也可以打开





