企业级运维之云原生与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

第一章总结

 

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
2月前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
121 2
|
2月前
|
数据采集 存储 JSON
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第27天】本文介绍了Python网络爬虫Scrapy框架的实战应用与技巧。首先讲解了如何创建Scrapy项目、定义爬虫、处理JSON响应、设置User-Agent和代理,以及存储爬取的数据。通过具体示例,帮助读者掌握Scrapy的核心功能和使用方法,提升数据采集效率。
130 6
|
21天前
|
存储 Kubernetes 开发者
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
Docker 是一种开源的应用容器引擎,允许开发者将应用程序及其依赖打包成可移植的镜像,并在任何支持 Docker 的平台上运行。其核心概念包括镜像、容器和仓库。镜像是只读的文件系统,容器是镜像的运行实例,仓库用于存储和分发镜像。Kubernetes(k8s)则是容器集群管理系统,提供自动化部署、扩展和维护等功能,支持服务发现、负载均衡、自动伸缩等特性。两者结合使用,可以实现高效的容器化应用管理和运维。Docker 主要用于单主机上的容器管理,而 Kubernetes 则专注于跨多主机的容器编排与调度。尽管 k8s 逐渐减少了对 Docker 作为容器运行时的支持,但 Doc
108 5
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
|
1月前
|
存储 安全 网络安全
网络安全的盾与剑:漏洞防御与加密技术的实战应用
在数字化浪潮中,网络安全成为保护信息资产的重中之重。本文将深入探讨网络安全的两个关键领域——安全漏洞的防御策略和加密技术的应用,通过具体案例分析常见的安全威胁,并提供实用的防护措施。同时,我们将展示如何利用Python编程语言实现简单的加密算法,增强读者的安全意识和技术能力。文章旨在为非专业读者提供一扇了解网络安全复杂世界的窗口,以及为专业人士提供可立即投入使用的技术参考。
|
1月前
|
存储 缓存 监控
Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
本文介绍了Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
142 7
|
2月前
|
Kubernetes Cloud Native 微服务
云原生入门与实践:Kubernetes的简易部署
云原生技术正改变着现代应用的开发和部署方式。本文将引导你了解云原生的基础概念,并重点介绍如何使用Kubernetes进行容器编排。我们将通过一个简易的示例来展示如何快速启动一个Kubernetes集群,并在其上运行一个简单的应用。无论你是云原生新手还是希望扩展现有知识,本文都将为你提供实用的信息和启发性的见解。
|
2月前
|
Kubernetes Cloud Native 开发者
云原生入门:Kubernetes的简易指南
【10月更文挑战第41天】本文将带你进入云原生的世界,特别是Kubernetes——一个强大的容器编排平台。我们将一起探索它的基本概念和操作,让你能够轻松管理和部署应用。无论你是新手还是有经验的开发者,这篇文章都能让你对Kubernetes有更深入的理解。
|
2月前
|
运维 Cloud Native 云计算
云原生之旅:Docker容器化实战
本文将带你走进云原生的世界,深入理解Docker技术如何改变应用部署与运维。我们将通过实际案例,展示如何利用Docker简化开发流程,提升应用的可移植性和伸缩性。文章不仅介绍基础概念,还提供操作指南和最佳实践,帮助你快速上手Docker,开启云原生的第一步。
|
2月前
|
运维 Kubernetes Cloud Native
云原生技术入门:Kubernetes和Docker的协同工作
【10月更文挑战第43天】在云计算时代,云原生技术成为推动现代软件部署和运行的关键力量。本篇文章将带你了解云原生的基本概念,重点探讨Kubernetes和Docker如何协同工作以支持容器化应用的生命周期管理。通过实际代码示例,我们将展示如何在Kubernetes集群中部署和管理Docker容器,从而为初学者提供一条清晰的学习路径。
|
2月前
|
Kubernetes 负载均衡 Cloud Native
探索Kubernetes:云原生应用的基石
探索Kubernetes:云原生应用的基石

热门文章

最新文章