HiHuo
首页
博客
手册
工具
关于
首页
博客
手册
工具
关于
  • 概览

    • K8s 实战学习实验室
    • 服务访问清单
    • K8s-Lab 学习总纲、仓库评估与专家路线图
  • 课程正文

    • 环境验证与第一课:认识你的真实集群
    • 第二课:kubectl apply 之后,到底发生了什么
    • 第三课:调度器如何选节点,为什么 Pod 会 Pending
    • 第四课:Kubernetes 网络、协议分层、VXLAN/IPIP/WireGuard 原理与排障
    • 第五课:NetworkPolicy、零信任网络与流量边界
    • 第六课:身份、认证、授权、准入与 ServiceAccount / RBAC 原理
    • 第七课:ConfigMap 与 Secret 注入模型、更新机制与安全边界
    • 第八课:存储持久化、PV / PVC / StorageClass 与 NFS 原理
    • 第九课:StatefulSet、Headless Service、稳定身份与存储原理
    • 第十课:探针、滚动更新、优雅终止与 PDB 原理
    • 第十一课:requests / limits、QoS、OOM 与驱逐原理
    • 第十二课:HPA、自动扩缩容、指标链路与副本伸缩原理
    • 第十三课:Service、EndpointSlice、kube-proxy、CoreDNS 与服务发现原理
    • 第十四课:Ingress-nginx、反向代理、Host / Path、NodePort 与北南向流量原理
    • 第十五课:HTTPS、TLS、SNI、证书信任与 Ingress 终止原理
    • 第十六课:cert-manager、Ingress 自动签发、证书生命周期与 ACME 工作流原理
    • 第十七课:ACME、Let's Encrypt、HTTP-01 / DNS-01、Orders / Challenges 与生产限制原理
    • 第十八课:大模型全生态,从数据到训练到部署到治理原理
    • 第十九课:大模型数据集、清洗、标注、切分、版本管理与质量治理原理
    • 第二十课:大模型训练、SFT、LoRA、Checkpoint、Adapter 与模型产物原理
    • 第二十一课:大模型推理、量化、KV Cache、vLLM、吞吐/延迟与部署发布链路原理
  • 实验操作记录

    • 本次仓库审查操作记录与命令原理
    • 本轮操作记录:环境验证、集群基线盘点与故障样本采集
    • 本轮操作记录:kubectl apply 主链路实验
    • 本轮操作记录:调度实验与 Pending 排查
    • 本轮操作记录:Kubernetes 网络原理、协议对比与调试实验
    • 本轮操作记录:NetworkPolicy 与零信任网络实验
    • 本轮操作记录:身份、认证、授权、准入实验
    • 本轮操作记录:ConfigMap 与 Secret 注入、更新与安全边界实验
    • 本轮操作记录:存储持久化、PV / PVC / StorageClass 与 NFS 实验
    • 本轮操作记录:StatefulSet、Headless Service 与稳定身份实验
    • 本轮操作记录:探针、滚动更新、优雅终止与 PDB 实验
    • 本轮操作记录:资源模型、QoS、OOM 与 CPU 节流实验
    • 本轮操作记录:HPA 自动扩缩容实验
    • 本轮操作记录:Service、EndpointSlice、CoreDNS 与服务发现排障实验
    • 本轮操作记录:Ingress-nginx、NodePort 与北南向流量实验
    • 本轮操作记录:HTTPS、TLS、自签证书与 Ingress 实验
    • 本轮操作记录:cert-manager 安装、CA 签发与 Ingress 自动证书实验
    • 本轮操作记录:ACME staging、HTTP-01 失败样本与排障实验
    • 本轮操作记录:大模型全生态与基础原理科普文撰写
    • 本轮操作记录:大模型数据集样本与治理文档编写
    • 本轮操作记录:大模型训练与模型产物概念文撰写
    • 本轮操作记录:大模型推理与服务发布概念文撰写

WireGuard 虚拟内网 — 让跨机房节点互通

为什么需要 WireGuard?

我们的 5 台服务器分布在洛杉矶和香港两个机房,公网 IP 大多是 NAT 映射的(不在本地网卡上)。K8s 的 kubelet 要求 --node-ip 必须是本地网卡上的地址,而且 API Server 需要能通过这个 IP 回连 kubelet。

WireGuard 在每台机器上创建虚拟网卡 wg0,分配统一的私有 IP,通过加密隧道走公网通信。

网络拓扑

公网 IP                  WireGuard IP (wg0)     角色
107.148.176.193    →    10.10.0.1/24           Master
107.148.164.118    →    10.10.0.2/24           Worker-1
154.9.27.60        →    10.10.0.3/24           Worker-2
38.76.221.17       →    10.10.0.4/24           Worker-3
154.219.104.66     →    10.10.0.5/24           Worker-4

WireGuard 原理(面试级理解)

与传统 VPN 的区别

特性OpenVPNIPSecWireGuard
运行层用户态内核态内核态
代码量~10 万行~40 万行~4000 行
加密协议可配置多种可配置多种固定最优组合
性能较慢中等接近裸机
配置复杂度高(需要 CA)很高极简

加密原理

WireGuard 使用固定的密码学组合(不可配置,消除了选错算法的风险):

  • Curve25519 — 密钥交换(ECDH)
  • ChaCha20 — 对称加密(比 AES 在无硬件加速时更快)
  • Poly1305 — 消息认证
  • BLAKE2s — 哈希

每个节点有一对密钥(私钥 + 公钥)。通信时用对方公钥 + 自己私钥做 Diffie-Hellman 交换,派生出共享密钥加密数据。

安装与配置

# 安装
apt-get install -y wireguard-tools

# 生成密钥对
wg genkey | tee /etc/wireguard/privatekey | wg pubkey > /etc/wireguard/publickey
chmod 600 /etc/wireguard/privatekey

配置文件 /etc/wireguard/wg0.conf(以 Master 为例):

[Interface]
Address = 10.10.0.1/24          # 本机 WireGuard IP
PrivateKey = <本机私钥>
ListenPort = 51820               # UDP 监听端口

[Peer]                           # 每个对端一个 [Peer] 段
PublicKey = <Worker-1 公钥>
AllowedIPs = 10.10.0.2/32       # 只允许这个 IP 从此 peer 来
Endpoint = 107.148.164.118:51820 # 对端公网地址
PersistentKeepalive = 25         # 每 25s 发心跳,保持 NAT 映射

AllowedIPs 的双重作用:

  1. 出站路由: 发往 10.10.0.2 的包走这个 peer 的隧道
  2. 入站过滤: 只接受源 IP 为 10.10.0.2 的包从这个 peer 来
# 启动并开机自启
systemctl enable --now wg-quick@wg0

实测延迟

LA 内部(10.10.0.1 ↔ 10.10.0.2): ~1.5ms
LA ↔ HK(10.10.0.1 ↔ 10.10.0.4): ~155ms

WireGuard 几乎不增加额外延迟(内核态加密 + UDP 封装开销极小)。

为什么用 Full Mesh 而不是 Hub-Spoke?

我们配置了全互联(每个节点都知道所有其他节点),而不是所有流量经过 Master 中转。原因:

  • K8s Pod 跨节点通信需要节点之间直连
  • Hub-Spoke 模式下 Master 成为流量瓶颈
  • 延迟翻倍(Worker→Master→Worker 变成 Worker→Worker)

清理方法

systemctl disable --now wg-quick@wg0
rm -rf /etc/wireguard/