裸金属的选择: MetalLB v0.13.9

发布时间 2023-04-06 14:45:42作者: 天海沙

因为不同公司对数据安全的要求不一样, 有不少朋友需要自建私有kubernetes,此时创建LoadBalancer资源时EXTERNAL-IP会一直是pending状态, 需要安装此插件解决无法分配IP的问题.

小知识: 裸金属是指物理服务器, 现在用于区别虚拟化服务器(云服务器).

# 修改kubernetes集群配置
kubectl edit configmap -n kube-system kube-proxy
######################################################
#找到如下位置修改mode和strictARP的值:                    #
#apiVersion: kubeproxy.config.k8s.io/v1alpha1        #
#kind: KubeProxyConfiguration                        #
#mode: "ipvs"                                        #
#ipvs:                                               #
#  strictARP: true                                   #
######################################################
​
# 在线安装MetalLB
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.13.9/config/manifests/metallb-native.yaml
kubectl get pod,svc -n metallb-system -o wide #查看一下安装状态
​
# 配置自动分配的IP池
cat >ip-cheap.yaml<<DD
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
  name: ip-cheap
  namespace: metallb-system
spec:
  addresses:
  - 192.168.10.36-192.168.10.37 #此处修改为你的集群节点(nodes)IP地址范围
DD
​
# 查看IP池是否生效
kubectl describe -n metallb-system ipaddresspools

# (已配置动态,可略)配置静态指定的IP地址
cat >ip-cheap.yaml<<DD
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
  name: ip-cheap
  namespace: metallb-system
spec:
  addresses:
  - 192.168.10.50/30 #此处为你的集群暴露IP地址
  - 192.168.10.100-110 #也可以分配物理服务器同网段的虚拟IP(空余,不能与物理机IP地址冲突,否则节点故障)
  autoAssign: false #静态策略
DD
​
# 配置一个ARP广播声明,通告来自IPAddressPool的IP,L2Advertisement实例必须关联到IPAddressPool
cat >advertise.yaml<<DD
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
  name: l2adver
  namespace: metallb-system
spec:
  ipAddressPools: # 如果不配置则会通告所有的IP池地址
  - ip-cheap
DD
​
# 应用配置生效
kubectl apply -f ip-cheap.yaml 
kubectl apply -f advertise.yaml 
kubectl get svc  #此时再查看loadbalancer的资源时,EXTERNAL-IP已经分配好IP地址了