开源网络组件总结(kubernetes相关)

author author     2023-03-22     113

关键词:

一、Flannel

作用:1,协助Kubernetes给每个Node上的Docker容器分配互不冲突的IP地址。

   2,在这些IP地址之间建立一个覆盖网络(Overlay Network),通过这个覆盖网络,将数据包原封不动地传递到目标容器。

原理图

开源网络组件总结(kubernetes相关)_Docker

原理:1创建flannel0的网桥连接docker0和flanneld服务进程,利用修改Docker的启动参数--bip分配地址互不冲突的地址段。

         2flanneld进程利用etcd来管理可分配的IP地址段资源,同时监控etcd中每个Pod的实际地址,在内存中建立一个Pod节点路由表;它下联docker0和物理网络,使用Pod节点路由表,将docker0发给它的数据包包装起来,用物理网络投递到目标flanneld上。

 3Flannel之间的底层通信协议可选UDP,VxLan,AWS VPC等多种方式,通过源flanneld封包,目标flanneld解包传递原始数据。

优点:完美地实现了对Kubernetes网络的支持:自动建立覆盖网络;自动通过etcd感知Kubernetes的Service来动态维护自己的路由表。

缺点:1.引入多个网络组件,会引入延时损耗。2默认采用UDP协议,UDP本身非可靠协议,虽然内部封装数据为TCP,但在大流量、高并发场景下需要反复测试。

二、Open vSwitch

是开源虚拟交换软件,Kubernetes主要利用GRE/VxLAN实现互通,就要就是建立L3到L3的隧道。

开源网络组件总结(kubernetes相关)_docker_02

步骤:1.为了避免Docker创建的docker0地址冲突,先将docker0网桥删除,然后手动建立Linux网桥并分配地址范围。

          2.建立Open vSwitch的网桥ovs,使用ovs-vsctl给ovs增加gre端口,将gre端口目标NodeIP地址设为对端的IP地址。对每一对端都需要操作,大型集群最好做自动话脚本。

         3.将ovs的网桥作为网络接口,加入Docker的网桥上(docker0)。

         4.重启ovs网桥和Docker的网桥,并互相添加Docker网桥的路由。

通讯过程:容器数据包到自身docker0网桥,再用ovs网桥发到另一端的docker0。ovs网络间通过GRE/VxLAN隧道传输数据。

优势:作为开源虚拟交换机软件相对成熟,支持各类协议,通过了OpenStack等项目的考研。

缺点:相对于Flannel可以动态维护网络,使用OVS很多需要手工完成;引入了一些额外的通讯开销,如果对网络依赖严重的应用,需要评估对业务的影响。

三、Calico

Calico是一个基于BGP的纯三层的网络方案,与OpenStack、Kubernetes、AWS、GCE等云平台都能够良好地集成。Calico在每个计算节点都利用Linux Kernel实现了一个高效的vRouter来负责数据转发。每个vRouter都通过BGP1协议把在本节点上运行的容器的路由信息向整个Calico网络广播,并自动设置到达其他节点的路由转发规则。Calico保证所有容器之间的数据流量都是通过IP路由的方式完成互联互通的Calico节点组网时可以直接利用数据中心的网络结构(L2或者L3)不需要额外的NAT、隧道或者Overlay Network,没有额外的封包解包,能够节约CPU运算,提高网络效率,如图所示

.

开源网络组件总结(kubernetes相关)_docker_03

Calico在小规模集群中可以直接互联,在大规模集群中可以通过额外的BGP route reflector来完成,如图所示。

开源网络组件总结(kubernetes相关)_Docker_04

此外,Calico基于iptables还提供了丰富的网络策略,实现了Kubernetes的Network Policy策略,提供容器间网络可达性限制的功能。

Calico的系统架构如图所示

开源网络组件总结(kubernetes相关)_Docker_05

Calico的主要组件如下

◎ Felix:Calico Agent,运行在每个Node上,负责为容器设置网络资源(IP地址、路由规则、iptables规则等),保证跨主机容器网络互通。

◎ etcd:Calico使用的后端存储。

◎ BGP Client:负责把Felix在各Node上设置的路由信息通过BGP协议广播到Calico网络。

◎ Route Reflector:通过一个或者多个BGP Route Reflector来完成大规模集群的分级路由分发。

◎ CalicoCtl:Calico命令行管理工具。

部署:

(1)修改Kubernetes服务的启动参数,并重启服务.

设置Master上kube-apiserver服务的启动参数:--allowprivileged= true(因为calico-node需要以特权模式运行在各Node上)。 

设置各Node上kubelet服务的启动参数:--networkplugin= cni(使用CNI网络插件)。

(2)创建Calico服务,主要包括calico-node和calico policy controller。需要创建的资源对象如下.

创建ConfigMap calico-config,包含Calico所需的配置参数。

创建Secret calico-etcd-secrets,用于使用TLS方式连接etcd。

在每个Node上都运行calico/node容器,部署为DaemonSet.

在每个Node上都安装Calico CNI二进制文件和网络配置参数 (由install-cni容器完成)。

部署一个名为calico/kube-policy-controller的Deployment,以对 接Kubernetes集群中为Pod设置的Network Policy。 从Calico官网下载Calico的YAML配置文件,下载地址为 ​​http://docs.projectcalico.org/v3.5/gettingstarted/​​ kubernetes/installation/hosted/calico.yaml,该配置文件包括启动Calico所需的全部资源对象的定义.




kubernetes相关组件监控指标采集

 线上部署了kuberneter集群环境,需要在zabbix上对相关组件运行情况进行监控。kuberneter组件监控指标分为固定指标数据采集和动态指标数据采集。其中,固定指标数据在终端命令行可以通过metrics接口获取,在zabbix里"自动发现";... 查看详情

kubernetes学习总结(18)——kubernetes容器网络

前言在Kubernetes 中要保证容器之间网络互通网络至关重要。Kubernetes 本身并没有实现容器网络而是通过插件化的方式自由接入,容器网络接入需要满足如下基本原则:pod无论运行在任何节点都可以互相直接通信,而不... 查看详情

kubernetes学习总结(18)——kubernetes容器网络(代码片段)

前言在Kubernetes 中要保证容器之间网络互通网络至关重要。Kubernetes 本身并没有实现容器网络而是通过插件化的方式自由接入,容器网络接入需要满足如下基本原则:pod无论运行在任何节点都可以互相直接通信,而不... 查看详情

kubernetes学习总结(26)——kubernetes网络模型基础指南(代码片段)

前言Kubernetes是为运行分布式集群而建立的,分布式系统的本质使得网络成为Kubernetes的核心和必要组成部分,了解Kubernetes网络模型可以使你能够正确运行、监控和排查应用程序故障。网络是非常复杂的,拥有许多概念... 查看详情

kubernetes学习总结(13)——kubernetes各个组件的概念(代码片段)

...无法成功启动的.共享是通过Pause容器实现的。Pod控制器在Kubernetes中, Pod是资源的最小单位了.而这一堆控制器,就是用来对Pod进行自动管理的。管理Pod的数量实现Pod的弹性伸缩监控Pod的状态定时启动并释放Pod为了实现不同的需求,... 查看详情

kubernetes学习总结(13)——kubernetes各个组件的概念(代码片段)

...无法成功启动的.共享是通过Pause容器实现的。Pod控制器在Kubernetes中, Pod是资源的最小单位了.而这一堆控制器,就是用来对Pod进行自动管理的。管理Pod的数量实现Pod的弹性伸缩监控Pod的状态定时启动并释放Pod为了实现不同的需求,... 查看详情

kubernetes实战总结-prometheus部署(代码片段)

...活跃的开发人员和用户社区。 组件说明MetricServer:是kubernetes集群资源使用情况的聚合器,收集数据给kubernetes集群内使用,如kubectl,hpa,scheduler等。PrometheusOperator:是一个系统监测和警报工具箱,用来存储监控数据。NodeExporter... 查看详情

kubernetes_cni_calico_04_calico的网络策略networkpolicy(代码片段)

...9;NetworkPolicy示例演示2)选择器to和from的行为总结前言Kubernetes中和网络相关的组件包括三个:calico(flannel)、kube-proxy、coredns(之前是kubedns).Kubernetes最常用的CNI组件只有两个,一个是Flannel,一个是Calico。其中,Flan... 查看详情

kubernetes学习总结(36)——kubernetes本地运行的四种方法(代码片段)

前言Kubernetes是一个开源的容器编排平台。它由Google开发,为自动化部署、扩展和管理容器化应用提供了一个开源系统。虽然大多数人在云环境中运行Kubernetes,但在本地运行Kubernetes集群不仅是可能的,它还至少有两个... 查看详情

kubernetes学习总结(36)——kubernetes本地运行的四种方法(代码片段)

前言Kubernetes是一个开源的容器编排平台。它由Google开发,为自动化部署、扩展和管理容器化应用提供了一个开源系统。虽然大多数人在云环境中运行Kubernetes,但在本地运行Kubernetes集群不仅是可能的,它还至少有两个... 查看详情

kubernetes学习总结(36)——kubernetes本地运行的四种方法(代码片段)

前言Kubernetes是一个开源的容器编排平台。它由Google开发,为自动化部署、扩展和管理容器化应用提供了一个开源系统。虽然大多数人在云环境中运行Kubernetes,但在本地运行Kubernetes集群不仅是可能的,它还至少有两个... 查看详情

kubernetes学习总结synopsis

同类产品dockercompose、dockerswarm、dockermachine、mesos、marathonKubernetes项目地址https://github.com/kubernetes/kubernetes/releasesSchema?核心组件:1)APIserver:接收、分析用户请求,并处理用户请求2)Scheduler:调度资源(通过初选、优选、选定三个阶... 查看详情

tungstenfabric+k8s轻松上手|tfcarbide评估指南--准备篇

...程序开发人员或计算基础结构平台工程师设计的,考虑了Kubernetes网络的选项,特别侧重于TungstenFabricCarbide。对于在Kubernetes上运行的应用程序,“Kubernetes集群网络”功能至关重要。这些功能包括:通过服务在Pod之间进行网络通信... 查看详情

kubernetes(k8s)笔记总结(代码片段)

提示:kubernetes篇章开启。文章目录1.云平台2.私有网络VPC(重点!!!)3.Kubernetes介绍4.k8s架构5.kubectl和kubeadm6.三台云服务器的安装部署7.Kubernetes环境搭建7.1安装docker环境7.2安装k8s的预备环境8.kubernetes集群安装的三大... 查看详情

01-kubernetes介绍,基础组件,原理,架构。

1.Kubernetes介绍:Kubernetes主要用于自动化部署,扩展和管理容器应用,提供资源调度,部署管理,服务发现,扩容缩容,监控等一整套功能。 2.Kubernetes主要功能:Kubernetes是开源容器集群管理系统,是基于Docker构建的调度服务... 查看详情

个人学习工作笔记总结(包含java相关,数据库相关,运维相关,docker,kubernetes,流媒体相关,项目管理相关,代码审查相关,安全渗透相关,开发工具,框架技术等等内容)(代码片段)

...Java相关,数据库相关,运维相关,docker,Kubernetes,流媒体相关,项目管理相关,代码审查相关,安全渗透相关,开发工具,框架技术等等内容介绍阅读说明安全性能测试安全运维安全运维ME... 查看详情

kubernetes学习总结(29)——使用kubeadm部署kubernetes1.24详细步骤总结(代码片段)

前言kubeadm是Kubernetes官方提供的用于快速安部署Kubernetes集群的工具,伴随Kubernetes每个版本的发布都会同步更新,kubeadm会对集群配置方面的一些实践做调整,通过实验kubeadm可以学习到Kubernetes官方在集群配置上一些新... 查看详情

如何确定kubernetes依赖的各个组件版本?

综述简单来讲:kubernetes依赖的各个组件版本都可以在对应的changlog中找到比如1.10版本依赖情况如下:https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.10.md#external-dependencies下面简单示例总结一下:k8sv1.10依赖版本选择1.10.0依赖包... 查看详情