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

本文涉及的产品
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: 第 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搭建和管理企业级网站应用
相关文章
|
26天前
|
JSON Java API
利用Spring Cloud Gateway Predicate优化微服务路由策略
Spring Cloud Gateway 的路由配置中,`predicates`​(断言)用于定义哪些请求应该匹配特定的路由规则。 断言是Gateway在进行路由时,根据具体的请求信息如请求路径、请求方法、请求参数等进行匹配的规则。当一个请求的信息符合断言设置的条件时,Gateway就会将该请求路由到对应的服务上。
138 69
利用Spring Cloud Gateway Predicate优化微服务路由策略
|
10天前
|
搜索推荐 NoSQL Java
微服务架构设计与实践:用Spring Cloud实现抖音的推荐系统
本文基于Spring Cloud实现了一个简化的抖音推荐系统,涵盖用户行为管理、视频资源管理、个性化推荐和实时数据处理四大核心功能。通过Eureka进行服务注册与发现,使用Feign实现服务间调用,并借助Redis缓存用户画像,Kafka传递用户行为数据。文章详细介绍了项目搭建、服务创建及配置过程,包括用户服务、视频服务、推荐服务和数据处理服务的开发步骤。最后,通过业务测试验证了系统的功能,并引入Resilience4j实现服务降级,确保系统在部分服务故障时仍能正常运行。此示例旨在帮助读者理解微服务架构的设计思路与实践方法。
58 16
|
13天前
|
监控 JavaScript 数据可视化
建筑施工一体化信息管理平台源码,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
智慧工地云平台是专为建筑施工领域打造的一体化信息管理平台,利用大数据、云计算、物联网等技术,实现施工区域各系统数据汇总与可视化管理。平台涵盖人员、设备、物料、环境等关键因素的实时监控与数据分析,提供远程指挥、决策支持等功能,提升工作效率,促进产业信息化发展。系统由PC端、APP移动端及项目、监管、数据屏三大平台组成,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
|
18天前
|
Java 关系型数据库 数据库
微服务SpringCloud分布式事务之Seata
SpringCloud+SpringCloudAlibaba的Seata实现分布式事务,步骤超详细,附带视频教程
42 1
|
1月前
|
弹性计算 API 持续交付
后端服务架构的微服务化转型
本文旨在探讨后端服务从单体架构向微服务架构转型的过程,分析微服务架构的优势和面临的挑战。文章首先介绍单体架构的局限性,然后详细阐述微服务架构的核心概念及其在现代软件开发中的应用。通过对比两种架构,指出微服务化转型的必要性和实施策略。最后,讨论了微服务架构实施过程中可能遇到的问题及解决方案。
|
2月前
|
Cloud Native Devops 云计算
云计算的未来:云原生架构与微服务的革命####
【10月更文挑战第21天】 随着企业数字化转型的加速,云原生技术正迅速成为IT行业的新宠。本文深入探讨了云原生架构的核心理念、关键技术如容器化和微服务的优势,以及如何通过这些技术实现高效、灵活且可扩展的现代应用开发。我们将揭示云原生如何重塑软件开发流程,提升业务敏捷性,并探索其对企业IT架构的深远影响。 ####
64 3
|
2月前
|
Cloud Native 安全 数据安全/隐私保护
云原生架构下的微服务治理与挑战####
随着云计算技术的飞速发展,云原生架构以其高效、灵活、可扩展的特性成为现代企业IT架构的首选。本文聚焦于云原生环境下的微服务治理问题,探讨其在促进业务敏捷性的同时所面临的挑战及应对策略。通过分析微服务拆分、服务间通信、故障隔离与恢复等关键环节,本文旨在为读者提供一个关于如何在云原生环境中有效实施微服务治理的全面视角,助力企业在数字化转型的道路上稳健前行。 ####
|
1月前
|
Java 开发者 微服务
从单体到微服务:如何借助 Spring Cloud 实现架构转型
**Spring Cloud** 是一套基于 Spring 框架的**微服务架构解决方案**,它提供了一系列的工具和组件,帮助开发者快速构建分布式系统,尤其是微服务架构。
212 69
从单体到微服务:如何借助 Spring Cloud 实现架构转型
|
1月前
|
设计模式 负载均衡 监控
探索微服务架构下的API网关设计
在微服务的大潮中,API网关如同一座桥梁,连接着服务的提供者与消费者。本文将深入探讨API网关的核心功能、设计原则及实现策略,旨在为读者揭示如何构建一个高效、可靠的API网关。通过分析API网关在微服务架构中的作用和挑战,我们将了解到,一个优秀的API网关不仅要处理服务路由、负载均衡、认证授权等基础问题,还需考虑如何提升系统的可扩展性、安全性和可维护性。文章最后将提供实用的代码示例,帮助读者更好地理解和应用API网关的设计概念。
81 8
|
2月前
|
Dubbo Java 应用服务中间件
服务架构的演进:从单体到微服务的探索之旅
随着企业业务的不断拓展和复杂度的提升,对软件系统架构的要求也日益严苛。传统的架构模式在应对现代业务场景时逐渐暴露出诸多局限性,于是服务架构开启了持续演变之路。从单体架构的简易便捷,到分布式架构的模块化解耦,再到微服务架构的精细化管理,企业对技术的选择变得至关重要,尤其是 Spring Cloud 和 Dubbo 等微服务技术的对比和应用,直接影响着项目的成败。 本篇文章会从服务架构的演进开始分析,探索从单体项目到微服务项目的演变过程。然后也会对目前常见的微服务技术进行对比,找到目前市面上所常用的技术给大家进行讲解。
78 1
服务架构的演进:从单体到微服务的探索之旅