注意:读这篇文章之前最好先看看这个文章  
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-serverRUN ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
RUN cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keysADD 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服务,那就以这个为例。

浏览器插件安装

参考下面:

方法/步骤

  1. 升级Chrome到最新版本

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

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

  2. 安装SwitchyOmega扩展程序

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

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

  3. 打开SwitchyOmega扩展程序选项设置

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

  4. 新增socks5代理情景模式

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

  5. 设置socks5代理情景模式

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

  6. 设置网站使用socks5代理

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

  7. 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

无需端口映射,实现外部网络访问Docker集群内部服务相关推荐

  1. java虚拟机的端口映射_怎样使用Holer实现将主机上多个端口映射到外部网络访问...

    本地Linux虚拟机上安装了WEB服务器,开启了HTTP和HTTPS以及SSH端口访问,怎样从公网通过HTTP和HTTPS访问虚拟机上的WEB服务器?如何从公网SSH登录Linux虚拟机? 本文将介绍 ...

  2. 基于Gitlab Jenkins Docker集群 微服务搭建自动化部署平台

    随着公司应用系统的不断增多,原有手工部署流程越来越不满足上线的需求.为了各个系统能快速迭代与测试,减少上线流程时间和人为出错,迫切需要一套自动化部署系统. 转载原文:https://luoji.liv ...

  3. docker 端口映射 及外部无法访问问题:开启IP转发从而解决

    docker容器内提供服务并监听8888端口,要使外部能够访问,需要做端口映射. docker run -it --rm -p 8888:8888 server:v1 此时出现问题,在虚机A上部署后, ...

  4. linux centos7开启IP转发、路由转发解决docker 端口映射 及外部无法访问问题

    1.临时开启,(写入内存,在内存中开启)echo "1" > /proc/sys/net/ipv4/ip_forward2.永久开启,(写入内核)在 vim /etc/sys ...

  5. 使用ip小魔棒让外部网络访问内网中的资源

    首先说下需求,因公司是做嵌入式硬件开发的,而且公司网路没有公网ip,发布到嵌入式硬件中的web项目,无法在外部网路访问,于是就buy了个ip小魔棒.下面以Windows做例子,我先在Windows电脑 ...

  6. 【云原生 • Kubernetes】认识 k8s 网络、外部网络访问 k8s 内部服务

    目录 一.认识 Kubernetes 网络 二.外部网络如何访问 k8s 内部服务 1. NodePort 2. Load Balancer 3. Ingress 一.认识 Kubernetes 网络 ...

  7. 各品牌路由器更改设置端口映射实现外网访问内网点(如:OA)的方法

     各品牌路由器更改设置端口映射实现外网访问内网点晴OA的方法 先在OA服务器的IIS中增加OA访问端口:/mis/bbs/showbbs.asp?id=8178 下面假设已经在IIS中增加了一个访问点 ...

  8. 将oracle端口1521共享_oracle端口1521映射 怎么使用全端口映射实现外网访问内网oracle数据库 - Oracle - 服务器之家...

    oracle端口1521映射 怎么使用全端口映射实现外网访问内网oracle数据库 发布时间:2017-03-21 来源:服务器之家 内网使用nat123端口映射之全端口映射可以将内网oracle数据 ...

  9. PPTV Docker集群的网络方案选型

     原作者:李周     转载来源:http://dockone.io/article/1673 PPTV Docker集群的网络方案选型 作者介绍:李周,现PPTVDCOS技术主要负责人.专注于Doc ...

最新文章

  1. 字符串substring方法在jkd6,7,8中的差异
  2. python修改文件名字数字_python实现多进程按序号批量修改文件名的方法示例
  3. 移动短信回执怎么开通_移动短信回执业务内容及资费介绍
  4. ci框架 查询构造器类
  5. 无效库(可能不是php库),php连接mysql数据库
  6. SQL优化--使用关联查询代替子查询
  7. Rog14 Win10系统迁移新的三星固态硬盘
  8. app inventor制作手机蓝牙遥控器
  9. java代码混淆工具
  10. 电脑出现"该内存不能为read、written "的完全解决方案
  11. 华为海思芯片型号及特征大全
  12. 微信营销如何做对o2o商业模式心灰意冷了吗?O2O到底要怎么做?
  13. 非线性规划:实例与matlab应用
  14. 【Leetcode刷题Python】55. 跳跃游戏
  15. 苹果5完美越狱_A12A13全新越狱工具发布,不需要电脑引导的半完美越狱
  16. Altium Vault 2.5.9.45043 1CD统一元器件库及复用模块管理
  17. 加拿大皇家科学院新一轮院士出炉!张大鹏教授及多位华人入选
  18. 7-45 海选高大中锋
  19. SIP电话(一)之程控交换机-FreeSWITCH的使用总结
  20. 多功能数字钟c语言单片机PPT,基于51单片机多功能数字钟的设计

热门文章

  1. QCC3040 USB Composite Device: Audio+HID+CDC/虚拟串口
  2. Andriod 真正意义上的唤醒第三方应用(只需要知道包名即可)
  3. 超越ConvNeXt!Conv2Former:用于视觉识别的Transformer风格的ConvNet
  4. 一表在手网页无忧, 万能填表数据文件一份
  5. 强强联手 东钱湖变身高端度假区
  6. 十年经验建模师!给你3d建模学习的十条铁律,请收藏
  7. border.css
  8. 趣图:网络延迟的危害...
  9. 成功解决NotFoundError (see above for traceback): Failed to create a directory: ; No such file or directo
  10. E25-在线扩盘需要注意的点