文章目录
  1. 1. 升级 Traefik 2.X
    1. 1.1. 删除 Traefik 1.7
    2. 1.2. 安装 traefik 2.
    3. 1.3. 查看 dashboard
    4. 1.4. 配置持久化并增加TLS
      1. 1.4.1. 持久化
    5. 1.5. 配置 TLS
  2. 2. 参考链接

目前在个人的测试环境使用了 K3S,兼容 K8S 又比较轻量,打算将公司的某个小环境也使用 k3s 管理了。

Traefik 做为 ingress 资源占用比较低,而且自带 Dashboard 可以看实时状态,新版本还可以使用 Go 来写插件(应该用不上),对日常使用来说还是挺方便的。

在 K3S 上自带的是 Traefik 1.7 版本,但现在 2.X 分支也已经更新了好多个版本了,就打算升一把。以下为升级步骤和常用的路由定义方法。

升级 Traefik 2.X

删除 Traefik 1.7

先禁用 1.7 版本,只要在 k3s server 启动的时候添加 --disable traefik 参数就可以,我使用了 systemd 管理,所以在 /etc/systemd/system/k3s.service 里面的配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[Unit]
Description=Lightweight Kubernetes
Documentation=https://k3s.io
After=network-online.target

[Service]
Type=notify
EnvironmentFile=/etc/systemd/system/k3s.service.env
ExecStartPre=-/sbin/modprobe br_netfilter
ExecStartPre=-/sbin/modprobe overlay
ExecStart=/usr/bin/k3s server --docker --disable traefik --kube-apiserver-arg 'service-node-port-range=1-65535'
KillMode=process
Delegate=yes
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
TimeoutStartSec=0
Restart=always
RestartSec=5s

[Install]
WantedBy=multi-user.target

这里使用了 docker 做为容器引擎,因为我比较熟悉这个,有点会拿 docker 做点事情。并且我在这里增加了开放的端口范围,方便使用 80, 443 以及其它范围的端口。

由于我之前开启过 traefik 1.7 ,所以这里在 k3s 启动成功后还会遗留之前的,所以先删除 traefik。

1
2
3
4
# 如果没有权限就先将文件拷出来到,再增加文件权限
k3s kubectl delete -f /var/lib/rancher/k3s/server/manifests/traefik.yaml
sudo systemctl daemon-reload
sudo systemctl restart k3s

安装 traefik 2.

添加Helm仓库

1
helm repo add traefik https://helm.traefik.io/traefik

更新一下仓库

1
helm repo update

安装traefik

1
helm install traefik traefik/traefik

如果要安装的指定的 namespace 使用下面的命令

1
2
3
4
kubectl create ns traefik-v2
# Install in the namespace "traefik-v2"
helm install --namespace=traefik-v2 \
traefik traefik/traefik

配置的修改可以使用 helm show values traefik/traefik > traefik_values.yml 命令将 values 导出,然后修改后使用 helm upgrade -f traefik_values.yml traefik traefik/traefik 更新。

这里修改一下入口的端口

将 traefik_values.yml 里面的 ports.web.nodePort 改成 80,ports.websecure.nodePort 改成 443,再部署一下。

1
helm upgrade -f traefik_values.yml traefik traefik/traefik

查看 dashboard

默认的 dashboard 端口是 9000,并没有通过 service 开放出来,也没有添加 ingress,所以无法直接访问。管理员可以考虑使用 kubectl port-forward deploy/traefik 9000:9000 命令映射到本地的 9000 端口上临时访问。

http://localhost:9000/dashboard/

配置持久化并增加TLS

持久化

在 traefik_values.yml 文件中提供了一个 persistence 配置,如果将 enabled 设置为 true 会启用一个 pvc 来做为持久化存储。我这里先新建一个 pv 绑定到 hostPath,因为我使用的是单机环境。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
apiVersion: v1
kind: PersistentVolume
metadata:
name: traefik-pv
labels:
type: local
spec:
storageClassName: traefik-config
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/home/chronos/dev/k3s/data/traefik"

将 persistence 配置修改为如下值

1
2
3
4
5
6
persistence:
enabled: true
name: data
accessMode: ReadWriteOnce
storageClass: "traefik-config"
path: /data

这样就可以将 /data 绑定到指定的 hostPath 了。

配置 TLS

先配置 resolvers 通过增加命令行参数实现,我这里使用了 dnspod,所以 traefik_values.yml 中增加的参数配置如下:

1
2
3
4
5
6
additionalArguments:
- "--certificatesresolvers.dnspod.acme.email=[你的email]"
- "--certificatesresolvers.dnspod.acme.storage=/data/acme.json"
- "--certificatesresolvers.dnspod.acme.dnschallenge=true"
- "--certificatesresolvers.dnspod.acme.dnschallenge.provider=dnspod"
- "--certificatesresolvers.dnspod.acme.dnschallenge.delaybeforecheck=0"

挂载的 /data 目录需要给 65532:65532 设置写入权限,用于生成 acme.json,并且由于使用了 dnspod 来获取证书,所以还需要配置一个环境变量来设置 api_key

1
2
3
env: 
- name: DNSPOD_API_KEY
value: [API_KEY]

剩下的就是绑定 ingressRoute 并设置 tls 的参数指定 resolvers 就会自动获取证书并续约了。以下是 IngressRoute 示例,绑定了 dnspod 这个 Resolver 来获取证书。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
name: caddy-secure
namespace: default
spec:
entryPoints:
- websecure
routes:
- kind: Rule
match: Host(`[你的域名]`)
services:
- kind: Service
name: caddy
namespace: default
passHostHeader: true
port: 80
responseForwarding:
flushInterval: 1ms
scheme: http
strategy: RoundRobin
weight: 10
tls:
certResolver: dnspod

参考链接

文章目录
  1. 1. 升级 Traefik 2.X
    1. 1.1. 删除 Traefik 1.7
    2. 1.2. 安装 traefik 2.
    3. 1.3. 查看 dashboard
    4. 1.4. 配置持久化并增加TLS
      1. 1.4.1. 持久化
    5. 1.5. 配置 TLS
  2. 2. 参考链接