一、使用Helm部署Traefik

通过以下命令,可以快速部署Traefik:

  1. helm repo add traefik https://helm.traefik.io/traefik
  2. helm repo update
  3. kubectl create ns traefik
  4. helm install traefik traefik/traefik -n traefik
  5. kubectl apply -f traefik/route.yaml -n traefik

部署完成后,在Kubernetes Dashboard中可以看到部署成功:
image.png

二、访问Traefik Dashboard

创建Traefik路由:

  1. apiVersion: traefik.containo.us/v1alpha1
  2. kind: IngressRoute
  3. metadata:
  4. name: traefik-dashboard
  5. namespace: traefik
  6. spec:
  7. entryPoints:
  8. - web
  9. routes:
  10. - match: Host(`traefik.dashboard.com`)
  11. kind: Rule
  12. services:
  13. - name: api@internal
  14. kind: TraefikService
  15. ---
  16. apiVersion: traefik.containo.us/v1alpha1
  17. kind: IngressRoute
  18. metadata:
  19. name: traefik-dashboard-tls
  20. namespace: traefik
  21. spec:
  22. entryPoints:
  23. - websecure
  24. routes:
  25. - match: Host(`traefik.dashboard.com`)
  26. kind: Rule
  27. services:
  28. - name: api@internal
  29. kind: TraefikService
  30. tls:
  31. secretName: traefik-dashboard-tls

在hosts中加入:

  1. 127.0.0.1 traefik.dashboard.com

其中证书是我自签的:

  1. openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=traefik.dashboard.com"
  2. kubectl create secret tls traefik-dashboard-tls --key tls.key --cert tls.crt -n traefik

随即可以使用HTTP及HTTPS访问:
image.png
image.png

三、强制HTTPS访问

创建中间件:

  1. apiVersion: traefik.containo.us/v1alpha1
  2. kind: Middleware
  3. metadata:
  4. name: redirect-https
  5. spec:
  6. redirectScheme:
  7. scheme: https

在HTTP路由中添加中间件配置:

  1. apiVersion: traefik.containo.us/v1alpha1
  2. kind: IngressRoute
  3. metadata:
  4. name: traefik-dashboard
  5. namespace: traefik
  6. spec:
  7. entryPoints:
  8. - web
  9. routes:
  10. - match: Host(`traefik.dashboard.com`)
  11. kind: Rule
  12. middlewares:
  13. - name: redirect-https
  14. services:
  15. - name: api@internal
  16. kind: TraefikService

随即通过HTTP访问,都将自动重定向到HTTPS。

四、访问时出现403、404错误

被这个问题折腾了好几天,最后发现是端口冲突。
通过查看端口占用的应用程序,80和443必须都只能由docker占用。
image.png
如果出现其他软件同时占用,则会出现此错误。将其他占用端口的程序关闭即可。

我排查出的问题是,VMWare的一个服务会占用443端口,服务名为 VMwareHostd
image.png
将其停止并禁用即可。


还有一种可能,就是在Kubernetes中开启了多个反向代理工具,比如同时部署了Nginx和Traefik,而他们又同时占用80和443,这样只需要将Nginx对应的服务删除即可。

比如:
image.png
image.png
两个服务同时占用了80和443,因此报错。