Kubernetes网络概述

简介: 本文讲的是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搭建和管理企业级网站应用
相关文章
|
14天前
|
人工智能 弹性计算 运维
ACK Edge与IDC:高效容器网络通信新突破
本文介绍如何基于ACK Edge以及高效的容器网络插件管理IDC进行容器化。
|
4天前
|
Kubernetes 网络协议 应用服务中间件
Kubernetes Ingress:灵活的集群外部网络访问的利器
《Kubernetes Ingress:集群外部访问的利器-打造灵活的集群网络》介绍了如何通过Ingress实现Kubernetes集群的外部访问。前提条件是已拥有Kubernetes集群并安装了kubectl工具。文章详细讲解了Ingress的基本组成(Ingress Controller和资源对象),选择合适的版本,以及具体的安装步骤,如下载配置文件、部署Nginx Ingress Controller等。此外,还提供了常见问题的解决方案,例如镜像下载失败的应对措施。最后,通过部署示例应用展示了Ingress的实际使用方法。
18 2
|
1月前
|
机器学习/深度学习 运维 安全
图神经网络在欺诈检测与蛋白质功能预测中的应用概述
金融交易网络与蛋白质结构的共同特点是它们无法通过简单的欧几里得空间模型来准确描述,而是需要复杂的图结构来捕捉实体间的交互模式。传统深度学习方法在处理这类数据时效果不佳,图神经网络(GNNs)因此成为解决此类问题的关键技术。GNNs通过消息传递机制,能有效提取图结构中的深层特征,适用于欺诈检测和蛋白质功能预测等复杂网络建模任务。
70 2
图神经网络在欺诈检测与蛋白质功能预测中的应用概述
|
28天前
|
SQL 存储 安全
网络安全与信息安全概述####
本文探讨了网络安全(Cybersecurity)和信息安全(Information Security)的基本概念及其差异,重点介绍了网络安全漏洞、加密技术及安全意识在信息保护中的重要性。本文旨在通过深入分析这些关键技术和策略,提升对信息安全整体性的理解,帮助读者在数字化时代更好地应对信息安全挑战。 ####
|
2月前
|
Kubernetes 网络协议 网络安全
k8s中网络连接问题
【10月更文挑战第3天】
207 7
|
2月前
|
Kubernetes 应用服务中间件 nginx
搭建Kubernetes v1.31.1服务器集群,采用Calico网络技术
在阿里云服务器上部署k8s集群,一、3台k8s服务器,1个Master节点,2个工作节点,采用Calico网络技术。二、部署nginx服务到k8s集群,并验证nginx服务运行状态。
981 1
|
3月前
|
Kubernetes 容器 Perl
Kubernetes网络插件体系及flannel基础
文章主要介绍了Kubernetes网络插件体系,特别是flannel网络模型的工作原理、配置和测试方法。
125 3
|
2月前
|
机器学习/深度学习 存储 自然语言处理
深度学习入门:循环神经网络------RNN概述,词嵌入层,循环网络层及案例实践!(万字详解!)
深度学习入门:循环神经网络------RNN概述,词嵌入层,循环网络层及案例实践!(万字详解!)
|
2月前
|
机器学习/深度学习 PyTorch API
深度学习入门:卷积神经网络 | CNN概述,图像基础知识,卷积层,池化层(超详解!!!)
深度学习入门:卷积神经网络 | CNN概述,图像基础知识,卷积层,池化层(超详解!!!)
|
2月前
|
Kubernetes 容器
基于Ubuntu-22.04安装K8s-v1.28.2实验(三)数据卷挂载NFS(网络文件系统)
基于Ubuntu-22.04安装K8s-v1.28.2实验(三)数据卷挂载NFS(网络文件系统)
177 0

热门文章

最新文章

推荐镜像

更多