摘要
原创
vpc迁移已经已经不是第一次了,这次由于是全程一个人主导与建设,因此整个过程记录的比较详细。但是部分内容涉及到敏感信息的问题,因此有些细节不会进行展示
迁移背景
云服务是目前很多创业公司以及中小公司的首选服务,它与传统idc相比有很多优势,而很多公司初期并不重视基础设施的组建以及运维的工作,通常来说在很长的一个时间里,都是由开发来建设和管理(或许中间会有一个初级运维的参与),直到业务以及技术团队达到一个规模之后,才会有有可能成熟的运维加入进来,而这个运维面对的则是一大堆烂摊子。
vpc迁移
什么是vpc迁移呢?
在描述这个问题之前首先要先要搞清楚下面这两个问题。
- 什么是经典网络
- 什么是vpc(专有网络)
下面是官方的解释
经典网络:IP地址由阿里云统一分配,配置简便,使用方便,适合对操作易用性要求比较高、需要快速使用 ECS 的用户。
专有网络:是指逻辑隔离的私有网络,您可以自定义网络拓扑和 IP 地址,支持通过专线连接。适合于熟悉网络管理的用户
看到这里可能有人还是会难以理解,那么我这里简单描述一下。
- 经典网络一般来说默认会有一个公网ip
- 经典网络就像是阿里云提供网络环境的一个大的私有网络
- 专有网络是由你自己配置网络环境的私有网络
私有网络
私有网络是使用在内部网络的地址,无法存在于公网上,ABCDE 5类网中
- A网中的私有地址范围为10.0.0.0-10.255.255.255
- B类网的私有地址范围为127.0.0.0-127.255.255.255 172.16.0.0-172.31.255.255
- C类的为192.168.0.0-192.168.255.255
- D类为组播地址
- E类为研究开发预留地址
那么什么是vpc迁移呢?vpc迁移就是把服务从经典网络迁移到专有网络。
专有网络的优势
专有网络安全性高、配置灵活、支持多种连接方式。
- 安全隔离
- 不同用户的云服务器部署在不同的专有网络。
- 不同专有网络之间通过隧道ID进行隔离。专有网络内部由于交换机和路由器的存在,所以可以像传统网络环境一样划分子网,每一个子网内部的不同云服务器使用同一个交换机互联,不同子网间使用路由器互联。
- 不同专有网络之间内部网络完全隔离,只能通过对外映射的IP(弹性公网IP和NAT IP)互联。
- 由于使用隧道封装技术对云服务器的IP报文进行封装,所以云服务器的数据链路层(二层MAC地址)信息不会进入物理网络,实现了不同云服务器间二层网络隔离,因此也实现了不同专有网络间二层网络隔离。
- 专有网络内的ECS使用安全组防火墙进行三层网络访问控制。
- 访问控制
- 灵活的访问控制规则。
- 满足政务,金融的安全隔离规范。
- 软件定义网络
- 按需配置网络设置,软件定义网络。
- 管理操作实时生效。
- 丰富的网络连接方式
- 支持软件VPN。
- 支持专线连接。
为什么要vpc迁移
其实会有很多人问这个问题,那么什么人会问这个问题呢?
- 财务
- 一些技术
- others
在迁移过程中因为同一套业务的机器会同时存在两套一段时间,因此在迁移工程中势必会增加公司成本,而迁移完成之后,因为一些公用资源的复用,同时也会缩减一些成本。但缩减的成本可以忽略不计。
那么为什么还要迁移vpc呢?
- 安全
- 自行管理配置网络环境
- IP选择
- 安全区域
- 路由控制
最主要的一点还是安全。
vpc由于使用的是私有网络网段,因此本身具有网络隔离属性,在这种情况下其他人是不能访问到你的网络环境的,这也就避免了一些被攻击的可能性。
而安全恰恰是很多公司最欠缺的东西,也是运维最应该重视的问题。
vpc迁移需要的一些设施
但是由于vpc需要自己配置整体的网络环境(有阿里云的后台配置实际上简单了许多),因此建设者还是需要有一些专业能力的。
以下是建设vpc过程中需要用到的一些设施
- 一个或多个 vpc
- 路由器
- 路由表
- 交换机
- 高速通道 or vpn隧道 (多个vpc需要互联的情况下)
- nat网关 or nat机器
- 多个弹性ip
- 带宽包
- DNAT
- SNAT
- 安全组
- 堡垒机
- openvpn
- 模板机
- 其他运维基础设施
为什么需要这些设施
- 多个vpc是为了划分不同业务区域
- 多个vpc可通过高速通道进行互联
- 通过高速通道互联的vpc可通过路由配置访问限制
- 为什么不用vpn隧道
- 连接两个vpc需要两个vpn节点
- 带宽大小有限制,阿里云最大公网带宽200m
- 公网链路差、不稳定
- 高速通道同区域不同vpc互联免费
- 高速通道同区域带宽2G,相当于同一个vpc内网访问
- nat用于vpc内的机器访问公网的出口
- nat网关也可以配置将内网的一些端口映射到公网
- nat网关而不是nat机器
- nat网关的可用性更高
- nat网关的SNAT、DNAT规则可以在阿里云后台配置,维护更舒服
- 可以让多个弹性ip共享带宽包
- 堡垒机的好处其实不用多说
- 当然jumpserver(虽然有很多bug)
- 简单的资产盘点和授权
- 审计
- openvpn给开发用的
- 其实可以直接和办公网隧道打通
- 一些内网的服务的访问
- 内部系统接别加公网解析了
- 模板机的好处懂的自然懂
- 其他设施部分看情况可选
- 自动化管理工具:ansible、saltstack
- 监控:zabbix、open-falcon
- 内部dns
- ldap统一认证
- 代码库:gitlab、svn
- 代码发布:jenkins、自行开发
- 日志收集:elk、阿里云日志服务
- 工单审批:钉钉
- others
vpc迁移对运维来说的意义
谈不上有太大的意义,整个过程中用到的技术水平并不高,都是每个运维都应该会的东西,只是把一堆东西组织到一起。不过能把这一套环境搭建起来,至少也算是中级以上的水平了。
vpc本身对于运维来说最主要的意义还是安全,额 。。。编不下去了,先这样吧
在vpc使用过程中,其实还要注意一下几点
- 禁止一切公网ecs、rds等
- 尽量减少弹性ip的数量,用nat网关DNAT代替
- 服务全部使用slb代理端口
- 所有服务绑定域名,禁止绑定ip访问
- 禁止服务器远程密码登录
- 禁止root用户远程登录
我觉得这种行为叫做扎口子。
其实我觉得对运维来说最重要的应该是 强迫症 吧。
vpc构建过程记录
- 创建vpc以及交换机(172.16.0.0/12)
- BaseManager 运维基础管理环境(172.16.1.0/21)
- manager:172.16.1.0/24:子网21位预留(华北2e区)
- TestDev 测试开发环境(172.16.8.0/21)
- Dev:172.16.8.0/24:子网22位预留(华北2e区)
- test_dev:172.16.9.0/24(华北2a区)
- test_dev:172.16.10.0/24(华北2b区)
- Test:172.16.12.0/24:子网22位预留(华北2e区)
- Dev:172.16.8.0/24:子网22位预留(华北2e区)
- ProdGamma 线上生产环境(172.17.1.0/16)
- Gamma:172.17.1.0/24:子网22位预留(华北2e区)
- prod_gamma:172.17.2.0/24:子网22位预留(华北2b区)
- prod_gamma:172.17.3.0/24:子网22位预留(华北2a区)
- Prod:172.16.8.0/24:子网22位预留(华北2e区)
- BaseManager 运维基础管理环境(172.16.1.0/21)
- 创建nat网关
- BaseManager
- 绑定弹性ip到BaseManager
- TestDev
- 绑定弹性ip到TestDev
- ProdGamma
- 绑定弹性ip到ProdGamma
- 创建vpc互联高速通道
- BaseManager to TestDev
- BaseManager to ProdGamma
- 创建安全组
- BaseManager
- TestDev
- ProdGamma
- 创建模板机
模板机构建记录
- 系统 Centos7.4
- 升级kernel
- 内核版本 3.10.0-693.21.1.el7.x86_64
- yum update
- 安装基本环境库(gcc cmake lib等)
- 修改sshd默认端口9555
- 关闭iptables
- 修改history记录,显示时间戳
- 开启rc.local运行
- 默认服务安装
- nginx 1.13.10
- java 8u77
- pinpoint 1.6.0
- mongo-client
- mysql-client
- python 3.6.5
- 服务部署规范
- 重要服务全部使用源码编译安装,普通服务可以使用yum安装
- 服务实际目录安装到
/usr/local/product
,带版本号 - 服务软链到
/usr/local/
下,不带版本号 - 服务日志统一到
/data/logs/
服务目录下 - 自定义命令、脚本放到
/usr/local/sbin
下
- 修改pinpoint部署位置,修改pinpoint日志位置
- crontab添加
MAILTO=""
去除默认的邮件发送 - python pip源 默认模块
- 安装supervisord,修改默认配置
- 安装阿里云日志服务Logtail,未设置开机自启
- 由于所有机器需要使用jumpserver堡垒机登录,因此无需开启rsyslog日志审计
- 注释sudoers中tty配置
- nginx添加80端口默认健康检查虚拟主机
- 添加jumpserver默认用户
- jumproot
- jumpread,添加到services组
- 整合 zabbix-agent
- 安装一些常用工具
yum install -y fping nmap iperf iftop iotop ifstat iptraf
- tuned优化profile
- 关闭NetworkManager
- 开启了dns缓存服务(nscd)
- 添加清理日志脚本
clear_log
/data/logs/*/*.log
- 保留7天
- 手动执行
- 整合了nas盘挂载,手动执行(阿里云文件存储nas服务)
- nas存储需要设置挂载点才能使用
- 挂载点绑定vpc下的交换机
- nas存储目前只支持同时创建两个挂载点
- 默认绑定在BaseManager下172.16.1.0/24交换机上
- 有其他区域需要可临时设置挂载点
- ansible机器配置计划任务,每天凌晨4点umount所有机器的挂载以免造成性能损失
- 升级openssl、openssl-devel
- 使用trash-cli重新定义rm命令,防止误删,清理回收站等
- rm! 系统原rm命令
- rm | RM | r 文件移至回收站
- rl 列出回收站文件
- ul 恢复删除的文件,目前只能单个恢复
- cleartrash
days
清理days
之前的回收站文件,不加时间全部清除
- 更新系统,安装redis客户端、更新内核版本
- 更新初始化配置不同环境pinpoint的ip配置
root密码设置
- root用户添加ansible管理密钥
- 禁止root远程登录
services 创建服务运行用户以及用户组
- services添加发布管理key
1 | root@pts/0 $id services |
devops 创建运维管理账号
- devops用户添加key与root用户一致
1 | root@pts/0 $id devops |
bashrc
1 | # Moss bashrc - START |
vimrc
1 | " Moss vimrc - START |
profile.d
1 | # history |
tcp、内核参数优化
1 | # Moss sysctl - START |
修改文件句柄限制
1 | root soft nofile 65535 |
修改PS1
这段暂时不要了
rc.local
1 | /usr/lib/systemd/system/rc-local.service |
java
- 版本:8u77
/usr/java/jdk1.8.0_77/jre/lib/security
下面两个jar包替换- java.security中random改成urandom 待确认
1 | export JAVA_HOME="/usr/local/jdk8" |
重新定义rm命令
- 使用trash-cli重新定义rm
- 官方文档暂时不建议这么做
1 | trash-put 将文件或目录移入回收站 |
1 | alias rm!='/bin/rm -vi' |
以下废弃
- 添加回收站
- 防止误删
- 清理回收站功能
1 | TRASH="/data/.trash" |
系统初始化脚本
- 路径
/usr/local/sbin
system
- 第一次开机自动运行,初始化主机名
- 再次开机不会重复运行
- 可无限次手动运行,第一传参为hostname最后一段业务名
- 阿里云自动设置主机名貌似会在rc.local之后运行,因此需要开机后手动传参运行一次
1 | cat init_system |
disk db
- 开机后需要手动执行
- 默认初始化*db磁盘挂载到/data目录
- 初始化/data下目录以及权限
1 | cat init_disk |
clear_log
- 手动执行清除
/data/logs/
下的日志
1 |
|
logrotate
- 新增
/usr/local/logrotate/*
,用于一些服务的日志切割 - 新增计划任务,默认不启用
1 | cat nginx |
集成nas挂载
- 安装依赖
- CentOS:
sudo yum install nfs-utils
- Ubuntu 或 Debian:
sudo apt-get install nfs-common
- CentOS:
- 挂载以及卸载脚本
- nas
- unas
1 | cat nas |
nginx配置
1 | server { |
模板机目前自启进程解析
1 | systemd─┬─AliYunDun───15*[{AliYunDun}] # 阿里云服务进程 |
Ansible
- ansible
- jumpserver
- nginx-proxy
1 | cat ansible.cfg |
服务supervisor配置
1 | [program:jumpcoco] |
迁移进展
- 运维管理服务器
- ansible
- playbook
- zabbix-agent安装
- 初始化脚本更新
- playbook
- jumpserver
- nginx-proxy 统一nginx代理
- ansible
- zabbix 搭建完成
- zabbix.devops.kaishustory.com
- admin/Kaishu2099=
- agent部署完成
- grafana安装
- grafana.devops.kaishustory.com
- http://play.grafana-zabbix.org/d/000000003/grafana-zabbix-demo?
grafana
1 | grafana-cli plugins list-remote |
使用模板镜像开机流程
- 模板机镜像命名规则:ks-template-%Y%m%d
- 如: ks-template-20180515
- 阿里云vpc开机会自动随机生成vpc交换机网段内ip
- 如需修改到指定ip的流程
- 在阿里云后台停止主机
- 停止后从配置信息的更多菜单中选取修改私有ip
- 修改到当前vpc交换机网段的其他ip后开机
- 新开机器或修改私有ip后
- 加到jumpserver资产中或修改原有信息
- 通过jumpserver登录执行初始化脚本
- 执行 init_system “主机业务分组”
- 如是新开机器并且分配了数据盘,执行 init_disk
- 执行重启zabbix_agent systemctl restart zabbix-agent
- 确认自动注册到zabbix-server中