开发者学堂课程【Kubernetes 入门: Kubernetes 网络概念及策略控制】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/51/detail/1019
Kubernetes 网络概念及策略控制
内容介绍:
一、Kubernetes 基本网络模型
二、Netns 探秘
三、主流网络方案简介
四、Network Policy 的用处
五、思考时间
一、Kubernetes 基本网络模型
1、基本法:约法三章+四大目标
l Kubernetes 对于 Pod 间的网络没有任何限制,只需满足如下「三个基本条件」:
l 所有 Pod 可以与其他 Pod 直接通信,无需显式使用 NAT
l 所有 Node 可以与所有 Pod 直接通信,无需显式使用 NAT
l Pod 可见的IP地址确为其他 Pod 与其通信时所用,无需显式转换
l 基于以上准入条件,我们在审视一个网络方案的时候,需要考虑如下
「四大目标」︰
l 容器与容器间的通信
l pod 与 Pod 之间的通信
l Pod 与 Service 间的通信
l 外部世界与 Service 间的通信
2、对基本约束的解释
容器与其宿主存在寄生关系,从而在实现上,容器网络方案可分为Underlay/Overlay 两大派别,其主要的差异在于是否与 Host 网络同层,这样对于微服务发现及治理,容器可访问方式都造成很大的差异,所以社区的同学以 perPodperIP 这种简单武断的模型,摈弃了显示端口映射等 NAT 配置,统一了容器网络对外服务的视角。
二、Netns 探秘
1、Netns 究竟实现了什么
Network namespace 是实现网络虚拟化的内核基础,创建了隔离的网络空间
l 拥有独立的附属网络设备( lo、veth 等虚设备/物理网卡)
l 独立的协议栈,IP 地址和路由表
l iptables 规则
l ipvs 等
nsproxy 相当于运行环境
2、Pod 与 Netns 的关系
每个 Pod 拥有独立的 Netns 空间,Pod 内的 Container 共享该空间,可通过 Loopback 接口 实现通信,或通过共享的 Pod-IP 对外提供服务。别忘记,宿主上还有个 Root Netns,可以看做一个特殊的容器空间。
三、主流网络方案简介
1、典型容器网络实现方案
l 容器网络可能是 Kubernetes 领域最为百花齐放的一个领域,依照 IaaS 层的配置、外部物理网络的设备、性能 or 灵活优先,可以有不同的实现︰
l Flannel,最为普遍的实现,提供多种网络 backend 实现,覆盖多种场景
l Calico,采用 BGP 提供网络直连,功能丰富,对底层网络有要求
l Canal (Flannel for network + Calico for firewalling),嫁接型创新项目
l Cilium,基于 eBPF 和 XDP 的高性能 Overlay 网络方案
l Kube-router,同样采用 BGP 提供网络直连,集成基于 LVS 的负载均衡能力
l Romana,采用 BGP or OSPF 提供网络直连能力的方案
l WeaveNet,采用 UDP 封装实现 L2Overlav,支持用户态(慢,可加密)/内核态(快,不能加宓)两种实现
2、Flannel 方案
Flannel 是目前使用最为普遍的方案,通过将 backend 机制独立,它目前已经支持多种数据路径,也可以适用于 overlay/underlay 等多种场景,封装可以选用用户态 udp(纯用户态实现),内核 Vxlan(性能好),如集群规模不大,处于同一二层域,也可以选择 host-gw 方式。
四、Network Policy 的用处
1、Network Policy 基本概念
Network Policy 提供了基于策略的网络控制,用于隔离应用并减少攻击面。它使用标签选择器模拟传统的分段网络,并通过策略控制它们之间的流量以及来自外部的流量。
在使用 Network Policy 之前,需要注意︰
.apiserver 开启 extensions/v1beta1/networkpolicies
·网络插件要支持 Network Policy,如 Calico、Romana、Weave Net 和 trireme 等
2、配置实例
功能∶通过使用标签选择器(包括 namespaceSelector 和 podSelector )来控制 Pod 之间的流量。
要决定三件事:
l 控制对象︰通过 spec 字段,podSelector 等条件筛选;
l 流方向:Ingress (入 Pod 流量)+from ,
Egress(出 Pod 流量)+to ;
l 流特征︰对端(通过 name/pod Selector ) ,
IP 段( ibBlock ) ,
协议(protocol ),端口( port )
3、小节总结
l Pod 在容器网络中的核心概念是 IP,每个 Pod 必须有内外视角一致的独立 IP 地址
l 影响容器网络性能的关键是拓扑设计,也就数据包端到端的路径设计
l 牢记 Overlay/Underlay 下各种网络方案的设计选择,如果不知道,可以这样选∶普适性最强——Flannel-VxLan,2层可直连——Calico/Flannel-Hostgw
l Network Policy 是个强大的工具,可以实现 I/Engress 的流量精确控制,关键是选择好 PodSelector,定义好流特征
五、思考时间
思考一下
l 为什么网络接口标准化了(CNI ),而网络方案没有标准化?
l 为什么 Network Policy 没有交给一个标准 Controller 来实现,而是交给方案提供方?
l 能不能完全不用 Net-dev 型的设备,实现一个容器网络?
l 网络问题排查,值不值得做一个开源工具实现?