Kubernetes开源LoadBalancer—Metallb(BGP)

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
简介: Kubernetes开源LoadBalancer—Metallb(BGP)

Kubernetes开源LoadBalancer—MetalLB(BGP)


1.背景


最近一年为了迎接亚运会,单位开发了很多大屏展示界面,这些大屏展示页面需要提供给外部门访问,起初使用Ingress方式,但是需要外部门配置DNS,所以我们准备使用NodePort,但是领导想用LoadBalancer,众所周知,LoadBalancer大部分情况下只能在提供了外部负载均衡器的云提供商上使用,而我们是裸机集群,没办法,我们只能找开源的LoadBalancer解决方案。


在寻找资料的时候我们找到了两种解决方案,一种是Kubesphere的OpenELB,一种是MetalLB。但是OpenELB的文档实在是太少了,而且还是很久之前的文档,所以我们选择了MetalLB。


2.Metallb介绍


贴一段官方的介绍


Kubernetes没有为裸金属集群提供网络负载均衡器(LoadBalancer)。Kubernetes发布的网络负载均衡器的实现都是调用各种IaaS平台的外部负载均衡器。如果你不是运行在一个受支持的IaaS平台上,那么loadbalancer在创建时就会无限期地保持“Pending”状态。

裸金属集群运营商只剩下两个方式来将用户流量引入集群,即“NodePort”和“externalIPs”服务。这两种选择对生产用途都有显著的不利影响,这使得裸金属集群在Kubernetes生态系统中成为二等公民。

MetalLB的目标是通过提供一个与标准网络设备集成的网络负载均衡器实现来纠正这种不平衡,这样裸金属集群上的外部服务也可以尽可能地“正常工作”。

MetalLB有两个共同提供此服务的特性:地址分配和外部通知。


3.部署MetalLB(BGP)


3.1 部署环境


这是我们内部集群拓扑的一个简化图


640.png


Server IP BGP AS
Master 192.168.0.1 50001
Worker1 192.168.0.2 50001
Worker2 192.168.0.3 50001
Switch 192.168.0.254 50000


注意:如果集群的CNI使用的是calico,你需要禁用calico的BGP模式,否则会影响MetalLB的正常工作


3.2 部署


# 安装前准备
# 如果kube-proxy使用的是IPVS模式,你需要启用staticARP
kubectl edit configmap -n kube-system kube-proxy
# 设置staticARP为true
mode: "ipvs"
ipvs:
  strictARP: true
# 部署metalLB
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.12.1/manifests/namespace.yaml
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.12.1/manifests/metallb.yaml
# 检查pod运行状态
[root@node1 ~]# kubectl get pods -n metallb-system 
NAME                          READY   STATUS    RESTARTS   AGE
controller-6554b76d68-gxwml   1/1     Running   0          35d
speaker-p9x5v                 1/1     Running   0          35d
speaker-pgxkw                 1/1     Running   0          35d
# 配置metalLB
cat > metallb-eip.yaml <<EOF
apiVersion: v1
kind: ConfigMap
metadata:
  namespace: metallb-system
  name: config
data:
  config: |
    peers:
    - peer-address: 192.168.0.254 # BGP邻居IP(Core Switch的IP)
      peer-asn: 50000 # 对端AS号
      my-asn: 50001 # 本地AS号
    address-pools:
    - name: default
      protocol: bgp # 协议使用BGP
      addresses: # 地址池
      - 10.11.11.1-10.11.11.254
EOF
# 之前我地址池配置成10.11.11.0/24,Metallb分配地址时会把10.11.11.0也分配出去。
# 配置核心交换机
[Core-Switch]bgp 50000
[Core-Switch-bgp]peer 192.168.0.1 as-num 50001
[Core-Switch-bgp]peer 192.168.0.2 as-num 50001
[Core-Switch-bgp]peer 192.168.0.3 as-num 50001


查看BGP邻居建立情况 [Core-Switch]dis bgp peer


640.png


# 现在使用K8S dashboard做个实验
kubectl get svc -n kubernetes-dashboard
NAME                        TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)         AGE
dashboard-metrics-scraper   ClusterIP   10.1.189.92   <none>        8000/TCP        35d
kubernetes-dashboard        NodePort    10.1.88.59    <none>        443:31956/TCP   35d
# 现在使用的是NodePort,把他修改成LoadBalancer
kubectl edit svc -n kubernetes-dashboard kubernetes-dashboard
type: LoadBalancer
# 保存退出, 再次查看svc
kubectl get svc -n kubernetes-dashboard
NAME                        TYPE           CLUSTER-IP    EXTERNAL-IP   PORT(S)         AGE
dashboard-metrics-scraper   ClusterIP      10.1.189.92   <none>        8000/TCP        35d
kubernetes-dashboard        LoadBalancer   10.1.88.59    10.11.11.1    443:31956/TCP   35d
# 可以看到kubernetes-dashboard的EXTERNAL-IP已经被分配了一个地址


现在到交换机上看一下 [Core-Switch]dis bgp routing-table [Core-Switch]dis ip rou 10.11.11.1


640.png


640.png


可以看到交换机已经学习到了10.11.11.1的路由 在浏览器中访问https://10.11.11.1


640.png


相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
1月前
|
Kubernetes 容器
K8S的Service的LoadBanlance之Metallb解决方案
本文介绍了如何在Kubernetes中使用MetalLB来实现Service的LoadBalancer功能,包括MetalLB的部署、配置、以及通过创建地址池和部署服务来测试MetalLB的过程。
67 1
K8S的Service的LoadBanlance之Metallb解决方案
|
17天前
|
Kubernetes Linux 容器
1.xshell传不了文件输出0000如何解决.....2.k8s中metalLB文件内容
1.xshell传不了文件输出0000如何解决.....2.k8s中metalLB文件内容
|
1月前
|
Linux pouch 容器
CentOS7部署阿里巴巴开源的pouch容器管理工具实战
关于如何在CentOS 7.6操作系统上安装和使用阿里巴巴开源的Pouch容器管理工具的实战教程。
83 2
CentOS7部署阿里巴巴开源的pouch容器管理工具实战
|
1月前
|
Kubernetes 应用服务中间件 nginx
Kubernetes上安装Metallb和Ingress并部署应用程序
Kubernetes上安装Metallb和Ingress并部署nginx应用程序,使用LoadBalancer类型的KubernetesService
129 3
|
3月前
|
Kubernetes 负载均衡 安全
如何为Azure Kubernetes Services启用Internal Loadbalancer
执行上述步骤,您就可以搭建一个仅在Azure虚拟网络内部可用的内部负载均衡器了。这为内部服务通信提供了安全性,避免了外部世界的直接接入。与外部负载均衡器相比,内部负载均衡器通常用于企业内部或多层应用架构中的后端服务。通过仔细配置和管理AKS中的Service对象,您可以确保应用架构符合网络和安全性要求。
36 2
|
3月前
|
Kubernetes 持续交付 Python
Kubernetes(通常简称为K8s)是一个开源的容器编排系统,用于自动化部署、扩展和管理容器化应用程序。
Kubernetes(通常简称为K8s)是一个开源的容器编排系统,用于自动化部署、扩展和管理容器化应用程序。
|
4月前
|
Kubernetes Cloud Native 开发者
阿里云网络发布 alibaba-load-balancer-controller v1.2.0:开启云原生网关开源新篇章!敬请探索!
**阿里云发布开源版ALB控制器v1.2.0,对齐商业版ALB Ingress Controller v2.10.0。新版本增强了功能特性,提升了用户体验,并提供了最佳实践。功能更新包括自定义标签、QUIC协议支持、转发规则和安全策略等。此外,还引入了ReadinessGate实现滚动升级时的平滑上线和Prestop钩子确保平滑下线。用户可从GitHub获取开源代码,通过Docker Hub拉取镜像,开始使用alibaba-load-balancer-controller v1.2.0。**
239 3
阿里云网络发布 alibaba-load-balancer-controller v1.2.0:开启云原生网关开源新篇章!敬请探索!
|
4月前
|
Kubernetes Cloud Native 开发者
阿里云网络发布云原生网关 alibaba-load-balancer-controller v1.2.0,持续拥抱开源生态
alibaba-load-balancer-controller开源版本正式推出v1.2.0,能力对齐ALB Ingress Controller商业版v2.10.0。
|
5月前
|
Kubernetes 关系型数据库 分布式数据库
【PolarDB开源】PolarDB与Kubernetes集成:容器化部署的最佳实践
【5月更文挑战第21天】本文介绍了将阿里云的高性能数据库PolarDB与容器编排工具Kubernetes集成的步骤。首先,需准备Kubernetes集群和PolarDB Docker镜像,安装Helm。然后,通过Helm部署PolarDB,设置存储类和副本数。接着,应用配置PolarDB连接信息,打包成Docker镜像并在K8s集群中部署。此外,调整PolarDB参数以优化性能,并使用Prometheus和Grafana监控。本文为PolarDB在Kubernetes中的最佳实践提供了指导。
144 4
|
5月前
|
负载均衡 关系型数据库 分布式数据库
【PolarDB开源】PolarDB读写分离实践:优化读取性能与负载均衡策略
【5月更文挑战第26天】PolarDB是云原生关系型数据库,通过读写分离优化性能和扩展性。它设置主节点处理写操作,从节点处理读操作,异步复制保证数据一致性。优化读取性能的策略包括增加从节点数量、使用只读实例和智能分配读请求。负载均衡策略涉及基于权重、连接数和地理位置的分配。实践示例中,电商网站通过主从架构、只读实例和负载均衡策略提升商品查询效率。PolarDB的读写分离与负载均衡为企业应对大数据和高并发提供了有效解决方案。
230 0