容器访问外网

news2024/11/15 21:48:51

目录

1 容器访问外网

1.1 容器访问外网的原理

1.2 容器与外网通讯原理解剖

2 docker跨主机网络

2.1 实现docker跨主机通讯方式

2.2 macvlan网络方式实现跨主机通信

2.2.1 macvlan网络方式

2.2.2 macvlan网络间的隔离和连通

2.2.3 实现方法如下:


1 容器访问外网

1.1 容器访问外网的原理

rhel7中,docker访问外网是通过iptables添加地址伪装策略来完成容器网文外网

rhel7之后的版本中通过nftables添加地址伪装来访问外网

1.2 容器与外网通讯原理解剖

在高版本中可以开启内核中的iptables

[root@rockynode-1 ~]# grubby --update-kernel ALL --args iptables=true

在外网访问内网中 docker-proxy 和 dnat 在容器建立端口映射后都会开启,无论使用哪一个都可以与内网进行通讯。那个传输速录高走那个

[root@node-3 ~]# docker run -d --name webserver -p 80:80 nginx
256689982b91fe7b8dbb9910346653f887efb5fe9e52c656c95513c7f2e276f2
[root@node-3 ~]# docker ps 
CONTAINER ID   IMAGE     COMMAND                   CREATED          STATUS          PORTS                               NAMES
256689982b91   nginx     "/docker-entrypoint.…"   14 seconds ago   Up 13 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp   webserver

# 查看是否走地址伪装,与DNAT
[root@node-3 ~]# iptables -t nat -nL
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
DOCKER     0    --  0.0.0.0/0            0.0.0.0/0            ADDRTYPE match dst-type LOCAL

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
DOCKER     0    --  0.0.0.0/0           !127.0.0.0/8          ADDRTYPE match dst-type LOCAL

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
MASQUERADE  0    --  172.17.0.0/16        0.0.0.0/0           
MASQUERADE  6    --  172.17.0.2           172.17.0.2           tcp dpt:80

Chain DOCKER (2 references)
target     prot opt source               destination         
RETURN     0    --  0.0.0.0/0            0.0.0.0/0           
DNAT       6    --  0.0.0.0/0            0.0.0.0/0            tcp dpt:80 to:172.17.0.2:80


# 查看是否走docker-proxy
[root@node-3 ~]# ps ax | grep docker
   1297 ?        Ssl    0:00 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
   2759 ?        Sl     0:00 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 80 -container-ip 172.17.0.2 -container-port 80
   2765 ?        Sl     0:00 /usr/bin/docker-proxy -proto tcp -host-ip :: -host-port 80 -container-ip 172.17.0.2 -container-port 80

2 docker跨主机网络

2.1 实现docker跨主机通讯方式

在生产环境中,我们的容器不可能都在同一个系统中,所以需要容器具备跨主机通信的能力

跨主机网络解决方案

  • docker原生的overlaymacvlan
  • 第三方的flannelweavecalico

众多网络方案是如何与docker集成在一起的

  • libnetwork docker容器网络库
  • CNM Container Network Model)这个模型对容器网络进行了抽象

CNM Container Network Model

CNM分三类组件

Sandbox:容器网络栈,包含容器接口、dns、路由表。(namespace

Endpoint:作用是将sandbox接入network veth pair

Network:包含一组endpoint,同一 network endpoint可以通信

2.2 macvlan网络方式实现跨主机通信

2.2.1 macvlan网络方式

  • Linux kernel提供的一种网卡虚拟化技术。
  • 无需Linux bridge,直接使用物理接口,性能极好
  • 容器的接口直接与主机网卡连接,无需NAT或端口映射。macvlan会独占主机网卡,但可以使用vlan子接口实现多macvlan网络
  • vlan可以将物理二层网络划分为4094个逻辑网络,彼此隔离,vlan id取值为1~4094

2.2.2 macvlan网络间的隔离和连通

  • macvlan网络在二层上是隔离的,所以不同macvlan网络的容器是不能通信的
  • 可以在三层上通过网关将macvlan网络连通起来
  • docker本身不做任何限制,像传统vlan网络那样管理即可

2.2.3 实现方法如下

1.在两台docker主机上各添加一块网卡,打开网卡混杂模式

#################################### node-3 

[root@node-3 ~]# ifconfig eth1
eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether 00:0c:29:32:ef:fb  txqueuelen 1000  (Ethernet)
        RX packets 29  bytes 3539 (3.4 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


[root@node-3 ~]# ip link set eth1 promisc on
[root@node-3 ~]# ip link set up eth1
[root@node-3 ~]# ifconfig eth1
eth1: flags=4419<UP,BROADCAST,RUNNING,PROMISC,MULTICAST>  mtu 1500
        ether 00:0c:29:32:ef:fb  txqueuelen 1000  (Ethernet)
        RX packets 33  bytes 4048 (3.9 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

################################### node-1

[root@rockynode-1 ~]# ifconfig eth1
eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether 00:0c:29:76:3c:1a  txqueuelen 1000  (Ethernet)
        RX packets 34  bytes 4321 (4.2 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@rockynode-1 ~]# ip link set eth1 promisc on
[root@rockynode-1 ~]# ip lin set up eth1
[root@rockynode-1 ~]# ifconfig eth1
eth1: flags=4419<UP,BROADCAST,RUNNING,PROMISC,MULTICAST>  mtu 1500
        ether 00:0c:29:76:3c:1a  txqueuelen 1000  (Ethernet)
        RX packets 34  bytes 4321 (4.2 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

 eth1这款网卡在vmware中要设定为仅主机模式  

构建相同network网络环境

[root@rockynode-1 ~]# docker network create \
-d macvlan \
--subnet 1.1.1.0/24 \
--gateway 1.1.1.1 \
-o parent=eth1 macvlan1 
7fb93ea03a7017057ecdfeb630488bae93851e804f7a8f049421d9d77334281e

[root@rockynode-1 ~]# docker run -it --name busybox \
--network macvlan1 --ip 1.1.1.100 --rm busybox



[root@node-3 ~]# docker network create \
-d macvlan \
--subnet 1.1.1.0/24 \
--gateway 1.1.1.1 \
-o parent=eth1 macvlan1
5b260b2513194a898badb59b1b77c15e7ee51f65f6690e93670cd83e4a639cb4

[root@node-3 ~]# docker run -it --name busybox \
--network macvlan1 --ip 1.1.1.200 --rm busybox

不同主机 测试容器网络连通性

/ # ping 1.1.1.200
PING 1.1.1.200 (1.1.1.200): 56 data bytes
64 bytes from 1.1.1.200: seq=0 ttl=64 time=0.743 ms
64 bytes from 1.1.1.200: seq=1 ttl=64 time=0.325 ms
^C
--- 1.1.1.200 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.325/0.534/0.743 ms

/ # ping 1.1.1.100
PING 1.1.1.100 (1.1.1.100): 56 data bytes
64 bytes from 1.1.1.100: seq=0 ttl=64 time=0.660 ms
64 bytes from 1.1.1.100: seq=1 ttl=64 time=1.021 ms
^C
--- 1.1.1.100 ping statistics ---

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2089707.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Django+Vue社区养老管理系统的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 需要的环境3.2 Django接口层3.3 实体类3.4 config.ini3.5 启动类3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍&#xff1a;CSDN认证博客专家&#xff0c;CSDN平台Java领域优质创作者&…

详解Spring AOP

前言&#x1f440;~ 上一章我们介绍了SpringBoot统一功能相关的知识点&#xff0c;今天来讲解Spring框架另外一个核心AOP&#xff0c;细&#xff01;&#xff01;&#xff01; 什么是AOP&#xff1f; 什么是面向切面编程呢&#xff1f; 什么是面向特定方法编程呢&#xff1…

Bahdanau注意力机制

介绍 在Bahadanu注意力机制中&#xff0c;本质上是序列到序列学习的注意力机制实现&#xff0c;在编码器-解码器结构中&#xff0c;解码器的每一步解码过程都依赖着整个上下文变量&#xff0c;通过Bahdanau注意力&#xff0c;使得解码器在每一步解码时&#xff0c;对于整个上下…

ET6框架(七)Excel配置工具

文章目录 一、Excel表的基本规则&#xff1a;二、特殊特殊标记三、编译路径说明四、动态获取数据五、可导表类型查看: 一、Excel表的基本规则&#xff1a; 在框架中我们的Excel配置表在ET > Excel文件夹中 1.在表结构中需要注意的是起始点必须在第三行第三列&#xff0c;且…

91.游戏的启动与多开-游戏启动

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a;易道云信息技术研究院 上一个内容&#xff1a;90.游戏安全项目-项目搭建与解析 以90.游戏安全项目-项目搭建与解析它的代码为基础进行…

[java][代码] java中date格式化输出时间字符串

Date date new Date();//具备默认的风格//DateFormat dateFormDateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG);DateFormat dateFormnew SimpleDateFormat("yyyy-mm-dd");System.out.println(dateForm.format(date)); 这段Java代码演示了如何使用S…

YOLOv9改进策略【模型轻量化】| PP-LCnet

一、本文介绍 本文记录的是利用PP-LCNet中的DepSepConv模块优化YOLOv9中的RepNCSPELAN4。YOLOv9在使用辅助分支后&#xff0c;模型的参数量和计算量相对较大&#xff0c;本文利用DepSepConv模块改善模型结构&#xff0c;使模型在几乎不增加延迟的情况下提升网络准确度。 文章目…

海外新闻稿发布对区块链项目具有深远的影响

在知名媒体平台上发布新闻稿对区块链项目具有深远的影响&#xff0c;例如全球雅虎&#xff0c;彭博社这些全球知名财经媒体&#xff0c;能够显著提升项目的曝光度和信誉&#xff0c;吸引潜在投资者以及其他利益相关者的关注。以下是几个方面的详细分析&#xff1a; 1. 增强品牌…

区块链通证系统功能分析

区块链通证系统功能分析涉及多个关键方面&#xff0c;以确保系统能够满足不同的业务需求和合规性要求。 同质与非同质通证&#xff1a;区块链通证系统需要支持同质通证&#xff08;如ERC-20&#xff09;和非同质通证&#xff08;如ERC-721&#xff09;&#xff0c;以适应不同类…

如何快速掌握销售数据?一张报表就够了

在销售管理中&#xff0c;数据是企业做出战略决策的重要依据。有效的销售数据分析不仅能帮助企业精准把握市场动向&#xff0c;还能提高销售团队的工作效率&#xff0c;优化客户关系管理。然而&#xff0c;面对海量的销售数据&#xff0c;如何高效地解读这些数据呢&#xff1f;…

Java SpringBoot实现大学生平时成绩量化管理系统:一步步教你构建高效成绩统计,集成MySQL数据库,打造自动化评分流程

&#x1f34a;作者&#xff1a;计算机毕设匠心工作室 &#x1f34a;简介&#xff1a;毕业后就一直专业从事计算机软件程序开发&#xff0c;至今也有8年工作经验。擅长Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等。 擅长&#xff1a;按照需求定制化开发项目…

three.js 编辑器,动画,着色器, cesium 热力图,聚合点位,大量点线面, 图层,主题,文字,等众多案例中心

对于大多数的开发者来言&#xff0c;看了很多文档可能遇见不到什么有用的&#xff0c;就算有用从文档上看&#xff0c;把代码复制到自己的本地大多数也是不能用的&#xff0c;非常浪费时间和学习成本&#xff0c; 尤其是three.js &#xff0c; cesium.js 这种难度较高&#xff…

ThinkPHP之入门讲解

文章目录 1 ThinkPHP1.1 框架1.1.1 目录讲解1.1.1.1 5.x1.1.1.2 6.0以上 1.1.2 配置文件1.1.2.1 5.x1.1.2.2 6.0以上 1.1.3 函数文件1.1.3.1 5.x1.1.3.1 6.0以上 1.2 控制器1.2.1 控制器的后缀1.2.2 框架中的命名空间1.2.3 url访问1.2.4 调试模式1.2.4.1 5.x1.2.4.2 6.0以上 1.…

Oracle迁移至openGauss的工具:ora2op的安装配置

目录 前言 1. ora2op的下载 1.1 下载地址 1.2 ora2op 介绍 2. ora2op的安装 2.1 安装perl的依赖包 2.2 安装连接Oracle数据库的模块 2.3 安装ora2op 2.4 安装连接openGauss数据库的模块 前言 本工具是使用perl&#xff0c;在安装时会遇到各种问题&#xff0c;解决方式…

Keil5 Debug模式Watch窗口添加的监控变量被自动清除

Keil5 Debug模式Watch窗口添加的监控变量被自动清除 问题解决记录 问题描述&#xff1a;每次进入Debug模式时&#xff0c;watch窗口里面上一次调试添加的监控变量都会被全部清掉 如图&#xff1a; 退出Debug模式后&#xff0c;重新进入Debug模式&#xff1a; 解决方法&…

用户体验设计案例:提升电商网站的用户体验

在数字化时代&#xff0c;用户体验设计&#xff08;UX Design&#xff09;已成为影响品牌成功的关键因素之一。尤其是在竞争激烈的电商行业&#xff0c;如何通过优质的用户体验来吸引和留住客户&#xff0c;是每个企业都需要面对的挑战。本文将通过一个具体的电商网站设计案例&…

解析 uni-app 小程序分包策略:合理优化包体积分布

引言 微信小程序的流行使得越来越多的开发者投入到小程序的开发中。但是&#xff0c;随着项目规模的增大&#xff0c;小程序的性能也会面临一些挑战。其中&#xff0c;小程序分包策略是提升性能的重要一环。 同时&#xff0c;uni-app 的流行也使众多的移动端开发者选择使用 u…

AcWing895. 最长上升子序列

这个代码不知道怎么说&#xff0c;反正就是对着代码手算一次就懂了&#xff0c;无需多言&#xff0c;就是俩for循环里面的第二层for的循环条件是j<i,j是从下标1往下标i-1遍历的&#xff0c;每次a【j】<a【i】就在答案数组f【i】上面做出更新。基本的输入样例已经可以覆盖…

揭秘数字水印技术:使用PyQt5实现图像中的LSB隐写术

在当今的数字化世界中&#xff0c;保护信息的安全性和隐秘性变得尤为重要。无论是在保护版权的数字水印&#xff0c;还是在隐秘传输信息的过程中&#xff0c;数字隐写术&#xff08;Steganography&#xff09;都是一种不可或缺的技术。今天&#xff0c;我们将带领大家探索一种简…

关于LLC知识14

1、LLC必须工作在感性区 2、为了降低LLC进入容性区后MOS管的电流应力&#xff0c;必须要选择快管&#xff0c;对体二极管的反向恢复参数有要求&#xff1a;trr<200ns 3、对于上下管的死区时间不能太短&#xff0c;否则电容无法充放电完成&#xff0c;就无法实现ZVS导通 如…