详解Docker 跨服务器通讯 Ambassador原理

详解Docker 跨服务器通讯 Ambassador原理

先看拓扑图:Ambassador 主要用来解决跨服务器通讯,因为同服务器通讯相对简单,直接用–link参数,或者用bridge网络即可。

服务器B的Docker2:centos想要访问服务器A的Docker1:nginx,但是不知道对方的端口和ip,这时就需要通过Ambassador来解决。(Ambassador后续版本应该会被抛弃,overlay网络应该是趋势)

1、先建立Docker1:nginx

docker run -d –name nginx1 nginx

2、建立Ambassador 1

docker run -d –name a1 –link nginx1:nginx1 -p 8000:80 svendowideit/ambassador

3、建立Ambassador 2

docker run -d –name a2 –expose 8001 -e A2__PORT_8001_TCP=tcp://172.16.16.201:8000 svendowideit/ambassador

(暴露8001端口给centos,然后将8001端口的流量转到服务器1的8000端口,即间接访问了Ambassador1)

4、建立Docker2:centos

docker run -it –name centos1 –link a2:a2 centos /bin/bash

至此所有的步骤完成。

那么此时centos如何访问nginx呢?

curl a2:8001 访问ambassador2的8001端口即可,不需要知道服务器A的任何信息。(截图中用a200,由于之前已经弄好环境,不想改了)

详解Docker 跨服务器通讯 Ambassador原理

具体的流量途径如下:

详解Docker 跨服务器通讯 Ambassador原理

1、centos访问Ambassador2的时候将直接访问它的8001端口。

2、Ambassador2 中参数 -e A200__PORT_8001_TCP=tcp://172.16.16.201:8000 将访问8001端口的流量重新转到服务器A的8000端口。

A2__PORT_8001_TCP=tcp://172.16.16.201:8000 其中A2你可以随便命名,为什么呢。我们进入到Ambassador2中看看原因:

详解Docker 跨服务器通讯 Ambassador原理

输入env查看环境变量,和创建时的参数一致。

详解Docker 跨服务器通讯 Ambassador原理

输入top,如图,系统只会对8001端口的流量转发到172.16.16.201:8000上,也就是服务器A的8000端口,压根不在乎会上边说的 A2,原因如下:

Ambassador Dockrfile中有如下参数:

CMD env | grep _TCP= | sed ‘s/.PORT([0-9])_TCP=tcp:\/\/(.):(.)/socat TCP4-LISTEN:\1,fork,reuseaddr TCP4:\2:\3 \&/’ | sh && top

我们按照此参数用 A2__PORT_8001_TCP=tcp://172.16.16.201:8000执行sed 如下:

该shell语句只是单独提取其中的8001端口和后边的ip地址部分,其他的字段全部忽略,所以,其他字段只需要按照Docker 中环境变量的格式即可。

3、Ambassador1中,-p 8000:80 参数中的80要和nginx的端口80一致,因为–link nginx1:ngxin1后,Ambassador1中的环境变量如下

此时会将80端口的流量转到nginx服务器上的80端口。假设我们使用 -p 8000:81参数,那么Ambassador1中并没有对应的81端口的转发规则,当然其他服务器器也服务访问到nginx了。

网上很多教程全程采用同一个端口,初学者很难理解其中的原理,在实践中会遇到很大的麻烦,我这边整体梳理一下,希望帮到大家。

Original: https://www.cnblogs.com/simendavid/p/12446825.html
Author: 湖南馒头
Title: 详解Docker 跨服务器通讯 Ambassador原理

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/574084/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Redis 配置文件

    http://blog.csdn.net/tonysz126/article/details/8280696/ 2.1 Redis配置文件 为了对Redis的系统实现有一个直接的认…

    Linux 2023年5月28日
    0113
  • shell order

    1,与 “-a” : a是and if [ 条件1 -a 条件2 ] ;then shell order shell order … fi 2,…

    Linux 2023年5月28日
    0105
  • 假如,程序员面试的时候说真话

    做程序员这么长时间了,经常能够听到一句话:面试造火箭,入职拧螺丝。而且,随着就业环境越来越卷,现在只会造火箭恐怕都不行了,得能造个空间站才行。 回想自己刚毕业那会儿,哪有什么八股文…

    Linux 2023年6月7日
    077
  • Springboot Mybatis 集成 Redis

    添加 Redis 依赖 $xslt</p> <p>org.springframework.boot spring-boot-starter-data-red…

    Linux 2023年5月28日
    090
  • docker安装minio

    拉取镜像 docker pull minio/minio 运行容器 docker run–net=”host”–name minio…

    Linux 2023年6月7日
    090
  • LRU原理和Redis实现——一个今日头条的面试题(转载)

    很久前参加过今日头条的面试,遇到一个题,目前半部分是如何实现 LRU,后半部分是 Redis 中如何实现 LRU。 我的第一反应是操作系统课程里学过,应该是内存不够的场景下,淘汰旧…

    Linux 2023年5月28日
    094
  • 【已解决】linux centos7系统磁盘扩容

    第一步要手动加硬盘(我的操作是在20G的基础上加了30G) [reliable@hadoop102 ~]$ su root密码: 查看当前磁盘挂载情况: [root@hadoop1…

    Linux 2023年5月27日
    0104
  • nginx配置文件单独创建和管理

    在nginx主配置文件nginx.conf的http模块下引入配置文件夹(注意路径的正确性) 1、nginx主配置文件备份后编辑(nginx配置存放位置:/usr/local/ng…

    Linux 2023年6月6日
    087
  • Java高级

    抽象类和抽象方法 1.定义 随着继承层次中一个个新子类的定义,类变得越来越具体,而父类则更一般,更通用。 类的设计应该保证父类和子类都能够共享特征。 有时候将一个父类设计的非常抽象…

    Linux 2023年6月13日
    0110
  • Ubuntu18.04 + Windows10 双系统安装

    此处忽略Windows10安装!!! 准备 安装环境 OS:Windows10 CPU:Intel(R) Core(TM) i5-10600KF CPU @ 4.10GHz 4.1…

    Linux 2023年5月27日
    0106
  • 一文搞懂 Redis 架构演化之路

    作者:ryetan,腾讯 CSIG 后台开发工程师 现如今 Redis 变得越来越流行,几乎在很多项目中都要被用到,不知道你在使用 Redis 时,有没有思考过,Redis 到底是…

    Linux 2023年5月28日
    0103
  • cpp-base

    1.cin&cout 2.两种注释方式 //注释方法1,’//’。用于单行注释 /* 注释方法2, 用于多行注释 */ &#x7279;&#x522B;&a…

    Linux 2023年6月7日
    0103
  • MySQL日志管理之事务日志和错误日志

    MySQL的日志是用来记录用户的相关操作、系统的运行状态等信息的文件结合。 事务日志就是mysql执行事务过程中产生的日志。 redo log:基于WAl机制在数据更改前先把对应操…

    Linux 2023年6月7日
    093
  • NoteOfMySQL-12-备份与还原

    一、备份概述 备份不是单纯的复制数据,因为这样无法留下历史记录和系统的DNS或Registry等信息。完整的备份应包括自动化的数据管理与系统的全面恢复,即备份=复制+管理。 1. …

    Linux 2023年6月14日
    075
  • 监控平台SkyWalking9入门实践

    简便快速的完成对分布式系统的监控; 一、业务背景 微服务作为当前系统架构的主流选型,虽然可以应对复杂的业务场景,但是随着业务扩展,微服务架构本身的复杂度也会膨胀,对于一些核心的业务…

    Linux 2023年6月14日
    089
  • CentOS7.4安装docker

    1、安装环境 此处在Centos7进行安装,可以使用以下命令查看CentOS版本 lsb_release -a 在 CentOS 7安装docker要求系统为64位、系统内核版本为…

    Linux 2023年5月27日
    091
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球