K8S网络详解
按照我自己的理解,k8s网络分三个层面(由里到外):
- 容器网络(不同容器之间怎么相互访问)
- 集群内网络(不同节点之间怎么相互访问)
- 集群外网络(集群外怎么访问到集群内的服务)
容器网络
熟悉docker的同学会知道,docker创建的容器之间会通过一张docker0的网卡相互通信。而k8s社区为了方便用户适应各自的网络情况,暴露出一套api接口------cni,用户只要实现了这套接口就可以自定义容器网络配置策略。
CNI(Container Network Interface)是由一组用于配置Linux容器的网络接口的规范和库组成,同时还包含了一些插件。CNI仅关心容器创建时的网络分配,和当容器被删除时释放网络资源。通过此链接浏览该项目:https://github.com/containernetworking/cni。
- cni设计考量点
- 容器运行时必须在调用任何插件之前为容器创建一个新的网络命名空间。
- 然后,运行时必须确定这个容器应属于哪个网络,并为每个网络确定哪些插件必须被执行。
- 网络配置采用JSON格式,可以很容易地存储在文件中。网络配置包括必填字段,如name和type以及插件(类型)。网络配置允许字段在调用之间改变值。为此,有一个可选的字段args,必须包含不同的信息。
- 容器运行时必须按顺序为每个网络执行相应的插件,将容器添加到每个网络中。
- 在完成容器生命周期后,运行时必须以相反的顺序执行插件(相对于执行添加容器的顺序)以将容器与网络断开连接。
- 容器运行时不能为同一容器调用并行操作,但可以为不同的容器调用并行操作。
- 容器运行时必须为容器订阅ADD和DEL操作,这样ADD后

本文深入探讨K8S网络的三大层面:容器网络、集群内网络和集群外网络。详细介绍了CNI插件和IPAM插件的作用,以及Service、Endpoints和Ingress在K8S网络中的应用。
最低0.47元/天 解锁文章
3万+

被折叠的 条评论
为什么被折叠?



