Kubernetes网络概述

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 本文讲的是Kubernetes网络概述容器编排技术是当今最火的IT技术之一。不可否认,Docker技术促进了数据中心的发展,并为微服务架构在开发和运维中的实践奠定了基础。
【编者的话】本文比较了Kubernetes和Docker的网络模型,并对Kubernetes的网络模拟做了重点阐述,对Kubernetes的网络插件作了比较。

本文讲的是 Kubernetes网络概述 容器编排技术 是当今最火的IT技术之一。不可否认,Docker技术促进了数据中心的发展,并为微服务架构在开发和运维中的实践奠定了基础。

工作在Sun公司的John Gage 曾说:“ 网络就是计算机。” 为了能充分发挥计算机的功能,必须让计算机之间互相连接。因此,除非你的服务是简单的并且不需要扩容,容器编排技术是一个不错的容器管理技术。在容器编排技术领域,有两个主要的公司Docker和Google, 每个公司都有用略微不同的方式实现容器编排的产品。

开箱即用的Dcoker容器被绑定到一个独立的机器上。虽然可以在已建立的端口部署服务,但是当将应用程序扩展时,这很快将会是一项枯燥的任务。当将每台机器作为独立单元处理时,灵活的自动扩展服务将困难的多。

对于任何的编排业务,必须为集群选择合适的网络模型,因为这是系统的可配置部分并且通常是不可变的。读完这篇文章,希望你能对容器的网络模型做出选择。

Kubernetes模型

Google的Kubernetes是一个公认的,经过实战考验的,比较成熟的容器编排技术。它是一个在集群环境中用于管理应用程序的开源容器编排工具。最近发布的1.6版本,增强了在集群环境中多用户多重负载的可部署性。通过使用 minikube 简化了测试环境的搭建,minikube是在host上启动了一个all in one的虚拟机来运行Kubernets集群。但是,这样的集群受限于一个节点,除了用作测试工具,没有办法去尝试多节点业务流程。所以,需要用适当的网络模型建立多节点集群。为了能更好的理解Kubernetes的网络模型,先看下集群中可能遇到的场景。

Kubernetes 网络有四种组件网络场景:

容器间通信

这发生于Pod 内,可以认为是本地host的流量。然而,这种场景,并没有任何网络特性,本文不做阐述。

Pod 间通信

Pod是可以被Kubernetes创建和管理的最小可部署的计算单元。在Kubernetes集群中每个pod被分配一个IP地址,Pod中的container共享网络命名空间。这构成了一个pod间可以相互通信的网络场景。

Pod和Service间通信

在Pod和Service间通信场景中,service被分配一个客户端可以访问的IP地址。然后,它们被透明的代理到被Service管理的一组Pod。发给Service的IP的请求会被运行在每个host上的kube-proxy 处理,来选择去往正确的pod的路由。

外部和内部服务间通信

允许外部流量进入集群,主要是通过映射外部的负载均衡器显示的发现集群中的服务。该映射允许Kube-intermediary使用集群的pod网络对适当的pod进行外部请求。当流量到达一个节点后,通过kube-proxy路由到正确的后端服务。

Docker模型

Docker  Swarm ,是Kubernetes的主要竞争对手,自从Docker 1.12版本(2016.6)后,已经成为Docker Engine的组成单元。在这之前,Docker Swarm 作为一个独立的产品,是一个轻量级的容器编排工具。

让我们将所熟知的Kubernetes与Docker允许的容器网络方案进行比较。为了保证在不影响主机网络接口前提下,容器可以相互通信,Docker 用了一个叫Docker0 的虚拟网桥。Docker0 被分配子网,每个container通过内部的网络接口(通常是eht0)和 Docker0 通信。这意味着容器只在一个Docker节点联网。

如果多个节点通信,则需要一种不同的方法。一个可以使用部署Docker Swarm 用于overlay的网络(通过key,vlaue的存储模式进行管理,如:etcd或Consul)或者用运行在Docker Engine的网络插件。

Kubernetes和 Docker的网络方案标准

有许多标准可以成为容器网络的解决方案。Docker和Kubernetes在容器网络标准化方面的工作也有所增加。Docker创建了容器网络模型(CNM),而在同一时间CoreOS也开发了容器网络接口(CNI)。

容器网络模型(CNM)

CNM由Docker引入,CNM有IP 地址管理(IPAM)和网络插件功能。IPAM插件可以创建IP地址池并分配,删除和释放容器IP。网络插件API用于创建/删除网络,并从网络中添加/删除容器。Docker的libnetwork为CNM的实现提供了基础。内置的Docker驱动程序可以在第三方插件帮助下被替换。

因为CNM是在考虑Docker运行时设计的,Kubernetes决定使用容器网络接口(CNI)作为其网络插件而不是开发自己的网络标准。

容器网络接口(CNI)

CNI 分配IP地址给容器网络接口,而不是像CNM中的etcd或Consul的分布式键值存储。这使CNI 提供了一个简单的网络接口集可以从网络中增加或删除容器。最新的CNI支持定义IPAM插件,它可以在需要的CNI插件的帮助下被控制。这允许单独的网络和IPAM插件并帮助网络驱动程序调用IPAM插件。

Kubernetes网络插件

下面列出的插件是专门为Kubernetes开发的。

Kubenet

Kubenet是专门用于单节点环境,它可以通过与设定规则的云平台一起使用来实现节点间的通信。Kubenet是一个非常基本的网络插件,如果你正在寻找跨节点的网络策略,Kubenet没有任何帮助。

Flannel

Flannel是一个被CoreOS开发的,专门为Kubernetes设计的overlay网络方案。Flannel的主要优点是它经过了良好的测试并且成本很低。Flannel 为整个集群的提供分布式处理。Kubernetes为正确的通信和服务,进行端口映射和分配唯一的IP地址给每个pod。如果你用Google Compute,它将非常兼容。然而,如果你用其他的云服务商,可能会遇到很多困难。Flannel正解决这个问题。

Weave

Weave是由Weavenetwork开发,用于连接、监视、可视化和监控Kubernetes。通过Weave,可以创建网络,更快的部署防火墙,并通过自动化的故障排除,提高网络运维效率。

用GRE/VXLAN的OpenVSwitch

OpenVSwitch用于跨节点建立网络。隧道类型可以是VxLAN或GRE(通用的路由封装)。GRE用于在IP网络上进行数据帧的隧道化。在VXLAN的一帧数据中,包括了原来的2层数据包头,被封装的一个IP包头,一个UDP包头和一个VXLAN包头。VXLAN更适用于要进行大规模网络隔离的大型数据中心。值得注意的是,OpenVSwitch也是Xen默认的网络方案,同样也适用于像KVM,VIrtualBox,Proxmox VE或OpenStack等平台。

Calico

从Kubernetes 1.0开始, Calico为Kubernetes pod提供了三层网络。Calico提供了简单的,可扩展的,安全的虚拟网络。它用边界网关协议(BGP)为每个Pod提供根分布,并可使用IT基础设施集成Kubernetes集群。Calico可以几乎与所有的云平台兼容,在Kubernetes环境下,具有高可扩展性。除了Kubernetes,Calico 还支持OpenStack,Mesos和Docker。

总结

尽管容器的发展极大的改变了敏捷和持续交付的环境,但容器网络技术仍然在发展。在充满活力的社区中,有些基于SDN技术的项目很快的将走向成熟,如Neutron和NSX。目前来讲,Kubernetes提供了更广泛的网络模型并且似乎已成为容器编排方案的标准。

原文链接:Networking in Kubernetes(翻译:范浩)

原文发布时间为:2017-09-18

本文作者:fanhao2009

本文来自云栖社区合作伙伴Dockerone.io,了解相关信息可以关注Dockerone.io。

原文标题:Kubernetes网络概述

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
2月前
|
Kubernetes 负载均衡 网络安全
Kubernetes 网络模型与实践
【8月更文第29天】Kubernetes(K8s)是当今容器编排领域的佼佼者,它提供了一种高效的方式来管理容器化应用的部署、扩展和运行。Kubernetes 的网络模型是其成功的关键因素之一,它支持服务发现、负载均衡和集群内外通信等功能。本文将深入探讨 Kubernetes 的网络模型,并通过实际代码示例来展示服务发现和服务网格的基本概念及其实现。
85 1
|
2月前
|
Kubernetes Devops 持续交付
DevOps实践:使用Docker和Kubernetes实现持续集成和部署网络安全的守护盾:加密技术与安全意识的重要性
【8月更文挑战第27天】本文将引导读者理解并应用DevOps的核心理念,通过Docker和Kubernetes的实战案例,深入探讨如何在现代软件开发中实现自动化的持续集成和部署。文章不仅提供理论知识,还结合真实示例,旨在帮助开发者提升效率,优化工作流程。
|
13天前
|
Kubernetes 网络协议 网络安全
k8s中网络连接问题
【10月更文挑战第3天】
61 7
|
13天前
|
Kubernetes 应用服务中间件 nginx
搭建Kubernetes v1.31.1服务器集群,采用Calico网络技术
在阿里云服务器上部署k8s集群,一、3台k8s服务器,1个Master节点,2个工作节点,采用Calico网络技术。二、部署nginx服务到k8s集群,并验证nginx服务运行状态。
113 1
|
1月前
|
Kubernetes 容器 Perl
Kubernetes网络插件体系及flannel基础
文章主要介绍了Kubernetes网络插件体系,特别是flannel网络模型的工作原理、配置和测试方法。
87 3
Kubernetes网络插件体系及flannel基础
|
16天前
|
机器学习/深度学习 存储 自然语言处理
深度学习入门:循环神经网络------RNN概述,词嵌入层,循环网络层及案例实践!(万字详解!)
深度学习入门:循环神经网络------RNN概述,词嵌入层,循环网络层及案例实践!(万字详解!)
|
17天前
|
机器学习/深度学习 PyTorch API
深度学习入门:卷积神经网络 | CNN概述,图像基础知识,卷积层,池化层(超详解!!!)
深度学习入门:卷积神经网络 | CNN概述,图像基础知识,卷积层,池化层(超详解!!!)
|
18天前
|
Kubernetes 容器
基于Ubuntu-22.04安装K8s-v1.28.2实验(三)数据卷挂载NFS(网络文件系统)
基于Ubuntu-22.04安装K8s-v1.28.2实验(三)数据卷挂载NFS(网络文件系统)
78 0
|
2月前
|
Kubernetes Cloud Native 持续交付
Kubernetes全面概述
Kubernetes(K8s)是2014年由Google开源的容器编排平台,基于其内部大规模容器管理系统Borg打造。它简化了容器化应用的部署、扩展与管理,具备高度可移植性、可扩展性及自动化特性。Kubernetes的核心组件包括Master节点与Node节点,涵盖kube-apiserver、etcd等关键子系统。其应用场景广泛,适用于微服务架构、大数据处理、DevOps及云原生应用等领域,并支持多种部署方式,如Minikube、Kubeadm等。
54 4
|
1月前
|
Linux 调度 Docker
容器网络概述
【9月更文挑战第9天】容器技术利用如命名空间(namespace)和控制组(cgroup)等技术创建隔离环境,实现资源限制与独立运行。命名空间避免命名冲突,cgroup则能对CPU、内存等资源进行限制。容器状态可通过镜像保存并标准化,确保在任何环境中都能复现相同状态。