2024年8月28日(docker网络)

news2024/12/24 1:21:32

跨主机的容器网络连接 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 500
    link/none 
    inet 172.20.59.0/16 scope global flannel0
       valid_lft forever preferred_lft forever
    inet6 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 500
    link/none 
    inet 172.20.59.0/16 scope global flannel0
       valid_lft forever preferred_lft forever
    inet6 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:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_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 500
    link/none 
    inet 172.20.59.0/16 scope global flannel0
       valid_lft forever preferred_lft forever
    inet6 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:ff
    inet 172.20.59.1/24 brd 172.20.59.255 scope global docker0
       valid_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 500
    link/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:ff
    inet 172.20.62.1/24 brd 172.20.62.255 scope global docker0
       valid_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.coloradmin.cn/o/2083599.html

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

相关文章

机器学习 之 DBSCAN算法 及实现

1.K-means 与 DBSCAN 的比较 K-means 和 DBSCAN 都是聚类算法&#xff0c;但它们之间有显著的区别&#xff1a; K-means&#xff1a; 基于中心点的方法&#xff0c;要求用户提前指定簇的数量。适用于球形簇&#xff0c;且簇大小相近。无法处理噪声数据和任意形状的簇。 DBSCAN…

Mysql基础练习题 182.编写解决方案来报告所有重复的电子邮件 (力扣)

182.编写解决方案来报告所有重复的电子邮件。 请注意&#xff0c;可以保证电子邮件字段不为 NULL 建表插入数据&#xff1a; #建表插入数据 Create table If Not Exists Person (id int, email varchar(255)) Truncate table Person insert into Person (id, email) values (…

初识Vue.js:从零开始构建你的第一个Vue项目

初识Vue.js&#xff1a;从零开始构建你的第一个Vue项目 &#x1f680; 引言 简要介绍主题 在现代Web开发中&#xff0c;前端框架的选择至关重要。Vue.js作为一款渐进式JavaScript框架&#xff0c;以其简单易用、灵活高效的特性&#xff0c;迅速赢得了开发者的青睐。本篇文章将…

论文阅读与源码解析:CMX

论文阅读与源码解析&#xff1a;CMX: Cross-Modal Fusion for RGB-X Semantic Segmentation with Transformers 论文地址&#xff1a;https://arxiv.org/pdf/2203.04838 GitHub项目地址&#xff1a;https://github.com/huaaaliu/RGBX_Semantic_Segmentation 源码&#xff1a;h…

生产es所有节点全部掉线 排查

生产es所有节点全部掉线 查看message日志发现 内存溢出 修改jvm的改小 清理buff/cache sync && echo 1 > /proc/sys/vm/drop_caches sync && echo 2 > /proc/sys/vm/drop_caches sync && echo 3 > /proc/sys/vm/drop_caches 把es内存的…

GenAI 斜杠计划丨开启职业加速密码:图文设计专场参会体验

目录 前言 活动概览 活动开始&#xff1a;AI时代的召唤 主题分享一&#xff1a;《看到GenAI的力量&#xff1a;Amazon Bedrock功能操作》 1. 大模型的选择与理解 2. Amazon Bedrock的神奇魅力 主题分享二&#xff1a;《创意与技术的交汇&#xff1a;Zilliz向量数据库助力…

element的日期时间修改时间没有秒以及默认的时间时分修改

<el-form-item label"上架时间" required"required"><el-form:model"courseForm"ref"unmountFormRef"inlinestyle"text-align: left"label-position"left":rules"sjtimeRules"><el-form…

搜维尔科技:人形机器人的动作捕捉技术是实现机器人拟人化动作的关键技术之一

人形机器人的动作捕捉技术是实现机器人拟人化动作的关键技术之一&#xff0c;以下为您详细介绍几款动作捕捉系统&#xff1a; 1.光学式动作捕捉&#xff1a; • 原理&#xff1a;通过在人体关键部位&#xff08;如关节&#xff09;贴上反光标记点&#xff0c;利用多个高速摄像…

如何使用mcu 内置 flash 实现fatfs

一、环境与目的 AT32F403AVGT7&#xff0c;FLASH从0x80e0000到最后&#xff0c;共128K。扇区大小为512。 注意&#xff1a;Flash 的扇区大小为2KB。 fatfs 80286 /* Revision ID */ 目标在于利用单片机1MBflash后面的一小部分&#xff0c;以方便应用程序存储系统参数。 …

Ubuntu上安装剪切板管理软件

1. 更新系统和软件 确保你的系统和软件是最新的&#xff0c;有时更新可以修复这类错误。 sudo apt update sudo apt upgrade 2. 重新安装 Diodon 尝试卸载并重新安装 Diodon。 sudo apt remove diodon sudo apt install diodon 3. 检查依赖项 确保系统中安装了所有必要…

Aiseesoft Data Recovery for Mac:专业级数据恢复解决方案

在数字时代&#xff0c;数据的安全与恢复成为了我们不可忽视的重要议题。对于Mac用户而言&#xff0c;Aiseesoft Data Recovery无疑是一款值得信赖的专业级数据恢复软件。它以其强大的恢复能力、简洁的操作界面以及广泛的兼容性&#xff0c;在众多数据恢复工具中脱颖而出&#…

I 2U-Net: 一种具有丰富信息交互的双路径U-Net用于医学图像分割|文献速递-大模型与多模态诊断阿尔茨海默症与帕金森疾病

Title 题目 I 2U-Net: A dual-path U-Net with rich information interaction for medical image segmentation I 2U-Net: 一种具有丰富信息交互的双路径U-Net用于医学图像分割 01 文献速递介绍 在计算机视觉领域&#xff0c;医学图像分割是主要的挑战之一&#xff0c;例如…

【Java】—— Java面向对象基础:使用Java模拟银行账户与客户交易系统

目录 账户类&#xff08;Account&#xff09; 客户类&#xff08;Customer&#xff09; 测试类&#xff08;CustomerTest&#xff09; 运行结果 在今天的博文中&#xff0c;我们将通过Java编程语言来模拟一个简单的银行账户与客户交易系统。这个系统将包括两个主要类&#…

算法设计:实验四回溯法

【实验目的】 应用回溯法求解图的着色问题 【实验要求】 设下图G(V,E)是一连通无向图&#xff0c;有3种颜色&#xff0c;用这些颜色为G的各顶点着色&#xff0c;每个顶点着一种颜色&#xff0c;且相邻顶点颜色不同。试用回溯法设计一个算法&#xff0c;找出所有可能满足上述…

Cookie、Session、Token、JWT的区别

先总结 其实比较的话就只是Session、Token、JWT的区别&#xff0c;Session是基于Cookie的 这里暂时只比较Session和JWT的区别 存放位置不同 Session基于Cookie存储在服务端JWT存放在客户端&#xff0c;通常是在浏览器的Cookie或LocalStorage中。 JWT将 Token 和 Payload 加…

从学习到工作,2024年不可或缺的翻译助手精选

翻译工具利用先进的机器学习和自然语言处理技术&#xff0c;能够迅速将一种语言的文档转换为另一种语言&#xff0c;极大地促进了信息的无障碍流通。接下来&#xff0c;我们将介绍几款功能强大、操作简便的类似deepl翻译的工具&#xff0c;帮助你轻松应对各种翻译需求。 第一款…

容器网络(桥接、host、none)及跨主机网络(etcd、flannel、docker)

1.本地网络 1.bridge 所有容器连接到桥就可以使用外网&#xff0c;使用nat让容器可以访问外网&#xff0c;使用ip a s指令查看桥&#xff0c;所有容器连接到此桥&#xff0c;ip地址都是 172.17.0.0/16网段&#xff0c;桥是启动docker服务后出现&#xff0c;在centos使用bridge…

深度强化学习算法(五)(附带MATLAB程序)

深度强化学习&#xff08;Deep Reinforcement Learning, DRL&#xff09;结合了深度学习和强化学习的优点&#xff0c;能够处理具有高维状态和动作空间的复杂任务。它的核心思想是利用深度神经网络来逼近强化学习中的策略函数和价值函数&#xff0c;从而提高学习能力和决策效率…

数据结构(6.4_2)——最短路径问题_BFS算法

最短路径问题 BFS求无权图的单源最短路径 原代码 改造visit函数后

list的使用及其相关知识点

目录 ◉list的底层逻辑 ◉关于list的新增功能 ▲splice功能 ▲remove函数 ▲unique函数 ▲merge函数 ▲sort函数 ▣迭代器类型 ▲reverse函数 作为数据容器之一的list和其他容器的使用上有很多相似的地方&#xff0c;比如都有大致相同的构造函数&#xff0c;大致相同的头插尾插…