Kubernetes (K8S) 基础架构深度解析:从原理到请求全流程

文章主题:Kubernetes 集群架构与核心组件工作原理
适用场景:K8S 入门学习、架构设计、故障排查
技术栈:Kubernetes、Docker、Containerd、Linux 网络


目录


一、前言

Kubernetes(简称 K8S)是目前最流行的容器编排平台,它帮助我们自动化部署、扩展和管理容器化应用。然而,对于初学者来说,K8S 的架构和组件交互往往显得复杂。

本文将深入浅出地讲解 K8S 的基础架构,重点回答两个核心问题:

  1. Master 节点如何与 Node 节点通信并调度任务?
  2. 用户的 HTTP 请求如何经过层层路由最终到达 Pod 并返回数据?

二、Kubernetes 整体架构概览

2.1 集群架构示意图

┌─────────────────────────────────────────────────────────────┐
│                    Kubernetes Cluster                        │
├─────────────────────────────────────────────────────────────┤
│                                                              │
│  ┌──────────────────┐         ┌──────────────────────────┐  │
│  │  Control Plane   │         │      Worker Node 1       │  │
│  │  (Master 节点)   │         │                          │  │
│  │                  │         │  ┌────────────────────┐  │  │
│  │  • API Server    │◄────────┤─►│  kubelet           │  │  │
│  │  • etcd          │         │  │                    │  │  │
│  │  • Scheduler     │         │  │  ┌──────────────┐  │  │  │
│  │  • Controller    │         │  │  │  Pod 1       │  │  │  │
│  │    Manager       │         │  │  │  (Container) │  │  │  │
│  │                  │         │  │  └──────────────┘  │  │  │
│  └────────┬─────────┘         │  │                    │  │  │
│           │                   │  │  ┌──────────────┐  │  │  │
│           │                   │  │  │  Pod 2       │  │  │  │
│           │                   │  │  │  (Container) │  │  │  │
│           │                   │  │  └──────────────┘  │  │  │
│           │                   │  │                    │  │  │
│           │                   │  └────────────────────┘  │  │
│           │                   │                          │  │
│           │                   │  • kube-proxy            │  │
│           │                   │  • Container Runtime     │  │
│           │                   └──────────────────────────┘  │
│           │                                                  │
│           │                   ┌──────────────────────────┐  │
│           └───────────────────┤      Worker Node 2       │  │
│                               │  (结构同 Node 1)         │  │
│                               └──────────────────────────┘  │
│                                                              │
│  ┌──────────────────────────────────────────────────────┐   │
│  │               外部用户 / 负载均衡器                    │   │
│  │          HTTP Request → Ingress → Service → Pod      │   │
│  └──────────────────────────────────────────────────────┘   │
─────────────────────────────────────────────────────────────┘

2.2 架构分层

Kubernetes 集群主要分为两大层次:

  1. 控制平面(Control Plane):负责整个集群的管理和决策
  2. 工作节点(Worker Node):负责运行实际的应用容器

三、控制平面(Control Plane)核心组件

控制平面是 K8S 的"大脑",包含以下核心组件:

3.1 API Server(kube-apiserver)

作用:集群的"唯一入口"和"通信枢纽"

┌─────────────────────────────────────┐
│         kube-apiserver              │
─────────────────────────────────────┤
│  • 接收所有 REST API 请求            │
│  • 认证(Authentication)            │
│  • 授权(Authorization)             │
│  • 准入控制(Admission Control)     │
│  • 将数据持久化到 etcd               │
│  • 提供 Watch 机制实现实时监听        │
└─────────────────────────────────────┘

关键特性:

  • ✅ 所有组件(包括 kubectl、kubelet、controller-manager)都通过 API Server 通信
  • ✅ 无状态设计,可以水平扩展
  • ✅ 不直接调用其他组件,而是通过 etcd 和 Watch 机制间接交互

示例:

# 用户通过 kubectl 创建 Pod
kubectl create -f pod.yaml

# 请求流程:
# kubectl → API Server → 认证 → 授权 → 写入 etcd

3.2 etcd(分布式键值存储)

作用:集群的"数据库",存储所有集群状态和配置

┌─────────────────────────────────────┐
│              etcd                   │
├─────────────────────────────────────┤
│  • 存储所有集群数据                  │
│  • 高可用(Raft 共识算法)           │
│  • 支持 Watch 监听机制               │
│  • 数据示例:                        │
│    /registry/pods/default/pod-1      │
│    /registry/nodes/node-1            │
│    /registry/services/default/svc-1  │
└─────────────────────────────────────┘

存储内容:

  • Pod、Deployment、Service 等资源定义
  • Node 状态信息
  • ConfigMap、Secret 配置
  • 集群事件和状态

3.3 Scheduler(调度器)

作用:决定 Pod 应该运行在哪个 Node 上

┌─────────────────────────────────────┐
│          kube-scheduler             │
├─────────────────────────────────────┤
│  • 监听未调度的 Pod                  │
│  • 根据资源需求、亲和性、污点等规则   │
│  • 选择最优的 Node                   │
│  • 更新 Pod 的 nodeName 字段         │
└─────────────────────────────────────

调度流程:

1. API Server 发现新 Pod(nodeName 为空)
2. Scheduler 监听到这个事件
3. 执行过滤(Filtering):排除不满足条件的 Node
4. 执行打分(Scoring):给候选 Node 打分
5. 选择最高分的 Node
6. 通过 API Server 更新 Pod 的 nodeName

3.4 Controller Manager(控制器管理器)

作用:维护集群的"期望状态"与"实际状态"一致

┌─────────────────────────────────────┐
│      kube-controller-manager        │
├─────────────────────────────────────┤
│  包含多个控制器:                     │
│  • Node Controller:监控节点状态     │
│  • Replication Controller:维持 Pod  │
│    副本数                            │
│  • Deployment Controller:管理部署   │
│  • Job Controller:管理一次性任务    │
│  • Service Controller:管理 Service  │
└─────────────────────────────────────

工作原理:

循环执行(Control Loop):
1. 从 etcd 读取"期望状态"(Desired State)
2. 从 API Server 获取"实际状态"(Current State)
3. 比较两者差异
4. 执行操作使实际状态趋近期望状态

四、工作节点(Worker Node)核心组件

Worker Node 是实际运行容器的工作节点,包含以下核心组件:

4.1 kubelet

作用:Node 节点上的"代理",负责管理 Pod 和容器

┌─────────────────────────────────────┐
│            kubelet                  │
├─────────────────────────────────────┤
│  • 监听 API Server(通过 Watch)     │
│  • 接收 Pod 创建/删除指令             │
│  • 调用容器运行时(Containerd/       │
│    Docker)创建容器                  │
│  • 执行健康检查(Liveness/           │
│    Readiness Probe)                 │
│  • 定期上报节点状态到 API Server     │
─────────────────────────────────────┘

工作流程:

1. kubelet 启动后向 API Server 注册节点
2. 持续监听分配给本节点的 Pod
3. 当收到新 Pod 指令时:
   a. 下载镜像
   b. 创建容器
   c. 启动容器
   d. 执行健康检查
4. 定期上报节点和 Pod 状态

4.2 kube-proxy

作用:维护节点上的网络规则,实现 Service 的负载均衡

┌─────────────────────────────────────┐
│          kube-proxy                 │
├─────────────────────────────────────┤
│  • 监听 Service 和 Endpoint 变化     │
│  • 在节点上配置 iptables/ipvs 规则   │
│  • 实现 Service 的虚拟 IP 路由        │
│  • 支持三种模式:                    │
│    - iptables(默认)                │
│    - ipvs(高性能)                  │
│    - userspace(已废弃)             │
└─────────────────────────────────────┘

4.3 Container Runtime(容器运行时)

作用:真正运行容器的底层引擎

┌─────────────────────────────────────┐
│       Container Runtime             │
├─────────────────────────────────────┤
│  常见实现:                          │
│  • containerd(推荐)                │
│  • CRI-O                            │
│  • Docker(已弃用,通过 dockershim) │
│                                      │
│  职责:                              │
│  • 拉取镜像                          │
│  • 创建和启动容器                    │
│  • 管理容器生命周期                  │
└─────────────────────────────────────┘

五、Master 如何调度任务到 Node 节点?

5.1 完整调度流程

让我们以创建一个 Pod 为例,详细讲解 Master 如何与 Node 节点交互:

Container Runtime kubelet (Node) Controller Manager Scheduler etcd API Server 用户/kubectl Container Runtime kubelet (Node) Controller Manager Scheduler etcd API Server 用户/kubectl 1. 提交 Pod 创建请求 2. 认证 & 授权 3. 存储 Pod 定义(nodeName 为空) 4. 确认写入 5. Watch 到新 Pod(nodeName 为空) 6. 执行调度算法 6a. 过滤(Filtering) 6b. 打分(Scoring) 7. 更新 Pod(设置 nodeName=node-1) 8. 持久化更新 9. Watch 到 Pod 已调度 10. 检查 Pod 状态 11. Watch 到分配给自己的 Pod 12. 拉取镜像 & 创建容器 13. 容器启动成功 14. 上报 Pod 状态(Running) 15. 更新状态

5.2 详细步骤解析

步骤 1-4:用户提交请求并持久化
# 用户执行
kubectl apply -f pod.yaml

# pod.yaml 内容
apiVersion: v1
kind: Pod
metadata:
  name: my-app
  namespace: default
spec:
  containers:
  - name: app
    image: nginx:1.21
    ports:
    - containerPort: 80

交互过程:

  1. kubectl 发送 HTTP POST 请求到 API Server
  2. API Server 验证用户身份(认证)
  3. API Server 检查用户权限(授权)
  4. API Server 将 Pod 定义写入 etcd,此时 nodeName 字段为空
步骤 5-8:Scheduler 调度 Pod

Scheduler 监听机制:

// Scheduler 通过 Watch 机制监听 Pod 变化
// 伪代码示意
watcher := apiServer.Watch("/registry/pods")
for event := range watcher.ResultChan() {
    pod := event.Object.(*Pod)
    if pod.Spec.NodeName == "" {
        // 这是一个未调度的 Pod,需要调度
        nodeName := schedule(pod)
        pod.Spec.NodeName = nodeName
        apiServer.Update(pod)
    }
}

调度算法详解:

  1. 过滤阶段(Predicate):排除不满足条件的 Node

    • PodFitsResources:节点资源是否充足?
    • PodFitsHostPorts:端口是否冲突?
    • HostName:是否指定了特定节点?
    • NodeAffinity:节点亲和性匹配?
    • Taints/Tolerations:污点和容忍度?
    
  2. 打分阶段(Priority):给候选 Node 打分

    • LeastRequestedPriority:资源使用率最低的节点得分高
    • BalancedResourceAllocation:资源分配最均衡的节点得分高
    • ImageLocalityPriority:镜像已在节点的得分高
    • NodeAffinityPriority:亲和性匹配度高的得分高
    
  3. 选择最优节点:

    最终得分 = Σ(各规则得分 × 权重)
    选择得分最高的 Node
    
步骤 9-10:Controller Manager 监控状态

Controller Manager 持续监控 Pod 状态:

• 检查 Pod 是否成功调度
• 检查 Pod 是否正常运行
• 如果 Pod 失败,根据重启策略处理
• 更新 Pod 状态到 API Server
步骤 11-15:kubelet 执行容器创建

kubelet 工作流程:

// kubelet 监听分配给自己的 Pod
watcher := apiServer.Watch("/registry/pods")
for event := range watcher.ResultChan() {
    pod := event.Object.(*Pod)
    
    // 检查 Pod 是否分配给当前节点
    if pod.Spec.NodeName == currentNodeName {
        // 调用容器运行时创建容器
        containerID := runtime.CreateContainer(pod)
        runtime.StartContainer(containerID)
        
        // 执行健康检查
        go healthCheck(pod, containerID)
        
        // 上报状态
        apiServer.UpdatePodStatus(pod.Name, "Running")
    }
}

容器创建详细过程:

  1. 网络设置:

    # 为 Pod 分配 IP 地址
    # 创建网络命名空间
    # 配置 veth pair 连接 Pod 和宿主机网桥
    
  2. 存储挂载:

    # 挂载 Volume
    # 挂载 ConfigMap/Secret
    # 配置持久化存储
    
  3. 容器启动:

    # 调用 containerd/docker 创建容器
    # 设置环境变量
    # 执行启动命令
    
  4. 健康检查:

    # Pod 定义中的探针配置
    livenessProbe:
      httpGet:
        path: /healthz
        port: 8080
      initialDelaySeconds: 15
      periodSeconds: 10
    
    readinessProbe:
      httpGet:
        path: /ready
        port: 8080
      initialDelaySeconds: 5
      periodSeconds: 5
    

六、用户 HTTP 请求如何到达 Pod 并返回数据?

这是 Kubernetes 网络的核心问题。让我们从外到内追踪一个 HTTP 请求的完整旅程。

6.1 请求路径总览

用户浏览器
    ↓
  DNS 解析
    ↓
  负载均衡器(云厂商 LB / Nginx / HAProxy)
    ↓
  Ingress Controller(ingress-nginx / traefik)
    ↓
  Service(ClusterIP / NodePort / LoadBalancer)
    ↓
  kube-proxy(iptables / ipvs 规则)
    ↓
  Pod IP(容器)
    ↓
  应用处理请求并返回响应
    ↓
  反向路径返回给用户

6.2 详细请求流程

场景:用户访问 http://myapp.example.com

前提条件:

# 1. Deployment 定义
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: app
        image: myapp:1.0
        ports:
        - containerPort: 8080

---
# 2. Service 定义
apiVersion: v1
kind: Service
metadata:
  name: my-app-service
spec:
  selector:
    app: my-app
  ports:
  - port: 80
    targetPort: 8080
  type: ClusterIP

---
# 3. Ingress 定义
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-app-ingress
spec:
  rules:
  - host: myapp.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: my-app-service
            port:
              number: 80
步骤 1:DNS 解析
用户输入:http://myapp.example.com
    ↓
DNS 查询
    ↓
解析到 Ingress Controller 的 IP(例如:203.0.113.10)
步骤 2:到达 Ingress Controller
HTTP 请求:
  Host: myapp.example.com
  Path: /
  Method: GET
    ↓
Ingress Controller(例如:ingress-nginx)
    ↓
解析 Ingress 规则:
  myapp.example.com → my-app-service:80

Ingress Controller 工作原理:

# ingress-nginx 内部生成的 Nginx 配置(简化版)
server {
    server_name myapp.example.com;
    
    location / {
        proxy_pass http://my-app-service.default.svc.cluster.local:80;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}
步骤 3:Service 虚拟 IP 路由
Ingress Controller 发起请求到:
  my-app-service.default.svc.cluster.local:80
    ↓
DNS 解析 Service 名称(CoreDNS)
    ↓
解析到 Service ClusterIP:10.96.45.123
    ↓
kube-proxy 拦截目标 IP 为 10.96.45.123 的请求

kube-proxy iptables 规则(简化):

# 查看 iptables 规则
iptables -t nat -L KUBE-SERVICES

# 关键规则:
# 目标 IP 10.96.45.123:80 → 跳转到 KUBE-SVC-XXX 链
# KUBE-SVC-XXX 链 → 随机选择一个 Endpoint
# Endpoint → Pod IP:8080

iptables 规则示例:

# Service ClusterIP 规则
-A KUBE-SERVICES -d 10.96.45.123/32 -p tcp -m tcp --dport 80 \
  -j KUBE-SVC-XPGD46QRK7WJZT7O

# 负载均衡到后端 Pod(假设 3 个 Pod)
-A KUBE-SVC-XPGD46QRK7WJZT7O -m statistic --mode random --probability 0.33333 \
  -j KUBE-SEP-AAAA1111
  
-A KUBE-SVC-XPGD46QRK7WJZT7O -m statistic --mode random --probability 0.50000 \
  -j KUBE-SEP-BBBB2222
  
-A KUBE-SVC-XPGD46QRK7WJZT7O -j KUBE-SEP-CCCC3333

# 最终 DNAT 到 Pod IP
-A KUBE-SEP-AAAA1111 -p tcp -m tcp -j DNAT --to-destination 10.244.1.5:8080
-A KUBE-SEP-BBBB2222 -p tcp -m tcp -j DNAT --to-destination 10.244.2.8:8080
-A KUBE-SEP-CCCC3333 -p tcp -m tcp -j DNAT --to-destination 10.244.3.12:8080
步骤 4:到达 Pod 容器
请求到达 Pod IP:10.244.1.5:8080
    ↓
网络命名空间隔离(每个 Pod 独立的网络栈)
    ↓
容器内的应用进程接收请求
    ↓
应用处理业务逻辑
    ↓
返回响应数据

Pod 网络结构:

宿主机网络
    │
    ├── veth pair (veth1 ↔ eth0)
    │       │
    │       └── Pod 网络命名空间
    │               │
    │               ├── eth0: 10.244.1.5 (Pod IP)
    │               ├── lo: 127.0.0.1
    │               └── 应用进程监听 0.0.0.0:8080
    │
    └── cni0 网桥(连接所有 Pod)
步骤 5:响应返回
Pod 容器
    ↓
通过 veth pair 返回到宿主机网络
    ↓
经过 iptables 反向路径(SNAT/MASQUERADE)
    ↓
到达 Ingress Controller
    ↓
通过负载均衡器
    ↓
返回给用户浏览器

6.3 完整请求时序图

Pod (Container) kube-proxy Ingress Controller 负载均衡器 DNS/CoreDNS 用户浏览器 Pod (Container) kube-proxy Ingress Controller 负载均衡器 DNS/CoreDNS 用户浏览器 1. DNS 查询 myapp.example.com 2. 返回 Ingress IP (203.0.113.10) 3. HTTP GET http://myapp.example.com/ 4. 转发请求 5. 查询 Service 域名 6. 返回 Service ClusterIP (10.96.45.123) 7. 请求 Service ClusterIP:80 8. 匹配 iptables 规则 9. DNAT 到 Pod IP (10.244.1.5:8080) 10. 转发请求到 Pod 11. 应用处理请求 12. 返回响应 13. 返回响应 14. 返回响应 15. 返回 HTTP 200 + 响应体

6.4 不同 Service 类型的请求路径

ClusterIP(默认)
只能在集群内部访问
    ↓
Pod → Service ClusterIP → kube-proxy → 后端 Pod
NodePort
通过任意节点的 IP + 端口访问
    ↓
用户 → NodeIP:30080 → kube-proxy → Pod
apiVersion: v1
kind: Service
metadata:
  name: my-app
spec:
  type: NodePort
  ports:
  - port: 80
    targetPort: 8080
    nodePort: 30080  # 范围:30000-32767
LoadBalancer
云厂商提供的外部负载均衡器
    ↓
用户 → Cloud LB IP → NodePort → Pod
apiVersion: v1
kind: Service
metadata:
  name: my-app
spec:
  type: LoadBalancer
  ports:
  - port: 80
    targetPort: 8080

七、核心概念解析

7.1 Pod:最小部署单元

Pod
├── Pause Container(基础设施容器)
│   ── 共享网络命名空间
├── Business Container 1(业务容器)
│   ├── 共享 Pod IP
│   ├── 共享 Volume
│   └── localhost 通信
└── Business Container 2(Sidecar 容器)
    ├── 共享 Pod IP
    ├── 共享 Volume
    └── localhost 通信

特点:

  • ✅ 一个 Pod 可以包含多个容器
  • ✅ Pod 内的容器共享网络和存储
  • ✅ Pod 是调度的最小单元(不是容器)

7.2 Service:服务发现与负载均衡

Service(虚拟 IP)
    │
    ├── Endpoint 1: Pod-1 (10.244.1.5:8080)
    ├── Endpoint 2: Pod-2 (10.244.2.8:8080)
    └── Endpoint 3: Pod-3 (10.244.3.12:8080)

作用:

  • ✅ 提供稳定的访问入口(Pod IP 会变,Service IP 不变)
  • ✅ 负载均衡到后端 Pod
  • ✅ 服务发现(通过 DNS)

7.3 Namespace:资源隔离

Cluster
├── default Namespace
│   ├── Pod-1
│   ├── Service-1
│   └── Deployment-1
├── kube-system Namespace
│   ├── CoreDNS
│   ├── kube-proxy
│   └── Ingress Controller
└── my-app Namespace
    ├── Pod-2
    ├── Service-2
    └── Deployment-2

7.4 CNI(容器网络接口)

常见的 CNI 插件:

CNI 插件特点适用场景
Flannel简单、Overlay 网络小型集群、学习
CalicoBGP 路由、高性能生产环境、大规模
CiliumeBPF、可观测性强高级网络策略
Weave去中心化、加密跨云部署

八、常见网络模式对比

8.1 iptables vs ipvs

特性iptablesipvs
性能中等(规则多时性能下降)高(哈希表查找)
扩展性O(n) 复杂度O(1) 复杂度
负载均衡算法仅支持随机支持多种(轮询、最少连接等)
配置复杂度简单需安装 ipvs 模块
推荐场景小规模集群大规模集群

8.2 网络通信路径对比

Pod 间通信(同节点)
Pod-1 (10.244.1.5)
    ↓
veth pair
    ↓
cni0 网桥
    ↓
veth pair
    ↓
Pod-2 (10.244.1.8)
Pod 间通信(跨节点)
Node-1: Pod-1 (10.244.1.5)
    ↓
cni0 网桥
    ↓
flannel.1 / calico 路由
    ↓
Node-2: Pod-2 (10.244.2.8)

九、总结

9.1 核心要点回顾

Master 调度 Node 的关键机制
1. API Server:统一入口,所有组件通过它通信
2. etcd:存储集群状态,支持 Watch 监听
3. Scheduler:监听未调度 Pod,执行调度算法
4. Controller Manager:维护期望状态与实际状态一致
5. kubelet:监听分配给自己的 Pod,管理容器生命周期
HTTP 请求到达 Pod 的完整路径
1. DNS 解析 → Ingress Controller IP
2. Ingress Controller → Service ClusterIP
3. kube-proxy → iptables/ipvs 规则 → Pod IP
4. Pod 容器处理请求 → 反向路径返回

9.2 架构图总结

┌─────────────────────────────────────────────────────┐
│              用户请求流程                            │
├─────────────────────────────────────────────────────┤
│                                                      │
│  用户 → DNS → LB → Ingress → Service → kube-proxy   │
│                                          ↓           │
│                                      Pod (Container) │
│                                          ↓           │
│                                      应用处理         │
│                                          ↓           │
│                                  反向路径返回用户     │
│                                                      │
─────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────
│              Master 调度流程                         │
├─────────────────────────────────────────────────────┤
│                                                      │
│  用户 → API Server → etcd(存储 Pod 定义)           │
│                    ↓                                 │
│              Scheduler(调度算法)                   │
│                    ↓                                 │
│          更新 Pod(设置 nodeName)                   │
│                    ↓                                 │
│              kubelet(监听并创建容器)               │
│                    ↓                                 │
│          上报状态 → API Server → etcd                │
│                                                      │
└─────────────────────────────────────────────────────┘

9.3 学习建议

  1. 搭建实验环境:使用 Minikube 或 kind 搭建本地 K8S 集群
  2. 动手实践:创建 Pod、Service、Deployment,观察实际行为
  3. 查看日志:使用 kubectl logs、kubectl describe 排查问题
  4. 网络调试:使用 kubectl exec 进入容器测试网络连通性
  5. 深入学习:阅读官方文档,理解高级特性

9.4 常用命令速查

# 查看集群信息
kubectl cluster-info
kubectl get nodes

# 查看 Pod
kubectl get pods -o wide
kubectl describe pod <pod-name>
kubectl logs <pod-name>

# 查看 Service 和 Endpoint
kubectl get svc
kubectl get endpoints

# 查看 iptables 规则(在节点上执行)
iptables -t nat -L KUBE-SERVICES

# 进入 Pod 调试
kubectl exec -it <pod-name> -- /bin/sh

# 端口转发(本地访问 Pod)
kubectl port-forward <pod-name> 8080:8080

# 查看网络策略
kubectl get networkpolicies

参考资料

  • Kubernetes 官方文档:https://kubernetes.io/docs/
  • Kubernetes 网络模型:https://kubernetes.io/docs/concepts/services-networking/
  • CNI 规范:https://github.com/containernetworking/cni
  • iptables 详解:https://wiki.archlinux.org/title/iptables
  • Calico 文档:https://docs.tigera.io/calico/latest/about/
  • Flannel 文档:https://github.com/flannel-io/flannel

如果觉得这篇文章对您有帮助,欢迎:

  • 👍 点赞支持
  • 留言讨论
  • ⭐ 收藏备用

有任何 K8S 架构问题,欢迎在评论区交流!

更多推荐