华为云网络使用“大全”
开发云服务的过程以及使用过程中,需要了解云网络的各种属性(如果能理解云网络的底层实现原理就更好了),这样对云服务设计出更好的架构有帮助。这里唐老师分享一下我所了解的华为云网络的使用“大全”,跟大家互相交流学习。
一、目标vs工具
首先我们看下云网络的“目标”和“工具”。
先说本文的网络目标,单纯就是:网络怎么连通。(至于安全组等其他网络特性,本文不讨论)
而具备云网络连通能力的“工具”,这个就比较多了,列举如下:
- vpc-peering 对等连接
- 挂载port网卡
- vpc-sharing 网络共享
- SNAT+DNAT翻译员
- vpc-endpoint 定向通道
- 挂EIP
- pep云内版“EIP”
- 254.169.254 上帝后门
- 云连接 CC
- 企业路由 ER
后面会逐一介绍。
整体思路,就是要用一个个的“工具”去解决我们的“目的”。
二、基础知识
云网络的目的是去“模拟现实世界”,所以看待VPC就把它当作普通的物理组网就行。一个VPC,你就映射成一套独立的物理局域网(想象成一个机房)。电脑接入同一机房(VPC)就是连通的,不同的机房物理上就不通。需要加额外网络设备(如路由器),才能将两个机房的网络连通。
原理可以参考我之前的文章:
1. VPC和子网
VPC是云网络的“隔离单位”。不同的VPC就代表不同的网络,就像2个物理独立的机房,无论这2个VPC是否属于同一个用户。即VPC本身是不分用户的,用户只是后期给VPC的一个属性(一个VPC,可以同时属于多个用户,后面会介绍)。比如一个人可以拥有多个机房,同一个机房也可以属于多个人(当然,默认只属于一个人)。
所以,如下的(A)和(B)从技术视角看是一样的。区别仅仅是在跨租户的时候,需要征得对方“同意”。即除了权限以外,打通一个用户下的2个VPC,与打通2个用户的VPC是一样的。
子网则相对简单,只是VPC内部为了管理方便,而划分的不同网段。本文涉及不多。
2. Floating-IP 行走江湖的“名号”
Floating-IP 是一个非常重要的概念,必须理解!
最初它是用于描述个人家庭上网时,运营商会临时分配一个互联网IP给你,当你下线后,这个互联网IP又会被运营商收回,并分配给后续上线的其他人。可见,这个IP地址是飘来飘去的,是浮动的,所以叫做Floating IP。
当一台电脑持有这个“Floating-IP”时,它(这台电脑)访问外部网络时,别人(其他电脑)看到的都是这个“Floating-IP”发出的。且外部访问这个“Floating-IP”就等于是直接访问这台电脑。即:当前Floating-IP代表了这台电脑。
云上的虚拟机分配的Floating-IP,很多时候不需要回收,所以当Floating-IP关联到一台虚机后,这个IP就代表了这台虚机的地址了。有点像你被其他班级取的“外号”一样。
注意:一台电脑是可以分配多个Floating-IP,就如一个人可以拥有多个“外号”一样。
比如我在游戏中取名叫“唐爷”,博客中取名叫“唐老师”,实际上都表示我。即在不同的目的网络中,一台电脑可以拥有不同的Floating-IP地址,如上图。
一个特殊的Floating-IP就是众所周知的EIP(互联网IP)。还有很多其他Floating-IP,后面会介绍。
三、“工具”讲解
1. vpc-peering 对等连接
与通过增加一台路由设备,把2个互相不连通的机房的网络连在一起一样。2个VPC也可以通过“虚拟路由器”直接连通在一起。(再次提示:虚拟网络要看作物理世界网络,比较好理解)
又因为这种连通是“直接”的连通,即靠“路由转发”直接将报文发往对方网络里,因此想进行“连通”两边的IP地址不能重叠(假如重叠了,两边连一起后,左边和右边如果有相同IP就会冲突)。
前面提到过,VPC是不分用户的。因此同租户内2个VPC进行vpc-peering,与跨租户的2个vpc间的vpc-peering技术是一样的。区别只是当跨租户时,需要征得对方同意。
工具小结:
(1)当2个VPC网络的IP重叠时,vpc-peering这个工具不能用。
注:对应AWS也叫vpc-peering 对等连接
2. 挂Port网卡
默认一台电脑接入一个机房的时候,是只连一根网线(多根网线连入同一个机房,没必要嘛)。启动虚机的时候,选择VPC,就好比电脑网线插入哪个机房的网口面板。但有时候电脑可以插多个网卡,这个时候就可以拉多根网线,分别接入多个机房。如下图:
这种在这台电脑里面就会有多条路由表,报文根据不同的目的地,会选择不同的eth0或者eth1发出去到不同的VPC。因此,2个VPC自然连通了。但这里也要求挂双网卡时,IP网段不能冲突(负责不好路由)。
挂Port网卡,就是“双网卡”。因为OpenStack里面负责虚拟网络实现的Neutron子系统,将虚拟网卡称作Port,所以虚机挂双网卡有时也被称为“挂Port”。
话说华为云上,虚拟网卡的实现是ENI(弹性网卡),所以挂Port也可以叫做挂ENI网卡。其实都是一回事。
工具小结:
(1)可以将虚机接入多个VPC(即VM挂载多网卡),前提是这些VPC是你的。
(2)挂载的多网卡对应的VPC网络的IP不能重叠。
注:对应AWS也叫挂载port网卡
3. vpc-sharing 网络共享
再次说明,VPC技术实现上是不分用户的(原理见《跟唐老师学习云网络 - 什么是VLAN和VXLAN》)。
因此一个VPC是可以同时属于2个用户的。当前默认1个VPC只属于1个用户,这是因为管理上的需要,即默认不同租户天然隔离。
所幸,当前大部分云平台已经把VPC跨租户共享,做成一个基本功能。如AWS的RAM。华为云的RAM也具备这个功能。当别人把VPC共享给你的时候,你就拥有了这个VPC权限(即你拥有这个“机房”的权限)。你启动虚机,就可以把网线插入这个VPC“机房”的网口面板上了。
VPC共享是一个非常赞的功能。
工具小结:
(1)可以实现VPC共享给其他租户,然后通过双网卡方式,就可以实现连通2个VPC。
(2)与挂Port一样,2个VPC的IP网段不能重叠。
注:对应AWS也叫vpc-sharing网络共享
5. SNAT+DNAT 翻译员
SNAT和DNAT属于Floating-IP的“青春版”,也可以完成2个VPC网络间的互通。
SNAT(Source Network Address Translation)看名字就知道了,发出去报文的时候,把源IP地址换掉。
DNAT(Destination Network Address Translation)则相反,收到报文的时候,把目的IP地址换掉。
它本质和Floating-IP很像,但是Floating-IP呢,需要每台虚机占用一个Floating-IP。而SNAT/DNAT则可以很多台虚机共用一个Floating-IP。比如每台VM都买一个EIP(最有名的一种Floating-IP),就会很贵。所以一般很多VM通过SNAT/DNAT规则共享一个EIP,则经济实惠很多。属于是「独立单间」vs「合租寝室」的区别。
一般在2个VPC存在地址冲突又需要连通的时候,可以通过给SNAT/DNAT引入一个“中转网络”进行“翻译”后连通。
如上图,本端(左侧)发出去的报文,经过SNAT后到达中转网络,中转网络路由转发给目的电脑(右侧)。从目的来看,以为是从中转网中的“某台电脑”发过来的,所以应答文也直接给中转网中的“那台实际不存在的电脑”回。中转IP收到报文后,经过原来的链接就回到了源头ECS(左侧)。 所以中间的中转IP,有点像翻译员。
无论SNAT还是DNAT,都是单向的。
工具小结:
(1)青春版Floating-IP,可多台ECS节点共用一个。
(2)SNAT时,客户端得知道“对方目的地址”;DNAT时,目的端会看到“对方源地址”。
(3)单向连通
5. vpc-endpoint 定向通道
要理解 vpc-endpoint,要先搞明白vpc-ep的底层原理Fullnat。而想懂Fullnat当然得先知道前一章节的2个NAT。这2种NAT都会保留其中一端的IP地址,就是有一方会感知对方VPC的IP地址。
如上图,为帮助理解,“外部网络”可以看做互联网(实际上对方网络可以是别的VPC);则100.1.0.2类似EIP。你访问对方时,总得感知对方的实际IP地址。
但是Fullnat的时候(即SNAT+DNAT一起用),则不用感知对方的实际IP了,对方已经在你方网络内,放置了一个“代理人”(下图标星处)。你只需要跟“代理人”通话,自然会传递到目的地。
使用体验上,犹如:对方在你的网络内,放置了一个“代理人”,你跟该代理人聊天,就如跟目标对象聊天一样。该代理人需要占用你网络的一个IP。见下图:
产品实现上,这个“代理人”,会被包装为“client”。这个client会占用你本端网络中的一个IP,你访问这个client的IP,就代表你访问另一个网络中的对方。好比游戏地图边缘传送门,任何东西进入它,都会出现到另一个地图上。(取名endpoint的原因?)
AWS实现的endpoint产品,有2种:接口型EP和网关型EP。华为云目前的VPCEP就是接口型的。未来网络型EP也会上。两者的区别:
- VPCEP - 点对点的EP
这个就是上面介绍的,单点传送门。每一个目的地,都需要创建一个“代理入口”。当你要访问对方VPC中的每一台VM时,显然创建无数的client很不合理。
- Network-EP - 点对面的EP
这个是点到面的连通。即通过这个“传送门”,可以到达目的网络的任何地方。因此访问上,不是直接访问这个client-IP了,而是将这个client-IP作为路由表的一个Gateway网关。
其使用上的逻辑为:
ip route add {对方VPC网段} via {EP-Client-IP}
这样子就比较好理解为什么AWS取名“网关型EP”了。
工具小结:
(1)可以连通2个VPC,但缺点是单向的。即只能一个方向访问(无论ep还是network-ep)。
(2)跨账号建立VPCEP的时候,需要征得双方同意。
(3)这个工具需要收费。(每天2.4元/client,学生党不友好,非不得已别用)。
注:对应AWS也叫vpc-endpoint 通道
6. 挂EIP
EIP就是一个典型的Floating-IP。
其实现原理,可以从个人家庭上网,运营商给你分配一个互联网IP来理解。当你持有这个EIP的时候,这个EIP地址在互联网范围里就代表了你。
如上图这种情况下,双方通信时,都跟对方的EIP通信。
工具小结:
(1)走“外挂”模式嘛,肯定可以将任意VPC里面的节点连通。
(2)这个工具比较费钱
注:对应AWS也对应为挂EIP
7. PEP云内版“EIP”
PEP(Public Endpoint)本质就是云内的Floating-IP,属于小号版的EIP(region内)。用于云服务内部互访用,不对用户开放。
从底层创建PEP的实现也可以看出,本质就是给“目的地网络”创建一个Floating-IP。
neutron floatingip-create $eps_external_net_id --port-id $vm_port_id --tenant-id $vm_port_tenant_id --floating-ip-address $pep_ip
工具小结:
(1)PEP可以快速打通网络,好比任意2台电脑绑定EIP一样。
(2)但是这个工具一般人用不了。
9. 169.254.169.254 上帝后门
在云的世界里面,上帝(管理面)把VM生出来后,VM里面的程序想知道自己这台VM的“生辰八字”或者“档案信息”,是可以去询问上帝的。
curl http://169.254.169.254/latest/meta-data
比如:VM里面是不知道自己的“外号”EIP地址的(因为EIP是可以漂移的,是后期动态挂上来的)。然而有的程序,给外部发通告的时候,是需要告知自己的“外部监听地址”的。因此它需要去询问上帝,关于自己的一些“上帝视角”的信息。这就是 169.254.169.254 这个地址的了。
这个特殊IP是AWS搞的“元数据服务(metadata-service)”,后来OpenStack也继承了这个特性,当前该特性基本已经成为云的标准了。
理论上,这个特殊通道的实现原理(详见《跟唐老师学习云网络 - OpenStack网络实现》),也可以用于其他网络互通功能,但实际上当前这个特殊IP只提供查询“元数据”功能。
工具小结:
(1)数据面访问上帝的一个特殊通道
(2)目前只被用来访问一些“元信息”,未拓展其他功能。
注:AWS上面也有这个(其实aws是这个“通道”的元老)
10. 云连接CC
云连接CC(Cloud Connect)在同一个region内,效果与VPC-Peering一样。即可以完成2个VPC的互联,无论是否同一个账号。只是跨账号的时候需要对方同意。
比vpc-peering强的地方在于,CC可以跨region互联。
与VPC-Peering不同的点,在于VPC打通后路由表CC是自动帮用户设置。另外,VPC Peering的承载网络是基于数据中心网络(DCN),云连接服务的承载网络,则是基于数据中心骨干网(DCI)。具体其他差异可见CC的资料说明。
工具小结:
(1)强化版的vpc-peering
(2)可以跨账号VPC互联
(3)可以跨region进行VPC互联。(但是域间带宽略贵)
注:AWS跨region的VPC互联,仍继续用VPC-Peering的。
11. 企业路由 ER
当需要Peering互联的的VPC数量众多,进行两两Peering的配置会变得复杂。
ER(Enterprise Routing企业路由)可以将多个VPC都对接到ER,实现以ER为中心的星状网络,解决多VPC互通、多资源互联的复杂组网问题。
工具小结:
(1)vpc-peering的升级版。
(2)多个VPC需要互联时,使用Peering会很乱,可以使用ER进行“集中”管理。
注:对应AWS叫Transit Gateway。(所以我图里面直接用AWS的TG代表ER)
五、总结
与大家分享下场景的网络互通方案,不对的地方也多多指正,共同学习。本文也并没有包含云中所有的“工具”,因为那样文章会很冗长(比如DC专线,VPN,ELB等),显然这些比较专用场景的工具,默认大家只在特定场景下需要。像ELB这种,本身目的是进行负载均衡,它本身也可以是一个“超级工具”,即它可以把基础工具利用起来,然后做LB均衡(毕竟它也是一个云服务,得做强做大)。
了解各类云网络“工具”可以帮助大家开发出更好的云服务。
- 点赞
- 收藏
- 关注作者
评论(0)