calico网络原理分析

最近在搭建k8s生产环境的时候,采用了calico作为网络插件。于是写篇博客记录一下。

一、Calico基本介绍

Calico是一个纯三层的协议,为OpenStack虚机和Docker容器提供多主机间通信。Calico不使用重叠网络比如flannel和libnetwork重叠网络驱动,它是一个纯三层的方法,使用虚拟路由代替虚拟交换,每一台虚拟路由通过BGP协议传播可达信息(路由)到剩余数据中心。

二、Calico结构组成

Calico不使用重叠网络比如flannel和libnetwork重叠网络驱动,它是一个纯三层的方法,使用虚拟路由代替虚拟交换,每一台虚拟路由通过BGP协议传播可达信息(路由)到剩余数据中心;Calico在每一个计算节点利用Linux Kernel实现了一个高效的vRouter来负责数据转发,而每个vRouter通过BGP协议负责把自己上运行的workload的路由信息像整个Calico网络内传播——小规模部署可以直接互联,大规模下可通过指定的BGP route reflector来完成。

在这里插入图片描述

结合上面这张图,我们来过一遍 Calico 的核心组件:

Felix: Calico agent,跑在每台需要运行 workload 的节点上,主要负责配置路由及 ACLs 等信息来确保 endpoint 的连通状态;

etcd: 分布式键值存储,主要负责网络元数据一致性,确保 Calico 网络状态的准确性;

BGPClient(BIRD): 主要负责把 Felix 写入 kernel 的路由信息分发到当前 Calico 网络,确保 workload 间的通信的有效性;

BGP Rout

### Kubernetes 服务器网络原理、架构与通信机制 Kubernetes 的网络模型设计旨在简化容器之间的通信,同时保持灵活性和可扩展性。以下是对其网络原理、架构及通信机制的详细介绍。 #### 1. **Kubernetes 网络模型** Kubernetes 提出了三个核心网络概念[^2]: - 每个 Pod 都有一个独立的 IP 地址。 - 所有的 Pods 可以直接通过它们各自的 IP 地址相互通信,无需 NAT。 - Services 获得自己的虚拟 IP 地址,并且可以在集群范围内路由到对应的 Pods。 #### 2. **Kubernetes 网络架构** Kubernetes 的网络由以下几个主要部分组成: #### 2.1 **Cluster Network** Cluster Network 是 Kubernetes 集群内部的专用网络,通常使用 CIDR 表示法定义地址空间。所有的 Nodes 和 Pods 都位于此网络中[^4]。 #### 2.2 **Pod-to-Pod Communication** 在同一个 Node 上的 Pods,默认情况下可以直接通过本地主机网络进行通信。不同 Nodes 上的 Pods 则依赖于底层网络插件(如 Flannel、Calico 或 Weave Net)来实现跨主机通信[^3]。 #### 2.3 **Service Abstraction** Kubernetes Service 是一组逻辑上的 Pods 的抽象表示形式。当创建一个 Service 后,Kubernetes 自动为其分配一个稳定的 VIP(Virtual IP)。所有发往该 VIP 的流量会被重定向到后端的实际 Pods 上[^1]。 #### 2.4 **Network Plugins** Kubernetes 支持多种 CNI(Container Networking Interface)兼容的网络解决方案,例如 Calico、Flannel 和 Canal。这些插件负责实施具体的网络策略,比如子网划分、VLAN 标记等[^2]。 #### 3. **Kubernetes 通信机制** #### 3.1 **Intra-cluster Communication** - **Pod to Pod**: 如前所述,同一节点内的 Pods 使用 localhost;对于跨节点的情况,则借助 Overlay Networks 或 Underlay Networks 实现互联[^4]。 - **Pod to Service**: 当某个 Pod 访问另一个 Service 时,请求会先匹配 DNS 名称解析成相应的 Service IP,再经由 iptables/ipvs 规则转发至目标 Pod[^3]。 #### 3.2 **External Access** 外部世界可以通过几种方法访问 Kubernetes 内的服务: - **NodePort**: 将 Service 映射到每个 Node 的特定端口上,使得外部设备能够通过 `<NodeIP>:<NodePort>` 的方式连接进来[^5]。 - **LoadBalancer**: 对于云提供商支持的情况下,可以自动创建 Load Balancer 并将其指向 Service。 - **Ingress Controller**: 更高级别的入口规则管理系统,允许基于域名、路径等方式精确控制外网流入的数据流方向[^2]。 #### 4. **关键技术点分析** ##### 4.1 **Pause Container Role** 每个新启动的 Pod 中都会包含一个名为 Pause 的特殊容器,它的作用主要是维持整个 Pod 的生命周期以及共享网络命名空间[^4]。 ##### 4.2 **Iptables Rules Management** Kubernetes 主要依靠 Linux 内核层面的 netfilter 框架来进行复杂的包过滤操作。每当新增或者删除某条记录时,系统便会即时更新相关的防火墙表项以便及时生效[^3]。 --- ```python # 示例 Python 脚本模拟简单的 Iptables 查看命令 import os def list_iptables_nat(): result = os.popen('iptables -t nat -L').read() return result print(list_iptables_nat()) ``` --- ###
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值