【容器云架构】了解 Kubernetes 网络模型

简介: 【容器云架构】了解 Kubernetes 网络模型

Kubernetes 网络使您能够在 k8s 网络内配置通信。它基于扁平网络结构,无需在主机和容器之间映射端口。

Kubernetes 网络支持容器化组件之间的通信。这种网络模型的主要优点是不需要在主机和容器之间映射端口。然而,配置 Kubernetes 网络模型并不是一件容易的事。在本文中,您将了解什么是 Kubernetes 网络,探索常见的实现,并发现关键的 Kubernetes 网络变化。

什么是 Kubernetes 网络?

Kubernetes (k8s) 是一个开源容器编排平台。您可以使用它来自动化本地或云中容器的部署、更新和操作。使用 k8s,您可以跨多个基础架构管理容器化工作负载,而无需担心操作系统或环境。

Kubernetes 网络是 k8s 用来实现其组件之间通信的模型。它基于扁平的网络结构,不需要你在主机和容器之间映射端口。尽管 Kubernetes 网络设置起来可能是一个挑战,但它是任何 k8s 操作的重要组成部分,并且您需要了解它才能成功部署。

常见的 Kubernetes 网络实现

使用 Kubernetes 时,平台会强制实施需要第三方工具来实现的网络模型。您可以选择许多第三方工具,但以下三个是流行的选项。

  • Flannel——一种为 k8s 设计的开源网络结构。Flannel 通过每个主机上的二进制代理运行。该代理将子网租用分配给主机并使用 etcd 来存储配置数据。
  • Project Calico——一个开源网络供应商和政策引擎。Calico 使您能够创建一个可扩展的网络解决方案来连接 k8s pod。它还使您能够在主机网络或服务网格层上实施安全策略。
  • Weave Net — 一种专有网络工具包,可用于创建虚拟网络。Weave Net 包括弹性、可扩展性、安全性、多播网络和服务发现等功能。它基于去中心化架构,不需要任何外部配置服务或存储。

Kubernetes 网络变化

在标准的 Kubernetes 部署中,您应该注意多种网络变化。以下是需要了解的最常见的网络情况。

容器到容器网络

网络的高级视图描述了直接与以太网设备通信的设备或虚拟机。然而,实际上(至少对于 Linux),您机器上的每个进程都在网络命名空间内进行通信。

这个命名空间创建了一个逻辑网络堆栈,它有自己的网络设备、防火墙规则和路由。当您运行一个进程时,它默认分配给您的根网络命名空间。这为进程提供了外部访问。


在 Kubernetes 中,您的容器被分组为 pod,每个 pod 都有一个共享的命名空间。在这个 pod 中,所有容器都具有相同的端口和 IP 地址以及端口空间。为了通信,Pod 中的容器可以使用 localhost,因为它们都在同一个命名空间中运行。如果不同 Pod 中的容器需要通信,则您正在使用下面描述的 Pod 到 Pod 网络过程。

Pod 到 Pod 网络

Pod 到 Pod 网络可以发生在同一节点内或跨节点的 Pod 中。您的每个节点都有一个无类域间路由 (CIDR) 块。该块是分配给该节点内的 Pod 的一组已定义的唯一 IP 地址。这确保了每个 pod 都被提供了一个唯一的 IP,而不管它在哪个节点。

当 Pod 需要通信时,会使用虚拟以太网设备 (VED) 或 veth 对来连接 Pod。Veth 对是分布在命名空间中的耦合网络接口。一对中的一个分配给根命名空间,另一个分配给 pod 命名空间。然后,VED 用作两个命名空间之间的中介连接。

Pod 到服务网络

Kubernetes 旨在允许根据需要动态替换 pod。这意味着 pod IP 地址不是持久的,除非采取特殊的预防措施,例如有状态的应用程序。为了解决这个问题并确保保持与 Pod 之间的通信,Kubernetes 使用了服务。

Kubernetes 服务管理 pod 状态并使您能够随时间跟踪 pod IP 地址。这些服务通过将单个虚拟 IP(集群 IP)分配给一组 pod IP 来抽象 pod 地址。然后,发送到虚拟 IP 的任何流量都会分发到相关联的 pod。


此服务 IP 允许根据需要创建和销毁 pod,而不会影响整体通信。它还使 Kubernetes 服务能够充当集群内负载均衡器,根据需要在关联的 pod 之间分配流量。

互联网到服务网络

大多数部署所需的最终网络情况是在 Internet 和服务之间。无论您是将 Kubernetes 用于内部还是外部应用程序,您通常都需要 Internet 连接。这种连接使用户能够访问您的服务和分布式团队进行协作。

在设置外部访问时,您需要使用两种技术——出口和入口。您可以使用白名单或黑名单来设置这些策略,以控制进出网络的流量。

  • Egress(出口):出口是将流量从您的节点路由到外部连接的过程。它通常通过连接到您的虚拟私有云 (VPC) 的 Internet 网关完成。此网关使用网络地址转换 (NAT) 在您的用户和您的节点所在的机器之间映射 IP。但是,它无法映射到您节点上的各个 Pod。对于这一步,Kubernetes 使用 IP 表和集群 IP 来完成通信。
  • Ingress:Ingress 是 Egress 的相反过程,涉及从外部客户端到您的 Kubernetes 服务的通信。它作为一组规则运行,定义允许哪些连接以及阻止哪些连接与您的服务进行通信。

结论

Kubernetes 网络使您能够在 k8s 网络内配置通信。它基于扁平网络结构,无需在主机和容器之间映射端口。但是,要强制实施此网络模型,您需要使用第三方工具(开源或付费的),例如 Flannel、Project Calico 和 Weave Net。

此外,在配置 Kubernetes 网络时,您需要考虑某些网络方面,这在传统网络中是不会遇到的。其中包括容器到容器网络、Pod 到 Pod 网络、Pod 到服务网络和 Internet 到服务网络。请务必妥善规划您的网络,因为错误配置可能会导致漏洞。

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
8月前
|
C++
基于Reactor模型的高性能网络库之地址篇
这段代码定义了一个 InetAddress 类,是 C++ 网络编程中用于封装 IPv4 地址和端口的常见做法。该类的主要作用是方便地表示和操作一个网络地址(IP + 端口)
358 58
|
8月前
|
人工智能 Kubernetes 数据可视化
Kubernetes下的分布式采集系统设计与实战:趋势监测失效引发的架构进化
本文回顾了一次关键词监测任务在容器集群中失效的全过程,分析了中转IP复用、调度节奏和异常处理等隐性风险,并提出通过解耦架构、动态IP分发和行为模拟优化采集策略,最终实现稳定高效的数据抓取与分析。
147 2
Kubernetes下的分布式采集系统设计与实战:趋势监测失效引发的架构进化
|
8月前
|
网络协议 算法 Java
基于Reactor模型的高性能网络库之Tcpserver组件-上层调度器
TcpServer 是一个用于管理 TCP 连接的类,包含成员变量如事件循环(EventLoop)、连接池(ConnectionMap)和回调函数等。其主要功能包括监听新连接、设置线程池、启动服务器及处理连接事件。通过 Acceptor 接收新连接,并使用轮询算法将连接分配给子事件循环(subloop)进行读写操作。调用链从 start() 开始,经由线程池启动和 Acceptor 监听,最终由 TcpConnection 管理具体连接的事件处理。
280 2
|
8月前
基于Reactor模型的高性能网络库之Tcpconnection组件
TcpConnection 由 subLoop 管理 connfd,负责处理具体连接。它封装了连接套接字,通过 Channel 监听可读、可写、关闭、错误等
226 1
|
8月前
|
JSON 监控 网络协议
干货分享“对接的 API 总是不稳定,网络分层模型” 看电商 API 故障的本质
本文从 OSI 七层网络模型出发,深入剖析电商 API 不稳定的根本原因,涵盖物理层到应用层的典型故障与解决方案,结合阿里、京东等大厂架构,详解如何构建高稳定性的电商 API 通信体系。
|
5月前
|
机器学习/深度学习 数据采集 人工智能
深度学习实战指南:从神经网络基础到模型优化的完整攻略
🌟 蒋星熠Jaxonic,AI探索者。深耕深度学习,从神经网络到Transformer,用代码践行智能革命。分享实战经验,助你构建CV、NLP模型,共赴二进制星辰大海。
|
6月前
|
机器学习/深度学习 传感器 算法
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)
412 2
|
6月前
|
机器学习/深度学习 并行计算 算法
【CPOBP-NSWOA】基于豪冠猪优化BP神经网络模型的多目标鲸鱼寻优算法研究(Matlab代码实现)
【CPOBP-NSWOA】基于豪冠猪优化BP神经网络模型的多目标鲸鱼寻优算法研究(Matlab代码实现)
152 8
|
8月前
基于Reactor模型的高性能网络库之Poller(EpollPoller)组件
封装底层 I/O 多路复用机制(如 epoll)的抽象类 Poller,提供统一接口支持多种实现。Poller 是一个抽象基类,定义了 Channel 管理、事件收集等核心功能,并与 EventLoop 绑定。其子类 EPollPoller 实现了基于 epoll 的具体操作,包括事件等待、Channel 更新和删除等。通过工厂方法可创建默认的 Poller 实例,实现多态调用。
391 60
|
8月前
基于Reactor模型的高性能网络库之Channel组件篇
Channel 是事件通道,它绑定某个文件描述符 fd,注册感兴趣的事件(如读/写),并在事件发生时分发给对应的回调函数。
379 60

推荐镜像

更多