OpenELB
官网 https://openelb.io
本文内容学习于马士兵云原生课程
概述
OpenELB is an open-source load balancer implementation designed for bare-metal Kubernetes clusters.
OpenELB是一个为裸机Kubernetes集群设计的开源负载均衡器实现。
In cloud-based Kubernetes clusters, Services are usually exposed by using load balancers provided by cloud vendors. However, cloud-based load balancers are unavailable in bare-metal environments. OpenELB allows users to create LoadBalancer Services in bare-metal, edge, and virtualization environments for external access, and provides the same user experience as cloud-based load balancers.
在基于云的Kubernetes集群中,服务通常通过使用云供应商提供的负载均衡器来公开。
但是,基于云的负载均衡器在裸机环境中不可用。
OpenELB允许用户在裸机、边缘和虚拟化环境中创建LoadBalancer服务以供外部访问,并提供与基于云的负载均衡器相同的用户体验。
部署
在k8s安装
#安装
kubectl apply -f https://raw.githubusercontent.com/openelb/openelb/master/deploy/openelb.yaml
#查看相关Pod状态
kubectl get pods -n openelb-system
#删除openelb
kubectl delete -f https://raw.githubusercontent.com/openelb/openelb/master/deploy/openelb.yaml
#查看openelb namespace是否存在
kubectl get ns
#不出所料,拉取镜像失败
kubectl describe pod openelb-admission-create-l6tcg -n openelb-system
#使用命令将openelb.yaml配置文件下载下来
wget https://raw.githubusercontent.com/openelb/openelb/master/deploy/openelb.yaml
#这个文件超长,对vi命令不熟悉的,直接down下来编辑
kubectl apply -f openelb.yaml
kubectl get pods -n openelb-system
kubectl delete -f openelb.yaml
修改镜像信息,官网yaml已经给出如下提示,搜索containers,有两处需要修改
#k8s-master下载镜像,很怪,前两个节点可以下载,第三个节点下载巨慢。。。。。
docker pull kubesphere/openelb:v0.5.1
#打包镜像
docker save -o openelb.tar kubesphere/openelb:v0.5.1
#拷贝镜像到其他节点
scp openelb.tar root@k8s-node1:/root
#导入镜像
docker load -i openelb.tar
等待一会儿,查看是否为Running状态
部署成功
在KubeSphere安装
略
OpenELB配置
Step 1: Enable strictARP for kube-proxy
#命令方式
kubectl edit configmap kube-proxy -n kube-system
#该项改为true
ipvs:
strictARP: true
#该项改为ipvs
mode: ipvs
#重启
kubectl rollout restart daemonset kube-proxy -n kube-system
#查看状态
kubectl get pods -n kube-system
或者直接在kubesphere上操作
保存更新,之后
执行如下命令
kubectl rollout restart daemonset kube-proxy -n kube-system
kubectl get pods -n kube-system
#age 单位是s了,重启成功
#确认配置生效
kubectl get configmap -n kube-system kube-proxy -o yaml | grep strictARP
Step 2: Specify the NIC Used for OpenELB
NIC(Network Interface Card ,网络接口卡、网卡)
#多个网卡,需要指定 192.168.8.11 master节点IP
# kubectl annotate nodes k8s-master01 layer2.openelb.kubesphere.io/v1alpha1="192.168.8.11"
只有一个网卡,暂时不需要配置
Step 3: Create an Eip Object
#创建eip对象
#mkdir eip
#cd eip
#vim layer2-eip.yaml
apiVersion: network.kubesphere.io/v1alpha2
kind: Eip
metadata:
name: layer2-eip
spec:
address: 192.168.8.70-192.168.8.99
interface: ens32
protocol: layer2
kubectl apply -f layer2-eip.yaml
kubectl get eip
OpenELB使用
k8s命令行
略
KubeSphere
创建项目
之前已创建
创建工作负载
之前已经创建了mysql,配置了外网访问NodePort,删除外网访问svc.
创建服务
编辑外网访问
上面已经删除了之前创建的外网访问,这里重新编辑外网访问。
#将下面的键值对填写到注解列表中
lb.kubesphere.io/v1alpha1:openelb
protocol.openelb.kubesphere.io/v1alpha1:layer2
eip.openelb.kubesphere.io/v1alpha2:layer2-eip
ip使用1
编辑服务,服务端口改为80
测试连接
创建应用路由
#没有DNS服务器,暂时在hosts下配置域名解析
192.168.8.70 kw-mysql.cn
补充Nacos集群外网访问配置
之前搭建的Nacos集群,还没用使用OpenELB。
重新配置一下。
修改application.properties
上面将mysql的容器暴露端口修改为了80,所以需要修改application.properties的数据库连接地址
mysql端口为 80
创建服务
kw-nacos-svc
#将下面的键值对填写到注解列表中
lb.kubesphere.io/v1alpha1:openelb
protocol.openelb.kubesphere.io/v1alpha1:layer2
eip.openelb.kubesphere.io/v1alpha2:layer2-eip
ip使用2
创建应用路由
kw-nacos
填写规则即可,不需要添加注解
#宿主机配置域名解析
192.168.8.71 kw.nacos.cn
测试访问