K8s网络从0到1

K8s网络从0到1

前言

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

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

Pod网络概念模型

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

同一节点上的Pod网络

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

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

  1. eth0:节点主机网卡
  2. docker0:虚拟网桥,相当于虚拟交换机
  3. veth0: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进行集成。

小结

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

Service网络

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

服务发现技术演进

  1. DNS方案

  2. Service Registry方案

K8s的Service网络原理

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

关键组件:

  • 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内部服务暴露出去。

LoadBalancer

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

Ingress

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

Kubectl Proxy & Port Forward

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

  • kubectl proxy
  • kubectl port-forward
  • kubectl exec

总结

  1. NodePort是基础,LoadBalancer依赖NodePort
  2. LoadBalancer提供公网访问支持
  3. Ingress通过反向代理暴露多个服务
  4. Service发布type:
    • ClusterIP:仅内部访问
    • NodePort:通过NodePort暴露
    • LoadBalancer:通过LoadBalancer暴露
相关推荐
发光小北4 小时前
Modbus TCP 转 Profinet 主站网关如何应用?
网络·网络协议·tcp/ip
易连EDI—EasyLink7 小时前
易连EDI–EasyLink实现OCR智能数据采集
网络·人工智能·安全·汽车·ocr·edi
@insist1237 小时前
信息安全工程师考点精讲:身份认证核心原理与分类体系(上篇)
大数据·网络·分类·信息安全工程师·软件水平考试
niucloud-admin8 小时前
PHP V6 单商户常见问题——云编译报SSL证书错误的处理方案
php
SmartRadio8 小时前
ESP32-S3 双模式切换实现:兼顾手机_路由器连接与WiFi长距离通信
开发语言·网络·智能手机·esp32·长距离wifi
_.Switch8 小时前
东方财富股票数据JS逆向:secids字段和AES加密实战
开发语言·前端·javascript·网络·爬虫·python·ecmascript
计算机安禾8 小时前
【Linux从入门到精通】第31篇:防火墙漫谈——iptables与firewalld防护指南
linux·运维·php
金色光环9 小时前
FreeModbus释放底层的 TCP 监听端口
服务器·网络·tcp/ip
数智化精益手记局9 小时前
拆解物料管理erp系统的核心功能,看物料管理erp系统如何解决库存积压与缺料难题
大数据·网络·人工智能·安全·信息可视化·精益工程
Nice_Fold10 小时前
Kubernetes DaemonSet、StatefulSet与Service(自用笔记)
笔记·容器·kubernetes