乐趣区

Porter-进入-CNCF-云原生全景图新版本即将发布

近日,KubeSphere 社区子项目面向物理机环境的负载均衡器 Porter 正式进入 CNCF Landscape。CNCF Landscape 在云原生实际过程中的每个环节帮忙用户理解有哪些具体的软件和产品抉择,Porter 进入 CNCF Landscape,意味着 Porter 正式成为了 CNCF 认可的构建云原生最佳实际中的一环。

云原生计算基金会(CNCF, Cloud Native Computing Foundation)致力于云原生技术的遍及和可继续倒退。在每年的 CNCF 年度报告中都会提及 CNCF Landscape,CNCF Landscape 是 CNCF 中的一个重要我的项目,帮忙企业和开发人员疾速理解云原生体系的全貌,同时,也受到宽广开发者和使用者对该项目标关注和器重。CNCF Landscape 用意从云原生的层次结构,以及不同的性能组成上,让用户理解云原生体系的全貌,并帮忙用户在不同组件档次去抉择失当的软件和工具进行反对。

新晋 CNCF Landscape 的 Porter,解决什么问题?

在 Kubernetes 集群中能够应用“LoadBalancer”类型的服务将后端工作负载裸露在内部。云厂商通常为 Kubernetes 提供云上的 LoadBalancer 插件,但这须要将集群部署在特定 IaaS 平台上。然而,许多企业用户通常都将 Kubernetes 集群部署在物理机上,尤其是用于生产环境或数据敏感的环境。而且对于本地物理机集群,Kubernetes 不提供 LoadBalancer 的解决方案。Porter 是 KubeSphere 社区开源的专为物理机 Kubernetes 集群裸露服务而设计的开源的负载均衡器,为用户提供在物理环境裸露服务和在云上裸露服务一致性体验的插件。

Porter 次要个性

面向物理机环境的 Kubernetes 开源负载均衡器 Porter 次要个性有:

  • 基于路由器 ECMP 的负载平衡
  • 基于 Layer 2 的负载平衡
  • 基于 BGP 路由动静配置
  • 反对 VIP 治理
  • 反对在 Kubernetes Service 中指定 LoadBalancerIP(v0.3.0)
  • 反对通过 Helm Chart 装置(v0.3.0)
  • 反对通过 CRD 动静配置 BGP 服务端(v0.3.0)
  • 反对通过 CRD 动静配置 BGP 对等体(v0.3.0)

与 MetalLB 的区别

长处

  • 对 Kubernetes 用户敌对。基于 CRD-Controller 模式,应用 kubectl 管制 Porter 的所有
  • 配置文件动静更新,无需重启,自动更新 BGP 配置。依据网络环境灵便配置 BGP,动静启用各种 BGP 个性
  • 更敌对地解决与 Calico 的抵触,提供 Passive 模式和端口转发模式

毛病

  • 无奈跨平台,目前仅反对 Linux

Kubernetes 服务

在 Kubernetes 集群中,网络是十分重要的基础设施。对于大规模的节点和容器来说,要保障网络的连通性、网络转发的高效,同时能做的 IP 和 Port 自动化调配和治理,并提供给用户十分直观和简略的形式来拜访须要的利用,这是非常复杂且粗疏的设计。

Kubernetes 自身在这方面下了很大的功夫,它通过 CNI、Service、DNS、Ingress 等一系列概念,解决了服务发现、负载平衡的问题,也大大简化了用户的应用和配置。其中的 Service 是 Kubernetes 微服务的根底,Kubernetes 是通过 kube-proxy 这个组件来实现服务的。kube-proxy 运行在每个节点上,监听 API Server 中服务对象的变动,通过治理 iptables 来实现网络的转发。用户能够创立多种形式的 Service,比方基于 Label Selector、Headless 或者 ExternalName 的 Service,kube-proxy 会为 Service 创立一个虚构的 IP(即 Cluster IP),用于集群外部拜访服务。

裸露服务的三种形式

如果须要从集群内部拜访服务,行将服务裸露给用户应用,Kubernetes Service 自身提供了两种形式,一种是 NodePort,另外一种是 LoadBalancer。另外 Ingress 也是一种罕用的裸露服务的形式。

NodePort

如果将服务的类型设置为 NodePort,kube-proxy 就会为这个服务申请一个 30000 以上的端口号(默认状况下),而后在集群所有主机上配置 IPtables 规定,这样用户就能通过集群中的任意节点加上这个调配的端口号拜访服务了,如下图

NodePort 是最不便的裸露服务的形式,毛病也很显著:

  • 基于 SNAT 进行拜访,Pod 无奈看到真正的 IP。
  • NodePort 是将集群中的一个主机作为跳板拜访后端服务,所有的流量都会通过跳板机,很容易造成性能瓶颈和单点故障,难以用于生产环境。
  • NodePort 端口号个别都是用大端口,不容易记忆。

NodePort 设计之初就不是用于生产环境裸露服务的形式,所以默认端口都是一些大端口。

LoadBalancer

LoadBalancer 是 Kubernetes 提倡的将服务裸露给内部的一种形式。然而这种形式须要借助于云厂商提供的负载均衡器能力实现,这也要求了 Kubernetes 集群必须在云厂商上部署。在物理机部署的 Kubernetes 环境则须要 Porter 来解决服务裸露的问题。

LoadBalancer 的原理如下:

LoadBalancer 通过云厂商的 LB 插件实现,LB 插件基于 Kubernetes.io/cloud-provider 这个包实现,这个包会主动抉择适合的后端裸露给 LB 插件,而后 LB 插件由此创立对应的负载均衡器,网络流量在云服务端就会被分流,就可能防止 NodePort 形式的单点故障和性能瓶颈。LoadBalancer 是 Kubernetes 设计的对外裸露服务的举荐形式,然而这种形式仅仅限于云厂商提供的 Kubernetes 服务上,对于物理部署或者非云环境下部署的 Kubernetes 集群,这一机制就存在局限性而无奈应用。

Ingress

Ingress 并不是 Kubernetes 服务自身提供的裸露形式,而是借助于软件实现的同时裸露多个服务的一种相似路由器的插件。Ingress 通过域名来辨别不同服务,并且通过 annotation 的形式管制服务对外裸露的形式。其原理如下图:

疾速部署和体验 Porter

齐全开源

Porter 的所有代码和文档已在 Github 开源,欢送大家关注 (Star) 和奉献:https://github.com/kubesphere…

疾速部署

Porter 目前已在如下三种环境下进行过部署和测试,并将部署测试与应用步骤的具体文档记录在 GitHub,能够通过以下链接查看和部署实际:

  • 应用 Helm Chart 在 Kubernetes 部署 Porter:https://github.com/kubesphere…
  • 在物理机部署的 Kubernetes 部署 Porter:https://github.com/kubesphere…
  • 在云平台用模仿路由器的形式测试:https://github.com/kubesphere…

最新动静

Porter 将在本月中旬公布 新版本 v0.3.0,新版本由 青云 QingCloud、原本生存和北京吉恒科技 三家公司联合开发,由社区定义与奉献,非常感谢非青云的社区贡献者 @k0ngk0ng 和 @chinazj。新版本的次要性能已在文中 Porter 介绍中标注,欢送大家装置体验!

延长浏览

  • Porter- 面向物理机环境的 Kubernetes 开源负载均衡器:https://kubesphere.com.cn/con…
  • Porter 如何帮忙原本生存在 K8s 物理环境裸露集群服务:https://mp.weixin.qq.com/s/Us6DZbf_GhRT69-dL1GD4g
  • Porter 官网:https://porterlb.io/

对于 KubeSphere

KubeSphere(https://kubesphere.io)是在 Kubernetes 之上构建的以利用为核心的开源容器平台,提供全栈的 IT 自动化运维的能力,简化企业的 DevOps 工作流。

KubeSphere 已被 Aqara 智能家居、原本生存、新浪、安畅网络、华夏银行、极视角、云智汇、微众银行、VNG Corporation、Radore 等海内外数千家企业采纳。KubeSphere 提供了运维敌对的向导式操作界面和丰盛的企业级性能,包含 Kubernetes 资源管理、DevOps (CI/CD)、利用生命周期治理、微服务治理 (Service Mesh)、多租户治理、监控日志、告警告诉、存储与网络管理、GPU support 等性能,帮忙企业疾速构建一个弱小和功能丰富的容器云平台。

KubeSphere 官网:https://kubesphere.io/
KubeSphere GitHub:https://github.com/kubesphere…

本文由博客一文多发平台 OpenWrite 公布!

退出移动版