几种负载均衡
MetalLB
安装 MetalLB
如果 kube-proxy 使用的是 ipvs 模式,需要修改 kube-proxy 配置文件,启用严格的 ARP
bash
kubectl edit configmap -n kube-system kube-proxy
ipvs:
strictARP: true
使用yaml安装
bash
curl -O https://raw.githubusercontent.com/metallb/metallb/refs/tags/v0.14.9/config/manifests/metallb-native.yaml
kubectl apply -f metallb-native.yaml
Layer 2 模式配置
- 创建 IPAdressPool
bash
cat <<EOF > IPAddressPool.yaml
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: ip-pool
namespace: metallb-system
spec:
addresses:
# 可分配的 IP 地址,可以指定多个,包括 ipv4、ipv6
- 172.20.175.140-172.20.175.150
EOF
kubectl apply -f IPAddressPool.yaml
- 创建 L2Advertisement,并关联 IPAdressPool 如果不设置关联到 IPAdressPool,那默认 L2Advertisement 会关联上所有可用的 IPAdressPool
bash
cat <<EOF > L2Advertisement.yaml
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
name: example
namespace: metallb-system
spec:
ipAddressPools:
- ip-pool #上一步创建的 ip 地址池,通过名字进行关联
EOF
kubectl apply -f L2Advertisement.yaml
OpenELB
openELB靠注解来绑定!!!
安装
bash
wget https://raw.githubusercontent.com/openelb/openelb/release-0.6/deploy/openelb.yaml
kubectl apply -f openelb.yaml
配置(Layer 2)
yml
apiVersion: network.kubesphere.io/v1alpha2
kind: Eip
metadata:
name: eip-pool
spec:
address: 192.168.153.110-192.168.153.130 # 修改为k8s同网段
protocol: layer2
interface: enp0s8 # 修改为网卡接口
验证是否可用
bash
cat <<EOF > nginx-dp.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: docker.io/nginx:1.27-alpine
ports:
- containerPort: 80
EOF
kubectl apply -f nginx-dp.yaml
bash
cat <<EOF > nginx-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-svc
labels:
app: nginx
annotations:
# openELB靠注解来绑定
lb.kubesphere.io/v1alpha1: openelb
eip.openelb.kubesphere.io/v1alpha2: layer2-eip
# For versions below 0.6.0, you also need to specify the protocol
# protocol.openelb.kubesphere.io/v1alpha1: layer2
spec:
selector:
app: nginx
ports:
- name: nginx-port
protocol: TCP
port: 80
targetPort: 80
type: LoadBalancer
externalTrafficPolicy: Cluster
EOF
kubectl apply -f nginx-svc.yaml