Docker和Kubernetes网络模型
Docker网络模型
Bridge模式(默认)
Docker程序启动后会创建一个bridge0网桥,并分配一个IP,可以想象成一个虚拟的交换机,创建的容器实例都会通过虚拟网卡veth pair设备连接到这个网桥上,并以网桥IP作为网关,这样就可以实现容器间的通信。 如果容器内程序想访问宿主机服务,则可以直接访问bridge0的IP,注意:此流量不走localhost,宿主机上服务需要监听0.0.0.0,并且此方法在不同系统间不通用。 如果容器内程序想访问外网服务,则需要通过SNAT机制,将来自容器内部的源IP替换成宿主机IP。 如果外部程序想访问容器内服务,则需要在启动容器时做端口绑定,也是通过iptables添加一条DNAT规则,实现目的IP转换。如:
1 |
|

Host模式
该模式下容器网络并未与宿主机网络进行隔离,而是占用了宿主机的端口,容易造成端口冲突。
Containner模式
该模式指后创建的容器与已有容器共用同一个Network Namespace,即共用一个IP和端口范围。则两个容器可以通过localhost网卡通信。
Kubernetes网络模型
Pod内容器间的通信
每个Pod创建的时候都先会创建一个默认的Pause容器,后面每个新建的容器则都使用Containner模式,这样所有容器之间都可以通过localhost网卡通信,实现了Pod内容器的网络共享。
同一Node上Pod间的通信
采用了类似Docker Bridge模式的网桥技术,将不同Pod连接在了同一网段中。
不同Node上Pod间的通信
Kubernetes中规定Pod IP在整个集群中唯一,且互相可以不通过IP转换直接通信。此点相比于Docker简化了跨Node通信的配置工作。 此时需要借助实现了CNI标准的插件来实现了,比如:flannel、weave等。 flannel为Kubernetes集群提供了一个三层路由转发网络,通过存储在etcd的pod ip与node ip对应关系,转发数据包到相应的节点上。
Service与Pod间的通信
由于Pod IP会经常变化,所以K8s在提供同样服务的Pod之上又抽象出了Service的概念。Service具有固定的CluserIp:port,可以通过内建的负载均衡器路由到背后的pod容器。 在Pod内程序往Service上发送数据包时,数据包会经过iptables进行过滤,iptables接受数据包后会使用kube-proxy在Node上安装的规则来响应Service或Pod的事件, 将数据包的目的地址从Service的IP重写为Service后端特定的Pod IP,之后就与不同Node上Pod间的通信过程类似。
外部网络访问Service
NodePort模式+LoadBalancer(四层流量入口)
通过配置Service类型为NodePort,则外网则可以通过集群中任意节点的NodeIp:NodePort访问服务,接收到报文的节点会重定向到对应的Service。 NodePort是靠kube-proxy服务通过iptables的nat转换功能实现的,kube-proxy会在运行过程中动态创建与Service相关的iptables规则,这些规则实现了NodePort的请求流量重定向到kube-proxy进程上对应的Service的代理端口上。 kube-proxy接受到Service的请求访问后,会从service对应的后端Pod中选择一个进行访问。 在这之前如果可以添加一个负载均衡器,比如目前阿里云上的SLB,则请求会通过访问负载均衡器的IP在被负载到K8s集群中的Node上。
Ingress模式(七层流量入口)
不像负载均衡器每个服务需要一个公开ip,ingress所有服务只需要一个公网ip,当客户端向Ingress发送http请求时候,ingress会根据请求的主机名和路径决定请求转发到那个服务。 它底层其实是通过Nginx来实现的,它会去对应服务的Endpoints列表里查找pod IP自己选择一个直接访问。 基于http请求的负责模式可以通过host和url进行请求细分服务流量,还可以在请求的X-Forwarded-For标头中提供原始客户端的IP地址。
Docker和Kubernetes网络模型的更多相关文章
- 第25 章 : Kubernetes 网络模型进阶
Kubernetes 网络模型进阶 本文将主要分享以下五个方面的内容: Kubernetes 网络模型来龙去脉 Pod 究竟如何上网? Service 究竟怎么工作? 啥?负载均衡还分内部外部? 思考 ...
- 如何在Windows 10上运行Docker和Kubernetes?
如何在Windows 10上运行Docker和Kubernetes? 在Windows上学习Docker和Kubernetes,开始的时候会让你觉得无从下手.最起码安装好这些软件都不是一件容易的事情. ...
- QCon技术干货:个推基于Docker和Kubernetes的微服务实践
2016年伊始,Docker无比兴盛,如今Kubernetes万人瞩目.在这个无比需要创新与速度的时代,由容器.微服务.DevOps构成的云原生席卷整个IT界.在近期举办的QCon全球软件开发大会上, ...
- Kubernetes网络模型概念
Kubernetes网络模型 Kubernetes网络模型设计的一个基础原则是:每个Pod都拥有一个独立的IP地址,而且假定所有Pod都在一个可以直接连通的.扁平的网络空间中.所以不管它们是否运行在同 ...
- 在Docker和Kubernetes上运行MongoDB微服务
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟.容器是完全使用沙箱机制,相互之间不会有任何接 ...
- 大型网站技术学习-3. 容器Docker与kubernetes
大型网站技术基石篇-容器Docker与kubernetes Docker和Kubernetes的关系就如Xen与OpenStack. Docker是一种容器技术,和Hypervisor(KVM/X ...
- Docker vs. Kubernetes vs. Apache Mesos: Why What You Think You Know is Probably Wrong
Docker vs. Kubernetes vs. Apache Mesos: Why What You Think You Know is Probably Wrong - Mesosphere h ...
- Linux下安装docker与kubernetes(k8s)
环境 安装是使用Vmware虚拟机下进行,操作系统是CentOS7 64位.规划是使用三台虚拟机搭建k8s的集群,网络使用NAT模式.三台的ip分别为: k8s-master:192.168.91.1 ...
- 极简Docker和Kubernetes发展史
2013年 Docker项目开源 2013年,以AWS及OpenStack,以Cloud Foundry为代表的开源Pass项目,成了云计算领域的一股清流,pass提供了一种"应用托管&qu ...
- Docker学习-Kubernetes - 集群部署
Docker学习 Docker学习-VMware Workstation 本地多台虚拟机互通,主机网络互通搭建 Docker学习-Docker搭建Consul集群 Docker学习-简单的私有Dock ...
随机推荐
- Qt自带的阴影类、跨线程问题汇总、hover相关、全屏轮子,一些思考。
一点思考:故事的结局重不重要? 我语文不好,但是我数学不好. 我数学不好,但是我英语不好. 我英语不好,但是我物理不好. 我物理不好,但是我化学不好. 我化学不好,但是我历史不好. 我历史不好,但是我 ...
- 巧如范金,精比琢玉,一分钟高效打造精美详实的Go语言技术简历(Golang1.18)
研发少闲月,九月人倍忙.又到了一年一度的"金九银十"秋招季,又到了写简历的时节,如果你还在用传统的Word文档寻找模板,然后默默耕耘,显然就有些落后于时代了,本次我们尝试使用云平台 ...
- 就聊聊不少小IT公司的技术总监
本文想告诉大家如下两个观点. 1 很多IT小公司的技术总监,论能力其实也就是相当于大公司的高级程序员. 2 程序员在职业发展过程中,绝对应该优先考虑进大厂或好公司.如果仅仅停留在小公司,由于小公司可能 ...
- 【c#】分享一个简易的基于时间轮调度的延迟任务实现
在很多.net开发体系中开发者在面对调度作业需求的时候一般会选择三方开源成熟的作业调度框架来满足业务需求,比如Hangfire.Quartz.NET这样的框架.但是有些时候可能我们只是需要一个简易的延 ...
- react 高效高质量搭建后台系统 系列 —— antd和样式
其他章节请看: react 高效高质量搭建后台系统 系列 antd 后续要做登录模块(主页),不仅要解决请求数据的问题,还需要完成 antd 配置以及样式的准备. antd 多种主题风格 详情请看 这 ...
- CFS三层内网靶场
前言 最近学习了内网的一些知识,想着打一下靶场来试试,选择了这个CFS的三层内网靶场,做一下记录 靶场下载地址 链接:https://pan.baidu.com/s/1zGw5VNt222nCmf ...
- [cocos2d-x]捕鱼达人炮台射击角度的旋转实现
话不多说,先上图,下面是实现代码(在后面会具体讲解实现过程): //第一步:将炮台的坐标转换为世界坐标下的坐标点 CCPoint location = this->getParent()-> ...
- ClickHouse(11)ClickHouse合并树MergeTree家族表引擎之SummingMergeTree详细解析
目录 建表语法 数据处理 汇总的通用规则 AggregateFunction 列中的汇总 嵌套结构数据的处理 资料分享 参考文章 SummingMergeTree引擎继承自MergeTree.区别在于 ...
- 痞子衡嵌入式:盘点国内Cortex-M内核MCU厂商高主频产品(2023)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是国内Cortex-M内核MCU厂商高主频产品. 在 2021 年初痞子衡写了篇 <盘点国内Cortex-M内核MCU厂商高性能产品 ...
- 特定领域知识图谱(Domain-specific KnowledgeGraph:DKG)融合方案:技术知识前置【一】-文本匹配算法、知识融合学术界方案、知识融合业界落地方案、算法测评KG生产质量保障
特定领域知识图谱(Domain-specific KnowledgeGraph:DKG)融合方案:技术知识前置[一]-文本匹配算法.知识融合学术界方案.知识融合业界落地方案.算法测评KG生产质量保障 ...