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作为容器编排引 ...
随机推荐
- Python爬虫学习==>第一章:Python3+Pip环境配置
前置操作 软件名:anaconda 版本:Anaconda3-5.0.1-Windows-x86_64清华镜像 下载链接:https://mirrors.tuna.tsinghua.edu.cn/ ...
- 常见IE6兼容问题总结
1.<!DOCTYPE HTML>文档类型的声明. 产生条件:IE6浏览器,当我们没有书写这个文档声明的时候,会触发IE6浏览器的怪异解析现象: 解决办法:书写文档声明. 2.不同浏览器当 ...
- OpenCV-Python画直方图和累积直方图
代码如下: import cv2 import numpy as np import matplotlib.pyplot as plt img = cv2.imread('C:\\Users\\adm ...
- C#吾日三省吾身
全局变量与局部变量区别: 全局变量声明完毕后,就算不手动初始化赋值,也是有默认值的; 但是局部变量声明完毕后,如果不给它手动赋值,是无法直接使用这个变量的. 尽量避免少的装箱拆箱: ; .ToStri ...
- Android开发 互相调用模式之导出Jar包、扩展MainActivity、Java主导
首先讲导出Jar包,在以前都是用这种方法,但是现在官方不推荐使用此方法,官方推荐导出Aar包 (1)首先创建一个Android空工程 注意:这里选择API 16,因为Unity支持的最低是API 16 ...
- CornerNet-Lite算法笔记
论文名称:CornerNet-Lite: Efficient Keypoint Based Object Detection 论文链接:https://arxiv.org/abs/1904.08900 ...
- PowerShell学习记录
一.简介——连接 Powershell 是运行在windows机器上实现系统和应用程序管理自动化的命令行脚本环境.你可以把它看成是命令行提示符cmd.exe的扩充,不对,应当是颠覆. powershe ...
- luoguP1045 (Java大数)
题目链接:https://www.luogu.org/problemnew/show/P1045 题意:给定p(1000<p<3100000),求2^p-1的位数和最后500位(若不足高位 ...
- java的hashCode和equals为什么要同时重写?
原因: java规范:相等的对象必须具有相等的散列码(hashCode) 同时对于HashSet和HashMap这些基于散列值(hash)实现的类.key的判断是通过hashCode完成,且散列也是通 ...
- json与String的转化
String转成jsonObject JsonObject json = JsonObject.fromObject(String str) String转成JsonArray J ...