上一篇 下一篇 分享链接 返回 返回顶部

Cloudflare 管入口,Kubernetes 管应用:一篇看懂区别与常用命令

发布人:慈云数据-客服中心 发布时间:3小时前 阅读量:3

Cloudflare 和 Kubernetes 对比|附完整命令

在云原生技术体系中,CloudflareKubernetes 都是非常常见的关键词,但它们解决的问题并不相同。很多初学者会把二者放在一起比较,甚至误以为它们是同一层面的平台。实际上,Cloudflare 更偏向于全球边缘网络、DNS、CDN、安全防护、零信任访问、边缘计算;而 Kubernetes 则是一个容器编排平台,主要用于管理容器化应用的部署、扩缩容、服务发现、滚动更新和集群资源调度。

简单来说:

Cloudflare 主要解决“用户如何更快、更安全地访问你的服务”的问题;Kubernetes 主要解决“你的服务如何在服务器集群中稳定运行”的问题。

这篇文章将从定位、核心能力、典型场景、架构差异、优缺点以及完整命令示例等角度,对 Cloudflare 和 Kubernetes 进行系统对比。


一、Cloudflare 是什么?

Cloudflare 是一家提供全球网络基础设施服务的公司,其核心产品包括:

  • DNS 托管
  • CDN 内容分发网络
  • DDoS 防护
  • Web Application Firewall,简称 WAF
  • SSL/TLS 证书管理
  • 反向代理加速
  • Zero Trust 零信任访问
  • Cloudflare Workers 边缘计算
  • Cloudflare Pages 静态网站部署
  • Cloudflare Tunnel 内网穿透
  • R2 对象存储
  • Durable Objects、KV、Queues 等边缘应用能力

从技术定位来看,Cloudflare 通常位于用户和源站服务器之间。用户访问网站时,请求会先到达 Cloudflare 的全球边缘节点,然后由 Cloudflare 根据缓存、安全策略、路由规则等处理请求,最后再决定是否回源访问你的真实服务器。

典型访问链路如下:

用户浏览器
   ↓
Cloudflare 边缘节点
   ↓
源站服务器 / Kubernetes Ingress / API 服务

Cloudflare 的优势在于它拥有庞大的全球 Anycast 网络,可以让用户就近接入,同时隐藏源站 IP,抵御大量网络攻击。


二、Kubernetes 是什么?

Kubernetes,简称 K8s,是一个开源容器编排平台,最初由 Google 开源,目前由 CNCF 维护。它主要用于管理大规模容器化应用。

Kubernetes 可以帮助开发者和运维人员完成以下工作:

  • 部署容器应用
  • 自动重启故障容器
  • 服务发现和负载均衡
  • 横向扩缩容
  • 滚动更新和回滚
  • 配置和密钥管理
  • 存储编排
  • 节点资源调度
  • 多副本高可用运行
  • 声明式基础设施管理

典型 Kubernetes 架构如下:

用户请求
   ↓
负载均衡器 / Ingress
   ↓
Service
   ↓
Pod
   ↓
Container

在 Kubernetes 中,开发者不再直接关心某个应用运行在哪一台服务器上,而是通过 Deployment、Service、Ingress、ConfigMap、Secret 等资源对象描述期望状态,由 Kubernetes 自动协调实际状态。


三、Cloudflare 和 Kubernetes 的核心区别

对比项 Cloudflare Kubernetes
技术定位 全球边缘网络、安全与加速平台 容器编排与集群管理平台
主要作用 CDN、DNS、安全防护、边缘代理、零信任 部署、运行、调度、管理容器应用
运行位置 Cloudflare 全球边缘节点 自建服务器、公有云、私有云或混合云
面向对象 域名、HTTP 流量、边缘函数、安全策略 Pod、容器、节点、服务、工作负载
核心价值 提升访问速度和安全性 提升应用部署和运行管理效率
是否托管基础设施 是,Cloudflare 托管全球网络 可自建,也可使用云厂商托管版
典型用户 网站、API、SaaS、静态站、企业安全团队 DevOps、平台工程、微服务团队
常用工具 Dashboard、wrangler、cloudflared、API kubectl、helm、kubeadm、operator
学习重点 DNS、CDN、WAF、Workers、Tunnel Pod、Deployment、Service、Ingress、ConfigMap

一句话概括:

Cloudflare 是应用访问入口的“边缘网关和安全加速层”,Kubernetes 是应用运行环境的“容器调度和管理层”。


四、二者不是替代关系,而是互补关系

很多团队在真实生产环境中会同时使用 Cloudflare 和 Kubernetes。常见架构如下:

用户
 ↓
Cloudflare DNS / CDN / WAF / DDoS 防护
 ↓
云厂商负载均衡器
 ↓
Kubernetes Ingress Controller
 ↓
Kubernetes Service
 ↓
Pod
 ↓
容器应用

在这个架构中:

  • Cloudflare 负责域名解析、HTTPS、缓存、WAF、防攻击;
  • Kubernetes 负责运行后端应用,例如 Java、Go、Node.js、Python 服务;
  • Ingress Controller 负责将外部请求路由到 Kubernetes 内部服务;
  • Service 负责稳定访问 Pod;
  • Deployment 负责管理副本数、滚动更新和自愈。

所以,Cloudflare 和 Kubernetes 并不是“谁更好”的关系,而是处于不同层级。Cloudflare 更靠近用户和互联网入口,Kubernetes 更靠近后端应用运行环境。


五、Cloudflare 适合哪些场景?

1. 网站加速

如果你的网站面向全球用户,Cloudflare 的 CDN 可以缓存静态资源,例如:

  • HTML
  • CSS
  • JavaScript
  • 图片
  • 字体
  • 视频片段

这样可以减少源站压力,提高访问速度。

2. DNS 托管

Cloudflare 的 DNS 解析速度快,管理界面友好,并且支持 API 自动化管理,非常适合企业统一托管域名解析。

3. DDoS 防护

对于容易遭受攻击的网站,例如游戏、金融、社区、API 服务,Cloudflare 可以提供强大的 DDoS 防护能力。

4. WAF 安全防护

Cloudflare WAF 可以拦截常见攻击,例如:

  • SQL 注入
  • XSS
  • 恶意爬虫
  • 异常请求
  • 常见漏洞利用请求

5. Cloudflare Tunnel 内网穿透

如果你的服务部署在内网、家庭服务器或者 Kubernetes 集群内部,可以通过 Cloudflare Tunnel 暴露服务,而不需要开放公网端口。

6. 边缘计算

Cloudflare Workers 可以在全球边缘节点运行 JavaScript 或 WebAssembly 代码,适合做轻量 API、请求改写、A/B 测试、鉴权、边缘渲染等。


六、Kubernetes 适合哪些场景?

1. 微服务架构

当你的系统拆分为多个服务,例如用户服务、订单服务、支付服务、库存服务时,Kubernetes 可以统一管理这些服务的部署和通信。

2. 容器化部署

如果团队已经使用 Docker 构建镜像,那么 Kubernetes 是非常自然的下一步。它能让容器应用在集群中高可用运行。

3. 自动扩缩容

Kubernetes 支持根据 CPU、内存或自定义指标自动扩容和缩容,非常适合流量波动明显的业务。

4. 滚动更新和快速回滚

发布新版本时,Kubernetes 可以逐步替换旧版本 Pod。如果发现问题,可以快速回滚到上一个版本。

5. 多环境一致性

开发、测试、预发、生产环境都可以使用同样的 YAML 声明文件,减少环境差异带来的问题。

6. 平台工程

对于中大型技术团队,可以基于 Kubernetes 构建内部 PaaS 平台,让开发人员更方便地部署和管理应用。


七、Cloudflare 常用完整命令

下面给出一些 Cloudflare 常用命令示例,主要包括 wranglercloudflared


1. 安装 Wrangler

wrangler 是 Cloudflare Workers 和 Pages 等服务的官方命令行工具。

使用 npm 安装

npm install -g wrangler

查看版本:

wrangler --version

登录 Cloudflare:

wrangler login

查看当前登录用户:

wrangler whoami

2. 创建 Cloudflare Workers 项目

npm create cloudflare@latest my-worker

进入项目目录:

cd my-worker

本地开发:

wrangler dev

部署到 Cloudflare:

wrangler deploy

查看部署日志:

wrangler tail

3. 一个简单的 Worker 示例

src/index.js

export default {
  async fetch(request, env, ctx) {
    return new Response("Hello from Cloudflare Workers!", {
      headers: {
        "content-type": "text/plain;charset=UTF-8",
      },
    });
  },
};

部署:

wrangler deploy

4. 使用 Cloudflare Pages 部署静态站

创建项目:

npm create vite@latest my-site
cd my-site
npm install
npm run build

使用 Wrangler 部署 Pages:

wrangler pages project create my-site
wrangler pages deploy dist --project-name=my-site

5. 安装 cloudflared

cloudflared 用于 Cloudflare Tunnel、Zero Trust 等功能。

macOS

brew install cloudflared

Ubuntu / Debian

wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
sudo dpkg -i cloudflared-linux-amd64.deb

查看版本

cloudflared --version

6. 登录 Cloudflare Tunnel

cloudflared tunnel login

创建 Tunnel:

cloudflared tunnel create my-tunnel

查看 Tunnel 列表:

cloudflared tunnel list

配置 DNS 路由:

cloudflared tunnel route dns my-tunnel app.example.com

创建配置文件:

mkdir -p ~/.cloudflared
vim ~/.cloudflared/config.yml

示例配置:

tunnel: my-tunnel
credentials-file: /home/ubuntu/.cloudflared/.json

ingress:
  - hostname: app.example.com
    service: http://localhost:8080
  - service: http_status:404

运行 Tunnel:

cloudflared tunnel run my-tunnel

安装为系统服务:

sudo cloudflared service install
sudo systemctl enable cloudflared
sudo systemctl start cloudflared
sudo systemctl status cloudflared

八、Kubernetes 常用完整命令

下面列出 Kubernetes 在日常部署、排查和管理中的常用命令。


1. 安装 kubectl

macOS

brew install kubectl

Linux

curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
chmod +x kubectl
sudo mv kubectl /usr/local/bin/

查看版本:

kubectl version --client

查看集群信息:

kubectl cluster-info

查看节点:

kubectl get nodes

2. 创建 Namespace

kubectl create namespace demo

查看 Namespace:

kubectl get namespaces

切换默认 Namespace:

kubectl config set-context --current --namespace=demo

3. 部署一个 Nginx 应用

创建 Deployment:

kubectl create deployment nginx --image=nginx:1.25 --replicas=3 -n demo

查看 Deployment:

kubectl get deployment -n demo

查看 Pod:

kubectl get pods -n demo -o wide

查看详细信息:

kubectl describe deployment nginx -n demo

4. 暴露服务

创建 ClusterIP Service:

kubectl expose deployment nginx --port=80 --target-port=80 --type=ClusterIP -n demo

查看 Service:

kubectl get svc -n demo

如果是在云厂商 Kubernetes 中,也可以创建 LoadBalancer 类型:

kubectl expose deployment nginx --port=80 --target-port=80 --type=LoadBalancer -n demo

5. 使用端口转发访问服务

kubectl port-forward svc/nginx 8080:80 -n demo

然后在本地访问:

curl http://localhost:8080

6. 扩容和缩容

扩容到 5 个副本:

kubectl scale deployment nginx --replicas=5 -n demo

查看状态:

kubectl get pods -n demo

缩容到 2 个副本:

kubectl scale deployment nginx --replicas=2 -n demo

7. 滚动更新

将镜像更新为新版本:

kubectl set image deployment/nginx nginx=nginx:1.26 -n demo

查看发布状态:

kubectl rollout status deployment/nginx -n demo

查看发布历史:

kubectl rollout history deployment/nginx -n demo

回滚到上一版本:

kubectl rollout undo deployment/nginx -n demo

8. 查看日志和进入容器

查看 Pod:

kubectl get pods -n demo

查看日志:

kubectl logs  -n demo

实时查看日志:

kubectl logs -f  -n demo

进入容器:

kubectl exec -it  -n demo -- /bin/bash

如果容器没有 bash,可以使用 sh:

kubectl exec -it  -n demo -- /bin/sh

9. 删除资源

删除 Service:

kubectl delete svc nginx -n demo

删除 Deployment:

kubectl delete deployment nginx -n demo

删除 Namespace:

kubectl delete namespace demo

九、使用 YAML 部署 Kubernetes 应用

生产环境中更推荐使用 YAML 文件声明资源,而不是全部用命令临时创建。

创建 nginx.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  namespace: demo
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:1.25
          ports:
            - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx
  namespace: demo
spec:
  type: ClusterIP
  selector:
    app: nginx
  ports:
    - port: 80
      targetPort: 80

执行部署:

kubectl create namespace demo
kubectl apply -f nginx.yaml

查看资源:

kubectl get all -n demo

删除资源:

kubectl delete -f nginx.yaml

十、Cloudflare 与 Kubernetes 联合使用示例

假设你的应用运行在 Kubernetes 中,并通过 Ingress 暴露服务。Cloudflare 负责域名解析、HTTPS、WAF 和 CDN。

架构如下:

app.example.com
   ↓
Cloudflare
   ↓
Kubernetes Ingress Controller
   ↓
Service
   ↓
Pod

1. Kubernetes 部署应用

kubectl create namespace app
kubectl create deployment web --image=nginx:1.25 --replicas=2 -n app
kubectl expose deployment web --port=80 --target-port=80 -n app

2. 安装 Nginx Ingress Controller

如果使用 Helm:

helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update

安装:

helm install ingress-nginx ingress-nginx/ingress-nginx \
  --namespace ingress-nginx \
  --create-namespace

查看 LoadBalancer 地址:

kubectl get svc -n ingress-nginx

3. 创建 Ingress

创建 ingress.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: web
  namespace: app
spec:
  ingressClassName: nginx
  rules:
    - host: app.example.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: web
                port:
                  number: 80

应用配置:

kubectl apply -f ingress.yaml

查看 Ingress:

kubectl get ingress -n app

4. 在 Cloudflare 配置 DNS

如果 Ingress Controller 获得了公网 IP,例如:

203.0.113.10

则在 Cloudflare DNS 中添加:

类型:A
名称:app
内容:203.0.113.10
代理状态:Proxied

如果使用 API,也可以通过 curl 添加 DNS 记录:

curl -X POST "https://api.cloudflare.com/client/v4/zones//dns_records" \
  -H "Authorization: Bearer " \
  -H "Content-Type: application/json" \
  --data '{
    "type": "A",
    "name": "app.example.com",
    "content": "203.0.113.10",
    "ttl": 1,
    "proxied": true
  }'

十一、如何选择 Cloudflare 和 Kubernetes?

如果你的需求是:

  • 管理域名解析;
  • 提升网站访问速度;
  • 防止 DDoS 攻击;
  • 配置 WAF;
  • 隐藏源站 IP;
  • 将内网服务安全暴露到公网;
  • 在边缘节点运行轻量代码;

那么应该优先考虑 Cloudflare

如果你的需求是:

  • 管理大量容器;
  • 部署微服务;
  • 实现自动扩缩容;
  • 做滚动更新和回滚;
  • 统一管理服务配置;
  • 构建云原生平台;
  • 让应用在服务器集群中高可用运行;

那么应该选择 Kubernetes

如果你既要运行复杂后端服务,又要保证公网访问的速度与安全,那么最佳实践往往是:

Kubernetes 负责运行应用,Cloudflare 负责保护和加速入口流量。


十二、总结

Cloudflare 和 Kubernetes 的对比,不能简单理解为两个同类产品的竞争。它们处于云原生架构的不同层次:

  • Cloudflare 是边缘网络、安全、加速和访问控制平台;
  • Kubernetes 是容器编排、应用调度和集群管理平台。

在现代 Web 系统、SaaS 平台、API 服务和微服务架构中,二者经常一起出现。Cloudflare 位于最外层,帮助你处理 DNS、HTTPS、CDN、WAF、DDoS 防护和零信任访问;Kubernetes 位于后端基础设施层,帮助你稳定、高效地运行容器化应用。

因此,真正合理的问题不是“Cloudflare 和 Kubernetes 选哪个”,而是:

在你的架构中,哪些问题应该交给 Cloudflare,哪些问题应该交给 Kubernetes?

如果你只是部署一个静态网站,Cloudflare Pages 可能就足够了;如果你要运行复杂的微服务系统,Kubernetes 会更加合适;如果你要面向公网提供高可用、安全、可扩展的服务,那么 Cloudflare + Kubernetes 的组合通常是非常成熟的生产级方案。

目录结构
全文