KubeSphere 是在Kubernetes 之上构建的面向云原生应用的分布式操作系统,完全开源,支持多云与多集群管理,提供全栈的IT 自动化运维能力,简化企业的DevOps 工作流。在生产环境中,可以部署在GCE GKE、Azure AKS、AWS EKS、DigitalOcean、Linode、Oracle OKE这些国外的托管云上,也可以在国内的阿里云ACK、腾讯云TKE、华为云CCE这些托管云上。
使用托管云有一个很方便的优点是可是直接使用云基础的负载均衡器暴露服务出来,但如果你只是想自建一个基于Linux的K8S(Kubernetes)集群,那么就需要自己解决服务暴露的需求了。如果你使用K3S,也就是rancher的那套东西,可以不用怎么去想这个问题,rancher开箱即用的traefik就可以满足这一点,当然你也可以用其他LB去解决,这不在本文范畴,下次再安排。
以下重点还是围绕KubeSphere的K8S,说一下在Linux上部署安装的K8S应该怎么暴露服务,这里用到的是OpenELB,它的前身是PorterLB,属实是OpenELB更好记忆了。
首先按照KubeSphere的安装说明,完成KubeSphere的安装,本文采取的安装方式是All-in-One,单节点,机器配置为Hetzner AX51-NVME服务器。
安装OpenELB目前有两种方式,一种是直接使用kubectl,另外一种则是需要借助helm进行,这里采用kubectl的安装,个人觉得更方便,也更容易理解和后续维护。
安装 OpenELB
使用 kubectl 安装 OpenELB
- 首先使用SSH登录 Kubernetes 集群所在的服务器,登录成功后执行下述命令:
kubectl apply -f https://raw.githubusercontent.com/openelb/openelb/master/deploy/openelb.yaml
- 执行完毕后,请再次执行下述命令检查
openelb-manager
的状态,当状态变为 READY: 1⁄1 和 STATUS: Running 时,那么意味着 OpenELB 已经安装成功了。kubectl get po -n openelb-system
执行第二步之后,应该可以看到下述输出:
NAME READY STATUS RESTARTS AGE
openelb-admission-create-cjdg5 0/1 Completed 0 41s
openelb-admission-patch-2f2sd 0/1 Completed 0 41s
openelb-keepalive-vip-42z4h 1/1 Running 0 41s
openelb-manager-774f8cc4dc-s2gbl 1/1 Running 0 41s
使用 kubectl 删除 OpenELB
- 如需删除 OpenELB, 首先使用SSH登录 Kubernetes 集群所在的服务器,登录成功后执行下述命令:
kubectl delete -f https://raw.githubusercontent.com/openelb/openelb/master/deploy/openelb.yaml
请注意!!!
在删除 OpenELB 之前,必须确保openelb-system
命名空间下没有任何服务,特别是后面配置到eip时,必须先删除Eip
,再删除 OpenELB ,否则你会遇到无法删除Eip
的Bug,引用来源:https://kubesphere.com.cn/forum/d/2379-porter/8
执行删除命令之后,你可以执行一次以下命令,检查命名空间下是否还存在openelb-system
这个命名空间,如果没有找到,那么OpenELB就已经被删除了。
kubectl get ns
配置 OpenELB
OpenELB在最新的0.5.0的版本中,支持三种模式,分别是BGP模式、Layer2模式、VIP模式。BGP模式适合能够管理到路由器的用户,路由需要支持BGP路由和等价多路经路由;Layer2是大多数用户比较容易做的,只需要机房允许ARP/NDP数据包,就可以了;VIP模式与Layer2的需求差不太多,可以不需要ARP/NDP数据包的支持,但这个模式目前还是测试阶段,有许多不确定的因素,此外它要求Kuberneter集群节点有且只能有一个NIC,而在我的测试中,如果这个NIC上只有一个IP地址,使用VIP模式之后,则会丢失路由
介绍完三种模式,在我们这个案例中,只使用Layer2就可以达成目的,因此以下操作都是基于Layer2模式进行的,如果要了解更多模式的具体区别,请访问官方参考:https://openelb.io/docs/getting-started/installation/install-openelb-on-kubernetes/
步骤1:为 kube-proxy 启用 strictARP
在Layer2模式下,需要为kube-proxy启用strictARP
,以便Kubernetes集群中的所有NIC停止响应来自其他NIC的ARP请求,让OpenELB处理ARP请求。
- 登录Kubernetes集群,运行下属命令编辑 kube-proxy
ConfigMap
:kubectl edit configmap kube-proxy -n kube-system
- 在kube-proxy ConfigMap YAML配置中,将
data.config.conf.ipvs.strictARP
设置为True。ipvs: strictARP: true
- 运行以下命令以重新启动kube-proxy:
kubectl rollout restart daemonset kube-proxy -n kube-system
步骤2(可选):指定用于OpenELB的网卡
如果安装了OpenELB的节点有多个NIC,则需要在第2层模式下指定用于OpenELB的NIC。如果节点只有一个NIC,则可以跳过此步骤。
在本例中,安装了OpenELB的master 1节点有两个NIC(eth0 192.168.0.2 和eth1 192.168.1.2),我们指定 eth0 192.168.0.2 用于OpenELB。
运行以下命令注释master 1以指定NIC:
kubectl annotate nodes master1 layer2.openelb.kubesphere.io/v1alpha1="192.168.0.2"
步骤3:创建公网EIP对象(Eip)
这里的EIP对象充当OpenELB的IP地址池,如果你有多个IP,则填写起始IP-结束IP,如果你只有一个IP,则填写一个就好。在本例中,我们只有一个公网IP。
- 运行以下命令为EIP对象创建一个YAML文件:
vi layer2-eip.yaml
- 将以下信息添加到YAML文件:
apiVersion: network.kubesphere.io/v1alpha2 kind: Eip metadata: name: layer2-eip spec: address: 162.55.6.138 interface: eth0 protocol: layer2
请注意!!!
- SPEC:ADDRESS 中指定的IP地址必须与Kubernetes集群节点位于同一网段上。
- 如果你有多台服务器需要添加进集群,则应确保每台节点都有一个内网连接可用
然后运行以下命令创建弹性公网IP对象:
完成以上步骤之后,这时OpenELB的安装已经进行到一半了,剩下的我们需要到KubeSphere中进行。
在KubeSphere启用集群网关,并指定OpenELB为负载均衡器提供商
登录KubeSphere控制台,在【集群】-> 【集群设置】-> 【网关设置】,添加一个集群网关,选择OpenELB为负载均衡器提供商,并在注解(即注释)中添加以下三项:
如下图所示
![图片[1] - 单节点部署Kubesphere+OpenELB - EVLIT](https://imgcache.evlit.com/wp-content/uploads/2022/07/6222a1d68a112015-947x800.png)
最后还需要在【平台管理】-> 【集群管理】,进入集群,在系统项目 kubesphere-controls-system 中找到集群网关对应的服务,本例中的是 kubesphere-router-kubesphere-system。
![图片[2] - 单节点部署Kubesphere+OpenELB - EVLIT](https://imgcache.evlit.com/wp-content/uploads/2022/07/15eb6b80c6112033-1000x546.png)
编辑服务的配置文件,将 externalTrafficPolicy 改为 Local 模式即可。
![图片[3] - 单节点部署Kubesphere+OpenELB - EVLIT](https://imgcache.evlit.com/wp-content/uploads/2022/07/21f9ae4a71112051-1000x677.png)
或直接在kubectl中完成,输入下述命令:
至此,OpenELB的安装结束。后续就可以在项目部署中,直接使用这个集群网关,提供网站80和443端口的暴露了。碍于篇幅这里不做展开。
创作不易,转载请著名出处,谢谢!
相关推荐: 如果OpenLiteSpeed使用了CloudFlare等CDN如何显示访客的真实IP
本文为DirectAdmin面板如何使用OpenLiteSpeed系列的第二章: 第一章:DirectAdmin面板如何使用OpenLiteSpeed替代默认的Apache第二章:如果OpenLiteSpeed使用了CloudFlare等CDN如何显示访客的真…
您也可以联系文章作者本人进行修改,若内容侵权或非法,可以联系我们进行处理。
任何个人或组织,转载、发布本站文章到任何网站、书籍等各类媒体平台,必须在文末署名文章出处并链接到本站相应文章的URL地址。
本站文章如转载自其他网站,会在文末署名原文出处及原文URL的跳转链接,如有遗漏,烦请告知修正。
如若本站文章侵犯了原著者的合法权益,亦可联系我们进行处理。
你好3天前0
你好,可以再帮我看看吗? 我已经按照你的方法设定了,还是一样,wordpress后台的 Purge Varnish Cache 插件还是清除不到cache,依旧显示 the varnish control terminal is not responding at。谢谢https://mjj.today/i/Srk2Tz https://mjj.today/i/Srkcoi你好5天前0
对,你说的没错,我配置的时候改了一些东西,现在我按照你的教学,可以启动了,网页可以缓存了,不过wordpress 清除cache 那个插件没用的,我输入本地回环地址127.0.0.1 :6082 ,再输入API key ,插件显示the varnish control terminal is not responding at 127.0.0.1:6082,就你图片那样,然后试一下点击清除cache 那里,他显示error,研究了一天,还是没有不行。你好7天前1
你好,为啥我按照你的方法,到第三部分,去到真正后源的服务器设定Varnish 部分,我填了真正后源的IP跟端口跟域名,然后重启 Varnish ,就出现这样了? 这是怎么回事? 谢谢[Linux] AMH 7.1 https://amh.sh[varnish-6.6 start] ================================================== =========== [OK] varnish-6.6 is already installed. Could not delete 'vcl_boot.1713549650.959259/vgc.sym': No such file or directory Error: Message from VCC-compiler: VCL version declaration missing Update your VCL to Version 4 syntax, and add vcl 4.1; on the first line of the VCL files. ('/home/usrdata/varnish/default.conf' Line 1 Pos 1) ...#---Running VCC-compiler failed, exited with 2 VCL compilation failedchu19天前0
很完善的教程‘hu24天前0
我用gmail EMAIL_SERVER="smtp://********@gmail.com:bpyfv*********[email protected]:587"叽喳24天前0
MAIL_SERVER="smtp://[email protected]:[email protected]:587"大佬 这个使用outlook 或者gmail 是什么样子的格式? 邮寄已经开启smtp了hu25天前0
输入框的问题解决了,我没有设置反代,NEXTAUTH_URL改为域名+端口就好了hu25天前0
后面搭好了,但是不配置umami的话,进去之后保存按钮点不了,而且转发设置了都不通 又重新搭之后注册界面输入框没了