前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >容器网络硬核技术内幕 (8) 五湖四海的友谊

容器网络硬核技术内幕 (8) 五湖四海的友谊

作者头像
用户8289326
发布2022-07-28 08:52:14
2410
发布2022-07-28 08:52:14
举报
文章被收录于专栏:帅云霓的技术小屋

上一期我们讲到,Kubernetes作为容器编排平台的事实标准,重新定义了容器网络的元素和接口标准,形成了以下共识:

1. Kubernetes的容器资源分配单位是pod,一个pod中可以有多个容器,但对pod之外呈现为一个整体(一个IP地址);

2. Kubernetes的容器运行载体是node,一个node可以运行多个Pod。node有自己的操作系统(一般为Linux)。

我们用图来表示:

这个图似曾相识——

没错,是你是你就是你——

《局域网SDN技术硬核内幕 5 虚拟化网络的实现》中,我们给出的这张经典组网图里,可以看出,在每台宿主机上运行了一个vSwitch (在KVM中默认是OVS,在vsphere中默认是VDS),vSwitch连接了宿主机上所有的虚拟机。

我们可以类比虚拟化场景,将Node类比为宿主机,Pod类比为VM:

在Kubernetes中,还有另一个重要的概念——Service。

Service对外提供的是一个名称,通过这个名称,可以访问一组pod对内部或对外部提供的服务。

假设P站的某应用,通过容器化部署,那么其架构如下图:

图中,Pornhub-Web,Pornhub-APP和Pornhub-db是三个Service,只有Pornhub-web对外提供服务,另外两个service对内提供服务,类似于虚机实现的web-app-db三层架构。

当然,实际部署中,app很可能拆成多个微服务,这个问题我们后续再谈。

Service有三种类型:

Nodeport,Loadbalancer和Ingress。

其中,Nodeport访问非常麻烦,一般不使用,

LoadBalancer本质上是基于NAT的负载均衡,可以通过软件或硬件实现。

Ingress是基于HTTP反向代理的负载均衡,也可以通过软件或硬件实现。

但无论怎么样实现Service,都需要面临一个问题:同一组Pod之间如何跨宿主机互联互通呢?

我们联想到在《容器网络硬核技术内幕 (3) 批判的武器和武器的批判》中学习的,在docker中,不同宿主机上的容器可以通过VXLAN互通。

在K8S中可以吗?

让我们做个实验。

以下图为例:

两个node的IP分别为192.168.65.112和192.168.65.116,

分别运行命令:

# ovs-vsctl add-port br1 vx1 -- set interface vx1 type=vxlan options:remote_ip=192.168.65.116

# ovs-vsctl add-port br1 vx1 -- set interface vx1 type=vxlan options:remote_ip=192.168.65.112

就可以实现两个node通过VXLAN互通:

问题来了,对于100台主机构成的kubernetes集群,配置VXLAN互通的工作量将达到100*99=9900的天量!

如果考虑到VLAN划分,这个量级还要再乘以一个100-1000的数量。

当然,使用Ansible等自动化工具可以实现部分的自动化,但对于IT基础架构与运维人员而言,需要的一定是图形化,自动化的配置方式。

因此,Kubernetes提供了CNI(Container Network Interface)接口,来自五湖四海的开发者们,可以通过CNI接口实现自动化的网络编排,也就是CNI插件。五湖四海的爱好容器技术和世界和平的人们,也因此结成了深厚的友谊。

目前,主流的CNI插件有Flannel、Calico、Weave、H3C SNA、OpenShift SDN等。

在后面的专题中,我们也将分析各个插件的实现和利弊。

请看下期。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 帅云霓的技术小屋 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档