当前位置: 首页 >> Linux >> 【代理】无需端口映射,实现外部网络访问Docker集群内部服务 >> 正文

【代理】无需端口映射,实现外部网络访问Docker集群内部服务

2021年08月12日 05:02:59    作者:Jiaozn    分类:Linux     评论(0)

注意:读这篇文章之前最好先看看这个文章  

https://blog.csdn.net/czk740960212/article/details/80393825

背景

Docker支持端口映射,即将主机的某一端口映射到容器的端口,这样对主机这一端口的请求就会被转发到容器内,实现外部网络与容器通信的目的。

之前在部署Apache Storm系统的时候,发现web管理页里的supervisor日志无法查看,它的地址是类似storm_supervisor:8000这种形式的,而外部主机根本无法解析这个地址,即使可以解析(10.x.x.x),网络也是不互通的,无法访问。如果采取端口映射方式,一方面需要在外部主机上修改host文件,十分麻烦;另一方面,每一个supervisor都需要映射相同的端口,会造成冲突。所以这种方式无法实现,只能考虑其他方式。


解决方案

某日,突然想起来自己平时用的fq方式:ssh转socks5。而且,更加完美的是,socks5默认支持远程dns解析,这样连host文件都不用改了。


说干就干,首先要找到一个安装了ssh服务的镜像(一般情况下,镜像都没有这个服务),很可惜,没有找到合适的。那就只能自己做了,也不难,就一条安装命令。


制作镜像

编写Dockerfile


FROM ubuntu

RUN apt update \

&& apt install -y openssh-server

 

RUN ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa

RUN cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

 

ADD bootstrap.sh /etc/bootstrap.sh

CMD ["bash", "/etc/bootstrap.sh"]

push到github上,再通过docker平台build即可。本地构建镜像也是可以的,不过这样跨机就找不到镜像了。


加上启动脚本

bootstrap.sh


#! /bin/bash

 

/etc/init.d/ssh start

ssh -t -t -D 0.0.0.0:7001 -o StrictHostKeyChecking=no localhost

解释


1、先启动ssh服务


2、连接localhost生成socks5代理,加上StrictHostKeyChecking=no参数直接信任对方的指纹,不然连接不会建立。

启动docker容器

这个镜像我已经做好了,上面的步骤只是作为介绍,不需要再重新走一遍,直接运行下面这条命令即可。

–network需要根据实际情况修改,这个命令可以代理swarm-net网络中的服务


docker service create \

--replicas 1 \

--name proxy_docker \

--network swarm-net \

-p 7001:7001 \

newnius/docker-proxy

测试

尽管一条telnet命令即可测试是否奏效,但我们的目的是为了能在浏览器上访问web服务,那就以这个为例。


浏览器插件安装

参考下面:


方法/步骤

升级Chrome到最新版本


参考下面经验"如何离线安装Chrome最新版本或某一特定版本?",将Chrome升级到最新版本。


41如何离线安装Chrome最新版本或某一特定版本?

安装SwitchyOmega扩展程序


参考下面经验"Chrome浏览器如何设置代理?如何快速切换代理?",安装SwitchyOmega扩展程序。


19Chrome浏览器如何设置代理?如何快速切换代理?

打开SwitchyOmega扩展程序选项设置


右键点击SwitchyOmega扩展程序图标,点击下拉菜单中的"选项",就进入了SwitchyOmega扩展程序选项设置功能。




新增socks5代理情景模式


点击上图中"新建情景模式…",在新建情景模式名称中输入socks5代理名称,选择"代理服务器",点"创建"按钮。



设置socks5代理情景模式


代理协议选择"socks5",输入socks5代理服务器的地址和端口,点"应用选项"按钮,应用设置。



设置网站使用socks5代理


访问需要使用socks5代理的网站,点击SwitchyOmega扩展程序图标,下拉菜单中点击"自动切换",然后再点击"添加条件",设置当前网站的情景模式为socks5代理服务器,点"添加条件"按钮,应用设置。





7

确认socks5代理是否生效


鼠标移动到SwitchyOmega扩展程序图标,信息提示中会显示当前网站使用了sokcs5代理服务器,再次刷新网页,如果socks5代理服务器工作正常地话,就可以正常打开网页了。






配置


端口写7001,协议是socks5


访问内部服务

在地址栏输入:hadoop-master:8088 应该就能看到熟悉的hdfs UI了。(前提是你部署了hadoop-master(hostname),端口为8088),创建语句可参考:


docker service create \

--name hadoop-master \

--network swarm-net \

--hostname hadoop-master \

--replicas 1 \

--endpoint-mode dnsrr \

newnius/hadoop:2.7.4



本文参考:


https://blog.newnius.com/docker-swarm-web-proxy-without-port-mapping.html

https://jingyan.baidu.com/article/ca2d939d615aebeb6c31cea5.html

————————————————

版权声明:本文为CSDN博主「陈志凯」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/czk740960212/article/details/80401511


除非注明,发表在“Jiaozn的博客”的文章『【代理】无需端口映射,实现外部网络访问Docker集群内部服务』版权归Jiaozn所有。 转载请注明出处为“本文转载于『Jiaozn的博客』原地址https://jiaozn.com/reed/707.html

评论

发表评论   

昵称*

E-mail*

网站