使用k3s部署一个服务,并最快发布到公网上
1. 前言
在学习一个东西的时候,我总是喜欢先跑通一个最小化的demo,这样就可以根据这个demo不断往上叠加新的知识,这也是“成功才是成功之母”的一种体现。
而这篇博客也是我在学习kubernetes时最小化demo的一个例子。选择了k3s,能在轻量级的服务器上运行,选择cloudflare,不用担心ssl证书配置的繁琐。
后面的内容基于以下前提条件实现:
- 一台1H1G以上的香港云服务器
- 服务器系统选择了debian
Akile Aff | [HKLite-One CPU 1核 | 内存 1024 M 硬盘 5 GB | 带宽 5000M 1000G/月 | 超出限速共享10Mbps 重置流量 ¥7.00 IPv4 1个 | IPv6 1个 ¥9.99/月]
[HKLite-One CPU 1核 | 内存 1024 M 硬盘 5 GB | 带宽 5000M 1000G/月 | 超出限速共享10Mbps 重置流量 ¥7.00 IPv4 1个 | IPv6 1个 ¥9.99/月]
- Cloudflare账号 + 一个域名
- 域名使用了cloudflare做DNS解析
接着,让我们开始吧
2. 安装k3s
因为这只是一个最小化的demo,所以一条命令直接搞定!
curl -sfL https://get.k3s.io | sh -s - server
执行完成之后,使用systemctl status k3s检查一下k3s状态

显示Running则表示服务正常
/usr/local/bin/k3s-uninstall.sh 执行这个shell则能直接卸载。
这个/usr/local/bin/k3s-uninstall.sh和/usr/local/bin/k3s-killall.sh也是在搞不定各种问题的时候可以让你直接卸载重来,
3. 在k3s中部署一个简单的HTTP服务
3.1 创建一个测试Deployment
新建文件 test-deployment.yaml,内容如下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: http-test
spec:
replicas: 1
selector:
matchLabels:
app: http-test
template:
metadata:
labels:
app: http-test
spec:
containers:
- name: nginx
image: nginx:alpine
ports:
- containerPort: 80
3.2 创建Service暴露端口
新建文件 test-service.yaml,内容如下:
apiVersion: v1
kind: Service
metadata:
name: http-test-service
spec:
selector:
app: http-test
ports:
- protocol: TCP
port: 80
targetPort: 80
3.3 应用配置
kubectl apply -f test-deployment.yaml
kubectl apply -f test-service.yaml
检查一下服务是否部署成功,显示running状态则为正常
kubectl get pods

3.4 配置Ingress路由(使用Traefik)
k3s默认安装了Traefik作为Ingress Controller,直接创建Ingress资源即可。
3.4.1 创建Ingress规则
新建文件 test-ingress.yaml,内容如下:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: http-test-ingress
spec:
rules:
- host: your-domain.com # 替换为你的域名(如 test.example.com)
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: http-test-service
port:
number: 80
3.5 应用Ingress
kubectl apply -f test-ingress.yaml
测试服务此时就已经部署好了,但是你通过ip进行访问肯定看到的还是404 page not found
别担心,接下来要在cloudflare上配置DNS解析才能访问
4. Cloudflare配置DNS解析
增加一条DNS解析

等个30s左右,再通过域名访问,就会看到nginx的界面了
