一、使用Helm部署Traefik
通过以下命令,可以快速部署Traefik:
helm repo add traefik https://helm.traefik.io/traefik
helm repo update
kubectl create ns traefik
helm install traefik traefik/traefik -n traefik
kubectl apply -f traefik/route.yaml -n traefik
部署完成后,在Kubernetes Dashboard中可以看到部署成功:
二、访问Traefik Dashboard
创建Traefik路由:
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
name: traefik-dashboard
namespace: traefik
spec:
entryPoints:
- web
routes:
- match: Host(`traefik.dashboard.com`)
kind: Rule
services:
- name: api@internal
kind: TraefikService
---
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
name: traefik-dashboard-tls
namespace: traefik
spec:
entryPoints:
- websecure
routes:
- match: Host(`traefik.dashboard.com`)
kind: Rule
services:
- name: api@internal
kind: TraefikService
tls:
secretName: traefik-dashboard-tls
在hosts中加入:
127.0.0.1 traefik.dashboard.com
其中证书是我自签的:
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=traefik.dashboard.com"
kubectl create secret tls traefik-dashboard-tls --key tls.key --cert tls.crt -n traefik
随即可以使用HTTP及HTTPS访问:
三、强制HTTPS访问
创建中间件:
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
name: redirect-https
spec:
redirectScheme:
scheme: https
在HTTP路由中添加中间件配置:
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
name: traefik-dashboard
namespace: traefik
spec:
entryPoints:
- web
routes:
- match: Host(`traefik.dashboard.com`)
kind: Rule
middlewares:
- name: redirect-https
services:
- name: api@internal
kind: TraefikService
随即通过HTTP访问,都将自动重定向到HTTPS。
四、访问时出现403、404错误
被这个问题折腾了好几天,最后发现是端口冲突。
通过查看端口占用的应用程序,80和443必须都只能由docker占用。
如果出现其他软件同时占用,则会出现此错误。将其他占用端口的程序关闭即可。
我排查出的问题是,VMWare的一个服务会占用443端口,服务名为 VMwareHostd
。
将其停止并禁用即可。
还有一种可能,就是在Kubernetes中开启了多个反向代理工具,比如同时部署了Nginx和Traefik,而他们又同时占用80和443,这样只需要将Nginx对应的服务删除即可。
比如:
两个服务同时占用了80和443,因此报错。