Kubernetes 网络 | 学习笔记

简介: 快速学习 Kubernetes 网络

开发者学堂课程【企业级运维之云原生与 Kubernets 实战课程:Kubernetes 网络 】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/913/detail/14600


Kubernetes 网络

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

 

1. Kubernetes 网络约束和目标

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

Ÿ 所有 Pod 可以与其他 Pod 直接通信,无需显式使用 NAT;

Ÿ 所有 Node 可以与所有 Pod 直接通信,无需显式使用 NAT;

Ÿ Pod 可见的 IP 地址确为其他 Pod 与其通信时所用,无需显式转换;

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

Ÿ 容器与容器间的通信;

Ÿ Pod 与 Pod 之间的通信;

Ÿ Pod 与 Service 间的通信;

Ÿ 外部世界与 Service 间的通信;

2. 对约束的解释

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

image.png

3. 节点内的 Pod 通信

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

image.png

节点内 Pod1 与 Pod2 的通信

如图节点内 Pod1 与 Pod2 的通信:首先 Pod1 的 eth0 流量会先到 vethxxx,再到 cbr0 ,然后到 vethyyy,再到 Pod2 的 eth0。

4. 跨节点的 Pod 通信

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

image.png

跨节点的 Pod1 与 Pod3 的通信

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

当 Pod3 接收到来自 Node1 节点上 Pod1 的 eth0 包,在回包时如何确认 eth0 与 Pod1 有关系呢?

image.png

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

5. Netns 究竟实现了什么

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

Ÿ 拥有独立的附属网络设备(Io、veth 等虚设备/物理网卡);

Ÿ 独立的协议栈,IP 地址和路由表;

Ÿ iptables 规则;

Ÿ ipvs 等;

6. Pod 与 Netns 的关系

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

image.png

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

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

Ÿ Flannel:最为普遍的实现,提供多种网络 backend 实现,覆盖多种场景;

Ÿ Calico:采用 BGP 提供网络直连,功能丰富,对底层网络有要求;

Ÿ Canal:Flannel for network + Calico for firewalling,嫁接型创新项目;

Ÿ Cilium:基于 eBPF 和 XDP 的高性能 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,如 Calico、Romana、Weave Net 和 trireme等;

K8s 的 Network Policy 就是网络 ACL ,是基于 CNI、terway、clico 网络类型的集群,基于 pod 维度实现 IP/ns/Pod 的访问控制。

比如某个 Pod 的 label 为 1,可以设置 default 的命名空间无法访问,也可以设置哪些 IP 可以访问含有 label 为 1 的 Pod,Pod 和 Pod 之间可以设置,如 Pod label 为 2 的 Pod 不能访问 label 为 1 的 Pod 等。

image.png

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
6月前
|
运维 Kubernetes 前端开发
如何用 eBPF 实现 Kubernetes 网络可观测性?实战指南
本文深入探讨了Kubernetes网络观测的挑战与eBPF技术的应用。首先分析了传统工具在数据碎片化、上下文缺失和性能瓶颈上的局限性,接着阐述了eBPF通过零拷贝观测、全链路关联和动态过滤等特性带来的优势。文章进一步解析了eBPF观测架构的设计与实现,包括关键数据结构、内核探针部署及生产环境拓扑。实战部分展示了如何构建全栈观测系统,并结合NetworkPolicy验证、跨节点流量分析等高级场景,提供具体代码示例。最后,通过典型案例分析和性能数据对比,验证了eBPF方案的有效性,并展望了未来演进方向,如智能诊断系统与Wasm集成。
286 0
|
人工智能 弹性计算 运维
ACK Edge与IDC:高效容器网络通信新突破
本文介绍如何基于ACK Edge以及高效的容器网络插件管理IDC进行容器化。
|
Ubuntu 网络安全 图形学
Ubuntu学习笔记(二):ubuntu20.04解决右上角网络图标激活失败或者消失,无法连接有线问题。
在Ubuntu 20.04系统中解决网络图标消失和无法连接有线网络问题的方法,其中第三种方法通过检查并确保Windows防火墙中相关服务开启后成功恢复了网络连接。
4610 0
Ubuntu学习笔记(二):ubuntu20.04解决右上角网络图标激活失败或者消失,无法连接有线问题。
|
9月前
|
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停止抓包。
345 12
|
12月前
|
Kubernetes 网络协议 应用服务中间件
Kubernetes Ingress:灵活的集群外部网络访问的利器
《Kubernetes Ingress:集群外部访问的利器-打造灵活的集群网络》介绍了如何通过Ingress实现Kubernetes集群的外部访问。前提条件是已拥有Kubernetes集群并安装了kubectl工具。文章详细讲解了Ingress的基本组成(Ingress Controller和资源对象),选择合适的版本,以及具体的安装步骤,如下载配置文件、部署Nginx Ingress Controller等。此外,还提供了常见问题的解决方案,例如镜像下载失败的应对措施。最后,通过部署示例应用展示了Ingress的实际使用方法。
420 2
|
Kubernetes 容器 Perl
Kubernetes网络插件体系及flannel基础
文章主要介绍了Kubernetes网络插件体系,特别是flannel网络模型的工作原理、配置和测试方法。
367 3
Kubernetes网络插件体系及flannel基础
|
Kubernetes 网络协议 网络安全
k8s中网络连接问题
【10月更文挑战第3天】
968 7
|
Kubernetes 应用服务中间件 nginx
搭建Kubernetes v1.31.1服务器集群,采用Calico网络技术
在阿里云服务器上部署k8s集群,一、3台k8s服务器,1个Master节点,2个工作节点,采用Calico网络技术。二、部署nginx服务到k8s集群,并验证nginx服务运行状态。
3816 2
|
机器学习/深度学习 数据可视化 Linux
Seaborn可视化学习笔记(一):可视化神经网络权重分布情况
这篇文章是关于如何使用Seaborn库来可视化神经网络权重分布的教程,包括函数信息、测试代码和实际应用示例。
345 0
|
Kubernetes 容器
基于Ubuntu-22.04安装K8s-v1.28.2实验(三)数据卷挂载NFS(网络文件系统)
基于Ubuntu-22.04安装K8s-v1.28.2实验(三)数据卷挂载NFS(网络文件系统)
649 0

热门文章

最新文章

推荐镜像

更多