Janrs.com | 杨建勇

  • 首页
  • 站点地图
  • 所有文章
  • 加入学习群
Janrs.com | 杨建勇
Go/Kubernetes/Istio/CloudNative
  1. 首页
  2. k8s/云原生
  3. 正文

k8s部署metallb

2022年2月25日 101点热度 682人点赞 0条评论

[!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

至此。MetalLB 部署完成。

本作品采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可
标签: 暂无
最后更新:2023年3月25日

码仔

Janrs.com

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复
有关Go/istio/k8s/云原生直接搜
文章目录
  • k8s 部署 MetalLB
    • 修改 kube-proxy
    • 部署 metallb
    • 添加 ip 池
    • 至此。MetalLB 部署完成。

COPYRIGHT © 2023 Janrs.com | 杨建勇. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

闽ICP备20002184号