kubernetes Spring Cloud 微服务架构— (5)Kubernetes spring cloud 微服务-Docker基本网络管理

本文涉及的产品
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 第 5 章 Docker 基本网络管理 本章节讲解 Docker 的四种网络模式: Bridge、Host、 None、Container;并且会详细解释这几种网络模式的工作模式方式。

5.0 网络模式基本介绍

Docker 单机网络模式分为以下几种:

1)   bridge NetWork,启动容器时使用--net=bridge参数指定,默认设置。

2)   Host NetWork ,启动容器时使用--net=host参数指定。

3)   None NetWork, 启动容器时使用--net=none参数指定。

4)   Container NetWork,启动容器时使用--net=container:NAME_or_ID参数指定。

5.1 Docker 网络模式详解

5.1.1 host 模式

 

如果启动容器的时候使用host 模式,那么这个容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡,配置自己的IP 等,而是使用宿主机的IP 和端口。但是容器的其他方面,如文件系统、进程列表等还是和宿主机隔离的。用主机网络的时候,一个宿主机,相同的容器,只能启动一个?

 

5.1.1.1 案例:容器网络host模式

#注意如果是host模式,命令行参数不能带-p/-P 主机端口:容器端口

# WARNING: Published ports are discarded when using host network mode 
[root@master ~]# docker run --name host_demo -it --network host gliderlabs/alpine  /bin/sh       
/ # ip a 
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000     link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00     inet 127.0.0.1/8 scope host lo        valid_lft forever preferred_lft forever     inet6 ::1/128 scope host         valid_lft forever preferred_lft forever 
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000     link/ether 00:0c:29:d0:f0:73 brd ff:ff:ff:ff:ff:ff 
    inet 192.168.91.8/24 brd 192.168.91.255 scope global ens32        valid_lft forever preferred_lft forever     inet6 fe80::c634:c8f0:327e:10a8/64 scope link  
       valid_lft forever preferred_lft forever 
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN      link/ether 02:42:da:53:55:ff 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 
/ # ping www.baidu.com 
PING www.baidu.com (14.215.177.38): 56 data bytes 
64 bytes from 14.215.177.38: seq=0 ttl=128 time=10.177 ms 
[root@demo ~]# docker run --name nginx_host1111 -d --network host nginx 


/

 

5.1.2 bridge 模式

bridge 模式是Docker 默认的网络设置,此模式会为每一个容器分配Network Namespace、设置IP等,并将一个主机上的Docker 容器连接到一个虚拟网桥上。

 

Docker进程启动时,会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的 Docker容器会连接到这个虚拟网桥上。虚拟网桥(根据MAC地址进行数据交换)的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中。

docker0子网中分配一个IP给容器使用,并设置docker0IP地址为容器的默认网关。在主机上创建一对虚拟网卡veth pair设备,Dockerveth pair设备的一端放在新创建的容器中,并命名为eth0(容器的网卡),另一端放在主机中,以vethxxx这样类似的名字命名,并将这个网络设备加入到docker0网桥中。可以通过brctl show命令查看。如果不写--net参数,就是bridge模式。使用docker run -p时,docker实际是在iptables做了DNAT规则,实现端口转发功能。可以使用iptables -t nat -vnL查看。

 

5.1.2.1 案例:容器网络模式桥接

#此模式可以添加端口映射参数:-p 2000:22

[root@master ~]# docker run --name   host_demo_bridge -it --network bridge gliderlabs/alpine  /bin/sh 
/ # ip a 
1: lo: <LOOPBACK,UP,LOWER_UP>   mtu 65536 qdisc noqueue state UNKNOWN qlen 1000     link/loopback 00:00:00:00:00:00 brd   00:00:00:00:00:00     inet 127.0.0.1/8   scope host lo        valid_lft forever   preferred_lft forever 
6: eth0@if7:   <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state   UP      link/ether 02:42:ac:11:00:02   brd ff:ff:ff:ff:ff:ff     inet   172.17.0.2/16 brd 172.17.255.255 scope global eth0        valid_lft forever preferred_lft   forever

5.1.3 container 模式

Container 模式指定新创建的容器和已经存在的一个容器共享一个Network Namespace,而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。两个容器的进程可以通过localhost 网卡设备通信。

 

 

5.1.3.1 案例:容器网络使用container

#使用其他容器的桥接网卡出外网, 此模式不支持-p主机端口:容器端口

[root@master ~]# docker run --name   host_demo_container -it \ 
--network container:host_demo_bridge   gliderlabs/alpine  /bin/sh 
/ # ip a 
1: lo: <LOOPBACK,UP,LOWER_UP>   mtu 65536 qdisc noqueue state UNKNOWN qlen 1000     link/loopback 00:00:00:00:00:00 brd   00:00:00:00:00:00     inet 127.0.0.1/8   scope host lo        valid_lft forever   preferred_lft forever 
8: eth0@if9: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN>   mtu 1500 qdisc noqueue state UP        link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff     inet 172.17.0.2/16 brd 172.17.255.255   scope global eth0        valid_lft   forever preferred_lft forever

5.1.4 none 模式

使用none 模式,Docker 容器拥有自己的Network Namespace,但是,并不为Docker 容器进行任何网络配置。也就是说,这个Docker 容器没有网卡、IP、路由等信息。需要我们自己为Docker 容器添加网卡、配置IP 等。

 

 

 

5.1.4.1 案例容器网络模式为none模式

[root@master ~]# docker run --name   host_demo_none -it --network none gliderlabs/alpine  /bin/sh 
/ # ip a 
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536   qdisc noqueue state UNKNOWN qlen 1000       link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00     inet 127.0.0.1/8 scope host lo        valid_lft forever preferred_lft   forever

5.2 容器网络操作
5.2.1 容器网络配置查看
语法:docker container inspect 容器ID
#系统默认分配的IP 地址段为172.17.0.0/16

[root@docker chapter]# docker container inspect 658273be34ee 
........省略......... 
"NetworkSettings": { 
"Bridge": "", 
"SandboxID": "d2e6b8e57c55a552abb825b11ed3faff4541fe28fa20244caa29ee2b2ed8ce74", 
"HairpinMode": false, 
"LinkLocalIPv6Address": "", 
"LinkLocalIPv6PrefixLen": 0, 
"Ports": { 
"80/tcp": [ 
{ 
"HostIp": "0.0.0.0", 
"HostPort": "80" 
} 
] 
}, 
"SandboxKey": "/var/run/docker/netns/d2e6b8e57c55",
"SecondaryIPAddresses": null, 
"SecondaryIPv6Addresses": null, 
"EndpointID": "73023ec84983ee451e065700c61c8b43bc67fafb3997946002a7a48ca24923cf", 
"Gateway": "172.17.0.1", 
"GlobalIPv6Address": "", 
"GlobalIPv6PrefixLen": 0, 
"IPAddress": "172.17.0.2", 
"IPPrefixLen": 16,

/

 

5.2.2 容器端口映射

容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过 -P -p 参数来指定端口映射。当使用 -P(大写) 标记时,Docker 会随机映射一个端口到内部容器开放的网络端口。当使用 -p(小写)标记时,Docker 指定一个宿主机端口映射到到内如容器开放的网络端口。使用 docker ps 可以看到,本地主机的端口被映射到了容器端口。

 

在一个指定端口上只可以绑定一个容器。

指定映射(docker 会自动添加一条iptables规则来实现端口映射)

-p hostPort:containerPort

#映射主机指定端口8080到容器的端口80

[root@docker master ]# docker run --name nginx-demo -p 8080:80 -d nginx 
#查看 iptables 
[root@master ~]# iptables -L -n -t nat | grep 8080 
DNAT       tcp --  0.0.0.0/0            0.0.0.0/0            tcp dpt:8080 to:172.17.0.4:80 
-p ip:hostPort:containerPort 
#映射主机的指定IP 与指定 8180端口到容器80端口 
[root@master ~]# docker run --name nginx-demo-8180 -p 192.168.91.8:8180:80 -d nginx 
#查看 iptables 
[root@master ~]# iptables -L -n -t nat | grep 8180 
DNAT       tcp --  0.0.0.0/0            192.168.91.8         tcp dpt:8180 to:172.17.0.5:80 
-p ip::containerPort(随机端口) 
[root@master ~]# docker run --name nginx-1 -p 192.168.91.8::80 -d nginx 
[root@master ~]# docker ps 
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                        NAMES f5fb8604f330        nginx               "nginx -g 'daemon of…"   7 seconds ago        Up 6 seconds        192.168.91.8:32768->80/tcp   nginx-1 
-p hostPort:containerPort/udp 
 [root@master ~]# docker run --name dns-udp -p 53:53/udp -d andyshinn/dnsmasq #命令成功
-p 81:80 –p 443:443 可以指定多个-p 
[root@master ~]# docker run --name nginx-demo-81 -p 81:80 -p 32:22 -d nginx 
-P 宿主机随机端口映射 
[root@master ~]# docker run --name nginx-port -P -d nginx 
[root@master ~]# docker ps | grep nginx-port 
e08c51faced1        nginx               "nginx -g 'daemon of…"   7 seconds ago       Up 5 seconds        0.0.0.0:32769->80/tcp 
#查看容器的端口映射 
[root@master ~]# docker port 4a52c7b5035b 80/tcp -> 192.168.91.8:8110

/

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
7天前
|
机器学习/深度学习 计算机视觉 iOS开发
RT-DETR改进策略【模型轻量化】| 替换骨干网络 CVPR-2024 RepViT 轻量级的Vision Transformers架构
RT-DETR改进策略【模型轻量化】| 替换骨干网络 CVPR-2024 RepViT 轻量级的Vision Transformers架构
31 0
RT-DETR改进策略【模型轻量化】| 替换骨干网络 CVPR-2024 RepViT 轻量级的Vision Transformers架构
|
11天前
|
机器学习/深度学习 计算机视觉 iOS开发
YOLOv11改进策略【模型轻量化】| 替换骨干网络 CVPR-2024 RepViT 轻量级的Vision Transformers架构
YOLOv11改进策略【模型轻量化】| 替换骨干网络 CVPR-2024 RepViT 轻量级的Vision Transformers架构
53 12
|
19天前
|
XML Java 开发者
Spring底层架构核心概念解析
理解 Spring 框架的核心概念对于开发和维护 Spring 应用程序至关重要。IOC 和 AOP 是其两个关键特性,通过依赖注入和面向切面编程实现了高效的模块化和松耦合设计。Spring 容器管理着 Beans 的生命周期和配置,而核心模块为各种应用场景提供了丰富的功能支持。通过全面掌握这些核心概念,开发者可以更加高效地利用 Spring 框架开发企业级应用。
67 18
|
1月前
|
搜索推荐 NoSQL Java
微服务架构设计与实践:用Spring Cloud实现抖音的推荐系统
本文基于Spring Cloud实现了一个简化的抖音推荐系统,涵盖用户行为管理、视频资源管理、个性化推荐和实时数据处理四大核心功能。通过Eureka进行服务注册与发现,使用Feign实现服务间调用,并借助Redis缓存用户画像,Kafka传递用户行为数据。文章详细介绍了项目搭建、服务创建及配置过程,包括用户服务、视频服务、推荐服务和数据处理服务的开发步骤。最后,通过业务测试验证了系统的功能,并引入Resilience4j实现服务降级,确保系统在部分服务故障时仍能正常运行。此示例旨在帮助读者理解微服务架构的设计思路与实践方法。
94 16
|
8天前
|
传感器 监控 安全
智慧工地云平台的技术架构解析:微服务+Spring Cloud如何支撑海量数据?
慧工地解决方案依托AI、物联网和BIM技术,实现对施工现场的全方位、立体化管理。通过规范施工、减少安全隐患、节省人力、降低运营成本,提升工地管理的安全性、效率和精益度。该方案适用于大型建筑、基础设施、房地产开发等场景,具备微服务架构、大数据与AI分析、物联网设备联网、多端协同等创新点,推动建筑行业向数字化、智能化转型。未来将融合5G、区块链等技术,助力智慧城市建设。
|
1月前
|
监控 JavaScript 数据可视化
建筑施工一体化信息管理平台源码,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
智慧工地云平台是专为建筑施工领域打造的一体化信息管理平台,利用大数据、云计算、物联网等技术,实现施工区域各系统数据汇总与可视化管理。平台涵盖人员、设备、物料、环境等关键因素的实时监控与数据分析,提供远程指挥、决策支持等功能,提升工作效率,促进产业信息化发展。系统由PC端、APP移动端及项目、监管、数据屏三大平台组成,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
|
27天前
|
XML Java 应用服务中间件
Spring Boot 两种部署到服务器的方式
本文介绍了Spring Boot项目的两种部署方式:jar包和war包。Jar包方式使用内置Tomcat,只需配置JDK 1.8及以上环境,通过`nohup java -jar`命令后台运行,并开放服务器端口即可访问。War包则需将项目打包后放入外部Tomcat的webapps目录,修改启动类继承`SpringBootServletInitializer`并调整pom.xml中的打包类型为war,最后启动Tomcat访问应用。两者各有优劣,jar包更简单便捷,而war包适合传统部署场景。需要注意的是,war包部署时,内置Tomcat的端口配置不会生效。
202 17
Spring Boot 两种部署到服务器的方式
|
27天前
|
Dart 前端开发 JavaScript
springboot自动配置原理
Spring Boot 自动配置原理:通过 `@EnableAutoConfiguration` 开启自动配置,扫描 `META-INF/spring.factories` 下的配置类,省去手动编写配置文件。使用 `@ConditionalXXX` 注解判断配置类是否生效,导入对应的 starter 后自动配置生效。通过 `@EnableConfigurationProperties` 加载配置属性,默认值与配置文件中的值结合使用。总结来说,Spring Boot 通过这些机制简化了开发配置流程,提升了开发效率。
59 17
springboot自动配置原理
|
1月前
|
XML JavaScript Java
SpringBoot集成Shiro权限+Jwt认证
本文主要描述如何快速基于SpringBoot 2.5.X版本集成Shiro+JWT框架,让大家快速实现无状态登陆和接口权限认证主体框架,具体业务细节未实现,大家按照实际项目补充。
80 11
|
1月前
|
缓存 安全 Java
Spring Boot 3 集成 Spring Security + JWT
本文详细介绍了如何使用Spring Boot 3和Spring Security集成JWT,实现前后端分离的安全认证概述了从入门到引入数据库,再到使用JWT的完整流程。列举了项目中用到的关键依赖,如MyBatis-Plus、Hutool等。简要提及了系统配置表、部门表、字典表等表结构。使用Hutool-jwt工具类进行JWT校验。配置忽略路径、禁用CSRF、添加JWT校验过滤器等。实现登录接口,返回token等信息。
346 12