2024年8月28日(docker网络)

跨主机的容器网络连接 A=>mysql        B=>java容器

将A -p3306:3306  端口映射就可以实现

一、docker网络

1、本地网络

bridge

所有容器连接到桥就可以使用外网,使用nat让容器可以访问外网,使用ip a s指令查看桥,所有容器连接到此桥,ip地址都是172.17.0.0/16网段,桥是启动docker服务后出现,在centos使用bridge-utils安装

host
与主机共享网络,可让容器连接外网

所有容器与docker主机在同一个网络中,容器和外网相互访问

主机名同真机,网络也同真机

优点:可以直接访问容器

缺点:端口占用,多容器同时运行一个服务,不建议,在测试环境中使用none

none

容器仅仅有lo网卡,不能与外界链接,在高级应用中使用,lo网卡,无法链接外网

[root@docker ~]# docker run -d -p80:80 centos:nginx

[root@docker ~]# docker ps
CONTAINER ID   IMAGE             COMMAND                   CREATED         STATUS         PORTS                                       NAMES
85159a39e78e   centos:nginx      "/bin/sh -c /usr/sbi…"   2 minutes ago   Up 2 minutes   0.0.0.0:80->80/tcp, :::80->80/tcp           suspicious_booth

查看IP地址

[root@docker ~]# docker inspect 85|grep IPAdd

            "SecondaryIPAddresses": null,"IPAddress": "172.17.0.3","IPAddress": "172.17.0.3",

[root@docker ~]# yum -y install bridge-utils

[root@docker ~]# brctl show
bridge name	bridge id		STP enabled	interfaces
docker0		8000.024290152bb2	no		veth6cae504

[root@docker ~]# systemctl restart docker

使用docker network 查看桥连接

[root@docker ~]# docker network ls

NETWORK ID     NAME      DRIVER    SCOPE
bf8ef571c9a3   bridge    bridge    local
c6c78e892e49   host      host      local
9b3efd91b62e   none      null      local

每一台dcoker host上的docker0所在网段完全一样,但是会造成跨主机的容器无法通信,

[root@docker ~]# docker run -it centos:latest /bin/bash
[root@0c3409faae51 /]# [root@docker ~]# 

[root@docker ~]# docker run -it centos:latest /bin/bash
[root@45f35443c3f3 /]# 
[root@docker ~]# docker run -it --network host centos:latest /bin/bash

[root@docker ~]# docker run -it --network host centos:latest /bin/bash
[root@docker /]# 

[root@docker ~]# docker ps 
CONTAINER ID   IMAGE           COMMAND       CREATED         STATUS         PORTS     NAMES
ce1dd35a8b69   centos:latest   "/bin/bash"   2 minutes ago   Up 2 minutes             zen_galois
45f35443c3f3   centos:latest   "/bin/bash"   4 minutes ago   Up 4 minutes             keen_mclaren
0c3409faae51   centos:latest   "/bin/bash"   5 minutes ago   Up 5 minutes             cool_beaver

[root@docker ~]# docker inspect ce

[root@docker ~]# docker run -it --network host centos:yum /bin/bash
[root@docker /]# ls
bin  etc   lib      lost+found  mnt  proc  run   srv  tmp  var
dev  home  lib64  media       opt  root  sbin  sys  usr
[root@docker /]# yum -y install iproute

[root@docker /]# yum -y install httpd

[root@docker /]# echo "abxxcxss" > /var/www/html/index.html
[root@docker /]# systemctl start httpd
[root@docker /]# httpd -k start

[root@docker /]# curl 192.168.8.196
abxxcxss

2、联盟网络 容器网络

共享网络命名空间

3、跨主机容器之间通讯

工具 pipwork   flannel

overlay覆盖型网络,不支持路由转发,通过数据etcd数据库保存子网信息以及网络分配信息,给每台主机分配一个网段,通过udp传输数据包

 

flannel的思路

FlInnel是CoreOS团队针对Kubernetes设计的一个网络规划服务,简单来说,它的功能是让集群中的不同节点主机创建的Docker容器都具有全集群唯一的虚拟IP地址。但在默认的Docker配置中,每个节点上的Docker服务会分别负责所在节点容器的IP分配。这样导致的一个问题是,不同节点上容器可能获得相同的内外IP地址。并使这些容器之间能够之间通过IP地址相互找到,也就是相互ping通。

Flannel的设计目的就是为集群中的所有节点重新规划IP地址的使用规则,从而使得不同节点上的容器能够获得“同属一个内网”且”不重复的”IP地址,并让属于不同节点上的容器能够直接通过内网IP通信。

Flannel实质上是一种“覆盖网络(overlay network)",即表示运行在一个网上的网(应用层网络),并不依靠ip地址来传递消息,而是采用一种映射机制,把ip地址和identifiers(标识)做映射来资源定位。也就是将TCP数据包装在另一种网络包里面进行路由转发和通信,目前已经支持UDP、VxLAN、AWS VPC和GCE路由等数据转发方式。

原理:

每个主机配置一个ip段和子网个数。例如,可以配置一个覆盖网络使用10.10.0.0/16段。因此主机A可以接受10.10.1.0/24,主机B可以接受10.10.2.0/24的包。flannel使用etcd来维护分配的子网到实际的ip地址之间的映射。对于数据路径,flannel使用udp来封装ip数据报,转发到远程主机。选择UDP作为转发协议是因为他能穿透防火墙。

weave

Weave的思路
在每个宿主机上布置一个特殊的route的容器,不同宿主机的route容器连接起来。route拦截所有普通容器的ip请求,并通过udp包发送到其他宿主机上的普通容器。这样在跨机的多个容器端看到的就是同一个扁平网络。

weave解决了网络问题,不过部署依然是单机的。

主机名IP功能软件
node1192.168.8.197主控主机etcd flannel docker
node2192.168.8.198被控主机etcd docker
1.node1安装flannel 和etcd

[root@node1 ~]# yum -y install flannel etcd

2.node2 安装flannel

[root@node2 ~]# yum -y install flannel

3. 配置启动etcd并启动服务

[root@node1 ~]# vim /etc/etcd/etcd.conf 

  6 ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379,http://0.0.0.0:4001"21 ETCD_ADVERTISE_CLIENT_URLS="http://192.168.8.197:2379,http://192.168.8.197:4001"

[root@node1 ~]# systemctl start etcd  #启动服务
[root@node1 ~]# netstat -lnput | grep 2379
tcp6       0      0 :::2379                 :::*                    LISTEN      1320/etcd           
[root@node1 ~]# netstat -lnput | grep 4001
tcp6       0      0 :::4001                 :::*                    LISTEN      1320/etcd           

[root@node1 ~]# systemctl enable etcd

4. 测试数据库功能

[root@node1 ~]# etcdctl set testdir/testkey0 1000
1000
[root@node1 ~]# etcdctl get testdir/testkey0
1000

5. 测试集群健康

[root@node1 ~]# etcdctl -C http://192.168.8.197:4001 cluster-health
member 8e9e05c52164694d is healthy: got healthy result from http://192.168.8.197:2379
cluster is healthy

6. 修改flannel配置文件

[root@node1 ~]# vim /etc/sysconfig/flanneld 

  4 FLANNEL_ETCD_ENDPOINTS="http://192.168.8.197:2379"

[root@node1 ~]# etcdctl set b 123
123
[root@node1 ~]# etcdctl get b
123

7. 向数据库中存入网段信息

[root@node1 ~]# etcdctl mk /atomic.io/network/config '{ "Network" : "172.20.0.0/16" }'
{ "Network" : "172.20.0.0/16" }
[root@node1 ~]# etcdctl get /atomic.io/network/config
{ "Network" : "172.20.0.0/16" }

[root@node1 ~]# systemctl start flanneld
[root@node1 ~]# systemctl enable flanneld

[root@node1 ~]# ip a s

3: flannel0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1472 qdisc pfifo_fast state UNKNOWN group default qlen 500link/none inet 172.20.59.0/16 scope global flannel0valid_lft forever preferred_lft foreverinet6 fe80::a81c:32fa:5cba:6000/64 scope link flags 800 valid_lft forever preferred_lft forever
8. 安装docker并启动 

[root@node1 ~]# systemctl start docker

3: flannel0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1472 qdisc pfifo_fast state UNKNOWN group default qlen 500link/none inet 172.20.59.0/16 scope global flannel0valid_lft forever preferred_lft foreverinet6 fe80::a81c:32fa:5cba:6000/64 scope link flags 800 valid_lft forever preferred_lft forever
4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default link/ether 02:42:8a:18:0b:be brd ff:ff:ff:ff:ff:ffinet 172.17.0.1/16 brd 172.17.255.255 scope global docker0valid_lft forever preferred_lft forever
9. 查看flannel子网IP

[root@node1 ~]# cat /run/flannel/subnet.env 
FLANNEL_NETWORK=172.20.0.0/16
FLANNEL_SUBNET=172.20.59.1/24  
FLANNEL_MTU=1472  #最大连接数
FLANNEL_IPMASQ=false

10. 配置daemon.json文件

从其他主机复制文件

[root@node1 ~]# scp root@192.168.8.196:/etc/docker/daemon.json /etc/docker/

[root@node1 ~]# vim /usr/lib/systemd/system/docker.service

[root@node1 ~]# systemctl daemon-reload
[root@node1 ~]# systemctl restart docker

[root@node1 ~]# vim /etc/docker/daemon.json 

{"registry-mirrors": ["https://do.nark.eu.org","https://dc.j8.work","https://docker.m.daocloud.io","https://dockerproxy.com","https://docker.mirrors.ustc.edu.cn","https://docker.nju.edu.cn"],
"hosts": ["tcp://0.0.0.0:2375","unix:///var/run/docker.sock"],"insecure-registries": [                                "http://192.168.8.197:5000"],"bip" : "172.20.59.1/24","mtu" : 1472
}

[root@node1 ~]# systemctl restart docker

3: flannel0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1472 qdisc pfifo_fast state UNKNOWN group default qlen 500link/none inet 172.20.59.0/16 scope global flannel0valid_lft forever preferred_lft foreverinet6 fe80::a81c:32fa:5cba:6000/64 scope link flags 800 valid_lft forever preferred_lft forever
4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1472 qdisc noqueue state DOWN group default link/ether 02:42:8a:18:0b:be brd ff:ff:ff:ff:ff:ffinet 172.20.59.1/24 brd 172.20.59.255 scope global docker0valid_lft forever preferred_lft forever

[root@node1 ~]# docker pull centos

[root@node1 ~]# docker run -it centos:latest /bin/bash
[root@48b7a5f0f8a2 /]# [root@node1 ~]# 
[root@node1 ~]# docker inspect 48b | grep IPAdd
            "SecondaryIPAddresses": null,
            "IPAddress": "172.20.59.2",
                    "IPAddress": "172.20.59.2",

11. 配置被控主机

1.安装flannel

2.配置flanner 配置flannel要访问的etcd数据库所在的位置

3.启动fiannel

4.查看flannel分配的ip网段

5.安装docker

6.将flannel分配的网段写入到daemon.json

7.启动docker

8.拉去一个centos镜像

9.ping node1 中容器的IP地址

[root@node2 ~]# vim /etc/sysconfig/flanneld 

FLANNEL_ETCD_ENDPOINTS="http://192.168.8.197:2379"

[root@node2 ~]# systemctl start flanneld
[root@node2 ~]# ip a s

3: flannel0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1472 qdisc pfifo_fast state UNKNOWN group default qlen 500link/none inet 172.20.62.0/16 scope global flannel0

[root@node2 ~]# cat /run/flannel/subnet.env 
FLANNEL_NETWORK=172.20.0.0/16
FLANNEL_SUBNET=172.20.62.1/24
FLANNEL_MTU=1472
FLANNEL_IPMASQ=false


[root@node1 ~]# scp docker.sh root@192.168.8.198:~/

[root@node2 ~]# scp root@192.168.8.197:/etc/docker/daemon.json /etc/docker/
[root@node2 ~]# vim /etc/docker/daemon.json 

        "bip" : "172.20.62.1/24","mtu" : 1472

[root@node2 ~]# vim /usr/lib/systemd/system/docker.service

[root@node2 ~]# systemctl daemon-reload
[root@node2 ~]# systemctl restart docker
 

4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1472 qdisc noqueue state DOWN group default link/ether 02:42:32:32:6b:d6 brd ff:ff:ff:ff:ff:ffinet 172.20.62.1/24 brd 172.20.62.255 scope global docker0valid_lft forever preferred_lft forever

[root@node2 ~]# docker pull centos
[root@node2 ~]# docker run -it centos:latest /bin/bash
[root@5f99ad122f73 /]# [root@node2 ~]# 

[root@node2 ~]# docker inspect   5f| grep IPAdd
            "SecondaryIPAddresses": null,
            "IPAddress": "172.20.62.2",
                    "IPAddress": "172.20.62.2",
[root@node2 ~]# ping 172.20.59.2
PING 172.20.59.2 (172.20.59.2) 56(84) bytes of data.
64 bytes from 172.20.59.2: icmp_seq=1 ttl=61 time=1.08 ms
64 bytes from 172.20.59.2: icmp_seq=2 ttl=61 time=0.505 ms
64 bytes from 172.20.59.2: icmp_seq=3 ttl=61 time=0.456 ms
[root@node1 ~]# ping 172.20.62.2
PING 172.20.62.2 (172.20.62.2) 56(84) bytes of data.
64 bytes from 172.20.62.2: icmp_seq=1 ttl=61 time=0.670 ms
64 bytes from 172.20.62.2: icmp_seq=2 ttl=61 time=0.341 ms

总结,工作原理

1.使用flanner为docker主机(宿主)分配网段

2.网段的信息以及ip的信息保存在etcd数据库中

3.当flanner开始运行的时候,会从etcd数据库中读取{"Network":"172.20.0.0/16"},随机为当前的主机添加一个flannel0网卡172.20.59.0

4.配置docker 的daemon文件,让docker0网卡变成flannel的网段一致,之后docker向创建的容器IP就在flannel网段控制之内

 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ESP8266通过WiFiManager实现Web配网

背景 一个项目中使用到了一款压力传感器,需要通过单片机实现数据的采集并发送到远程的服务器上,单片机采用的时ESP8266,通过WiFiManager实现局域网配置,以及远端服务器IP地址和服务端口的配置。发布此文章记录一下使用WiFiManager实现配网的方法。 程序流程图 示例代码 …

【机器学习-监督学习】双线性模型

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈Python机器学习 ⌋ ⌋ ⌋ 机器学习是一门人工智能的分支学科&#xff0c;通过算法和模型让计算机从数据中学习&#xff0c;进行模型训练和优化&#xff0c;做出预测、分类和决策支持。Python成为机器学习的首选语言&#xff0c;…

[HZNUCTF 2023 preliminary]flask

[HZNUCTF 2023 preliminary]flask 点开之后页面如图所示&#xff1a; 猜测是SSTI模板注入&#xff0c;先输入{7*7},发现模板是倒序输入的&#xff1a; 然后我们输入}}‘7’*7{{返回777777&#xff0c;这是jinja2模板&#xff1a; 我们需要让用户输入一个字符串&#xff0c;对其…

VS2022 QT环境显示中文乱码问题

1.问题描述 在VS2022中搭配QT6.2环境&#xff0c;在文本处设置中文&#xff0c;运行程序文本处显示乱码&#xff0c;未成功显示想要的中文。 2.VS2015解决方案 如果是VS2015的话&#xff0c;直接文件->高级保存选项可以设置编码格式。 修改编码格式如图所示&#xff1a;…

C语言迷宫制造

目录 开头程序程序的流程图程序的效果我推荐要制造的迷宫下一篇博客要讲的东西 开头 大家好&#xff0c;我叫这是我58。 程序 #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <stdlib.h> #include <string.h> void printmaze(const cha…

基于多案例全流程防洪评价报告编制方法与水流数学模型建模

《防洪评价报告编制导则解读河道管理范围内建设项目编制导则》&#xff08;SL/T808- 2021&#xff09;解读 编制导则解读 1.规范适用范围&#xff1b; 2.规范名词概念解读&#xff1b; 3.防洪评价计算类别及分析主要内容&#xff1b; 4.消除和减轻影响措施&#xff1b; 5.…

使用 pg_profile 在 Postgres 中生成性能报告

使用 pg_profile 在 Postgres 中生成性能报告 下载安装 pg_profile 从github链接下载pg_profile: https://github.com/zubkov-andrei/pg_profile/releases 解压缩到以下位置 # cd $PGHOME/share/extension/ # su - postgress $ psql -h 127.0.0.1 -d postgres -U postgress p…

Improving Language Understandingby Generative Pre-Training

摘要 自然语言理解包括各种各样的任务&#xff0c;如文本蕴涵、问题回答、语义相似性评估和文档分类。尽管大量未标记的文本语料库丰富&#xff0c;但用于学习这些特定任务的标记数据很少&#xff0c;这使得判别训练模型难以充分执行。我们证明&#xff0c;通过在不同的未标记…

筛质数(线性筛法)

线性筛法&#xff1a; 假设有一个非质数 x&#xff0c;那么这个数可以被表示为一个最小质因数和一个因子相乘的形式 如 x 12 &#xff0c;那么 x 2*6 其中&#xff1a;2 就是 12 的最小质因数&#xff0c; 6 就是另一个因子 线性筛法就是利用每个数的最小质因数筛掉这个非…

解决idea始终无法导入本地jar包

问题描述 maven刷新也没有用 解决&#xff1a; 找到本地Maven仓库的jar包手动引入 之后。导入成功

《黑神话:悟空》研发公司的薪资水平

作者&#xff1a;程序员晓凡 最近全网最火爆的要属《黑神话&#xff1a;悟空》了&#xff0c;即便是我这个平时不沾游戏、不追直播的人&#xff0c;也看直播看得津津有味。 一、销量与热度背后 首先&#xff0c;让我们来看看那些令人瞩目的数字。《黑神话&#xff1a;悟空》…

VBA技术资料MF194:屏蔽右键菜单

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…

uniapp(微信小程序如何使用单选框、复选框)

一、先看效果 二、数据结构 说明&#xff1a;selected用来记录每次用户选择的值&#xff0c;当是单选的时候属性中的selected属性需要设置成字符串&#xff0c;当是复选框的时候&#xff0c;此时选择的是数组&#xff0c;selected属性应设置为数组。type用来区分当前是单选还是…

Wordpress 6.x 修改文件上传大小限制

1. 安装并启用Big File Uploads插件 插件 → 安装新插件 媒体→添加文件 修改后Save保存 2. 修改Nginx配置文件 # 我的配置在wordpress.conf文件中 vim /etc/nginx/conf.d/wordpress.conf 在server节点中加入下面这句配置 # 文件上传大小限制 client_max_body_size 500M;# 重…

xss-labs通关攻略 11-15关

第十一关&#xff1a;less-11 步骤一&#xff1a;利用burp抓包 步骤二&#xff1a;添加referer:click me!" type"button" οnmοuseοver"alert(/xss/)进行放包 第十二关&#xff1a;less-12 步骤一&#xff1a;利用burp抓包 步骤二&#xff1a;修改User A…

java 中的设计模式

文章目录 一、前言二、设计模式的分类三、设计模式的原则1、开闭原则&#xff08;Open Close Principle&#xff09;2、里氏代换原则&#xff08;Liskov Substitution Principle&#xff09;3、依赖倒转原则&#xff08;Dependence Inversion Principle&#xff09;4、接口隔离…

【计算机系统架构】从0开始构建一台现代计算机|时序逻辑、主存储器|第2章

博主简介&#xff1a;努力学习的22级计算机科学与技术本科生一枚&#x1f338;博主主页&#xff1a; Yaoyao2024往期回顾&#xff1a; 【计算机系统架构】从0开始构建一台现代计算机|二进制、布尔运算和ALU|第2章每日一言&#x1f33c;: 孤独和喧嚣都令人难以忍受。如果一定要忍…

参会投稿 | 第三届先进传感与智能制造国际学术会议(ASIM 2024)

第三届先进传感与智能制造国际会议&#xff08;The 3rd International Conference on Advanced Sensing, Intelligent Manufacturing&#xff09;&#xff0c;由江汉大学、西安交通大学和山东大学主办&#xff0c;由江西省机械工程学会、东华理工大学机械与电子工程学院等联合协…

iPhone突然黑屏?别慌,这里有你的自救指南

在日常使用iPhone的过程中&#xff0c;不少用户可能会遇到手机突然黑屏的情况&#xff0c;这往往让人措手不及。别担心&#xff0c;今天我们就来详细探讨一下iPhone突然黑屏的可能原因及解决方法&#xff0c;帮助你快速恢复手机的正常使用。 一、iPhone突然黑屏的可能原因 1. …

IPD+敏捷高级训战盛典(上海站)圆满落幕,引领创新管理新纪元

在金秋送爽的八月末&#xff0c;翰德恩咨询精心筹备的为期两日的“IPD敏捷高级训战盛典&#xff08;上海站&#xff09;”于24日至25日璀璨落幕&#xff0c;标志着一场汇聚行业精英、融合前沿管理智慧的盛宴圆满收官。此次盛典不仅是知识的碰撞与交融&#xff0c;更是企业转型升…