$ kubectl get pods -n kube-systemNAMEREADYSTATUSRESTARTSAGEtraefik-867bd6b9c-lbrlx1/1Running06m17s......$ kubectl get ingressrouteNAMEAGEtraefik-dashboard30m部署完成后我们可以通过在本地 /etc/hosts 中添加上域名 traefik.domain.com 的映射即可访问 Traefik 的 Dashboard 页面了:

文章插图
traefik dashboard demo
ACMETraefik 通过扩展 CRD 的方式来扩展 Ingress 的功能,除了默认的用 Secret 的方式可以支持应用的 HTTPS 之外,还支持自动生成 HTTPS 证书 。
比如现在我们有一个如下所示的 whoami 应用:
apiVersion: v1kind: Servicemetadata:name: whoamispec:ports:- protocol: TCPname: webport: 80selector:app: whoami---kind: DeploymentapiVersion: apps/v1metadata:name: whoamilabels:app: whoamispec:replicas: 2selector:matchLabels:app: whoamitemplate:metadata:labels:app: whoamispec:containers:- name: whoamiimage: containous/whoamiports:- name: webcontainerPort: 80然后定义一个 IngressRoute 对象:apiVersion: traefik.containo.us/v1alpha1kind: IngressRoutemetadata:name: simpleingressroutespec:entryPoints:- webroutes:- match: Host(`who.qikqiak.com`) && PathPrefix(`/notls`)kind: Ruleservices:- name: whoamiport: 80通过 entryPoints 指定了我们这个应用的入口点是 web,也就是通过 80 端口访问,然后访问的规则就是要匹配 who.qikqiak.com 这个域名,并且具有 /notls 的路径前缀的请求才会被 whoami 这个 Service 所匹配 。我们可以直接创建上面的几个资源对象,然后对域名做对应的解析后,就可以访问应用了:
文章插图
traefik whoami http demo
在 IngressRoute 对象中我们定义了一些匹配规则,这些规则在 Traefik 中有如下定义方式:

文章插图
traefik route matcher
如果我们需要用 HTTPS 来访问我们这个应用的话,就需要监听 websecure 这个入口点,也就是通过 443 端口来访问,同样用 HTTPS 访问应用必然就需要证书,这里我们用 openssl 来创建一个自签名的证书:
$ openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=who.qikqiak.com"然后通过 Secret 对象来引用证书文件:# 要注意证书文件名称必须是 tls.crt 和 tls.key$ kubectl create secret tls who-tls --cert=tls.crt --key=tls.keysecret/who-tls created这个时候我们就可以创建一个 HTTPS 访问应用的 IngressRoute 对象了:apiVersion: traefik.containo.us/v1alpha1kind: IngressRoutemetadata:name: ingressroutetlsspec:entryPoints:- websecureroutes:- match: Host(`who.qikqiak.com`) && PathPrefix(`/tls`)kind: Ruleservices:- name: whoamiport: 80tls:secretName: who-tls创建完成后就可以通过 HTTPS 来访问应用了,由于我们是自签名的证书,所以证书是不受信任的:
文章插图
traefik whoami https demo
除了手动提供证书的方式之外 Traefik 还支持使用 Let’s Encrypt 自动生成证书,要使用 Let’s Encrypt 来进行自动化 HTTPS,就需要首先开启 ACME,开启 ACME 需要通过静态配置的方式,也就是说可以通过环境变量、启动参数等方式来提供,我们这里还是直接使用启动参数的形式来开启,在 Traefik 的部署文件中添加如下命令行参数:
args:......# 使用 DNS 验证方式- --certificatesResolvers.ali.acme.dnsChallenge.provider=alidns# 邮箱配置- --certificatesResolvers.ali.acme.email=ych_1024@163.com# 保存 ACME 证书的位置- --certificatesResolvers.ali.acme.storage=/etc/acme/acme.jsonACME 有多种校验方式 tlsChallenge、httpChallenge 和 dnsChallenge 三种验证方式,之前更常用的是 http 这种验证方式,关于这几种验证方式的使用可以查看文档:https://www.qikqiak.com/traefik-book/https/acme/ 了解他们之间的区别 。要使用 tls 校验方式的话需要保证 Traefik 的 443 端口是可达的,dns 校验方式可以生成通配符的证书,只需要配置上 DNS 解析服务商的 API 访问密钥即可校验 。我们这里用 DNS 校验的方式来为大家说明如何配置 ACME 。上面我们通过设置 --certificatesResolvers.ali.acme.dnsChallenge.provider=alidns 参数来指定指定阿里云的 DNS 校验,要使用阿里云的 DNS 校验我们还需要配置3个环境变量:ALICLOUD_ACCESS_KEY、ALICLOUD_SECRET_KEY、ALICLOUD_REGION_ID,分别对应我们平时开发阿里云应用的时候的密钥,可以登录阿里云后台获取,由于这是比较私密的信息,所以我们用 Secret 对象来创建:
推荐阅读
- 5分钟!彻底搞懂MyBatis插件+PageHelper原理
- 彻底搞懂 Netty 线程模型
- 一文读懂 Java操作Elasticsearch
- 一文讲透FTP和SFTP的区别
- 一文搞懂分类算法中常用的评估指标
- 一文了解高并发限流算法
- 一文领略 HTTP 的前世今生
- 看了两天HashMap源码,终于把红黑树插入平衡规则搞懂了
- 一文学懂递归和动态规划
- 一文读懂阿里云之VPC概念及实战
