kubernetes 在裸金属环境部署的时候,可以利用 metallb 创建负载均衡服务,
这样外部可以通过 ingress 的LoadBalance 模式访问集群的容器服务。
注意: metallb 不会持久化分配的地址,不推荐用在线上环境。
wget https://raw.githubusercontent.com/google/metallb/v0.8.1/manifests/metallb.yaml
cat <<EOF | tee metallb-conf.yaml
apiVersion: v1
kind: ConfigMap
metadata:
namespace: metallb-system
name: config
data:
config: |
address-pools:
- name: default
protocol: layer2
addresses:
- 10.10.6.240-10.10.6.250
- 10.10.7.240-10.10.7.250
EOF
kubectl apply -f metallb.yaml
kubectl get pods -n metallb-system -o wide
kubectl apply -f metallb-conf.yaml
说明:
metallb 有两种运行模式: layer2 和 bgp。
bgp 配合 anycast 很强大,不过需要物理或是虚拟的路由器修改相应的配置。
layer2 则不需要任何网络设备的配置修改,只需要虚地址绑定到相同 VLAN 的节点上。
故障排查:arping -I eth0 -s 10.10.7.242 10.10.7.254
# vlan 选择
cat <<EOF | tee metallb-conf2.yaml
apiVersion: v1
kind: ConfigMap
metadata:
namespace: metallb-system
name: config
data:
config: |
address-pools:
- name: default
protocol: layer2
addresses:
- 10.10.6.240-10.10.6.250
node-selectors:
- match-labels:
vlan: vlan6
address-pools:
- name: default
protocol: layer2
addresses:
- 10.10.7.240-10.10.6.250
node-selectors:
- match-labels:
vlan: vlan7
EOF
kubectl label nodes <node-name> vlan=vlan7
kubectl label nodes <node-name> vlan=vlan6