Kubernetes 架构与 Ingress 原理详解

Docker · Kubernetes · Ingress 完整技术图谱

Control Plane 控制平面
Node 计算节点
Pod 容器组
Ingress 入口
Container 容器

一、Kubernetes 核心架构

Kubernetes Cluster Control Plane (Master) etcd 分布式配置存储 API Server 集群统一入口 Scheduler Pod 调度 Controller 控制器管理 Cloud Controller Manager 云服务商集成 (可选) Node 1 kubelet 节点代理 kube-proxy 网络代理 Container 1 Container 2 Pod Container Pod Node 2 kubelet 节点代理 kube-proxy 网络代理 Container Pod Container Pod External Users 浏览器 / APP / CLI kubectl Service 负载均衡 ClusterIP / NodePort Ingress HTTP/HTTPS 路由 域名 + 路径转发 图1: Kubernetes 整体架构

🎛️ Control Plane (控制平面)

负责整个集群的决策和控制,是 K8S 的大脑

  • API Server: 集群统一 API 入口,所有组件都通过它通信
  • etcd: 高可用键值存储,保存集群所有状态数据
  • Scheduler: 负责 Pod 调度,选择最优节点部署
  • Controller Manager: 运行各种控制器,维护集群期望状态

🖥️ Node (工作节点)

实际运行 Pod 的工作机器,可以是物理机或虚拟机

  • kubelet: 节点代理,负责与 API Server 通信,管理 Pod 生命周期
  • kube-proxy: 节点网络代理,实现 Service 负载均衡
  • Container Runtime: 容器运行时,默认使用 Docker/Containerd
  • Pod: K8S 最小调度单位,包含一个或多个容器

二、Docker 与 Kubernetes 的关系

Docker 容器化平台 Docker Build 构建镜像 Docker Pull 拉取镜像 Docker Run 运行容器 使用 Kubernetes 容器编排平台 Container Runtime Docker / Containerd / CRI-O Pod K8S 最小调度单位 Deployment 声明式管理 编排 微服务应用 API Web DB 多副本 · 自动扩缩容 滚动更新 · 故障自愈 N 图2: Docker 与 K8S 关系
对比维度 Docker Kubernetes
定位 容器化平台(创建和运行容器) 容器编排平台(管理多个容器/集群)
核心能力 镜像构建、容器运行、本地管理 自动调度、弹性伸缩、服务发现、负载均衡
作用范围 单机或单个主机 跨多台机器的集群
关系 Docker 是 K8S 的容器运行时之一,K8S 通过 CRI 接口使用 Docker/Containerd

三、Ingress 详解

Internet 外部用户请求 example.com DNS 域名解析 *.example.com Ingress Controller Ingress 路由规则配置 Nginx 反向代理/负载均衡 TLS SSL 终止 api-service ClusterIP: 10.0.1.10 Port: 8080 web-service ClusterIP: 10.0.1.11 Port: 3000 admin-service ClusterIP: 10.0.1.12 Port: 8081 api-pod Container api-pod Container (副本) web-pod Container admin-pod Container Ingress 路由规则 api.example.com → api-service:8080 www.example.com → web-service:3000 admin.example.com → admin-service:8081 图3: Ingress 请求处理流程

📋 Ingress 是什么?

Kubernetes 的 HTTP/HTTPS 入口,负责将外部请求路由到集群内部的 Service

  • 路由规则: 基于域名和路径将请求分发到不同 Service
  • SSL/TLS 终止: 提供 HTTPS 加密,卸载 SSL 证书
  • 负载均衡: Ingress Controller 通常内置负载均衡
  • Name-based Virtual Hosting: 支持多域名共享同一 IP

⚙️ Ingress Controller

实现 Ingress 功能的组件,常用的是 Nginx Ingress Controller

  • Nginx Ingress: 最流行,功能丰富,性能优秀
  • Traefik: 云原生,支持自动 Let's Encrypt
  • 云厂商 LB: AWS ALB, GCP Cloud LB, 阿里云 SLB
  • Envoy/Istio: 服务网格方案,更高级的流量管理

Ingress 资源定义示例

apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: my-app-ingress spec: rules: - host: api.example.com http: paths: - path: / pathType: Prefix backend: service: name: api-service port: number: 8080 # TLS 配置 tls: - hosts: - api.example.com secretName: api-tls-secret

四、完整请求处理流程

1

DNS 解析

用户在浏览器输入 api.example.com → DNS 服务器解析为 Ingress Controller 的公网 IP

2

DNS → Ingress Controller

请求到达 K8S 集群边缘的 Ingress Controller(通常绑定 NodePort 或 LoadBalancer)

3

Ingress Controller 匹配规则

Controller 根据 Ingress 资源定义的规则,基于 Host 头和 path 匹配对应的 Service

4

Service 负载均衡

请求被转发到 Service,kube-proxy 通过 iptables/ipvs 做负载均衡,选择一个 Pod

5

Pod 处理请求

选中的 Pod 内的 Container 接收请求,处理完成后沿原路返回响应

User Browser DNS 解析 IP Ingress 路由匹配 Service 负载均衡 Pod Container Response 返回给用户 图4: 请求完整处理流程

五、补充:Docker 与 Containerd

Kubernetes 从 v1.24 开始移除了对 dockershim 的内置支持,现在推荐直接使用 containerdCRI-O 作为容器运行时。

组件 作用 说明
Docker 完整的容器平台 包含 build, run, pull, compose 等全套工具
containerd 容器运行时 K8S 只需容器运行能力,不需要 Docker 全部功能
CRI 容器运行时接口 K8S 与容器运行时之间的标准接口
runc 容器隔离执行 实际创建和运行容器的底层工具