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暴露
相关推荐
张忠琳2 小时前
【containerd 2.1.8】(Part 1)containerd 2.1.8 超深度源码分析 — 总体架构与模块全景
云原生·kubernetes·containerd
皮皮学姐分享-ppx2 小时前
政府绿色采购数据库(2015-2024.3)
大数据·网络·数据库·人工智能·制造
W_chuanqi3 小时前
联想M7615DNA网络打印方法
网络·联想·打印机网络连接
8125035334 小时前
第 9 篇:子网掩码:如何划分“小区”
开发语言·php
我叫黑大帅5 小时前
通过php 中的Route:: 的写法了解什么是静态类调用
后端·面试·php
HavenlonLabs6 小时前
硬件 + SaaS 产品的工程化路径:从系统架构、PCB 设计到工程样机
网络·安全·架构·系统架构·安全架构
Waay7 小时前
K8s ETCD 详解|备份恢复+静态Pod原理+kubectl查询底层流程(面试必考)
面试·kubernetes·etcd
松岩7 小时前
dcgm-exporter部分指标
kubernetes
yychen_java10 小时前
当算法成为武器:AI泛滥时代的多维危机透视与治理路径
网络·人工智能·ai
漫途科技10 小时前
精准盯防危房隐患,智守人居安全|MTB46-4-2A 4G数据采集终端专项应用方案
网络·安全