软件工程实践系列文章,
会着重讲述实际的工程项目中是如何协作开发软件的。
本文主要介绍了如何规划、搭建、管理网段。

outline

本文包括以下内容:

  • concepts: 网段中的概念都很基础
    • ip/cidr: IP 是服务的点,而 CIDR 就是描述它的面
    • vpc/subnet: VPC 就是云服务提供划分网段的工具
  • boundary: 网段的设计核心是边界划分
    • scene: 利用场景维度来划分,以区别开发、测试、生产环境
    • network: 利用网络维度来划分,以区分外网、内网
  • example: 实际开发中的例子
    • ipsec: 用作 VPC 打通的常用工具
    • openvpn: 用作连接内网的常用工具
  • conclusion


Concepts

在我们日常开发中,
只要用到网络就一定会跟各类网段打交道。
很多时候网段作为一种稳定的基础设施,
我们并不会注意到它。
但是关于网段、网络的一些知识,
是确实在软件工程过程中需要考虑的。

IP and CIDR

现代网络中,
IP 是服务的点,而 CIDR 就是描述它的面。

ip

IPv4 的类别分类

列举一些能想到的 IP,会包括:
127.0.0.1 这个约定的本地地址;
8.8.8.8/8.8.4.4 这个谷歌提供的 DNS 地址;
59.78.3.25 这个上海交大东三楼的 IP 地址…

而 CIDR 则是描述一系列 IP 地址的修饰符。

比如 59.78.3.25/32 代表二进制前 32 位都严格与 59.78.3.25 相等的 IP 地址段(也就是特指这个地址)。
类似地,10.0.0.0/16 就是以 10.0. 开头的 IP 地址段。

VPC and subnet

AWS 作为云服务的始祖,
它开创了 VPC 服务让用户配置自己的网段,
后来 VPC 也逐渐成为了云服务的标配。

VPC 之间可以相互隔离,也可以打通。
(这里的隔离与打通,指的都是软件上的)
一般 VPC 会用作区分生产、开发环境。

比如我们可以在云服务上开两个 VPC,
生产环境的 CIDR 是 10.0.0.0/16
开发环境的 CIDR 是 10.1.0.0/16

而 VPC 下面可以拆分 subnet (子网),
subnet 需要有更加具体的 CIDR,
比如生产环境的子网可能会是 10.0.0.0/24,10.0.10.0/24 这样的。

Boundary

网段的核心是边界的划分。
而划分好网段的目的,
既有安全性的考量,
也会利用异地达到高可用容灾的目的。

Scene

云服务一般在全球各大城市会设立数据中心,
每个数据中心会有多个机房,
我们网段的边界至少得以这个为界。

比如线上服务会跨机房部署,
分布在多个 subnet 中,
当某个机房发生清洁工拔电插吸尘器之类的事故时(一般不会发生)
服务能做到高可用。

subnet 级别还能配置网络流量的进出权限,
这点特性可以用来规划内部网络权限。

比如我们可以划分“外网可进可出”、“外网只出不能进”、“外网不可访问(仅可内网访问)”三类 subnet,
以部署不同特性的服务(负载均衡、普通业务、数据库)。

Network

网络流量走的是内网还是外网也是值得考量的因素。

除了安全性因素以外,
一般的云服务商给外网流量定价 1元/GB,
价格因素也是一个需要考虑的点。

大部分时候,开发可以严格遵循分层的原则,
所有前端走的肯定是外网 API,
所有后端走的肯定是内网 API,
只有负载均衡、网关层考虑内外网转换的问题。

还有一些时候,可以通过 DNS 自动配置流量网络。
比如默认 api.liriansu.com 指向负载均衡的外网地址,
但是修改内网的 DNS 使其指向负载均衡的内网地址。

Example

最后再附加一些实际开发中的例子。

IPsec

在业务庞杂了以后,
就会遇到跨云服务商的开发场景。
跨云服务商的内网打通,
一般会用 IPsec 这个工具,
云服务自己提供的 VPN 服务也是基于此的。
IPsec 的本质是起两台能外网互通的服务器,
互相转发流量。

比如要配置阿里云与亚马逊云互通的步骤大概会包括:

  • 两边搭建 VPC/subnet (CIDR 不重复)
  • 两边各起一台有公网访问地址的机器,装好 ipsec
    • 配置 ipsec 证书、密钥等
    • 打开 ip forwarding, 配置好 iptables 防火墙规则
    • AWS 注意关掉机器的 source/dest check
  • subnet 路由表配置跳转至 ipsec 机器
  • 打开两边的安全组,即可互通访问
    • traceroute 命令可用于检测跳转

OpenVPN

我们还会遇到的一种场景,
是开发环境接入内网开发。

这个一般可以用 OpenVPN 之类的工具打通,
但鉴于目前我们还是用的手动流量转发的路子去搞的,
等涉及这部分了再在之后的文章里分享吧 :)

Conclusion

  • 网段管理是跟开发息息相关的基建,最好能尽早规划好
  • 网段规划的核心是边界划分,主要考虑安全性与高可用
  • 云服务的基础概念是类似的,需要考虑好跨云服务、开发测试生产等多维度网段
  • 内外网流量的复杂因素,可以通过分层或者 DNS 的方式屏蔽掉

(完)