k8s网络之设计与实现

goldsunshine goldsunshine     2023-03-15     608

关键词:

 

k8s网络主题系列:

一、k8s网络之设计与实现

二、k8s网络之Flannel网络

三、k8s网络之Calico网络

 

K8s网络设计与实现是在学习k8s网络过程中总结的内容。在学习k8s网络各种插件之前我觉得有必要先搞清楚其设计思路是怎样的,在知道其规范的情况下肯定能跟深刻理解k8s网络的各种插件。就像拥有指南针的船,才不会跑偏。 

 

一、K8s网络设计

1.每个Pod都拥有一个独立IP地址,Pod内所有容器共享一个网络命名空间

2.集群内所有Pod都在一个直接连通的扁平网络中,可通过IP直接访问

(1) 所有容器之间无需NAT就可以直接互相访问

(2) 所有Node和所有容器之间无需NAT就可以直接互相访问

(3) 容器自己看到的IP跟其他容器看到的一样

 

二、K8s网络要求

K8s对网络的要求总的来讲主要有两个最基本的要求,分别是:

  1. 要能够为每一个Node上的Pod分配互相不冲突的IP地址;
  2. 要所有Pod之间能够互相访问;

 

三、K8s网络规范

CNI是由CoreOS提出的一个容器网络规范。已采纳规范的包括Apache Mesos, Cloud Foundry, Kubernetes, Kurma rkt。另外 Contiv Networking, Project Calico Weave这些项目也为CNI提供插件。

技术图片

 

 

CNI 的规范比较小巧。它规定了一个容器runtime和网络插件之间的简单的契约。这个契约通过JSON的语法定义了CNI插件所需要提供的输入和输出。一个容器可以被加入到被不同插件所驱动的多个网络之中。一个网络有自己对应的插件和唯一的名称。CNI 插件需要提供两个命令:一个用来将网络接口加入到指定网络,另一个用来将其移除。这两个接口分别在容器被创建和销毁的时候被调用。

容器runtime首先需要分配一个网络命名空间以及一个容器ID。然后连同一些CNI配置参数传给网络驱动。接着网络驱动会将该容器连接到网络并将分配的IP地址以JSON的格式返回给容器runtime

 

四、K8s网络实现

隧道方案

隧道方案在IaaS层的网络中应用也比较多,将pod分布在一个大二层的网络规模下。网络拓扑简单,但随着节点规模的增长复杂度会提升。

WeaveUDP广播,本机建立新的BR,通过PCAP互通

Open vSwitchOVS):基于VxLanGRE协议,但是性能方面损失比较严重

FlannelUDP广播,VxLan

RacherIPsec

路由方案

路由方案一般是从3层或者2层实现隔离和跨主机容器互通的,出了问题也很容易排查。

Calico:基于BGP协议的路由方案,支持很细致的ACL控制,对混合云亲和度比较高。

Macvlan:从逻辑和Kernel层来看隔离性和性能最优的方案,基于二层隔离,所以需要二层路由器支持,大多数云服务商不支持,所以混合云上比较难以实现。

 

五、K8s Pod的网络创建流程

1.每个Pod除了创建时指定的容器外,都有一个kubelet启动时指定的基础容器

2.kubelet创建基础容器,生成network namespace

3.kubelet调用网络CNI driver,由它根据配置调用具体的CNI 插件

4.CNI 插件给基础容器配置网络

5.Pod 中其他的容器共享使用基础容器的网络

 

以上内容主要来自博客文章。 

 

12,k8s之深入理解pod对象

...念: 最小部署单元 一组容器的集合 一个Pod中的容器共享网络命名空间 Pod是短暂的Pod实现机制与设计模式: 共享网络 共享存储 [root@centos7demo]#catb.ymlapiVersion:v1kind:Podmetadata:name:my-podspec:containers:-name:writeimage:centoscommand:["bash","-c" 查看详情

docker&k8s---k8s跨宿主机pod通信之flannel(代码片段)

Docker&K8s—K8s跨宿主机pod通信之FlannelKubernetes设计了网络模型,但却将它的实现交给了网络插件,CNI网络插件最主要的功能就是实现POD资源能够跨宿主机进行通信。常见的CNI网络插件:FlannelCalicoCanalContivOpenContrailNSX-T... 查看详情

k8s集群安装部署之网络拓扑图(代码片段)

一、网络实现拓扑图二、Proxy主机(master&standby)1.主机分别为:10.3.153.211(test-master)与10.3.153.212(test-standby)2.安装应用:nginx、keepalived、etcd3.应用服务作用:nginx:提供四层与七层的服务代理转发,分别对两台apiserver6443端口进行... 查看详情

(转)原理到实现|k8s存储之nfs(代码片段)

...rr1Rnl_594Gyyn9fHekjw 1NFS介绍NFS是NetworkFileSystem的简写,即网络文件系统,NFS是FreeBSD支持的文件系统中的一种。NFS基于RPC(RemoteProcedureCall)远程过程调用实现,其允许一个系统在网络上与它人共享目录和文件。通过使用NFS,用户和... 查看详情

k8s数据持久化之statefulset的数据持久化,并自动创建pv与pvc(代码片段)

...还是能访问到相同的持久化数据,基于PVC来实现2.稳定的网络标志,即Pod重新调度后其PodName和HostName不变,基于HeadlessService(即没有ClusterIP的Service)来实现3.有序部署,有序扩展,即Pod是有顺序的,在部署或者扩展的时候要依据... 查看详情

java网络编程系列之基于bio的多人聊天室设计与实现(代码片段)

Java网络编程系列之基于BIO的多人聊天室设计与实现BIO模型多人聊天室功能概述多人聊天室设计UML建模之时序图服务端代码实现ChatServerChatHandler客户端代码实现ChatClientUserInputHandler伪异步IO编程模型简析BIO模型传统的BIO模型(... 查看详情

pipeline思维之网络

pipeline思维之网络如果让你设计一台设备的网络功能,你会怎么设计?你可能还没有太多思路,或者经验丰富,不妨让我们看看一些成熟产品的网络设计与处理流程,此文以流水线的思维来看看他们的实现和设... 查看详情

计算机毕业设计之java+springboot基于vue的智慧食堂点餐系统设计与实现

...介绍随着Internet的发展,人们的日常生活已经离不开网络。未来人们的生活与工作将变得越来越数字化,网络化和电子化。网上管理,它将是直接管理“智慧食堂”系统的最新形式。本论文是以构建“智慧食堂”系统... 查看详情

k8s之pod

...使用方式pause容器使得Pod中的所有容器可以共享两种资源:网络和存储。二、Pod分类1.自主式Pod2.控制器管理的Podkubernetes中的pause容器主要为每个业务容器提供以下功能:·Kubernetes设计这样的Pod概念和特殊组成结构有什么用意三、Pod... 查看详情

k8s之statefulset(代码片段)

...是能够访问到相同的持久化数据,基于PVC来实现。稳定的网络标志:即pod重新调度后其pod名称和host名称不变,基于HeadlessService(即没有clusterip的service)来实现。有序部署,有序扩展:即pod是由顺序的,在部署或者扩展的时候要... 查看详情

k8s二进制部署之添加mastern实现高可用(代码片段)

前一篇:k8s二进制部署之Node组件部署架构部署一、系统初始化配置第一步同样需要对新的访问进行初始化操作,请看k8s二进制部署之系统初始化配置。host需更新,新加master与已有master。二、更新证书2.1更新https证书1.... 查看详情

cicd实现方法之二--gitlab+jenkins+k8s(代码片段)

承接上篇文章:上周发布了新的博客文章,CI实现方法之--Gitlab+Drone,有幸被51cto推荐到首页,在上次的文章中做了CI相说明与测试操作,在生产环境为了提高生产力,增加容错,避免人为误操作等,出现了CICD,对于CICD在此文章... 查看详情

k8s之flannel网络插件安装(代码片段)

一、flannel的作用1、CNI网络插件最主要的功能就是实现POD资源能够跨宿主机是进行能信#test-nodes1主机无法ping通test-nodes2主机的pod容器[root@test-nodes1~]#kubectlgetpods-owideNAMEREADYSTATUSRESTARTSAGEIPNODENOMINATEDNODEREADINESSGATESnginx-ds1-qg45q1/1Running02d... 查看详情

k8s之pod(代码片段)

...使用方式pause容器使得Pod中的所有容器可以共享两种资源:网络和存储。二、Pod分类1.自主式Pod2.控制器管理的Podkubernetes中的pause容器主要为每个业务容器提供以下功能:·Kubernetes设计这样的Pod概念和特殊组成结构有什么用意三、Pod... 查看详情

k8s之pod(代码片段)

...使用方式pause容器使得Pod中的所有容器可以共享两种资源:网络和存储。二、Pod分类1.自主式Pod2.控制器管理的Podkubernetes中的pause容器主要为每个业务容器提供以下功能:·Kubernetes设计这样的Pod概念和特殊组成结构有什么用意三、Pod... 查看详情

k8s网络nat问题分析与处理(代码片段)

在K8S环境中(集群环境为自建),node节点上的pod网络互联互通是采用网络插件结合etcd实现的。默认情况下pod访问集群外部的网络(例如:访问百度)走的是对应node节点的nat规则。最近收到研发反馈的需求,由于我们mysql这种公... 查看详情

k8s网络之calico学习(代码片段)

k8s网络之calico学习环境准备组件版本OSUbuntu18.04.1LTSdocker18.06.0-cek8s1.10.1calico3.1.3hostnameip192.168.56.101Ubuntu18.04.1LTS192.168.56.102Ubuntu18.04.1LTS192.168.56.103Ubuntu18.04.1LTS192.168.56.104Ubuntu18.0 查看详情

互联网企业安全高级指南读书笔记之大规模纵深防御体系设计与实现

...HIDS、RASP都是奢侈品,可以用OSSEC、OSquery等产品代替网络分光可以用扫描器+Web日志分析代替SQL审计可以在CGI层解决业务类型如果业务流量中中大部分都是HTTP类型的,那么应该重点投入WAF、RASP和Web扫描器,NIDS/NIPS可... 查看详情