四大功能!带你初识 Fabric | 容器网络系列第2期

朱贵
• 阅读 963

容器网络系列:第二期

随着 Kubernetes 社区的发展,实际生产环境中使用 Kubernetes 越来越多,用户对 CNI (Container Network Interface) 的要求也越来越多。Fabric 作为博云自研的一款成熟的 CNI 产品,旨在提供能适应多种场景,功能丰富易用且性能卓越的容器网络管理平台,从而有效的回应用户对于 CNI 的期待。

本期我们将着重介绍 Fabric 的一些常用基础功能。


一、IP/MAC 固定

1.1 使用场景

  • 保证 Pod IP/MAC 不变

Kubernetes 具有很高的容错性,例如,当集群中的某一节点发生故障时,pod 会自动漂移到其它正常的节点,这样就保证了业务的可用性,不再需要手动到对应的节点启动容器。但是 pod 在其它节点启动的过程中会重新申请 IP/MAC 地址,如果不支持 IP/MAC 固定的 CNI, pod 的 IP 地址很容易发生改变,这对很多强依赖 IP/MAC 的业务(如: 数据库服务, 微服务网关等)来说是不可接受的。

固定 IP/MAC 使漂移后的 pod 可以保持原有的身份发生网络访问,提高了业务可用性,保证了关联业务都能正常与之发生访问。

  • 简化相关网络策略的配置

在一些安全策略把控严格的企业中,针对特定的业务 pod 开通外围的网络策略就变得稍显复杂。此时,如果业务 pod 的身份信息无法固定,则意味着 pod 重建或者发生漂移后对应的网络策略都要发生变更, 这对于运维工程师来说无疑是极为头疼的。因此,固定 IP/MAC 应运而生,这大大简化了网络策略的配置,并降低了维护成本。

1.2 产品特点

Fabric 固定 IP/MAC 的功能有如下特点:

(1) 更灵活的 IP/MAC 预约池,只要 IP/MAC 未被使用就能加入预约池。

(2) CRD 设计,更符合 Kubernetes 的设计原则。

(3) 支持常见的 Kubernetes Workload。

(4) Namespace 级别的安全隔离,不同的租户可以使用不同的 IP/MAC 预约池。

(5) 预约池可以根据使用需求动态扩缩容。

(6) 对于无状态服务,每次分配会从 IP 池中随机分配;对于有状态的 Statefulset 类型应用,每个 Pod 实例会获取整个生命周期固定的 IP 地址。

1.3 实现原理

集群中的 Pod 在某一节点被创建时,Kubelet 都会通过 CNI 去请求分配 IP,Fabric CNI 会通过 http 请求的方式向 fabric api-server 发送申请 IP 的请求。当 fabric api-server 收到申请 IP 的请求之后,首先会根据请求中的 pod 信息去查看 pod 对应的 annotation,判断 annotation 是否绑定 IP/MAC 预约池(即判断是否需要固定 IP/MAC)。如果没有绑定 IP/MAC 预约池则正常分配 IP,如果存在 IP/MAC 预约池,则使用 IP/MAC 预约池中的 IP/MAC,即完成固定 IP/MAC。

基本固定 IP/MAC 流程如图 1 所示:
四大功能!带你初识 Fabric | 容器网络系列第2期

图 1:fabric 固定 IP/MAC 流程

二、流量出口 - EgressIp

2.1 使用场景

  • 集群流量审计

当在集群中想要做流量审计工作时,统计集群中每条对外的流量是一件十分麻烦的事情,因为集群中的每个节点都能成为对外流量的出口。当集群的节点数量较多时,工作量更是会成倍的上涨。但是,通过 Fabric,我们可以借助配置 EgressIP 来完美解决这个问题,所有的对外流量均从一组节点流出,工作人员从之前对集群的每个节点都进行统计,到只需要统计一组节点的流量记录,这大大降低了工作量。

  • 安全运维

在实际生产环境中,基于安全生产的原则,集群中只有个别的节点可以连接外网,集群管理员只需要为个别节点开通对外策略。Pod 如果想要访问外网,可以通过配置 EgressIP 来实现。

  • 固定出口 IP

某些应用(如数据库)只能接受指定源 IP 地址的流量,其它地址的连接均不予接受。如果集群中所有需要访问应用的流量都需要集群管理人员手动配置的话,这明显是一个巨大的工作量。对此我们可以通过配置 EgressIP,来配置专门的流量出口,大大减轻工作人员的运维压力。

2.2 特点

Fabric EgressIP 功能的设计有如下特点:

(1) 配置灵活:EgressIP 可以配置为 namespace 级别,也可以设置为 pod 级别,满足不同级别的配置需求。

(2) 高可用性:当 fabric 重启之后,会自动重新分配 EgressIP。当正在使用的 EgressIP 挂掉之后,fabric 会自动在配置列表中选择一个最优且可用的 EgressIP 进行替换。

(3) EgressIP 优选,在 EgressIP 可用列表中优先会选择 pod 所在节点做为 EgressIP,从而减少网络损耗。

2.3 实现原理

  • Egress IP 选择原理

(1) 获取可用 EgressIP 列表。

(2) 判断可用 EgressIP 中是否有当前 pod 所在节点,如果存在则选择当前节点 IP 为 EgressIP。

(3) 如果不存在则选择当前 pod 之前被分配过的 EgressIP。

(4) 如果 pod 之前使用的 EgressIP 也不存在,则使用可用 EgerssIP 列表的最后一位。

  • 网络传输原理

当 pod 数据访问目的地址被判定为外部网络时,数据会发往 EgressIP 所在的节点,然后从 EgressIP 所在节点传输到外部网络。

具体网络传输过程如图 2 所示:
四大功能!带你初识 Fabric | 容器网络系列第2期

图 2:设置 pod 通过 EgressIP 访问外部网络数据传输流程

注:Fabric overlay 网络支持多种封装协议(vxlan、gre、geneve),图 2 仅以 vxlan 作为示例,不代表仅支持 vxlan。

三、QoS (Quality of Service) 服务质量

3.1 使用场景

  • 业务 Pod 双向限速

当集群网络资源有限时,某一时刻发生的大文件传输过程,或者其它需要占用大规模网络资源的情况,极易造成集群网络的崩溃。通过 QoS 配置,可以限制某些容易发生大规模传输的网络资源配额,给予其正常的网络带宽,从而保证集群整体网络的正常。

3.2 特点

(1) 使用简单,直接通过的注解(annotation)进行双向的 Qos 配置。

(2) 支持双栈,IPV4 和 IPV6 都有很好的支持。

(3) 支持多网络,在多网络的环境下,支持对每个网卡分别进行 QoS 配置。

3.3 实现原理

Fabric 的容器网络架构基于 OpenvSwitch,pod 通过 veth peer 连接在 ovs bridge 的 port 上,主机侧的 veth 等同于 ovs 的 interface (网卡),interface 插在 ovs port 里,所以我们控制 pod 的 QoS 就等同于控制对应 ovs interface/port 的 QoS。因此,配置 pod 出栈的 Qos 实际上是配置主机侧 veth 对应的 interface 的 ingress 属性,配置 pod 入栈的 QoS 实际是配置主机侧 veth 对应的 port (interface 插入的地方) 的 QoS 属性。

Fabric 配置 QoS 的原理如图 3 所示:
四大功能!带你初识 Fabric | 容器网络系列第2期

图 3:Fabric 配置 QoS 原理

四、租户隔离

4.1 使用场景

  • 多租户之间的网络隔离

多租户是一种软件设计架构,指的是单个软件实例可以为不同的用户提供服务。多租户架构在云计算领域也有广泛的应用,在云计算领域多租户除了指共享软件服务之外,也可以指服务器资源,服务器资源在不同的租户之间进行分配。多租户的特性就是要解决租户间的隔离问题,不同的租户之间不能互相访问数据,以此达到安全隔离的效果。

4.2 特点

Fabric 租户隔离功能设计有如下特点:

(1) 使用方便,直接添加注解(annotation)信息,即可为容器配置多租户隔离。

(2) 配置灵活,除了基本的租户之间的隔离之外,同时还可以配置兄弟租户之间的互通,可以适应多种使用场景。

(3) 租户白名单设计,几个系统级别的 namespace (kube-system, kube-public, default, kube-node-lease, monitoring, ingerss-nginx) 是任意租户可达的。

4.3 实现原理

当集群中已经配置多租户时,pod 如果访问集群网络会首先进行网络策略验证,即验证网络访问源地址和目的地址网络是否符合多租户网络隔离策略。主要判断的是否在同一 namespace 下、源地址或目的地址是否在白名单内、租户是否存在、是否配置了兄弟租户(租户之间互通)。

简要的多租户网络隔离验证策略如图 4 所示:
四大功能!带你初识 Fabric | 容器网络系列第2期

图 4:多租户网络隔离验证策略

五、总结与展望

目前,Fabric 有着非常丰富且强大的功能,但由于篇幅所限,本文只能介绍一些常用且基础的功能。后续 Fabric 会持续优化已有的功能,并积极开发更多实用的新功能。在此之后,我们还会分享一些 Fabric 的进阶的功能的设计方案和相关特性。

点击BoCloud博云了解更多解决方案

点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Wesley13 Wesley13
4年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Bill78 Bill78
4年前
k8s超详细总结
一个目标:容器操作;两地三中心;四层服务发现;五种Pod共享资源;六个CNI常用插件;七层负载均衡;八种隔离维度;九个网络模型原则;十类IP地址;百级产品线;千级物理机;万级容器;相如无亿,K8s有亿:亿级日服务人次。一个目标:容器操作Kubernetes(k8s)是自动化容器操作的开源平台。这些容
Wesley13 Wesley13
4年前
2019 年 CNCF 中国云原生调查报告
!头图.jpg(https://ucc.alicdn.com/pic/developerecology/6db0c465111b4d9a96eb1ffe85c00e7a.jpg)中国72%的受访者生产中使用Kubernetes在CNCF,为更好地了解开源和云原生技术的使用,我们定期调查社区。这是第三次中国云原生调查,以中文进行
Stella981 Stella981
4年前
Hyperledger Caliper
在这个教程中,我们将学习如何使用HyperledgerCaliper对包含多个排序节点的Fabric网络进行基准测试,我们使用DockerSwarm作为容器编排工具。HyperledgerFabric区块链开发教程:Fabric区块链Node.js开发详解(https://www.oschina.net/action/G
Stella981 Stella981
4年前
Kubernetes源码探疑:Pod IP泄露排查及解决
作者:陈绥来源:UCloud(ID:ucloud\_tech)UK8S是UCloud推出的Kubernetes容器云产品,完全兼容原生API,为用户提供一站式云上Kubernetes服务。我们团队自研了CNI(Container Network Interface)网络插件,深度集成VPC,使UK8S容器应用拥有与云主机间等同的网络性能(目前
Stella981 Stella981
4年前
Kubernetes审计日志方案
前言当前Kubernetes(K8S)已经成为事实上的容器编排标准,大家关注的重点也不再是最新发布的功能、稳定性提升等,正如Kubernetes项目创始人和维护者谈到,Kubernetes已经不再是buzzword,当我们谈起它的时候,变得越发的boring,它作为成熟项目已经走向了IT基础设施的中台,为适应更大规模的生产环境和更多场景的应用不断延
Wesley13 Wesley13
4年前
1. 容器化部署一套云服务 第一讲 Jenkins(Docker + Jenkins + Yii2 + 云服务器))
容器化部署一套云服务系列1\.容器化部署一套云服务之Jenkins(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fwww.cnblogs.com%2Fjackson0714%2Fp%2Fdeploy1.html)一、购买服务器服务器!caeef00
Wesley13 Wesley13
4年前
K8S CNI及各CNI网络解决方案简述
CNi:什么是CNI?CNI是ContainerNetworkInterface的缩写,是一个标准的通用的接口。为了让用户在容器创建或销毁时都能够更容易地配置容器网络,现在容器平台:docker,kubernetes,mesos。CNI如何实现?CNI用于连接容器管理系统和网络插件。提供一个容器所在的networknam
Kubernetes 资源拓扑感知调度优化
作者星辰算力团队,星辰算力平台基于深入优化云原生统一接入和多云调度,加固容器运行态隔离,挖掘技术增量价值,平台承载了腾讯内部的CPU和异构算力服务,是腾讯内部大规模离线作业、资源统一调度平台。背景问题源起近年来,随着腾讯内部自研上云项目的不断发展,越来越多的业务开始使用云原生方式托管自己的工作负载,容器平台的规模因此不断增大。以Kubernetes