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 ...
随机推荐
- Docker容器入门到精通
Docker 容器 快速入门 第一章:Docker容器 第二章:Dockerfile指令与Docker-compose容器编排-搭建docker私有仓库 h1 { color: rgba(0, 60, ...
- 解决MySQL Connector/ODBC驱动无法安装Error1918
1.问题描述 我在一台windows服务器上安装好mysql之后,再安装mysql的ODBC连接驱动时,报错如下: 2.解决方法 之所以出现安装失败是由于缺少Miscrosoft Visual C++ ...
- python之路24之 面向对象动静态方法、继承、派生
昨日内容回顾 人狗大战 1.直接使用字典表示人和狗 p1 = {} p2 = {} p3 = {} p4 = {} 2.封装产生人和狗的函数 def crreate_person():pass def ...
- GIS数据下载合集:遥感、土壤、气象、行政区数据...
本文介绍GIS领域相关的各类综合数据免费获取网站,包括遥感数据.气象数据.土地数据.土壤数据.农业数据.行政区数据.社会数据.经济数据等等. 数据较多,大家可以直接通过下方目录加以总览:点击数 ...
- day04-Spring管理Bean-IOC-02
Spring管理Bean-IOC-02 2.基于XML配置bean 2.7通过util空间名称创建list BookStore.java: package com.li.bean; import ja ...
- 蓝桥真题——最短路 & 门牌制作
题目1 最短路 标签:填空题 2019 省赛 如下图所示,G 是一个无向图,其中蓝色边的长度是 1.橘色边的长度是 2.绿色边的长度是 3. 则从 A 到 S 的最短距离是多少? 答案 由图可得,最短 ...
- Unity_UIWidgets - 组件Scaffold
UIWidgets - 组件Scaffold 各位兄弟姐妹,想通过Unity来开发UIWidgets的么,想通过UIWi的gets..来开发手机APP么??想么想么,哈哈哈哈哈哈哈哈. 好了,小黑不唠 ...
- 【分析笔记】Linux 内核自旋锁的理解和使用原则
自旋锁简单说明: 自旋锁主要解决在竞态并发下,保护执行时间很短的临界区.它只允许一个执行单位进入临界区,在该执行单位离开前,其它的执行单位将会在进入临界区前不停的循环等待(即所谓的自旋),直至该执行单 ...
- 【随笔记】Tina 系统的 ADB、声卡、网卡、串口多路共存
全志 Tina 系统的 USB Gadget 配置方法,随笔记录,实测为 R311 平台,其它平台应该通用. 一.配置内核 二.编译驱动并加载 # UAC insmod usb_f_uac1.ko ...
- 多个仓库源配置及repositories和mirrors的配置
在实际项目中会存在多个仓库,包括我们自建的Nexus私有仓库和阿里仓,这里就需要设置多仓的顺序,防止jar包不在其中一个仓库时会自动从另外一个仓库中拉取. Maven的Setting配置中有mirro ...