[TOC]
模拟tars多节点环境
阿里云、腾讯云等公有云厂商的特价服务器配置都太低了,通常都是2H2C或1H2C。
常用的方法是在一台服务器上启动多个docker,tars节点运行在docker的桥接网络中,该网络与主机网络隔离,所有的框架主从节点、应用节点都部署在这一台机器中。但是这样对单台机器的配置要求较高。测试微服务应用多起来性能就不够了。
刚好家里的开发机配置较高,可以在这台主机虚拟化多台服务器绰绰有余;由于运营商不为家用网络用户分配独立公网IP,所以这里使用openvpn将这些虚拟机与云端的服务器网络互通,达到模拟多台服务器的目的(可以视为跨机房或跨公有云厂商的服务器)。
1. 创建虚拟机
首先,使用vmware创建多个虚拟机,每台配置为4H8G,我这里创建5台(视主机配置情况而定),网络选项选择复制桥接网络
我选择安装Ubuntu Server命令行版本
安装过程很简单就不做多说了,有需要可百度搜索
2. 生成客户端、服务端证书
2.1 安装easy-rsa
apt install easy-rsa
2.2 复制一份配置文件,后续可以复用同一份初始配置
mkdir /opt/easy-rsa
cd /opt/easy-rsa
cp -a /usr/share/easy-rsa/* .
2.3 生成服务端证书
./easyrsa init-pki #1、初始化,在当前目录创建PKI目录,用于存储整数
./easyrsa build-ca #2、创建根证书,会提示设置密码,用于ca对之后生成的server和client证书 签名时使用,其他提示内容直接回车即可
./easyrsa gen-req server nopass #3、创建server端证书和私钥文件,nopass表示不加密私钥文 件,提示内容直接回车即可
./easyrsa sign server server #4、给server端证书签名,提示内容需要输入yes和创建ca根证书时 候的密码
./easyrsa gen-dh #5、创建Diffie-Hellman文件,密钥交换时的Diffie-Hellman算法
自此服务端证书创建好了
2.4 生成客户端证书
./easyrsa gen-req client nopass #创建client端的证书和私钥文件,nopass表示不加密私钥文件,提示内容直接回车即可
./easyrsa sign client client #给client端证书签名,提示内容输入yes和创建ca根证书时候的密码
tree #检查是否有ca根证书、客户端服务端证书、客户端服务端私钥
自此客户端证书也创建好了
2.5 为每一台客户端配置不同的证书(可选)
如果要为每台客户端分配一个固定的内网ip,需要每台服务器都生成一份证书并使用不同的CommonName(CN),这样服务端才能识别到首次连接的客户端具体身份并记录到地址池记录文件并在后续的连接分配固定的局域网IP。
方法:重复2.4步骤,注意./easyrsa gen-req client nopass第一个提示会询问已存在一个CN,是否需要覆盖?这里填写yes然后回车,然后输入不同的CN即可。
注意每生成一份证书要单独保存区分,否则会被覆盖掉。
3. 下载OpenVPN
因为要与云端的服务器进行内网互通,所以OpenVPN服务器需要建立在云端的任意服务器上。
3.1 配置OpenVPN服务器
3.1.1 下载安装openvpn
sudo apt install openvpn
3.1.2 编辑服务端配置文件
cd /etc/openvpn/
sudo vim /etc/openvpn/server.conf
按需进行配置:
port 1194 #端口,确保端口可以访问
proto udp #协议
dev tun #采用路由隧道模式
ca /opt/easy-rsa/pki/ca.crt #ca证书的位置
cert /opt/easy-rsa/pki/issued/server.crt #服务端公钥的位置
key /opt/easy-rsa/pki/private/server.key #服务端私钥的位置
dh /opt/easy-rsa/pki/dh.pem #证书校验算法
server [子网网络段] [子网掩码] #给客户端分配的地址池,注意不要和服务端网络段以及客户端本地网段端重复
push "route [服务端内网网络段] [掩码]" #允许客户端访问的内网网段
#push "redirect-gateway def1 bypass-dhcp" #自动推送客户端上的网关及DHCP,此项开启了流量转发,有这项才能使用服务器代理上网
#push "dhcp-option DNS [子网网关]" #OpenVPN的DHCP功能为客户端提供指定的 DNS、WINS等
ifconfig-pool-persist ipp.txt #地址池记录文件位置,未来让openvpn客户端固定ip地址使用的
keepalive 10 120 #存活时间,10秒ping一次,120秒如果未收到响应则视为短线
max-clients 100 #最多允许100个客户端连接
status /var/log/openvpn-status.log #日志位置,记录openvpn状态
log /var/log/openvpn.log #openvpn日志记录位置
verb 3 #openvpn版本
client-to-client #允许客户端与客户端之间通信
persist-key #通过keepalive检测超时后,重新启动VPN,不重新读取
persist-tun #检测超时后,重新启动VPN,一直保持tun是linkup的,否则网络会先linkdown然后再linkup
duplicate-cn #客户端密钥(证书和私钥)是否可以重复
comp-lzo #启动lzo数据压缩格式
3.1.3 启动服务
systemctl start openvpn@server
启动后会新增一个tun0的隧道设备,此时10.8.0.1为该vpn网络的网关
3.2 配置openvpn客户端
多台服务器重复以下安装步骤即可
3.2.1 安装openvpn
`sudo apt install openvpn``
3.2.2 编辑客户端配置文件
cd /etc/openvpn/
sudo vim /etc/openvpn/client.conf
按需进行配置:
client
dev tun
proto udp
remote [服务器地址] 1194
resolv-retry infinite
nobind
ca ca.crt
cert client.crt
key client.key
verb 3
persist-key
persist-tun
comp-lzo
3.2.3 安装证书
把2.4和2.5步骤生成的客户端证书移动到各vpn客户端机器的client.conf文件所在目录下,注意区分CN,便于后续管理。
3.2.3 启动客户端
systemctl start openvpn@client
启动后会新增一个tun0的隧道设备
4. 服务端配置iptables流量转发
echo 'net.ipv4.ip_forward=1' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
sudo iptables -t nat -A POSTROUTING -s <这里填写服务端配置中给客户端分配的IP网段> -o eth0 -j MASQUERADE
sudo iptables-save > /etc/iptables.rules
5. 阿里云控制台配置
这里便于测试,先为来源10.8.0.0/24(vpn服务器分配给客户端的网段)放行所有ipv4端口
然后在交换机创建一条自定义路由
!!!注意:所有要互联互通的服务器都要在同一个地理可用区域和VPC网络下,否则需要额外的步骤连通(云企业 网络),我这里是都在,所以就不做演示了。
6.轻量云服务器与ECS服务器打通内网(可选)
为了不浪费闲置的服务器资源,我这里有轻量云服务器需要加入这个tars节点集群,需要进行以下步骤与ECS服务器打通内网
6.1 添加内网互通规则
轻量服务器是不能更换VPC网络的,购买的时候系统会自动分配,所以需要添加一条内网互通规则
在轻量云服务器控制台左侧的导航栏中选择 内网互通 选项卡,点击内网互通按钮
这一步如果没创建过云企业网实例,会问你先创建一个云企业网基础版实例;因为我这里已经创建过了,所以没显示这一步
6.2 在ECS服务器安全组放行轻量云服务器的局域网段
6.3. Done
到此为止,所有的虚拟机和云端服务器都能通过内网互相访问了,各微服务节点也能相互通信;此开发环境可以进行微服务应用的开发了