NipGeihou's blog NipGeihou's blog
  • Java

    • 开发规范
    • 进阶笔记
    • 微服务
    • 快速开始
    • 设计模式
  • 其他

    • Golang
    • Python
    • Drat
  • Redis
  • MongoDB
  • 数据结构与算法
  • 计算机网络
  • 应用

    • Grafana
    • Prometheus
  • 容器与编排

    • KubeSphere
    • Kubernetes
    • Docker Compose
    • Docker
  • 组网

    • TailScale
    • WireGuard
  • 密码生成器
  • 英文单词生成器
🍳烹饪
🧑‍💻关于
  • 分类
  • 标签
  • 归档

NipGeihou

我见青山多妩媚,料青山见我应如是
  • Java

    • 开发规范
    • 进阶笔记
    • 微服务
    • 快速开始
    • 设计模式
  • 其他

    • Golang
    • Python
    • Drat
  • Redis
  • MongoDB
  • 数据结构与算法
  • 计算机网络
  • 应用

    • Grafana
    • Prometheus
  • 容器与编排

    • KubeSphere
    • Kubernetes
    • Docker Compose
    • Docker
  • 组网

    • TailScale
    • WireGuard
  • 密码生成器
  • 英文单词生成器
🍳烹饪
🧑‍💻关于
  • 分类
  • 标签
  • 归档
  • Linux

  • Docker

  • 云原生

  • Kubernetes

    • kubectl - 常用命令
    • 概念
    • 安装
    • 操作
    • 负载均衡
    • Service
    • Ingress(网关)
    • 存储抽象
    • 网络
      • 理论
        • Kubernetes网络
        • 节点网络
        • 容器网络
        • 集群网络
        • 网络安全
        • 网络基础
        • TCP/IP网络模型
        • 以太网L2交换
        • IP L3转发
        • 虚拟机和容器网络
        • Network namespace & veth pair & bridge
        • Pod网络创建过程
        • CNI(container network interface)
        • 简介
        • 主要功能
        • 工作机制
        • 实现一个CNI
        • vxlan
        • BGP
      • CNI Plugin
        • Flannel
        • Calico
        • Multus
      • 参考资料
    • 笔记

    • helm

    • 示例

  • KubeSphere

  • K3S

  • 笔记

  • PVE

  • 维修

  • DevOps

  • 云服务

  • 路由器

  • Hyper-V

  • Windows

  • macOS

  • 运维
  • Kubernetes
NipGeihou
2022-11-04
目录

网络

# 理论

# Kubernetes 网络

image-20221104130654642

# 节点网络

  • “物理上” 是可达的
  • 承载跨节点网络流量
  • 对 CNI 插件选型有影响

# 容器网络

  • Pod 在相同 node 上可达
  • Pod 跨 node 之间可达
  • CNI 插件负责创建维护

# 集群网络

  • 提供服务的抽象
  • 服务到 Pod 的动态映射(DNS)
  • 提供负载均衡(负载均衡算法转发流量到不同 Pod)
  • 提供服务发现(能感知到 Pod 的变化)

# 网络安全

场景:不希望前端服务可以,跨过后端服务,访问数据库服务

  • 外部网络访问
  • 安全策略

# 网络基础

# TCP/IP 网络模型

image-20221104131443670

# 以太网 L2 交换

image-20221104132231185

(家用)路由器:即是二层 AP 设备,又是三层路由设备

场景:设备 A 发送请求到设备 B

  1. 设备 A 需要通过 ARP 协议广播询问 192.168.2.110 得知对应的设备 MAC 地址
  2. 成功响应后,设备 A 可知设备 B 的 ip、MAC 地址,设备 B 可知设备 A 的 ip、MAC 地址,路由器(MAC 表)可知设备 A、B (MAC) 对应的端口 (port)。

# IP L3 转发

image-20221104133431193

场景:访问百度

  1. 通过 DNS 协议得到 www.baidu.com 对应的 ip 地址 14.215.177.38
  2. 由于百度的 ip 地址不在当前子网,于是把流量转发给路由器网关
  3. 路由器网关收到数据包,发现不是自己子网的,于是又转发给光猫网关
  4. 光猫网关收到数据包,发现不是自己子网的...

# 虚拟机和容器网络

image-20221104135352737

# Network namespace & veth pair & bridge

image-20221104135924012

#

# Pod 网络创建过程

image-20221104140509704

# CNI(container network interface)

# 简介

  • CNCF 项目,提供实现无关的规范来创建配置容器网络(不仅仅用于 k8s,包括 Mesos、 CloudFoundry、Podman、CRI-O)

  • 定义执行流程和配置格式

# 主要功能

  • 创建网络接口,连接 Pod 之间的网络。通过 overlay, route & underlay etc,(不通过 NAT)
  • 进行 IP 地址管理,分配 pod IP 地址
  • 提供网络安全策略

# 工作机制

  • 通过 JSON 配置文件定义网络配置; /etc/cni/net.d/xxnet.conf

  • 通过调用可执行程序(CNI 插件)来对容器网络执行配置; /opt/cni/bin/xxnet

  • 通过链式调用的方式来支持多插件的组合使用。

  • 调用过程:Kubelet->CRI->CNI-> 读取配置 -> 执行二进制插件

# 实现一个 CNI

  • 支持 ADD, DEL, CHECK, VERSION 等操作
  • 实现一组参数作为输入

# vxlan

image-20221104143903346

  • VXLAN (虚拟扩展局域网),是由 IETF 定义的 NVO3 (Network Virtualization over Layer 3) 标准技术之一,是对传统 VLAN 协议的一种扩展。
  • VXLAN 本质上是一种隧道技术,在源网络设备与目的网络设备之间的 IP 网络上,建立一条逻辑隧道,将用户侧报文经过特定的封装后通过这条隧道转发。将 L2 的以太帧封装到 UDP 报文 (即 L2 over L4) 中,并在 L3 网络中传输。
  • 解决了 vlan 的一些限制:vlan 数量,流量泛洪,FDB 表溢出
  • 适应与大规模数据中心网络虚拟化,支持多租户

# BGP

  • BGP (Border Gateway Protocol) 是一个去中心化自治路由协议,运用在不同的 AS (自治系统) 之间,是一种路径矢量路由协议,用于 AS 间路由信息的交换;可以实现自治系统间无环路的域间路由。BGP 是沟通 Internet 广域网的主用路由协议。
  • AS:是指在一个实体管辖下的拥有相同选路策略的 IP 网络。BGP 网络中的每个 AS 都被分配一个唯的 AS 号,用于区分不同的 AS。
  • BGP Speaker:运行 BGP 的路由器称为 BGP 发言者,或 BGP 路由器
  • BGP Peer:两个建立 BGP 会话的路由器互为对等体 (Peer),BGP 对等体之间交换 BGP 路由表。
  • RR (Router Reflector):允许把从 IBGP Peer 学到的路由反射到其他 IBGP Peer 的 BGP 设备。避免了 AS 内路由器的 mesh 网络。同时 RR 将 EBGP peer 学到的路由发布给其 AS 内部 peer.

# CNI Plugin

# Flannel

image-20221104161549134

  • 每个节点分配一个子网,所有 pod 从本地子网中分配 ip
  • Pod 在本节点通过 bridge L2 通信
  • 默认情况下,跨节点通过 vxlan 通信。通过 flannel.1 这个 udp 隧道进行流量的转发
  • 除了 vxlan, flannel 也支持 IPIP(IP 隧道)、Host-GW(路由表实现)两种后端。

# Calico

image-20221104203907919

  • Felix 运行在每个节点的 agent 进程,主要负责网络接口管理和监听、路由、ARP 管理、ACL 管理和同步、状态上报等
  • etcd 主要负责网络元数据的存储和一致性
  • BIRD 主要负责把 Felix 写入 Kernel 的路由信息分发到当前 Calico 网络
  • IP 地址管理:可以使用 host-local 或 calico-ipam 做地址管理。
  • 大规模部署时使用,据弃所有节点互联的 mesh 模式,通过一个或者多个 BGP Route Reflector 来完成集中式
  • 由于 Calico BGP 是一种纯三层的实现,因此可以避免与二层方案相关的数据包封装的操作,中间没有 NAT 没有的 overlay,所以它的转发效率高
  • BGP 的限制是比如二层可达,如果节点属于不同二层网络,需要用 IPinIP/vxlan 做隧道。

# Multus

todo

如何查看当前Kubernetes的CNI插件?

kubectl get daemonset -n kube-system

# 参考资料

  • 深入理解 k8s 网络 (1): 概述_哔哩哔哩_bilibili (opens new window)
上次更新: 2024/03/11, 22:37:05
存储抽象
切换CIDR

← 存储抽象 切换CIDR→

最近更新
01
iSCSI服务搭建
05-10
02
磁盘管理与文件系统
05-02
03
网络测试 - iperf3
05-02
更多文章>
Theme by Vdoing | Copyright © 2018-2025 NipGeihou | 友情链接
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式