[!TIP]
k8s
部署MetalLB
转载请注明出处:https://janrs.com
k8s
版本 1.23.9
MetalLB
版本 v0.13.7
[!WARNING]
MetalLB
该版本还处于Beta
阶段。
如果使用MetalLB
的speaker
模式,会跟calico
的BGP
冲突。我这里没有使用calico
的BGP
。
k8s 部署 MetalLB
修改 kube-proxy
MetalLB
需要使用严格的 ARP
模式。需要设置 strictARP
参数为 true
。
配置文件文件:
vim /etc/kubernetes/config/kube-proxy.yaml
或者执行以下命令打开:
kubectl edit configmap -n kube-system kube-proxy
修改如下配置:
...
iptables:
masqueradeAll: false
masqueradeBit: 14
minSyncPeriod: 0s
syncPeriod: 30s
ipvs:
excludeCIDRs: null
minSyncPeriod: 0s
scheduler: ""
#strictARP: false
# 修改为 true
strictARP: true
syncPeriod: 30s
nodePortAddresses: null
oomScoreAdj: -999
...
修改后重启 kube-proxy
。
systemctl restart kube-proxy
部署 metallb
部署文件已经复制到我的博客。直接下载部署就行。
如果镜像下载太慢,换成自己的。
cd /home &&
wget https://janrs.com/metallb-native-v0.13.7.yaml &&
kubectl apply -f metallb-native-v0.13.7.yaml
部署后查看 pods
kubectl get pods -n metallb-system
显示如下。speaker
会部署在每个节点上。
NAME READY STATUS RESTARTS AGE
controller-85d9c8c99b-n948j 1/1 Running 1 (6m23s ago) 7m34s
speaker-67r6j 1/1 Running 0 7m34s
speaker-nwb59 1/1 Running 0 7m34s
speaker-rj78p 1/1 Running 0 7m34s
speaker-t24g7 1/1 Running 0 7m34s
如果报错没有生成 memberlist
的密钥,执行以下命令创建:
错误显示如下
Error: secret "memberlist" not found #1449
执行以下命令创建:
kubectl create secret generic -n metallb-system memberlist --from-literal=secretkey="$(openssl rand -base64 128)"
添加 ip 池
[!NOTE]
ip
地址可以随便设置。不过一般都设置为跟k8s
集群服务器同个网段。
这里使用的是L2
模式。需要注意不要跟节点
ip
地址冲突。
部署 metallb
后还不会自动分配 ip
,还需要设置 ip
池。
cat > /home/ip-pool-config.yaml <<EOF
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: ip-pool01
namespace: metallb-system
spec:
addresses:
- 172.16.222.20-172.16.222.39
---
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
name: l2-ip-pool01
namespace: metallb-system
spec:
ipAddressPools:
- ip-pool01
EOF
kubectl apply -f /home/ip-pool-config.yaml
执行后会显示如下:
ipaddresspool.metallb.io/ip-pool01 created
l2advertisement.metallb.io/l2-ip-pool01 created
查看任意的 LoadBalance
模式的 Service
,就可以看到已经自动分配了 ip
地址。
以下为 istio
为例
kubectl get service -n istio-system
显示。可以看到 EXTERNAL-IP
已经有自动分配 ip
地址。
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
istio-ingressgateway LoadBalancer 10.68.84.176 172.16.222.20 15021:36038/TCP,80:39889/TCP,443:35958/TCP 44m
istiod ClusterIP 10.68.61.7 <none> 15010/TCP,15012/TCP,443/TCP,15014/TCP 44m
发表回复