企业级运维之云原生与Kubernetes实战课程 - 第一章第6讲 Kubernetes网络

简介: 本小节主要内容为K8s容器网络介绍,包括:网络约束和目标、节点内的Pod通信、跨节点的Pod通信、Pod与Netns的关系、典型容器网络实现方案。

企业级运维之云原生与Kubernetes实战课程

第一章第6Kubernetes网络

 

 

视频地址:https://developer.aliyun.com/learning/course/913/detail/14600

 

摘要:本小节主要内容为K8s容器网络介绍,包括:网络约束和目标、节点内的Pod通信、跨节点的Pod通信、PodNetns的关系、典型容器网络实现方案。

 

 

1. Kubernetes网络约束和目标

 

Kubernetes对于Pod间的网络没有任何限制,只需满足如下三个基本条件:

 

  • 所有Pod可以与其他Pod直接通信,无需显式使用NAT
  • 所有Node可以与所有Pod直接通信,无需显式使用NAT
  • Pod可见的IP地址确为其他Pod与其通信时所用,无需显式转换;

 

基于以上准入条件,我们在审视一个网络方案的时候,需要考虑如下四大目标:

 

  • 容器与容器间的通信;
  • PodPod之间的通信;
  • PodService间的通信;
  • 外部世界与Service间的通信;

 

2. 对约束的解释

 

容器与其宿主存在寄生关系,从而在实现上,容器网络方案可分为 UnderlayOverlay两大派别,其主要的差异在于:是否与Host网络同层,这样对于微服务发现及治理,容器可访问方式都造成很大的差异,所以社区的同学以 perPodperIP这种简单武断的模型,摒弃了显示端口映射等NAT配置,统一了容器网络对外服务的视角。

 image.png

 

3. 节点内的Pod通信

 

每个Pod都有其自身的Netns,通过一个虚拟的以太网对连接到root netns。这基本是一个管道对,一端在root netns内,另一端在Podnetns内。

 image.png

节点内Pod1Pod2的通信

 

如图节点内Pod1Pod2的通信:首先Pod1eth0流量会先到vethxxx,再到cbr0,然后到vethyyy,再到Pod2eth0

 

4. 跨节点的Pod通信

 

每个节点都为Pod IPs分配了唯一的CIDR块,有不同的网络命名空间、网络接口以及网桥。

 image.png

跨节点的Pod1Pod3的通信

 

如图跨节点的Pod1Pod3的通信,需要通过路由规则转发,因为Pod1ipPod3IP不同,而且如果网络是Flanneld的话,这两个Pod还不在同一个网段,只能通过路由转发。

 

Pod3接收到来自Node1节点上Pod1eth0包,在回包时如何确认eth0Pod1有关系呢?

 image.png

 

如图,如果网络使用Flanneld方案,首先会在每个节点上创建不同的DockerFlannel网段,通过Docker的网段分发每个PodIP,比如节点110.1.15.1/24,节点2上是10.1.20.3/24,而Pod内的网段是在节点网段内的,在进行流量分发时,Pod1上的流量首先经过Docker0通过Flanneld,而Flanneld会读取etcd保存的Pod节点所在的信息,进而将流量进行转发,实现了整个网络的流通性。

 

5. Netns究竟实现了什么

 

Network namespace是实现网络虚拟化的内核基础,创建了隔离的网络空间。

 

  • 拥有独立的附属网络设备(Ioveth等虚设备/物理网卡);
  • 独立的协议栈,IP地址和路由表;
  • iptables规则;
  • ipvs等;

 

6. PodNetns的关系

 

每个Pod拥有独立的Netns空间,Pod内的Container共享该空间,可通过Loopback接口实现通信,或通过共享的Pod-IP对外提供服务。宿主上存在RootNetns,可以看做一个特殊的容器空间。

 image.png

 

7. 典型容器网络实现方案

 

容器网络可能是Kubernetes领域最为百花齐放的一个领域,依照laaS层的配置、外部物理网络的设备、性能or灵活优先,可以有不同的实现:

 

  • Flannel:最为普遍的实现,提供多种网络backend实现,覆盖多种场景;
  • Calico:采用BGP提供网络直连,功能丰富,对底层网络有要求;
  • CanalFlannel for network + Calico for firewalling,嫁接型创新项目;
  • Cilium:基于eBPFXDP的高性能Overlay网络方案;
  • Kube-router:同样采用BGP提供网络直连,集成基于 LVS的负载均衡能力;
  • Romana:采用BGP or OSPF 提供网络直连能力的方案;
  • WeaveNet:采用UDP封装实现L2 Overlay,支持用户态(慢,可加密)/内核态(快,不能加密)两种实现;

 

8. Flannel方案

Flannel是目前使用最为普遍的方案,通过将Backend机制独立,它目前已经支持多种数据路径,也可以适用于overlay/underlay等多种场景,封装可以选用用户态udp(纯用户态实现),内核Vxlan(性能好),如集群规模不大,处于同一二层域,也可以选择 host-gw方式。

 

9. Network Policy基本概念

 

Network Policy提供了基于策略的网络控制,用于隔离应用并减少攻击面。它使用标签选择器模拟传统的分段网络,并通过策略控制它们之间的流量以及来自外部的流量。

 

在使用Network Policy之前需要注意:

  • apiserver开启 extensions/v1beta1/networkpolicies
  • 网络插件要支持 Network Policy,如CalicoRomanaWeave Nettrireme等;

 

K8sNetwork Policy就是网络ACL,是基于CNIterwayclico网络类型的集群,基于pod维度实现IP/ns/Pod的访问控制。

 

比如某个Podlabel1,可以设置default的命名空间无法访问,也可以设置哪些IP可以访问含有label1PodPodPod之间可以设置,如Pod label2Pod不能访问label1Pod等。

image.png

第一章总结

 

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
8月前
|
Cloud Native Serverless API
微服务架构实战指南:从单体应用到云原生的蜕变之路
🌟蒋星熠Jaxonic,代码为舟的星际旅人。深耕微服务架构,擅以DDD拆分服务、构建高可用通信与治理体系。分享从单体到云原生的实战经验,探索技术演进的无限可能。
微服务架构实战指南:从单体应用到云原生的蜕变之路
|
人工智能 弹性计算 运维
ACK Edge与IDC:高效容器网络通信新突破
本文介绍如何基于ACK Edge以及高效的容器网络插件管理IDC进行容器化。
|
存储 运维 关系型数据库
开源新发布|PolarDB-X v2.4.1 增强企业级运维能力
PolarDB-X 是阿里云推出的云原生分布式数据库,自2021年10月开源以来,持续迭代升级,至2024年4月发布的v2.4.1版本,重点增强了企业级运维能力,如无锁变更、物理扩缩容、数据TTL等,提供金融级高可用、透明分布式、HTAP一体化等特性。PolarDB-X 支持集中式和分布式一体化形态,兼容MySQL生态,适用于金融、通信、政务等行业。
2300 101
|
人工智能 运维 监控
阿里云携手神州灵云打造云内网络性能监测标杆 斩获中国信通院高质量数字化转型十大案例——金保信“云内网络可观测”方案树立云原生运维新范式
2025年,金保信社保卡有限公司联合阿里云与神州灵云申报的《云内网络性能可观测解决方案》入选高质量数字化转型典型案例。该方案基于阿里云飞天企业版,融合云原生引流技术和流量“染色”专利,解决云内运维难题,实现主动预警和精准观测,将故障排查时间从数小时缩短至15分钟,助力企业降本增效,形成可跨行业复制的数字化转型方法论。
768 6
|
Kubernetes Shell Windows
【Azure K8S | AKS】在AKS的节点中抓取目标POD的网络包方法分享
在AKS中遇到复杂网络问题时,可通过以下步骤进入特定POD抓取网络包进行分析:1. 使用`kubectl get pods`确认Pod所在Node;2. 通过`kubectl node-shell`登录Node;3. 使用`crictl ps`找到Pod的Container ID;4. 获取PID并使用`nsenter`进入Pod的网络空间;5. 在`/var/tmp`目录下使用`tcpdump`抓包。完成后按Ctrl+C停止抓包。
557 12
|
Cloud Native 安全 Serverless
云原生应用实战:基于阿里云Serverless的API服务开发与部署
随着云计算的发展,Serverless架构日益流行。阿里云函数计算(Function Compute)作为Serverless服务,让开发者无需管理服务器即可运行代码,按需付费,简化开发运维流程。本文从零开始,介绍如何使用阿里云函数计算开发简单的API服务,并探讨其核心优势与最佳实践。通过Python示例,演示创建、部署及优化API的过程,涵盖环境准备、代码实现、性能优化和安全管理等内容,帮助读者快速上手Serverless开发。
|
Kubernetes 网络协议 应用服务中间件
Kubernetes Ingress:灵活的集群外部网络访问的利器
《Kubernetes Ingress:集群外部访问的利器-打造灵活的集群网络》介绍了如何通过Ingress实现Kubernetes集群的外部访问。前提条件是已拥有Kubernetes集群并安装了kubectl工具。文章详细讲解了Ingress的基本组成(Ingress Controller和资源对象),选择合适的版本,以及具体的安装步骤,如下载配置文件、部署Nginx Ingress Controller等。此外,还提供了常见问题的解决方案,例如镜像下载失败的应对措施。最后,通过部署示例应用展示了Ingress的实际使用方法。
1119 2
|
运维 Cloud Native 云计算
云原生之旅:Docker容器化实战
本文将带你走进云原生的世界,深入理解Docker技术如何改变应用部署与运维。我们将通过实际案例,展示如何利用Docker简化开发流程,提升应用的可移植性和伸缩性。文章不仅介绍基础概念,还提供操作指南和最佳实践,帮助你快速上手Docker,开启云原生的第一步。
|
Kubernetes 容器 Perl
Kubernetes网络插件体系及flannel基础
文章主要介绍了Kubernetes网络插件体系,特别是flannel网络模型的工作原理、配置和测试方法。
564 3
Kubernetes网络插件体系及flannel基础
|
运维 Cloud Native Docker
云原生技术入门:Docker容器化实战
【9月更文挑战第20天】本文将引导你走进云原生技术的世界,通过Docker容器化技术的实战演练,深入理解其背后的原理和应用。我们将一起探索如何在云平台上利用Docker简化部署、扩展和管理应用程序的过程,并揭示这一技术如何改变现代软件的开发和运维模式。
276 18

推荐镜像

更多