当前位置: 首页 > news >正文

K8s网络从0到1

K8s网络从0到1

前言

K8s是一个强大的平台,但它的网络比较复杂,涉及很多概念,例如Pod网络,Service网络,Cluster IPs,NodePort,LoadBalancer和Ingress等等。为了帮助大家理解,模仿TCP/IP协议栈,我把K8s的网络分解为四个抽象层,从0到3,除了第0层,每一层都是构建于前一层之上。

K8s网络抽象层

第0层Node节点网络比较好理解,也就是保证K8s节点(物理或虚拟机)之间能够正常IP寻址和互通的网络,这个一般由底层(公有云或数据中心)网络基础设施支持。本文主要介绍第1到3层网络。

Pod网络概念模型

Pod相当于是K8s云平台中的虚拟机,它是K8s的基本调度单位。所谓Pod网络,就是能够保证K8s集群中的所有Pods(包括同一节点上的,也包括不同节点上的Pods),逻辑上看起来都在同一个平面网络内,能够相互做IP寻址和通信的网络。

Pod网络简化概念模型

同一节点上的Pod网络

Pod中可以有多个容器,这些容器共享Pod的网络栈和其它资源如Volume。共享网络栈意味着容器可以通过localhost相互访问,但同一端口上不能同时开启服务。

同一节点上的Pod网络依赖于3个关键网络设备:

  1. eth0:节点主机网卡
  2. docker0:虚拟网桥,相当于虚拟交换机
  3. veth0:Pod的虚拟网卡

同一节点Pod网络

Pod的IP由docker0网桥分配,例如:

  • docker0网桥IP:172.17.0.1
  • Pod1 IP:172.17.0.2
  • Pod2 IP:172.17.0.3

在同一网段内,这些Pods可以进行IP寻址和互通。

不同节点间的Pod网络

不同节点间的Pod网络互通主要有两种方案:

  1. 路由方案
    路由方案
    通过配置路由器支持Pod网络的转发。

  2. 覆盖网络方案
    覆盖网络
    采用隧道封包技术,如flannel/weavenet等。

CNI简介

CNI(Container Network Interface)是K8s的Pod网络集成标准,不同的Pod网络技术可以通过CNI插件形式和K8s进行集成。

CNI架构

小结

  1. K8s网络分四层:节点网络、Pod网络、Service网络、外部接入网络
  2. 节点内Pod网络依赖虚拟网桥和虚拟网卡
  3. 节点间Pod网络可采用路由方案或覆盖网络方案
  4. CNI是Pod网络集成标准

Service网络

Service网络主要解决服务发现和负载均衡问题。

Service网络

服务发现技术演进

  1. DNS方案
    DNS方案

  2. Service Registry方案
    Service Registry

K8s的Service网络原理

K8s通过ServiceName+ClusterIP统一屏蔽服务发现和负载均衡。

K8s服务发现原理

关键组件:

  • Kubelet:负责启动Pod实例并向Master注册
  • Kube-Proxy:监听Master,修改iptables规则
  • Kube-DNS:实现ServiceName->ClusterIP映射

总结

  1. Service网络解决服务发现和负载均衡
  2. ClusterIP统一屏蔽服务发现和负载均衡
  3. 客户端通过Kube-Proxy + iptables转发实现
  4. 现代微服务发现机制和传统Linux内核机制的结合

外部接入网络

K8s通过NodePort、LoadBalancer和Ingress等方式将内部服务暴露到外部网络。

外部接入网络

NodePort

通过Kube-Proxy在节点上暴露一个监听端口,将K8s内部服务暴露出去。

NodePort

LoadBalancer

在NodePort基础上引入负载均衡器。

LoadBalancer

Ingress

在K8s内部部署反向代理服务,通过一个LB暴露多个服务。

Ingress

Kubectl Proxy & Port Forward

本地调试K8s服务的简易方法:

  • kubectl proxy
  • kubectl port-forward
  • kubectl exec

Kubectl调试

总结

  1. NodePort是基础,LoadBalancer依赖NodePort
  2. LoadBalancer提供公网访问支持
  3. Ingress通过反向代理暴露多个服务
  4. Service发布type:
    • ClusterIP:仅内部访问
    • NodePort:通过NodePort暴露
    • LoadBalancer:通过LoadBalancer暴露

Service类型

http://www.xdnf.cn/news/341929.html

相关文章:

  • 《易语言学习大全》
  • k8s术语之DaemonSet
  • [python] 函数基础
  • 深入解析asyncio的实现与应用
  • C#简易Modbus从站仿真器
  • 如何将 Build at、Hash 和 Time git 的 Tag 号等构建信息,自动写入一个 JSON 文件
  • sql serve 多表联合查询,根据一个表字段值动态改变查询条件
  • 【Dify系列教程重置精品版】第七章:在Dify对话中显示本地图片之FastAPI与Uvicorn
  • PCL点云按指定方向进行聚类(指定类的宽度)
  • mission planner烧录ardupilot固件报错死机
  • ESP32开发之freeRTOS的互斥量
  • 网络协议之DHCP和PXE分析
  • QT中多线程的实现
  • Rust包、crate与模块管理
  • 领域驱动设计(DDD)解析
  • 2025年4月AI算力领域热点事件全景报告
  • 配置Hadoop集群环境-使用脚本命令实现集群文件同步
  • 手撕基于AMQP协议的简易消息队列-1(项目介绍与开发环境的搭建)
  • uniapp|实现多终端聊天对话组件、表情选择、消息发送
  • onlyoffice 源码调试指南-ARM和x86双模式安装支持
  • 前端面试宝典---JavaScript import 与 Node.js require 的区别
  • uni-pages-hot-modules插件:uni-app的pages.json的模块化及模块热重载
  • JavaScript基础 (二)
  • 苍穹外卖(数据统计-图形报表)
  • QtGUI模块功能详细说明, 字体和文本渲染(四)
  • 单片机-STM32部分:8、外部中断
  • Mysql-OCP PPT课程讲解并翻译
  • 【并发编程】MySQL锁及单机锁实现
  • 【Android】动画原理解析
  • IT/OT 融合架构下的工业控制系统安全攻防实战研究