安装 k3s
curl -sfL https://get.k3s.io | sh -
mkdir -p ~/.kube
sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
sudo chown $USER:$USER ~/.kube/config
安装 helm
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
安装 halo
配置 halo 的 helm 库
helm repo add halo https://liueic.github.io/charts/
helm repo update
helm install halo halo/halo
为什么不使用官方的 helm 仓库:
因为官方的仓库镜像比较古早,在这里我自己 fork 了一个新的仓库,并且更新了镜像,更新到最新的 2.20.9
检查一下 pod 是否 ready
kubectl get pods
等到两个状态都为 READY 了就是好了
这时候它提醒你是 PortNode 模式
之后需要绑定域名,更新 helm
helm upgrade halo halo/halo --set ingress.enabled=true --set ingress.hostname=www.ciallo.cv
这里的 www.ciallo.cv
应当换成你自己部署 halo 的域名
之后会出现和上面一样的提示
这时候就是 ingress 来接管反向代理了,我们来查看一下
kubectl get ingress -n default
此时实现 HTTP 访问
因为我是准备套 Cloudflare CDN 的,所以我自己用 15 年证书
之后保存到本地,使用 kubernetes 的 secret 进行保管
kubectl create secret tls cloudflare-origin-cert \
--cert=ciallo.pem \
--key=ciallo.key.pem \
-n default
这里的 cert 和 key 都换成你的证书,如果你不用 Cloudflare 的话,也可以用 acme.sh 或者别的来帮你管理证书
之后更新
helm upgrade halo halo/halo \
--set ingress.enabled=true \
--set ingress.hostname=www.ciallo.cv \
--set ingress.tls=true \
--set ingress.tlsSecret=cloudflare-origin-cert \
--set-string ingress.annotations."nginx\.ingress\.kubernetes\.io/ssl-redirect"="true" \
-n default
又和上面一样,提醒你可以用 HTTPS 来访问了
之后又查看 imgress
,发现存在一个问题,就是它这个端口还是 80
,不是 HTTPS 的端口
我们需要手动 patch 来修改 tls 配置
运行以下命令为该 Ingress 添加 tls
块
kubectl patch ingress halo -n default --type merge -p '
{
"spec": {
"tls": [
{
"hosts": ["www.ciallo.cv"],
"secretName": "cloudflare-origin-cert"
}
]
}
}'
之后重新运行 kubectl get ingress halo -n default
应该就可以看到放行了 443 端口
在执行 upgrade 之后,旧的 pod 并不会马上销毁,而是会等到新的 pod 启动之后再销毁,符合 kubernetes 的工作特性