kube-system svclb-who2-sv-f40b99fd-5nkfk 0/1 Pending 0 82s <none> <none> <none> <none>
kube-system svclb-who2-sv-f40b99fd-cfztj 0/1 Pending 0 82s <none> <none> <none> <none>
kube-system svclb-who2-sv-f40b99fd-x2s4x 0/1 Pending 0 82s <none> <none> <none> <none>
MetalLB是裸机Kubernetes集群的负载均衡器实现,使用标准路由协议。 https://metallb.universe.tf/
kubectl get configmap -n kube-system kube-proxy -o yaml |grep mode
mode: "ipvs"
kubectl get configmap -n kube-system kube-proxy -o yaml |grep strictARP
strictARP: false
kubectl edit configmap -n kube-system kube-proxy
kubectl get configmap -n kube-system kube-proxy -o yaml |grep strictARP
strictARP: true
Kuberenetes声明方法由Metal LB建议使用Metal LB团队提供的MANIHEST进行部署,在撰写本文时,metallb/v0.12.1是最新的稳定版本。
您可以在此处找到MetalLB的官方 https://metallb.universe.tf/installation/
#Create namespace
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.12.1/manifests/namespace.yaml
#Deploy required manifest files
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.12.1/manifests/metallb.yaml
一旦部署了MANIFEST,我们可以看到Pod正在名称空间metallb系统中扩展。但作为Daemon集的一部分部署的MetalLB的扬声器盒将位于CreateContainerConfigError中。
这是因为,我们没有提供我们为负载均衡器标识的外部ip作为命名空间的配置映射。
kubectl get all -n metallb-system
NAME READY STATUS RESTARTS AGE
pod/controller-7476b58756-74cmw 0/1 ContainerCreating 0 20s
pod/speaker-lqvp6 0/1 ContainerCreating 0 20s
pod/speaker-rxclp 0/1 CreateContainerConfigError 0 20s
pod/speaker-xbfsn 0/1 CreateContainerConfigError 0 20s
cat configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
namespace: metallb-system
name: config
data:
config: |
address-pools:
- name: default
protocol: layer2
addresses:
- 10.39.251.130-10.39.251.132
kubectl get all -n metallb-system
NAME READY STATUS RESTARTS AGE
pod/controller-7476b58756-74cmw 1/1 Running 0 3m20s
pod/speaker-lqvp6 1/1 Running 0 3m20s
pod/speaker-rxclp 1/1 Running 0 3m20s
pod/speaker-xbfsn 1/1 Running 0 3m20s
让我们尝试通过负载均衡器公开ngnix部署,该负载均衡器在分配外部ip时处于挂起状态。我使用的是我提出的现有ngnix部署,
详细信息可以在这里找到 https://linuxdatahub.com/kubernetes-load-balancers/#Create_an_Nginx_Deployment
kubectl expose deploy ngnix-data-hub -n lb --target-port=80 --port=9843 --type LoadBalancer -n lb
service/ngnix-data-hub exposed
[root@host-controller~]# kubectl get svc -n lb
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ngnix-data-hub LoadBalancer 10.103.251.20 10.39.251.130 9843:32474/TCP 8s
我们可以看到,外部ip现在已被分配,并且是我们传递给metallb系统名称空间的范围中的第一个ip
curl 10.39.251.130:9843
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
可以正常运行了