如何隔离 Vagrant 集群上的节点?

How to isolate a node on a Vagrant cluster?

我从 Vagrant 开始,我正在尝试设计一个具有入口节点和其他 2 个节点的集群。它应该看起来像:

                   --------      eth1            -------- 
           eth0   |        |  17.6.17.10        |        |
 internet ------->| master |-------|------------| slave1 |
                  |        |       | 17.6.17.2  |        |
                   --------        |   eth0      --------
                                   |             
                     17.6.17.0/24  |   eth0      --------
                                   | 17.6.17.3  |        |
                                   |------------| slave2 |
                                                |        |
                                                 --------

我的 Vagrantfile 是:

Vagrant.configure("2") do |config|
        config.vm.box = "generic/ubuntu1604"

        config.vm.define "master", primary: true do |master|
                master.vm.network "private_network", ip: "17.6.17.10"
                master.vm.hostname = "master"            
        end 

        config.vm.define "slave1" do |slave1|
                slave1.vm.network "private_network", ip: "17.6.17.2"
                slave1.vm.hostname = "slave1"
        end 

        config.vm.define "slave2" do |slave2|
                slave2.vm.network "private_network", ip: "17.6.17.3"
                slave2.vm.hostname = "slave2"
        end
end

我的配置创建了三台共享网络的机器,并且它们都连接到互联网。我想隔离 slave1 和 slave2 并使用 master 作为互联网连接的网关。我该怎么做?

我找到了回复 here

可能无法隔离,因为 Vagrant 需要那个接口。

你只需要删除每台主机的默认网络路由,并添加你自己的与你想要的路由配置相对应的路由,cf。 examples in this writeup.

例如,要隔离从站并通过主站路由流量,您需要执行以下操作:

config.vm.define "slave1" do |slave1|
  slave1.vm.network "private_network", ip: "17.6.17.2"
  slave1.vm.hostname = "slave1"
  slave1.vm.provision "shell", run: "always", inline: "route del default"
  slave1.vm.provision "shell", run: "always", inline: "route add default gw 17.6.17.10"
end 

对于最终配置,您需要设置一个负载平衡器并可能调整路由规则,在主服务器上添加一个额外的接口等,我猜完全取决于您想要做什么。