20180702

虽然没打算看足球比赛,但是听星际比赛还是听到了三点钟。早上起来早都没过就跑路了,去公司干啥呢?先把docker swarm上的服务改成用stack发布吧,web ui虽然好,debug服务发布每次都要重新填一堆表格就很烦。stack发布用yml文件就好多了。像aws就很好,不管啥配置都一定有一段json与之对应,迁移的时候复制粘贴就好了。上午弄完,下午完全没人,连部门老大都跑医院去了。想起来docker swarm节点加入时有个advertise-addr选项还没试过,默认应该是用的aws实例的私网ip地址,改成公网地址试试?反正用stack的话一两分钟就能重新把所有服务都搭好。于是就试了下,然后在管理节点随手起一个redis服务,在一台工作节点上的容器内查redis的dns,居然查到了…也就是说是advertise-addr的问题。这样就简单了,我只需要在本地电脑加入docker swarm时写一个aws可以用来访问本地电脑的ip地址就可以了。这就是内网穿透。比较直接的做法是起一台内网穿透服务器,把对应端口的流量转到本地即可。但这样的话一台远程机器只能做一台机器的内网穿透,chromebook怎么办?以后的nas,家用服务器怎么办?再起两台太不划算了。而且这些机器因为对应端口被占用还加不了docker swarm网络。最好是把一台机器上的不同端口分配给不同的本地机器用,但是docker swarm好像没给重新配置底层端口的选项吧?这就需要在aws的出口流量上做nat,把某个虚拟地址的端口后映射到内网穿透服务器的某个端口上,后者再映射到本地机器的对应端口上。查了一会儿,aws免费的vpc服务好像做不到,搜了一会儿软路由好像也没什么好用的,最后发现特么的iptables就能干这事!试了下用iptables加一条规则,把去往某个虚拟地址的流量全部重定向到本地,然后ping通了…iptables真猛。那就只剩下内网穿透服务器了。看了一会儿选了frp(ngrok好像不支持udp),虽然多端口映射是用起多个服务这样暴力的方式。搜了搜github,看到个写得还不错的dockerfile,拷过来改改自己打镜像,到时候还是可以在docker swarm上把一台本地机器所需要的端口映射frp服务以一个stack的方式部署到管理节点上,然后各机器添加iptables规则,把到指定虚拟地址的docker网络流量重定向到管理节点就可以了。感觉以后扩展到其它机器也还挺方便的。吃碗烩面,打完镜像我就跑路了,回来还是打打游戏看看球什么的…

评论

热门博文