返回 登录
0

Flannel+K8s容器网络通信实践

阅读7416

今天很高兴可以和大家分享我们普元云平台SEM使用kubernetes时,关于pod、service网络通讯的实践与大家分享。

以下为今天讲的主要内容:

图片描述

图片描述

首先来看一下我们普元云的总体架构图

图片描述

SEM –Software Enviroment Mgmt 向上承接业务需求,向下进行资源管理和调度。

SEM 后端对接的是容器,不是虚拟化技术。

SEM 后端选择容器技术,为了适应上层应用的快速多变的需求,这也是容器特点之一。

SEM 后端是以Flannel+Kubernetes为核心。(选择Flannel+Kubernetes 是两者结合的比较好,之前大神宋潇男也已经说明过。 )

图片描述

图片描述

容器的经典网络图,网络使用bridge方式来。

在docker 1.9之前主支持none/host/bridge/container四种网络模型。而在docker 1.9版本后实现了原本实验性的Networking组件的支持,可以在Swarm中使用它或者将其作为Compose 工具。创建虚拟网络并将其连接到容器实现多个主机上容器相互通讯。(kernel版本需要在3.19之上)

图片描述

图片描述

Kubernetes 不提供二层网络。二层网络是通过 Overlay Network来实现的。主要的flannel、openvswitch和weave等。这三种技术各有各的不同,且在部署过程中的难易度也有不同,性能上也差别。

普元云平台使用 flannel+kubernetes

图片描述

Weave 主要是通过在宿主机上部署一个route的容器。 route拦截所有普通容器的ip请求,来实现容器间的网络通讯。

图片描述

Flannel 是CoreOS团队开发的网络工具,flannel使用etcd进行配置,这样就可以保证多个flannel实例之间的配置一致性。

Flannel会为不同node的docker网桥配置不同IP段以保证docker容器的IP在集群内唯一。因此flannel会重新配置docker0网桥。

Flannel已经支持UDP、VxLAN、AWS VPC和GCE路由等数据转发模式。

Flannel是普元云平台网络实现技术,之前的微课程已经说明了。

图片描述

Openvswitch 是通过SDN contrallor来实现。这是与weave和flannel的不同。

使用openvswitch需要提前进行ip段的规化,这是与flannel不同,openvswitch部署相较与weave和flannel有难度。

图片描述

图片描述

图片描述

Kubernetes把Pod定义为最小管理单位,Pod是一个逻辑单位。Kubernetes通过PodIP实现容器网络变得灵活简单。Flannel负责二层网络管理,为容器分配地址还是docker0来完成。

图片描述

Kubernetes提供PodIP为Pod与Pod,Pod与worker node的网络处于同一层面。

Kubernetes为每个Pod都附属了gcr.io/google_containers/pause:latest,这个容器只接管Pod的网络信息,业务容器通过加入网络容器的网络来实现网络共享。此容器随着pod创建而创建,随着Pod删除而删除,正如其名字“pause”

图片描述

由于Pod IP使用了overlay network,如图在集群内Pod1、Pod3, Pod3, Pod4, work node1和work ndoe2之间的通讯。

图片描述

图片描述

在kubernetes集群中Node/Pod/Service的网络是扁平的网络。

图片描述

Service在Pod之间起到服务代理的作用,对外表现为单一接口,将请求转发给Pod,Service的网络转发是kubernetes实现服务编排的关键一环。

图片描述

图片描述

图片描述

图片描述

在userspace机制,kubernetes proxy会为每一个service在主机上启用随机端口进行监听,创建iptables规则进行重定向。这个机制下kubernetes proxy是反向代理的作用。

图片描述

在iptables机制下,kubernetes proxy则是完全通过创建iptable规则,直接重定向Service IP的请求到Endpoints,如果endpoints发生变化,kubernetes proxy负责刷新iptables规则。Kubernetes proxy只负责管理Service和endpoints,以及更新iptables规则。

图片描述

Pod IP 带来的好处,通过overlay network网络实现Pod滚动更新,也可以算是恢度发布。

传统进行容器更新的时候,通常都是先停止v1版本的容器,然后在运行v2版本的容器。更新过程中Pod所在的应用来会出现。

图片描述

正是通过Pod IP, 使得kubernetes在进行rolling Deployment更新应用在kubernetes中是先创建新版本v2然后在删除v1版本实现Pod应用更新。

普元云计算专区:http://primeton.csdn.net/m/zone/primeton/index#

普元公众号:
图片描述

评论