暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Kubernetes 0-1 K8S自建LoadBalancer

软件学徒 2020-06-05
145

Metallb介绍

一般只有云平台支持LoadBalancer,如果脱离云平台,自己搭建的K8S集群,Service的类型使用LoadBalancer是没有任何效果的。为了让私有网络中的K8S集群也能体验到LoadBalabcer,Metallb成为了解决方案。

Metallb运行在K8S集群中,监视集群内LoadBalancer类型的服务,然后从配置的IP池中为其分配一个可用IP,以ARP/NDP或BGP的方式将其广播出去,这个可用IP成为了LoadBalancer的Url,可供集群外访问。

Metallb搭建过程

创建命名空间 metallb-system:

vim metallb-namespace.yaml

写入文件内容:

apiVersion: v1
kind: Namespace
metadata:
name: metallb-system

下载metallb.yaml文件

wget https://raw.githubusercontent.com/metallb/metallb/v0.9.3/manifests/metallb.yaml -O metallb.yaml --no-check-certificate

定义LoadBalancer的IP池,先创建configmap

vim metallb-configMap.yaml

写入文件内容:

apiVersion: v1
kind: ConfigMap
metadata:
namespace: metallb-system
name: config
data:
config: |
  address-pools:
  - name: default
    protocol: layer2
    addresses:
    - 192.168.115.140-192.168.115.199

注意:IP池的网络需要和K8S集群的IP处于同一网段,我的K8S集群网络是192.168.115.13x,这里IP池则是给到192.168.115.140-192.168.115.199的范围。

执行命令:

kubectl apply -f metallb-namespace.yaml
kubectl create secret generic -n metallb-system memberlist --from-literal=secretkey="$(openssl rand -base64 128)"
kubectl apply -f metallb.yaml
kubectl apply -f metallb-configMap.yaml

LoadBalancer测试

我们使用类型为LoadBalancer的Service进行测试,以nginx服务为例。

kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=LoadBalancer

查看nginx服务:

[root@k8s-master01 test]# kubectl get svc
NAME         TYPE           CLUSTER-IP   EXTERNAL-IP       PORT(S)       AGE
kubernetes   ClusterIP     10.0.0.1     <none>           443/TCP       11h
nginx       LoadBalancer   10.0.0.82   192.168.115.140   80:31610/TCP   8s

可以看到,已经为nginx服务分配了一个192.168.115.140
的IP,直接在浏览器中访问,一切正常。


文章转载自软件学徒,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论