Kubernetes 核心网络方案与资源管理(一)

文章目录

    • [一、Kubernetes 网络方案](#一、Kubernetes 网络方案)
    • [二、Kubernetes 资源管理](#二、Kubernetes 资源管理)
      • [1. 管理操作分类](#1. 管理操作分类)
      • [2. 核心基础命令(陈述式)](#2. 核心基础命令(陈述式))
      • [3. 项目生命周期管理](#3. 项目生命周期管理)
    • 三、核心总结
      • [1. 网络方案核心](#1. 网络方案核心)
      • [2. 资源管理核心](#2. 资源管理核心)
      • [3. 关键命令记忆](#3. 关键命令记忆)

一、Kubernetes 网络方案

1. Flannel 方案(轻量级,适合小型集群)

核心定位

Flannel 是 Kubernetes 主流的 Overlay 网络插件,核心功能是为集群内所有 Pod 分配全集群唯一的虚拟 IP,解决跨节点 Pod 通信问题,适合小型网络、无高并发的简单集群场景。

核心原理:Overlay 叠加网络

在底层物理网络之上封装虚拟隧道,将 Pod 报文封装后通过主机物理网卡转发,本质是「隧道通信」,支持以下 3 种转发模式(常用 UDP、VXLAN):

模式 转发层级 实现位置 性能 核心原理
UDP 三层(IP) 用户态(flanneld 进程) 较差(多一次用户态/内核态切换) 1. Pod 报文经 docker0/cni0 到 flannel0 虚拟网卡; 2. flanneld 进程封装 UDP 报文,通过 Etcd 路由表找到目标节点; 3. 目标节点 flanneld 解包,转发到目标 Pod。
VXLAN 二层(MAC) 内核态 较好(内核直接处理) 1. Pod 报文经 docker0/cni0 到 flannel.1(VXLAN 网卡); 2. 内核添加 VXLAN 头部封装 UDP 报文,通过物理网卡发送; 3. 目标节点 flannel.1 解包,转发到目标 Pod(默认端口 4789)。
关键补充
  • Etcd 作用:存储 Flannel 可分配的 IP 段、维护 Pod 节点路由表;
  • VXLAN vs VLAN:VXLAN 支持 1677 万+ 虚拟网络(VLAN 仅 4096),可跨物理网络/数据中心,是当前主流模式。

2. Calico 方案(高性能,适合大型/复杂集群)

核心定位

Calico 不依赖隧道/NAT,而是将每个节点当作「路由器」,通过 BGP 协议同步路由规则,结合 iptables 实现安全策略,性能损耗极低,适合大型、复杂网络架构的集群。

核心组件
组件 作用
Calico CNI 插件 与 Kubernetes 对接,供 kubelet 调用创建 Pod 网络
Felix 维护宿主机路由规则、转发信息库(FIB)
BIRD 基于 BGP 协议分发路由规则(类似路由器)
Confd 配置管理组件
工作原理
  1. Calico 为每个 Pod 创建 veth pair 设备(一端在 Pod 内,一端在宿主机);
  2. Felix 在宿主机为每个 veth pair 配置路由规则;
  3. Pod 报文通过 veth pair 到宿主机,宿主机根据路由规则(BIRD 同步)转发到目标节点;
  4. 目标节点接收报文后,转发到目标 Pod。
核心优势
  • 无报文封装,性能损耗最低;
  • 支持复杂网络策略(如 Pod 间访问控制);
  • 适合集群扩容、多设备接入的复杂场景。

方案选型总结

场景 推荐方案
小型集群、简单网络、无高并发 Flannel(VXLAN 模式)
大型集群、复杂网络策略、高性能需求 Calico

二、Kubernetes 资源管理

1. 管理操作分类

Kubernetes 资源管理分为两类,核心区别如下:

类型 特点 适用场景
陈述式(命令式) 直接通过 kubectl 命令操作资源,简单直观 快速调试、临时操作(如查看资源、创建测试 Pod)
声明式(配置清单式) 通过 YAML/JSON 文件定义资源最终状态,k8s 自动校准 生产环境、批量管理、版本控制

2. 核心基础命令(陈述式)

(1)基础信息查看
bash 复制代码
kubectl version                # 查看 k8s 版本
kubectl cluster-info           # 查看集群信息
kubectl api-resources          # 查看资源对象简写(如 pod/Po、deployment/Deploy)
kubectl get nodes              # 查看节点状态(Ready/NotReady)
kubectl get ns                 # 查看所有命名空间(namespace)
kubectl get all -n <命名空间>   # 查看指定命名空间所有资源
kubectl describe <资源类型>/<名称> -n <命名空间>  # 查看资源详细信息(如 kubectl describe pod nginx-xxx)
(2)命名空间操作
bash 复制代码
kubectl create ns <名称>       # 创建命名空间(如 kubectl create ns app)
kubectl delete ns <名称>       # 删除命名空间
(3)Pod/Deployment 操作
bash 复制代码
# 创建 Deployment(副本控制器,管理 Pod 生命周期)
kubectl create deployment <名称> --image=<镜像> --port=<端口> --replicas=<副本数> -n <命名空间>
# 示例:创建 3 个 nginx 1.14 副本,暴露 80 端口
kubectl create deployment nginx --image=nginx:1.14 --port=80 --replicas=3

# 扩缩容 Deployment
kubectl scale deployment <名称> --replicas=<数量> -n <命名空间>
# 示例:缩容为 2 个副本
kubectl scale deployment nginx --replicas=2

# 删除 Deployment(会自动删除关联 Pod)
kubectl delete deployment <名称> -n <命名空间>

# 登录 Pod 容器
kubectl exec -it <Pod 名称> -n <命名空间> -- /bin/bash

# 查看 Pod 日志
kubectl logs <Pod 名称> -n <命名空间>
(4)Service 暴露(Pod 访问入口)

Service 是 Pod 的访问代理,解决 Pod 动态 IP 问题,核心类型及端口说明:

Service 类型 用途 端口说明
ClusterIP(默认) 集群内部访问 port:集群内访问 Service 的端口(如 ClusterIP:80)
NodePort 集群外部访问 nodePort:节点端口(范围 30000-32767),外部通过 节点IP:nodePort 访问
LoadBalancer 云平台负载均衡 基于云厂商提供的 LB 暴露服务
ExternalName 映射外部域名 将 Service 映射到外部域名

核心端口关系

  • nodePort(外部)→ port(集群内)→ targetPort(Pod 端口)→ containerPort(容器端口)

暴露 Service 命令

bash 复制代码
# 暴露 Deployment 为 NodePort 类型 Service
kubectl expose deployment <名称> --type=NodePort --port=<集群端口> --target-port=<Pod 端口> -n <命名空间>
# 示例:暴露 nginx Deployment,集群内端口 80,映射 Pod 80 端口,外部节点端口随机分配
kubectl expose deployment nginx --type=NodePort --port=80 --target-port=80

# 查看 Service 信息
kubectl get svc -n <命名空间> -o wide

3. 项目生命周期管理

完整生命周期:创建 → 发布 → 更新 → 回滚 → 删除

阶段 核心操作 示例命令
创建 创建 Deployment 管理 Pod kubectl create deployment nginx --image=nginx:1.14 --replicas=3
发布 暴露 Service 提供访问入口 kubectl expose deployment nginx --type=NodePort --port=80
更新 修改 Pod 镜像版本(滚动更新) kubectl set image deployment/nginx nginx=nginx:1.15
回滚 回滚到历史版本 kubectl rollout undo deployment/nginx(回滚上一版本) kubectl rollout history deployment/nginx(查看更新历史)
删除 删除 Deployment 和 Service kubectl delete deployment nginx kubectl delete svc nginx

关键补充

  • 滚动更新:更新时先创建新 Pod,再删除旧 Pod,无服务中断;
  • 动态监听 Pod 状态:kubectl get pods -w(实时查看更新/扩缩容过程)。

三、核心总结

1. 网络方案核心

  • Flannel:轻量级 Overlay 网络,通过隧道(VXLAN 为主)实现 Pod 通信,适合小型集群;
  • Calico:基于 BGP 路由的无隧道方案,性能高、支持复杂策略,适合大型/复杂集群。

2. 资源管理核心

  • 陈述式命令(kubectl)适合快速操作,声明式(YAML)适合生产环境;
  • Deployment 是管理 Pod 的核心控制器,Service 是 Pod 的稳定访问入口;
  • 项目生命周期核心:通过 Deployment 管理 Pod 版本,Service 暴露访问,支持滚动更新/回滚,保证服务高可用。

3. 关键命令记忆

  • 查看资源:kubectl get <资源类型>(如 pod、svc、deployment);
  • 创建/更新:kubectl create deployment / kubectl set image
  • 暴露服务:kubectl expose deployment
  • 扩缩容/回滚:kubectl scale / kubectl rollout undo
相关推荐
学烹饪的小胡桃1 天前
WGCAT工单系统操作指南,如何将工单指派给多人处理
linux·运维·服务器·网络·工单系统
C_心欲无痕1 天前
网络相关 - 跨域解决方式
前端·网络
liulilittle1 天前
Windows WSL部署Ubuntu子系统到其它磁盘上
linux·运维·服务器·网络·windows·ubuntu·wsl
叽里咕噜怪1 天前
(二)k8s——kubeadm 部署 K8S 1.20.11 详细版
云原生·容器·kubernetes
易天ETU1 天前
2026年光模块市场分析与预见
大数据·运维·网络·人工智能·光模块·光通信
C_心欲无痕1 天前
网络相关 - XSS跨站脚本攻击与防御
前端·网络·xss
白帽子黑客杰哥1 天前
除了SQL注入,WAF绕过技术如何应用于XSS、文件上传等其他漏洞类型?
网络·sql·xss·漏洞挖掘
last demo1 天前
高可用Keepalived
linux·运维·网络·智能路由器
迷茫运维路1 天前
【K8S集群漏洞扫描】kube-proxy进程所监听的443端口证书过期问题分析与解决
linux·容器·kubernetes·漏洞处理