Janrs.com | 杨建勇
Janrs.com | 杨建勇

k8s部署metallb

[!TIP]
k8s 部署 MetalLB

转载请注明出处:https://janrs.com


k8s 版本 1.23.9

MetalLB 版本 v0.13.7

[!WARNING]
MetalLB 该版本还处于 Beta 阶段。

如果使用 MetalLBspeaker 模式,会跟 calicoBGP 冲突。我这里没有使用 calicoBGP

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

至此。MetalLB 部署完成。

如果你有任何问题,欢迎在底部留言。或者点击加入微信技术交流群 | 我的GitHub

码仔

文章作者

Janrs.com

发表回复

textsms
account_circle
email

Janrs.com | 杨建勇

k8s部署metallb
[!TIP] k8s 部署 MetalLB 转载请注明出处:https://janrs.com k8s 版本 1.23.9 MetalLB 版本 v0.13.7 [!WARNING] MetalLB 该版本还处于 Beta 阶段。 如果使用 MetalLB 的 speaker 模…
扫描二维码继续阅读
2022-02-25