Kubernetes 网络 | 学习笔记

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 快速学习 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

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
22天前
|
存储 算法 网络虚拟化
【计算机网络】学习笔记,第三篇:数据链路层
现在的光纤宽带接入 FTTx 都要使用 PPPoE 的方式进行接入。在 PPPoE 弹出的窗口中键入在网络运营商购买的用户名和密码,就可以进行宽带上网了 利用 ADSL 进行宽带上网时,从用户个人电脑到家中的 ADSL 调制解调器之间,也是使用 RJ-45 和 5 类线(即以太网使用的网线)进行连接的,并且也是使用 PPPoE 弹出的窗口进行拨号连接的
27 5
|
28天前
|
容器 Perl Kubernetes
深入 Kubernetes 网络:实战K8s网络故障排查与诊断策略
本文介绍了Kubernetes网络的基础知识和故障排查经验,重点讨论了私有化环境中Kubernetes网络的挑战。首先,文章阐述了Kubernetes网络模型的三大核心要素:Pod网络、Service网络和CNI,并强调了其在容器通信和服务发现中的作用。接着,通过三个具体的故障案例,展示了网络冲突、主节点DNS配置更改导致的服务中断以及容器网络抖动问题的解决过程,强调了网络规划、配置管理和人员培训的重要性。最后,提到了KubeSkoop exporter工具在监控和定位网络抖动问题中的应用。通过这些案例,读者可以深入了解Kubernetes网络的复杂性,并学习到实用的故障排查方法。
146284 18
|
21天前
|
Kubernetes 网络协议 Cloud Native
Kubernetes网络问题排查分享两则(1)——calico特定场景下的网络性能问题
在对Kubernetes项目[kosmos](https://github.com/kosmos-io/kosmos)与Calico网络性能进行对比测试时,发现kosmos在跨集群容器网络的性能显著优于Calico的集群内网络(约6Gbit/s对比2.9Gbit/s)。物理机网络测试达到9.38Gbit/s,显示Calico有68%的性能损耗。问题定位到网卡的checksum/offload参数,尝试用`ethtool`调整后虽短暂提升,但随后恢复原状。转载自:https://mp.weixin.qq.com/s/XsQZCSqZAXJK46zqc7IpLw
|
2天前
|
机器学习/深度学习 数据采集 算法框架/工具
神经网络学习笔记(2)
神经网络学习笔记(2)
|
3天前
|
机器学习/深度学习 JSON Kubernetes
一篇文章讲明白k8s网络插件flannel模式剖析:vxlan、host
一篇文章讲明白k8s网络插件flannel模式剖析:vxlan、host
|
3天前
|
机器学习/深度学习 JSON Kubernetes
一篇文章讲明白k8s网络插件flannel模式剖析:vxlan、host
一篇文章讲明白k8s网络插件flannel模式剖析:vxlan、host
|
2月前
|
Kubernetes 网络虚拟化 网络架构
k8s 网络组件详细 介绍
k8s 网络组件详细 介绍
|
2月前
|
监控 Java 数据库连接
【后台开发】TinyWebser学习笔记(1)网络编程基础知识
【后台开发】TinyWebser学习笔记(1)网络编程基础知识
34 3
|
2月前
|
存储 监控 Kubernetes
Kubernetes 集群的监控与性能优化策略网络安全与信息安全:防范漏洞、加强加密、提升安全意识
【5月更文挑战第27天】 在微服务架构日益普及的背景下,容器编排工具如Kubernetes成为运维工作的核心。然而,随之而来的是监控复杂性增加和性能调优的挑战。本文将深入探讨针对Kubernetes集群的监控方案和性能优化技巧,旨在帮助读者构建一个高效、稳定的容器化环境。通过分析集群资源消耗模式,结合实时监控数据,本文提出了一系列实用的优化措施,以期提高系统响应速度,降低资源浪费,确保服务的高可用性。
|
2月前
|
Kubernetes 调度 Docker
Ubantu docker学习笔记(十一)k8s基本操作
Ubantu docker学习笔记(十一)k8s基本操作