K8S网络模型
一、网络模型概述
k8s的网络中主要存在四种类型的通信:同一pod内的容器间通信、各pod彼此之间的通信、pod与service间的通信、以及集群外部的流量同service之间的通信。
k8s为pod和service资源对象分别使用了各自的专用网络,pod网络由k8s的网络插件配置实现,而service的网络则由k8s集群予以指定。k8s的网络模型需要借助于外部插件实现,它要求任何实现机制都必须满足以下需求:
1、所有pod间均可不经NAT机制直接通信;
2、所有节点均可不经NAT机制而直接与所有容器通信。
3、容器自己使用的IP也是其他容器或节点直接看到的地址,即,所有pod对象都位于同一平面网络中,而且可以使用pod自身的地址直接通信。
k8s使用的网络插件需要为每个pod配置至少一个特定的地址,即podIP。podIP地址实际存在于某个网卡(可以是虚拟设备)上,而service地址却是一个虚拟IP地址,没有任何网络接口配置此地址,它由kube-proxy借助iptables规则或ipvs规则重新定向到本地端口,再将其调度至后端pod对象。service的IP地址是集群提供服务的接口,也称为clusterIP。
pod网络及其IP由k8s的网络插件负责配置和管理,具体使用的网络地址可在管理配置网络插件时指定,如10.96.0.0/16网络。而cluster网络和IP则是由k8s集群负责配置和管理,如10.96.0.0/12网络。
总结起来,k8s集群至少应该包含三个网络,一个是各主机(master、node、etcd等)自身所属的网络,其地址配置于主机的网络接口,用于各主机之间的通信;第二个是k8s集群上专用于pod资源对象的网络,它是一个虚拟网络,用于为各pod对象设定IP地址等网络参数,其地址配置于pod中容器的网络接口之上。pod网络为各pod对象设定IP地址等网络参数,其地址配置于pod中容器的网络接口之上。pod网络需要借助kubenet插件或CNI插件实现,该插件独立部署于k8s集群之外,也可托关于k8s之上;第三个时专用于service资源对象的网络,它也是一个虚拟网络,用于为k8s集群之中的service配置IP地址,但此地址并不配置于任何主机或容器的网络接口之上,而是通过node之上的kube-proxy配置为iptables或ipvs规则,从而将发往此地址的所有流量调度至其后端的各pod对象之上。service网络再k8s集群创建时予以指定,而各service的地址则在用户创建service时予以动态配置。
二、集群上的网络通信
k8s集群的客户端大体分为两类:apiserver客户端和应用程序(运行为pod中的容器)客户端。apiserver客户端通常包含人类用户和pod对象两种,它们通过apiserver访问k8s集群完成管理任务,应用程序客户端一般也包含人类用户和pod对象两种,它们的访问目标时pod上运行于容器中的应用程序提供的各种具体的服务,如redis或nginx等。不过,这些访问请求通常要经由service或ingress资源对象进行。另外,应用程序客户端的访问目标对象的操作要经由apiserver客户端创建和配置完成后才能进行。
名词解释:
CNI:容器网络接口(Container Network Interface),由CNCF(Cloud Native Computing Foundation)维护的项目,其由一系列的用于编写配置容器网络插件的规范和库接口组成,支持众多插件项目。
K8S网络模型的更多相关文章
- k8s 网络模型
一.前言 k8s对Pods之间如何进行组网通信提出了要求,k8s对集群的网络有以下要求: 所有的Pods之间可以在不使用NAT网络地址转换的情况下相互通信 所有的Nodes之间可以在不使用NAT网络地 ...
- k8s网络模型与集群通信
在k8s中,我们的应用会以pod的形式被调度到各个node节点上,在设计集群如何处理容器之间的网络时是一个不小的挑战,今天我们会从pod(应用)通信来展开关于k8s网络的讨论. 小作文包含如下内容: ...
- k8s 网络模型解析之原理
今天研究了一下k8s的网络模型,该解析基于flannel vxlan+ kubeproxy iptables 模式. 一.Docker 首先分析一下Docker层面的网络模型,我们知道容器是基于内核的 ...
- 036.集群网络-K8S网络模型及Linux基础网络
一 Kubernetes网络模型概述 1.1 Kubernetes网络模型 Kubernetes网络模型设计的一个基础原则是:每个Pod都拥有一个独立的IP地址,并假定所有Pod都在一个可以直接连通的 ...
- k8s 网络模型解析之实践
一. 实践说明 首先我们先创建一组资源,包括一个deployment和一个service apiVersion: apps/v1 kind: Deployment metadata: name: ng ...
- 《两地书》--Kubernetes(K8s)基础知识(docker容器技术)
大家都知道历史上有段佳话叫“司马相如和卓文君”.“皑如山上雪,皎若云间月”.卓文君这么美,却也抵不过多情女儿薄情郎. 司马相如因一首<子虚赋>得汉武帝赏识,飞黄腾达之后便要与卓文君“故来相 ...
- k8s实战读书笔记
一.概述 kubernetes中Service是真实应用的抽象,将用来代理Pod,对外提供固定IP作为访问入口,这样通过访问Service便能访问到相应的Pod,而对访问者来说只需知道Service的 ...
- k8s入门
一个目标:容器操作:两地三中心:四层服务发现:五种Pod共享资源:六个CNI常用插件:七层负载均衡:八种隔离维度:九个网络模型原则:十类IP地址:百级产品线:千级物理机:万级容器:相如无亿,K8s有亿 ...
- ASP.NET Core on K8S深入学习(11)K8S网络知多少
本篇已加入<.NET Core on K8S学习实践系列文章索引>,可以点击查看更多容器化技术相关系列文章. 一.Kubernetes网络模型 我们都知道Kubernetes作为容器编排引 ...
随机推荐
- jquery中this与$(this)的用法区别
jquery中this与$(this)的用法区别.先看以下代码: $("#textbox").hover( function() { this.title = "Test ...
- springboot后端实现条件查询,要配合使用mybatis
package cn.com.dyg.work.sqlgen; import cn.com.dyg.work.common.exception.DefException; import cn.com. ...
- Datafactory 学习笔记
1)插入汉字出现乱码的情况 select userenv('language') from dual: select * from V$NLS_PARAMETERS: 把下面变量名和变量值配置到系统环 ...
- 手写一个简单到SpirngMVC框架
spring对于java程序员来说,无疑就是吃饭到筷子.在每次编程工作到时候,我们几乎都离不开它,相信无论过去,还是现在或是未来到一段时间,它仍会扮演着重要到角色.自己对spring有一定的自我见解, ...
- Partition to K Equal Sum Subsets
Given an array of integers nums and a positive integer k, find whether it's possible to divide this ...
- [转帖]docker清理日志
docker清理日志 2017年05月03日 10:37:27 不想当码农的程序员 阅读数 12827 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn. ...
- windows vue环境搭建
windows环境搭建Vue开发环境 一.安装node.js(https://nodejs.org/en/) 下载完毕后,可以安装node,建议不要安装在系统盘(如C:). 二.设置nodejs pr ...
- 忘记虚拟机中Linux的登录密码解决办法
一.重启系统,在开机过程中,快速按下键盘上的方向键↑和↓.目的是告知引导程序,我们需要在引导页面选择不同的操作,以便让引导程序暂停. 2.使用↑和↓将选择行设置为第一行(背景高亮即为选中),按下键盘上 ...
- Mysql-Sqlalchemy-增删改查分组等操作
#!/usr/bin/env python # -*- coding:utf-8 -*- from sqlalchemy.ext.declarative import declarative_base ...
- 客户端相关知识学习(二)之h5与原生app交互的原理
前言 现在移动端 web 应用,很多时候都需要与原生 app 进行交互.沟通(运行在 webview中),比如微信的 jssdk,通过 window.wx 对象调用一些原生 app 的功能.所以,这次 ...