当前位置: 首页 > 网络应用技术

在BGP模式下印花布和金属的组合

时间:2023-03-07 12:14:51 网络应用技术

  最近,我们的业务扩大了计算机室的新区域和Calico BGP,该区域已被抛弃了一段时间。为了结合整个过程以使其更轻松,我仍然决定记录此过程。值得将来是当前的摘要还是重新审查计划。每个人都知道Yunyuan生产的网络体系结构可以是在Kubernetes中被视为一百朵花,每个花都有自己的优势。这也导致网络是大多数K8的几个山脉之一,朝着高端管理人员进行。实际上,制造商在公共云上提供的CNI组件可能不会感觉到其复杂性,但是一旦您想要要在IDC上建立一个群集,您将面临选择Kubernetes网络架构的问题。作为Kubernetes上使用最广泛的Kubernetes CNI之一,Calico自然有许多关注者。这篇文章是BGP网络网络中的摘要。自行车的机房。

  有很多Yunyuan CNI组件,例如老式的法兰绒,印花布,weavenet,kube-router和antrea,kube-ovn和cilium,它们在过去两年中都出现了。它们都具有自己的优势各自的场景。在选择之前,我们可以进行简单的功能比较:

  

  此外,关于CNI性能部分,我们还可以通过2020 CNI性能测试报告“ Kubernetes网络插件的基准结果(CNI)超过10GBIT/S网络”。

  

  在驾驶员房间的新区域的网络选择方面,我们终于选择了印花布作为云网络解决方案。在这里,我们简要解释了Calico选择Calico的原因:

  结合驾驶员房间的新区域,H3C S9系列开关直接支持访问层开关侧的路由反射。最后,我们选择了Calico并使用BGP RR模式作为Kubernetes的CNI组件。

  在谈论Metallb之前,首先审查在Kubernetes中部署的申请,如何访问其下游服务。通常在以下情况下有几种情况

  集群中的请求:

  直接通过Kubernetes的服务访问。

  广州请求:

  可以看出,在引入外部负载平衡器之前,该应用程序已部署在Kubernetes群集中。它仍然与北部方向流的地址地址不友好。也许有些同学说,当我在公共云上使用kubernetes时,我将服务类型设置为LoadBalancer。是否有类似于Kubernetes群集的东西来实现它?

  当然!这是一个为裸体金属服务器下的Kubernetes群集所生的负载平衡项目。

  实际上,当然,当然,不仅具有元来,还有其他负载平衡产品,例如Purelb和OpenElb在开源行业中。但是,本文的目的是使用BGP协议来实现负载平衡,因此重点将偏向Metellb

  简而言之,Metallb包含两个组件来操作更改服务资源和IPAM的更改。用于BGP的外部广播地址和连接。它支持两个流模式,即:Harmony。

  也称为ARP/NDP模式。在这种模式下,库本雷群岛集群中运行扬声器的机器通过了“ LoadBaranscer IP”的所有权,并使用ARP协议来广播其IP和MAC,以便可以在本地网络上访问这些IPS。使用Layer2模式对现有网络没有太大要求,甚至不需要路由器支持。但是,缺点也很明显。LOADBARANS IP所在的节点节点带有所有流量,并生成一定的网络瓶颈。

  此外,我们可以简单地理解layer2模式与保存原理相似。仅针对第2层的主要选举不是与VRRP通信以进行交流。

  在BGP模式下,群集中的所有主机运行扬声器都将与上开关建立BGP连接并广播其负载Balancer的IP地址。优势是真正实现了网络负载平衡。缺点是配置要复杂得多,并且上层路由器需要支持BGP。

  通过上述介绍,您可能会发现一个问题:在BGP模式下,印花布和MetallB都需要运行Daemonset BGP客户端以在主机和上部路由器上构建BGP对等。它是calico.speaker中的鸟。这将导致他们使用的一些问题。

  BGP仅允许每个节点建立一个会话。如果印花布使用印花布并建立BGP路由器会话,则Metallb无法建立自己的会话。因为路由器将考虑与此BGP会话进行冲突,并拒绝连接以连接

  实际上,我们的传统织物网络还使用上述解决方案遇到了这个问题。Metallb社区还提供了3种解决方案:

  该解决方案在理论上是可行的,但是作者的数据中心不支持VRF函数路由器,并且不控制受不同网络设备制造商限制的操作差异差异。因此,每个用户需要确定特定的实现。

  如前所述,在本节中使用有关印花布和金属的大段落的使用,我们只需部署和配置即可完成以前的内容。

  网络上的一些基本信息:

  .0/21Kubenretes服务负载Balanor地址池,即LoadBalancers IP区域Calico的BGP信息,MetallBIDC中心

  作为域65001BGP PEER10.52.1.253,10.52.1.254CALICO PART

  这是因为我们的服务器不大(<50)可以直接采用全局BGP连接模式。

  考虑到BGP连接的冗余,就使用而言,我们可以创建两个BGPPER,以防止路由器免受单点故障。

  如果您需要根据机架对AS域进行划分,则可以使用每个节点对等模式通过NodeSelector实现个性化的连接配置。

  目前,我们使用Calicoctl查看BGP状态。如果状态升起,则意味着群集中主机的BGP连接正常。

  金属部分

  如果多个用户主机同时将大量ARP数据包发送到设备,或者攻击者将假ARP消息发送到设备,则会发生以下问题:

  为了避免上述问题,启动严格的核能后,设备发送的ARP请求消息只会了解ARP回复的ARP表项。这样,设备可以捍卫大多数ARP攻击。

  请注意,由于我们不需要MetAllB的扬声器服务,因此可以成功运行MetallB控制器,因此可以删除扬声器服务。

  Calico广播Kubernetes服务地址(包括Metallb地址)受益于BGP的使用。印花布可以轻松地将Kubernetes集中服务IP地址发布到内部网络,例如POD IP.REAL负载余额是通过使用ECMP(等效和多人路由)实现的。

  通常,Kubenretes服务中的地址涉及3种类型,即和谐。

  考虑到我们只需要通过方式公开有限的服务。(尽管直接释放群集很酷,但在某些网络限制中不接受它)。因此,Calico的BGP仅需要在下面配置。

  如果我们需要从广播中排除Kubernetes的控制节点,则只需要在控制平面的主机上添加以下标签:

  原则上,路由器是在路由器上打开BGP协议是第一个在上述操作中启动的。我不是互联网上的专家。在这里,我只对Calico BGP网络的体系结构进行了简要说明。读者可以在计划其BGP网络时与网络工程师合作。

  最后,在开关上创建了路线和BGP邻居之后,印花布的鸟类服务可以连接到反射。目前,连接的状态如下

  路由表信息如下

  您可以看到,目前,容器的子网络清楚地阐明了下一个跳跃的主机地址以及下一个跳跃地址的公告。

  关于EMCP等效的ECP的ECMP(相等成本的多路路径路由)实现了等效的多路负载平衡和链接备份的目的。第3层的大多数使用负载平衡,以解决单点和扩展能力的问题”加载平衡服务器”。现在,我们已经在内部采用了BGP网络,当然,也可以在路由器上启用此功能。

  启用此功能后,我们可以看到访问目标地址是路由表中网络段的路由。下一个跳跃地址可以是多个Calico节点主机。

  但是,在决定启用ECMP之前,您需要了解其背后仍然有一些应用程序。

  当我们使用BGP使第3层层的负载平衡时,当某个主机失败时,可以通过连接三个-yuan组/五美元组作为负载平衡数据包来将开关重新发射到新主机上。到目标地址的变化,当数据包到达新主机时,它将直接丢弃,导致连接被断开。这是应用层上反应的现象

  当然,我们可以使用其他一些方法来避免和减少上述现象的范围,例如:

  当服务部署计划时,请尝试将其修复到较小的范围或更稳定的托管组。

  上层应用程序需要支持网络连接断开连接的重新审判逻辑

  在MeltallB和应用程序之间添加一层流量控制器(例如Ingress-nginx),以维持连接状态的一致性。这样,以上问题仅在生成Ingress-nginx的比例时才发生。

  本文主要描述了传统的自我制造的数据中心,使用印花布和金属与内部BGP网络。并提供提供Kubernetes并与Internet相互键入的能力。

  面对面向云的通用容器云平台

  github搜索[kubegems]或直接访问https://kubegems.io/了解更多信息。

  原始:https://juejin.cn/post/70966837930028039