云服务器添加路由了为什么还是ping不通
背景:公司的服务器马上到期了,但在其他云平台还有机器,需要把测试环境迁移到对应的服务器。
因为新的云平台一下子有四台机器,需要对主机间的Docker服务进行通信打通,然而百般操作,业余运维始终是业余!!!
我按网上的教程做了哪些操作
- 使用路由的方式 -> (失败)
- 使用GRE协议的方式 -> (失败)
使用路由的方式:
- 首先给Docker指定bip
- 打开服务器的转发开头
- 添加指向路由
分配bip
四台主机,分别对应的网关是:
| 主机名 | 当前内网IP | 绑定的bip |
|---|---|---|
| 001 | 192.168.0.249 | 10.24.1.1/24 |
| 002 | 192.168.0.153 | 10.24.2.1/24 |
| 003 | 192.168.0.211 | 10.24.3.1/24 |
| 004 | 192.168.0.2 | 10.24.4.1/24 |
以下是配置好bip后,重启后的docker网络,对应的IP是对的
这里给大家贴一下最终设置的代码,网上也有,如果后面调通了,也会更新,大家就可以直接在这里复制粘贴了:
# 编辑docker的daemon.json文件
vi /etc/docker/daemon.json
# 在配置中添加bip,注意,这里IP的结尾是1,不是0
"bip": "10.24.1.1/24"
# 配置好的bip应该是在配置文件的{}里面的,
# 如果之前docker没有配置过daemon.json,那么这个文件是不存在的,所以打开编辑的时候,也是空的,
# 最终的结果应该是这样:
{
"bip": "10.24.4.1/24"
}
打开服务器的转发开关
直接给大家看最终的配置结果:
配置的过程贴一下代码:
# 首先cat一下配置信息(当前主机的系统是centos7的,使用的服务器不同,可能配置文件的位置也不同)
cat /etc/sysctl.conf
# 如果没有配置,应该会返回:
# sysctl settings are defined through files in
# (翻译:sysctl的配置,是从这些路径上的配置文件定义的)
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).
vm.swappiness=0
net.core.somaxconn=1024
net.ipv4.tcp_max_tw_buckets=5000
net.ipv4.tcp_max_syn_backlog=1024
# 在这里,我使用路径/etc/sysctl.d/下的配置进行设置,我的这个目录下已经有一个配置文件:99-sysctl.conf
# 把转发开关打开追加到配置中
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.d/99-sysctl.conf
# 追加完后输入生效命令
sysctl -p
# 输入命令后,就可以出现上图的展示效果了
添加指向路由
大家先来看配置好的路由:
同样为大家提供一下命令行代码:
# 添加网关路由,比如这里的10.24.3.0这个IP段指向003机器,003机器的内网地址是192.168.0.211
route add -net 10.24.3.0/24 gw 192.168.0.211
# 这个命令的意思是,把10.24.3.0号段的IP指向192.168.0.211为网关
# 这里的号段结果是0,不是1,与docker上的bip是相反的
# 依次对各主机进行添加后,使用route -n就可以看到上图配置好的路由了
route -n
除以上外,还尝试配置了其他东西
iptables
iptables -t nat -F POSTROUTING
# 每台主机的IP号段记得替换一下
iptables -t nat -A POSTROUTING s 10.24.3.0/24 ! -d 10.24.0.0/16 -j MASQUERADE
使用GRE协议的方式:
参考了这个教程:docker 实践十一:docker 跨主机通讯
整个步骤基本与这个教程相同,此处就不再赘述了,这里要说的是,一些安装工具的问题。
创建桥接的工具: ovs-vsctl -> openvswitch
可以直接下载这个:openvswitch-2.17.5
也可以去官网上下载,直接通过服务器下载可能会超时,毕竟老外的东西
构建需要的工具
# 需要安装的包
yum -y install rpm-build redhat-rpm-config gcc autoconf automake libtool \
openssl-devel python3-devel desktop-file-utils groff graphviz \
selinux-policy-devel python3-sphinx libcap-ng-devel unbound unbound-devel gcc-c++
# 再新版本的可能会有不同,可以先安装rpm-build与redhat-rpm-config这两个包,
# 在编译opwenvswitch的时候再根据提示安装对应的工具即可
编辑与安装
# 创建编辑目录
mkdir -p ~/rpmbuild/SOURCES
# 如果服务器有外网,可以直接下载,我这边是从本地上传后复制到这个目录
cp openvswitch-2.17.5.tar.gz ~/rpmbuild/SOURCES/
# 进入目录
cd ~/rpmbuild/SOURCES
# 解压压缩包
tar -zxvf openvswitch-2.17.5.tar.gz
# 开始编辑(这里在上面如果没有提前安装相关工具,会在这些提示,按要求安装即可)
rpmbuild -bb --nocheck openvswitch-2.5.10/rhel/openvswitch-fedora.spec
# 本地安装工具
yum -y localinstall ~/rpmbuild/RPMS/x86_64/openvswitch-2.5.10-1.el7.x86_64.rpm
# 查看桥接工具版本
ovs-vsctl -V
# 需要创建桥接工具目录
mkdir /var/run/openvswitch
# 启动并检查工具状态
systemctl enable openvswitch
systemctl start openvswitch
systemctl is-active openvswitch
# 安装桥接工具
yum install -y bridge-utils
反正把工具都弄好之后,再按上边教程的设置,最终各主机间的服务还是无法通信!!
结果
虽然一顿操作猛如虎,动作娴熟到悲伤(因为之前生产服务器也遇到了这样的问题),还是没有解决!!! 也用过其它方案,就是不通,最后生产环境是使用docker的host方式,暴力的解决了!! 这两个环境分别对应腾讯云和华为云,阿里云还没有机会测试。
当前状态:未解决
大神们,来救救我吧!!