容器网络访问

news2024/11/13 21:18:04

网络分类

在这里插入图片描述
docker网络解决方案基于openstack平台,后演化为两派:一个是docker原生的CNM(Container Network Model),另一个是兼容性更好的CNI(Container Network Interface)

单主机网络:CNM

在这里插入图片描述

CNM模型由Sandbox、Endpoint、Network三部分组成。在linux系统中docker的典型表现是Container、Network namespace,Sandbox三者绑定。

1、sandbox:包含了相关网络配置,如:网卡interface,路由表等,一个sandbox可以包含多个 endpoint,endpoint可以来自多个网络。

2、endpoint: 每个Endpoint都是由某个Network创建,创建后就归属于该Network。同时Endpoint还可以加入一个 Sandbox,加入后,相当于该 Sandbox也加入了此Network。endpoint通过vethpair互联sandbox与network

3、Network:Network的一种典型实现是linux bridge。一个Network可以创建多个Endpoint,将多个Endpoint加入到Sandbox,即实现了多个 Sandbox 的互通。

总结:如果让两个Container之间可以直接通信,那么最简单的办法就是由一个Network创建两个 Endpoint,分别加入这两个 Container 对应的Sandbox。而不同 Network之间默认的隔离性是docker 通过设置iptables完成的,通过改变iptables的设置,可以使得不同network互通。

CNM标准网络模式

1、host模式:–net=host
2、container模式:–net=container:Name_or_ID
3、none模式:–net=none
4、bridge模式:–net=bridge,默认值

桥接模式:docker为每个容器分配ip地址,并创建vethpair连接到主机的桥接网卡上。连接到同一个桥接设备的容器,均可实现互联互通。如果容器要对外界提供服务,则用户需要将容器内的服务端口与宿主机的某一端口绑定。这样所有访问宿主机目标端口的请求都将通过Docker代理转发到容器的服务端,最终到达应用。

主机模式:容器直接使用宿主机的网络设备,要求容器具有更高的权限,该模式会占用宿主机的端口资源。因此只有特殊需求的容器才会使用这种模式。(如OpenShift集群中的Router组件,Router主机需要监听计算节点上的端口,以接受外部的请求,因此Router组件的Pod的容器网络为主机模式)

多主机网络:CNI

CNI提供了一种linux的应用容器的插件化网络解决方案,其接口设计非常简洁,不需要守护进程,只有两个接口ADD/DELETE,通过一个简单的shell脚本就可以完成。相对于CNM的复杂设计,CNI更加适合快速开发和迭代。而且不光兼容docker,而是提供一种普适的容器网络解决方案。

模型涉及两个概念:
1、容器:拥有独立Linux网络命名空间的独立单元。
2、网络(Networking):指拥有各自独且立唯一的ip地址、可以相互联系的一组实体。这些实体可以是容器、物理机,或是其他网络设备(路由器)等。

网络的设计主要解决以下使用场景:
1、容器到容器的直接通信;
2、Pod到Pod的通信;
3、Pod到Service的通信;
4、集群外与集群内的通信;

容器到容器的通信

同一个Pod内的容器共享同一个网络命名空间,共享同一个linux协议栈,直接用本地ipc进行通信。所以对于网络的各类操作,如同在同一台主机上一样,多个容器甚至可以用localhost地址访问彼此的端口。优点是简单、安全和高效,减少容器移植的难度。

在这里插入图片描述

pod到pod的通信

全局条件:每一个pod都有一个真实且唯一的IP地址。

同node的pod之间通信

在这里插入图片描述

pod1、pod2都是通过veth连接在同一个docker0虚拟网卡上,ip地址ip1、ip2都是桥接获取,与ip3同网段。在linux协议栈上,默认路由都是Docker0的地址,也就是说所有非本地的网络数据,都会被默认发送到docker0上,再由docker0按策略中转,以此实现互联互通。

不同node的pod之间通信

在这里插入图片描述
k8s网络对pod的地址是平面、直达的,集群会记录所有正在运行pod的私有ip地址,并保存在etcd中(作为Service的Endpoint)

前置条件:
1、docker0虚拟网卡的网段与宿主机物理网卡的网段可能是不同的
2、通过宿主机的ip地址进行跨主机通信
3、要求pod到pod使用私有ip地址进行通信

实现原理:
1、保证每一个node上的docker0的ip地址唯一(网络插件flannel可实现地址资源池的分配)
2、pod1将数据从源node1的物理网卡发送,到达node2的物理网卡再转到pod2的网卡,即:ip1->ip3->ip4->ip2

pod到service的通信

service是对一组功能相同pod的抽象,k8s在创建service时会为其分配一个虚拟的cluster ip,客户端通过访问这个虚拟的ip地址来访问服务,而服务则负责将请求转发到后端的Pod上。
在这里插入图片描述

真正实现service作用的是worker节点的kube-proxy服务进程。对每一个tcp类型的service,kube-proxy都会在本地Node上建立一个SocketServer来负责接收请求,然后均匀发送到后端某个Pod的端口上,这个过程默认采用RoundRobin负载均衡算法。kube-proxy和后端Pod的通信方式与标准的Pod到Pod的通信方式完全相同。另外,Kubernetes也提供通过修改Service的service.spec.sessionAffinity参数的值来实现会话保持特性的定向转发,如果设置的值为“ClientIP”,则将来自同一个ClientIP的请求都转发到同一个后端Pod上。

Service的ClusterIP与NodePort是kube-proxy通过iptables和NAT转换实现的,kube-proxy在运行过程中动态创建与Service相关的Iptables规则,这些规则实现了ClusterIP及NodePort的请求流量重定向到对应服务的代理端口的功能。

由于iptables机制针对的是本地的kube-proxy端口,所以如果某个pod需要访问service,则pod所在的那个node上必须运行kube-proxy。在k8s集群内部,对cluster ip、port的访问可以在任意node上进行,这是因为每个node上的kube-proxy都针对该Service都设置了相同的转发规则。

内部访问Service的请求,不论是用Cluster IP+Target Port的方式,还是用节点机IP+Node Port的方式,都会被节点机的Iptables规则重定向到kube-proxy监听Service服务代理端口。

集群外与集群内的通信

service是对一组功能相同pod的抽象,以“pod组”为单位对外提供服务。cluster ip只能在内部访问,其他pod都可以无障碍地访问,但外部访问不行。k8s有多种对外服务的service的类型定义,比如NodePort和LoadBalancer。

NodePort

定义service时指定spec.type=NodePort,并指定spec.ports.nodePort的值,系统就会在Kubernetes集群中的每个Node上占用宿主机上的一个真实端口号。这样,能够访问Node的客户端就能通过这个端口号访问到内部的Service了。

LoadBalancer

经过实践,容易造成流量爆表、性能夯死。定义service时指定spec.type=LoadBalancer,同时需要指定负载均衡器的ip地址、Service的NodePort、ClusterIP。

Calico

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

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

相关文章

【博学谷学习记录】超强总结,用心分享|架构师-容器编排 Kubernetes简介

文章目录一、k8s简介二、核心概念2.1 节点2.1.1 Master 节点2.1.2 Node2.2 Pod2.3 Replica Set2.4 Service2.5 Namespace一、k8s简介 k8s是市场上最好的容器编排工具之一。 Kubernetes 是一个开源项目,用于统一管理容器化的应用集群。 Kubernetes 负责在大规模服务…

疫苗预约系统

开发工具(eclipse/idea/vscode等): 数据库(sqlite/mysql/sqlserver等): 功能模块(请用文字描述,至少200字):

【AIOT】串口操作基于PyQT窗口工具编写

1. Serial Type 1.1. 物理接口形式 UART接口:通用异步收发器(Universal Asynchronous Receiver/Transmitter),UART是串口收发的逻辑电路,这部分可以独立成芯片,也可以作为模块嵌入到其他芯片里,单片机、S…

【机器学习---03】感知机模型

文章目录1. 感知机模型是什么?有什么作用?2. 三要素2.1 模型2.2 策略2.3 算法1. 感知机模型是什么?有什么作用? 定义:感知机模型是建立将训练数据完全划分为2类的超平面。 注意: 由于感知机只关心将样本分开…

清越科技将开启申购:预计募资约8亿元,高裕弟为实际控制人

12月19日,苏州清越光电科技股份有限公司(下称“清越科技”,SH:688496)将开启申购。据贝多财经了解,清越科技本次上市的发行价格为9.16元/股,发行数量为9000万股,募资总额约为8.24亿元&#xff0…

深入哈希结构

目录 一、哈希结构概念 二、哈希冲突 三、哈希函数 3.1 哈希函数设计原则 3.2 常见哈希函数设计方法 1. 直接定址法--(常用) 2. 除留余数法--(常用) 3. 平方取中法 4. 折叠法 5. 随机数法 6. 数学分析法 3.3 处理key的局限性问题 四、通过闭散列解决哈希冲突 4.1…

GeoServer安装MBTiles插件

GeoServer安装MBTiles插件 之前介绍过GeoServer使用mvt插件来生成矢量切片,这种mvt切片本质上还是前台加载GeoJson数据,数据是由前端进行渲染加载的,数据存储在浏览器内存中,前台会承担渲染的压力,数据量过大的话&…

数字电子技术(六)时序逻辑电路

时序逻辑电路时序逻辑概述时序逻辑电路特点基本方程组时序逻辑电路的分类自启动同步时序逻辑电路的分析方法(*考点)分析步骤例题分析常用的时序逻辑电路模块寄存器与移位寄存器计数器二进制计数器十进制计数器任意进制计数器(*考点&#xff0…

Python -- 高阶函数

目录 1.递归函数 2.匿名函数 3.高阶函数 3.1 定义一个变量指向函数 3.2 函数作为另一个函数的参数 3.3 函数作为另一个函数的返回值 1.递归函数 什么是递归函数? 如果一个函数在内部不调用其它的函数,而是自己本身的话,这个函数就是递归…

【SVM时序预测】基于matlab粒子群算法优化支持向量机PSO-SVM期贷时序数据预测【含Matlab源码 2289期】

⛄一、PSO-SVM介绍 1 SVM SVM是Vapnik提出的一种分类技术,这一技术具有坚实的统计理论基础。SVM可以将原始的数据映射到高维且线性可分的空间,扩展了线性不可分的样本数据,它是使用核函数将线性不可分转换为线性可分。 如果问题为线性不可分…

计算机毕业设计springboot+vue+elementUI进销存管理信息系统

项目介绍 本次系统设计是一个纺织企业进销存管理信息系统,主要目的是为了提升绿 岩纺织科技有限公司的进销存管理能力,实现绿岩纺织科技有限公司的采购/加 工管理、仓库管理、销售管理等功能。 1.基本信息模块 ;1;商品管理:主要包含商品信息的展示以及添加商品功能。…

Java+MySQL基于SSM的在线论坛交流系统

信息和交流是一个一直伴随着人类一生的话题,从人类诞生开始就已经拥有了这一概念,无论是远古时候的打猎还是现代化的多样化合作都离不开信息和交流。随着时代的积累,人们要面对的信息量也越来越大,任何一个人体单位的人类都不可能涉及到全部的知识,这就需要大家不断的进行交流才…

springboot之多数据源---1

一、多数据源的典型使用场景 在实际开发中,经常可能遇到在一个应用中可能需要访问多个数据库的情况。以下是两种典型场景: 1 业务复杂(数据量大) 数据分布在不同的数据库中,数据库拆了, 应用没拆。 一个公司…

Git 分布式版本控制工具 05SSH免登陆:如何使用SSH如何免密登录服务器~

6 ssh免登陆 SSH是目前比较可靠的专为远程登录会话和其他网络服务提供安全的协议。不同主机之间在进行通信时,一般都是需要输入密码进行验证, ssh免密码之后,只要通过指定主机地址和端口号就可以实现不同的计算机之间访问时,不需…

基于web的网上图书商城的设计与实现/图书购物系统

摘 要 本毕业设计的内容是设计并且实现一个基于JSP技术的网上图书商城。它是在Windows下,以MYSQL为数据库开发平台,Tomcat网络信息服务作为应用服务器。网上图书商城的功能已基本实现,主要包括个人中心、图书分类管理、用户管理、图书信息管…

Android12指纹框架完全解析(一)

前言:自从Android6.0开始Google官方出了标准的Android指纹框架,结束了各家指纹厂商各自为政的局面,推动了电容指纹在Android的发展;自从2017年新思的屏下指纹方案横空出世,后边汇顶等指纹厂商跟进,Android …

【Linux】shell命令以及运行原理

shell命令1.用户不能直接使用操作系统2.Linux是一个操作系统3.在软件层面操作Linux系统4.shell运行原理1.用户不能直接使用操作系统 首先在讲shell命令之前,我们要知道 “用户是不能直接在操作系统上操作的,只能在操作系统之上,也就是软件层面…

基于两阶段鲁棒优化算法的微网多电源容量配置(Matlab)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

风控模型应聘,80%会被问到的面试题

模型过拟合,对经常建模的小伙伴来说是非常熟悉的,稍不留神,模型就出现过拟合了,这让我们在解决模型过拟合问题上花费了不少功夫。同样这个也是在面试中最高频会被Q到的问题。因此,在平日里建立模型的过程中&#xff0c…

视觉BEV语义分割模型 Simple-BEV: What Really Matters for Multi-Sensor BEV Perception?

A Simple Baseline for BEV Perception Without LiDAR本文介绍一篇简单的BEV语义分割模型,这篇文章出彩的是消融实验部分,分析了哪些因素对BEV语义分割影响比较大,此外还分析了如何更好使用Radar数据提高感知性能。 项目链接为:h…