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

Cloudflare 管入口,Kubernetes 管应用:一文讲透区别与实战命令

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

Cloudflare 和 Kubernetes 对比|附完整命令

在现代云原生架构中,CloudflareKubernetes 都是非常高频出现的技术关键词。很多团队在做网站部署、API 网关、安全防护、容器编排、微服务治理时,都会接触到它们。

不过需要先说明一点:Cloudflare 和 Kubernetes 并不是同一类产品

  • Cloudflare 更偏向于:全球 CDN、DNS、DDoS 防护、WAF、防火墙、边缘网络、安全访问、Zero Trust、Workers 边缘计算等。
  • Kubernetes 更偏向于:容器编排、应用部署、服务发现、弹性伸缩、滚动更新、集群管理、云原生基础设施等。

简单来说:

Cloudflare 主要解决“用户如何更快、更安全地访问你的服务”;
Kubernetes 主要解决“你的服务如何被可靠、自动化、规模化地运行”。

本文将从概念、使用场景、核心能力、优缺点、部署方式、命令实践等角度,对 Cloudflare 和 Kubernetes 进行系统对比,并附上常用完整命令,方便学习和实际操作。


一、Cloudflare 是什么?

Cloudflare 是一家全球网络服务平台,最常见的用途包括:

  • DNS 域名解析
  • CDN 内容分发
  • DDoS 防护
  • WAF Web 应用防火墙
  • HTTPS 证书管理
  • 反向代理
  • Bot 防护
  • Zero Trust 安全访问
  • Cloudflare Workers 边缘函数
  • R2 对象存储
  • Tunnel 内网穿透

如果你有一个网站,例如:

https://www.example.com

用户访问这个网站时,请求可以先经过 Cloudflare 的全球边缘节点,再转发到你的源站服务器。这样可以获得更快的访问速度、更强的安全能力,以及更灵活的流量控制。

Cloudflare 的典型架构如下:

用户浏览器
   ↓
Cloudflare 全球边缘节点
   ↓
源站服务器 / 负载均衡 / Kubernetes Ingress
   ↓
后端服务

二、Kubernetes 是什么?

Kubernetes,简称 K8s,是一个开源的容器编排平台,最初由 Google 发起,现在由 CNCF 维护。

Kubernetes 主要用于管理容器化应用,例如 Docker 容器。它可以帮助你完成:

  • 应用部署
  • 服务发现
  • 负载均衡
  • 滚动升级
  • 自动扩缩容
  • 容器自愈
  • 配置管理
  • 密钥管理
  • 存储编排
  • 集群资源调度

Kubernetes 的典型架构如下:

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

Kubernetes 更关注应用在服务器集群内部如何运行。例如你有 10 台服务器,想运行 100 个服务实例,Kubernetes 可以自动帮你调度这些容器,让它们分布在不同节点上运行,并在容器异常时自动重启。


三、Cloudflare 和 Kubernetes 的核心区别

对比项 Cloudflare Kubernetes
类型 网络与安全平台 容器编排平台
核心作用 加速、安全、防护、边缘代理 部署、管理、调度容器应用
工作位置 用户与源站之间,靠近用户侧 服务端集群内部
主要对象 域名、流量、HTTP 请求、安全规则 Pod、Service、Deployment、Node
是否必须自建 通常不需要,自带全球网络 通常需要集群或使用托管 K8s
常见用户 网站管理员、运维、安全团队、开发者 DevOps、SRE、后端开发、平台工程团队
学习成本 中等,Web 控制台友好 较高,需要理解云原生体系
典型功能 CDN、DNS、WAF、DDoS、Zero Trust 编排、扩缩容、滚动发布、自愈
替代关系 不是 Kubernetes 的替代品 不是 Cloudflare 的替代品
组合使用 可作为 K8s 集群入口防护层 可承载后端服务

一句话概括:

Cloudflare 管的是“外部访问入口和边缘安全”,Kubernetes 管的是“内部应用运行和容器调度”。


四、什么时候使用 Cloudflare?

如果你有以下需求,可以考虑使用 Cloudflare:

1. 需要快速配置 DNS

Cloudflare 的 DNS 解析速度非常快,并且支持 API 自动化管理。许多企业会把域名托管到 Cloudflare,用它来管理 A 记录、CNAME、TXT、MX 等。

2. 需要 CDN 加速

如果网站用户分布在全球不同地区,Cloudflare 可以缓存静态资源,例如:

  • 图片
  • CSS
  • JavaScript
  • 字体文件
  • 下载文件

这样用户可以从离自己更近的边缘节点获取资源,提高访问速度。

3. 需要 DDoS 防护

Cloudflare 的重要能力之一就是 DDoS 防护。对于公开网站、API 服务、电商平台、游戏服务等,DDoS 防护非常重要。

4. 需要 Web 应用防火墙

Cloudflare WAF 可以防护常见攻击,例如:

  • SQL 注入
  • XSS
  • 路径穿越
  • 恶意爬虫
  • 暴力破解
  • 可疑请求

5. 需要隐藏源站 IP

通过 Cloudflare 代理后,用户访问的是 Cloudflare 的边缘节点,而不是直接访问源站 IP。这样可以降低源站被直接攻击的风险。

6. 需要 Zero Trust 安全访问

Cloudflare Zero Trust 可以用于保护内部应用,例如后台管理系统、Grafana、Kibana、Jenkins 等,不再简单暴露到公网,而是通过身份认证和策略控制访问。


五、什么时候使用 Kubernetes?

如果你有以下需求,可以考虑使用 Kubernetes:

1. 应用数量较多

当你的服务数量从几个增长到几十个、上百个时,手动部署会非常困难。Kubernetes 可以统一管理这些服务。

2. 需要微服务架构

微服务通常需要:

  • 服务注册与发现
  • 横向扩容
  • 灰度发布
  • 滚动升级
  • 配置隔离
  • 资源限制
  • 日志采集
  • 监控告警

Kubernetes 是支撑微服务架构的核心基础设施之一。

3. 需要自动扩缩容

Kubernetes 可以根据 CPU、内存或自定义指标自动扩展 Pod 数量。例如流量高峰时扩容,流量下降时缩容。

4. 需要高可用部署

Kubernetes 可以把多个副本调度到不同节点上,一旦某个 Pod 或节点异常,可以自动重新拉起服务。

5. 需要标准化交付

Kubernetes 使用 YAML 声明式配置,可以将部署配置纳入 Git 管理,实现 GitOps 和持续交付。


六、Cloudflare 的常用命令

Cloudflare 本身主要通过 Web 控制台和 API 操作。命令行常用工具包括:

  • curl
  • cloudflared
  • wrangler

下面分别介绍。


七、安装 cloudflared

cloudflared 是 Cloudflare Tunnel 的命令行工具,可以用于创建安全隧道,把本地服务暴露到 Cloudflare 网络,而无需直接开放公网端口。

macOS 安装

brew install cloudflare/cloudflare/cloudflared

检查版本:

cloudflared --version

Ubuntu / Debian 安装

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

sudo dpkg -i cloudflared-linux-amd64.deb

cloudflared --version

CentOS / RHEL 安装

wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-x86_64.rpm

sudo rpm -ivh cloudflared-linux-x86_64.rpm

cloudflared --version

八、使用 Cloudflare Tunnel 暴露本地服务

假设本地有一个服务运行在:

http://localhost:8080

1. 登录 Cloudflare

cloudflared tunnel login

执行后浏览器会打开 Cloudflare 登录页面,选择对应域名并授权。

2. 创建 Tunnel

cloudflared tunnel create my-app-tunnel

查看 Tunnel 列表:

cloudflared tunnel list

3. 创建配置文件

创建目录:

mkdir -p ~/.cloudflared

编辑配置文件:

vim ~/.cloudflared/config.yml

写入以下内容:

tunnel: my-app-tunnel
credentials-file: /root/.cloudflared/my-app-tunnel.json

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

注意:credentials-file 的路径需要根据实际生成的 JSON 文件路径修改。

4. 添加 DNS 路由

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

5. 启动 Tunnel

cloudflared tunnel run my-app-tunnel

此时访问:

https://app.example.com

即可通过 Cloudflare 访问本地服务。

6. 安装为系统服务

sudo cloudflared service install

启动服务:

sudo systemctl start cloudflared

设置开机自启:

sudo systemctl enable cloudflared

查看状态:

sudo systemctl status cloudflared

查看日志:

journalctl -u cloudflared -f

九、使用 Cloudflare API 管理 DNS

Cloudflare 支持通过 API 管理 DNS。假设你已经获取 API Token,并设置环境变量:

export CF_API_TOKEN="你的Cloudflare API Token"
export CF_ZONE_ID="你的Zone ID"

1. 查询 DNS 记录

curl -X GET "https://api.cloudflare.com/client/v4/zones/${CF_ZONE_ID}/dns_records" \
  -H "Authorization: Bearer ${CF_API_TOKEN}" \
  -H "Content-Type: application/json"

2. 添加 A 记录

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

3. 添加 CNAME 记录

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

4. 删除 DNS 记录

先查询记录 ID:

curl -X GET "https://api.cloudflare.com/client/v4/zones/${CF_ZONE_ID}/dns_records?name=api.example.com" \
  -H "Authorization: Bearer ${CF_API_TOKEN}" \
  -H "Content-Type: application/json"

然后删除:

export CF_RECORD_ID="你的DNS记录ID"

curl -X DELETE "https://api.cloudflare.com/client/v4/zones/${CF_ZONE_ID}/dns_records/${CF_RECORD_ID}" \
  -H "Authorization: Bearer ${CF_API_TOKEN}" \
  -H "Content-Type: application/json"

十、Kubernetes 常用命令

Kubernetes 主要使用 kubectl 进行管理。下面给出完整常用命令。


十一、安装 kubectl

macOS 安装

brew install kubectl

检查版本:

kubectl version --client

Ubuntu / Debian 安装

sudo apt-get update

sudo apt-get install -y apt-transport-https ca-certificates curl gnupg

curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/deb/Release.key \
  | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg

echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.30/deb/ /" \
  | sudo tee /etc/apt/sources.list.d/kubernetes.list

sudo apt-get update

sudo apt-get install -y kubectl

kubectl version --client

CentOS / RHEL 安装

cat <

十二、快速创建本地 Kubernetes 集群

如果只是学习,可以使用 kind 创建本地 Kubernetes 集群。

1. 安装 kind

macOS:

brew install kind

Linux:

curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.23.0/kind-linux-amd64

chmod +x ./kind

sudo mv ./kind /usr/local/bin/kind

kind version

2. 创建集群

kind create cluster --name demo-cluster

查看集群:

kubectl get nodes

查看集群信息:

kubectl cluster-info

删除集群:

kind delete cluster --name demo-cluster

十三、Kubernetes 部署 Nginx 示例

1. 创建 Deployment

kubectl create deployment nginx-demo --image=nginx:latest

查看 Deployment:

kubectl get deployments

查看 Pod:

kubectl get pods

查看详细信息:

kubectl describe deployment nginx-demo

2. 暴露 Service

kubectl expose deployment nginx-demo \
  --type=NodePort \
  --port=80 \
  --target-port=80

查看 Service:

kubectl get svc

查看详细信息:

kubectl describe svc nginx-demo

3. 端口转发访问

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

然后访问:

http://localhost:8080

4. 扩容 Pod

kubectl scale deployment nginx-demo --replicas=3

查看 Pod:

kubectl get pods -o wide

5. 滚动更新镜像

kubectl set image deployment/nginx-demo nginx=nginx:1.25

查看更新状态:

kubectl rollout status deployment/nginx-demo

查看历史版本:

kubectl rollout history deployment/nginx-demo

6. 回滚版本

kubectl rollout undo deployment/nginx-demo

7. 删除资源

kubectl delete service nginx-demo

kubectl delete deployment nginx-demo

十四、使用 YAML 部署 Kubernetes 应用

命令式操作适合学习,但生产环境更推荐使用 YAML。

创建文件:

vim nginx-deployment.yaml

写入内容:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-demo
  labels:
    app: nginx-demo
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx-demo
  template:
    metadata:
      labels:
        app: nginx-demo
    spec:
      containers:
        - name: nginx
          image: nginx:1.25
          ports:
            - containerPort: 80
          resources:
            requests:
              cpu: "100m"
              memory: "128Mi"
            limits:
              cpu: "500m"
              memory: "256Mi"

创建 Service 文件:

vim nginx-service.yaml

写入内容:

apiVersion: v1
kind: Service
metadata:
  name: nginx-demo
spec:
  type: ClusterIP
  selector:
    app: nginx-demo
  ports:
    - name: http
      port: 80
      targetPort: 80

应用配置:

kubectl apply -f nginx-deployment.yaml

kubectl apply -f nginx-service.yaml

查看资源:

kubectl get deployment

kubectl get pods

kubectl get svc

删除资源:

kubectl delete -f nginx-service.yaml

kubectl delete -f nginx-deployment.yaml

十五、Cloudflare 与 Kubernetes 如何组合使用?

在真实生产环境中,Cloudflare 和 Kubernetes 经常一起使用。典型架构如下:

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

例如,一个部署在 Kubernetes 中的 Web 服务,可以通过 Ingress 暴露域名:

app.example.com

然后在 Cloudflare 中配置 DNS:

app.example.com -> Kubernetes Ingress 入口 IP

这样 Cloudflare 负责外部访问加速和安全防护,Kubernetes 负责后端应用运行和调度。


十六、Kubernetes Ingress 示例

假设你已经安装了 Nginx Ingress Controller,可以创建 Ingress。

创建文件:

vim nginx-ingress.yaml

写入内容:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nginx-demo
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  ingressClassName: nginx
  rules:
    - host: app.example.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: nginx-demo
                port:
                  number: 80

应用配置:

kubectl apply -f nginx-ingress.yaml

查看 Ingress:

kubectl get ingress

查看详细信息:

kubectl describe ingress nginx-demo

删除 Ingress:

kubectl delete -f nginx-ingress.yaml

十七、Cloudflare 指向 Kubernetes Ingress

假设 Kubernetes Ingress 的公网 IP 是:

203.0.113.10

可以在 Cloudflare 中添加 A 记录:

export CF_API_TOKEN="你的Cloudflare API Token"
export CF_ZONE_ID="你的Zone ID"

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

其中:

  • "proxied": true 表示开启 Cloudflare 代理,也就是橙色云朵。
  • "ttl": 1 表示自动 TTL。
  • "content" 是 Kubernetes Ingress 对外暴露的公网 IP。

十八、Cloudflare 和 Kubernetes 的优缺点对比

Cloudflare 优点

  1. 接入简单
    只需要修改域名 NS 或 DNS 记录,就可以快速接入。

  2. 全球网络能力强
    Cloudflare 在全球拥有大量边缘节点,适合做 CDN 和全球加速。

  3. 安全能力丰富
    包括 DDoS 防护、WAF、Bot 管理、访问控制等。

  4. 适合保护源站
    可以隐藏源站 IP,减少直接暴露风险。

  5. 运维成本较低
    大部分能力通过控制台或 API 配置即可,不需要自己维护复杂网络基础设施。

Cloudflare 缺点

  1. 不是应用编排平台
    它不能替代 Kubernetes 管理容器应用。

  2. 部分高级能力需要付费
    WAF 规则、高级 Bot 管理、企业级防护等通常需要更高套餐。

  3. 强依赖外部平台
    如果 Cloudflare 配置错误,可能导致整个域名访问异常。

  4. 对内部服务治理有限
    它主要处理外部流量,不负责服务内部依赖、调度和资源分配。


Kubernetes 优点

  1. 适合大规模应用部署
    可以统一管理大量容器服务。

  2. 强大的自动化能力
    支持自愈、扩缩容、滚动更新、回滚等。

  3. 生态非常丰富
    包括 Helm、Argo CD、Prometheus、Istio、Knative 等。

  4. 跨云能力强
    Kubernetes 是开放标准,可以运行在多种云平台和私有机房中。

  5. 适合云原生架构
    是微服务、DevOps、GitOps、平台工程的重要基础。

Kubernetes 缺点

  1. 学习成本较高
    需要理解 Pod、Service、Deployment、Ingress、ConfigMap、Secret、RBAC 等概念。

  2. 运维复杂度较高
    如果是自建集群,需要维护控制平面、节点、网络、存储、证书等。

  3. 安全配置要求高
    RBAC、NetworkPolicy、镜像安全、Secret 管理都需要谨慎设计。

  4. 不直接提供 CDN 和 DDoS 防护
    Kubernetes 本身不能替代 Cloudflare 的全球边缘网络能力。


十九、选择建议

只需要网站加速和安全防护

优先选择:

Cloudflare

适合:

  • 个人博客
  • 企业官网
  • 静态网站
  • API 防护
  • 简单 Web 应用
  • 后台访问保护

需要管理大量容器应用

优先选择:

Kubernetes

适合:

  • 微服务系统
  • SaaS 平台
  • 大型后端系统
  • 高可用应用
  • 需要自动化部署的团队

既需要安全入口,又需要容器编排

推荐组合:

Cloudflare + Kubernetes

这是非常常见的生产架构:

Cloudflare 负责入口安全、DNS、CDN、WAF
Kubernetes 负责应用部署、扩缩容、自愈、服务治理

二十、常用排查命令汇总

Cloudflare 排查 DNS

dig app.example.com

nslookup app.example.com

curl -I https://app.example.com

查看请求经过的 IP:

curl -v https://app.example.com

查看 HTTP 响应头:

curl -I https://app.example.com

如果看到类似响应头,说明可能经过 Cloudflare:

cf-cache-status
cf-ray

cloudflared 排查

cloudflared tunnel list

cloudflared tunnel info my-app-tunnel

cloudflared tunnel run my-app-tunnel

journalctl -u cloudflared -f

sudo systemctl restart cloudflared

sudo systemctl status cloudflared

Kubernetes 排查 Pod

kubectl get pods

kubectl get pods -o wide

kubectl describe pod 

kubectl logs 

kubectl logs  -c 

kubectl exec -it  -- /bin/sh

Kubernetes 排查 Service

kubectl get svc

kubectl describe svc 

kubectl get endpoints 

Kubernetes 排查 Ingress

kubectl get ingress

kubectl describe ingress 

kubectl get ingress -o wide

Kubernetes 查看事件

kubectl get events --sort-by=.metadata.creationTimestamp

Kubernetes 查看节点

kubectl get nodes

kubectl describe node 

kubectl top nodes

kubectl top pods

二十一、总结

Cloudflare 和 Kubernetes 都是现代互联网架构中的重要工具,但它们解决的问题完全不同。

Cloudflare 的核心价值在于:

  • DNS 管理
  • CDN 加速
  • DDoS 防护
  • WAF 安全防护
  • 边缘网络
  • Zero Trust 访问控制

Kubernetes 的核心价值在于:

  • 容器编排
  • 应用部署
  • 自动扩缩容
  • 服务发现
  • 滚动更新
  • 故障自愈
  • 云原生基础设施管理

如果把一个线上系统比作一座大楼,那么:

Cloudflare 像是大楼外部的安检、门禁、交通调度和外围防护;
Kubernetes 像是大楼内部的房间分配、人员调度、电力系统和运行管理。

它们不是互相替代的关系,而是非常适合组合使用的关系。

对于个人开发者,可以先从 Cloudflare DNS、CDN、Tunnel 开始,快速提升网站访问体验和安全性;对于团队和企业,如果服务规模逐渐扩大,则可以引入 Kubernetes,实现应用交付和运行管理的标准化、自动化和平台化。

最终推荐架构通常是:

用户
 ↓
Cloudflare
 ↓
负载均衡器
 ↓
Kubernetes Ingress
 ↓
Service
 ↓
Pod

这样既能获得 Cloudflare 的全球网络和安全能力,也能获得 Kubernetes 的强大编排和自动化运维能力。

目录结构
全文