
kubernetes 部署 traefik
Træfɪk 是一个为了让部署微服务更加便捷而诞生的现代HTTP反向代理、负载均衡工具。它支持多种后台 (Docker, Swarm, Kubernetes, Marathon, Mesos, Consul, Etcd, Zookeeper, BoltDB, Rest API, file…) 来自动化、动态的应用它的配置文件设置。
Traefik 简介
Træfɪk 是一个为了让部署微服务更加便捷而诞生的现代HTTP反向代理、负载均衡工具。 它支持多种后台 (Docker, Swarm, Kubernetes, Marathon, Mesos, Consul, Etcd, Zookeeper, BoltDB, Rest API, file…) 来自动化、动态的应用它的配置文件设置。
官方网站:https://traefik.io/
项目地址:https://github.com/traefik/traefik
helm 部署 traefik
官方文档:https://docs.traefik.io/getting-started/install-traefik/#use-the-helm-chart
helm仓库:https://github.com/traefik/traefik-helm-chart
前置要求:
由于 traefik 默认使用LoadBalancer方式暴露自身,因此需要提前部署一个负载均衡器,例如metallb等,为traefik service分配EXTERNAL-IP
地址。
添加Traefik Labs charts 存储库:
helm repo add traefik https://traefik.github.io/charts
使用helm
命令行安装traefik,默认service类型为LoadBalancer
helm install traefik traefik/traefik \
-n traefik --create-namespace
查看创建的pods
root@node1:~# kubectl -n traefik get pods
NAME READY STATUS RESTARTS AGE
traefik-587bdd95fd-rdfmm 1/1 Running 0 29s
查看创建的service,确认已分配EXTERNAL-IP
root@ubuntu:~# kubectl -n traefik get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
traefik LoadBalancer 10.96.2.68 192.168.72.231 80:30071/TCP,443:31255/TCP 46m
查看创建的ingressClass
root@ubuntu:~# kubectl get ingressclass
NAME CONTROLLER PARAMETERS AGE
traefik traefik.io/ingress-controller <none> 74s
出于安全考虑,此 HelmChart 默认情况下不会公开 Traefik 仪表板。因此,有多种方法可以公开仪表板,例如,通过定义和应用 IngressRoute CRD。
创建IngressRoute资源
# dashboard.yaml
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: dashboard
spec:
entryPoints:
- web
routes:
- match: Host(`traefik.example.com`) && (PathPrefix(`/dashboard`) || PathPrefix(`/api`))
kind: Rule
services:
- name: api@internal
kind: TraefikService
应用yaml文件
kubectl apply -f dashboard.yaml
访问 dashboard
本地配置hosts解析,将域名traefik.example.com
指向EXTERNAL-IP
traefik.example.com 192.168.72.231
浏览器访问以下地址:
http://traefik.example.com/dashboard/
Traefik dashboard 首页如下:
Traefik ingress 示例
针对kubernetes环境,traefik 支持不同的provider,以下是两种主要的实现:
-
Kubernetes Ingress provider
:是 Kubernetes Ingress 控制器;也就是说,它通过支持Ingress规范来管理对集群服务的访问。 -
kubernetesCRD provider
:Kubernetes 入口控制器自定义资源方式。在早期版本中,Traefik 仅通过Kubernetes Ingress provider
支持 Kubernetes,严格意义上来说,这是一个 Kubernetes Ingress 控制器。后来 Traefik 工程团队为IngressRoute
类型开发了自定义资源定义 (CRD),以便提供更好的方法配置对 Kubernetes 集群的访问。
上面在向集群外暴露 traefik 自身dashboard服务时就使用了IngressRoute
的方式,下面基于whoami 示例应用针对两种类型的provider进行基本演示。
ingress示例
部署whoami
示例应用
# whoami.yaml
kind: Deployment
apiVersion: apps/v1
metadata:
name: whoami
labels:
app: whoami
spec:
replicas: 1
selector:
matchLabels:
app: whoami
template:
metadata:
labels:
app: whoami
spec:
containers:
- name: whoami
image: traefik/whoami
ports:
- name: web
containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: whoami
spec:
ports:
- name: web
port: 80
targetPort: web
selector:
app: whoami
创建 ingress 规则,注意这里的 kind 为 ingress。
# whoami-ingress.yml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: whoami-ingress
spec:
rules:
- host: whoami.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: whoami
port:
name: web
应用yaml配置
kubectl apply -f whoami.yaml
kubectl apply -f whoami-ingress.yml
查看创建的资源
root@ubuntu:~# kubectl get pods
NAME READY STATUS RESTARTS AGE
whoami-76c79d59c8-4lwcf 1/1 Running 0 2m34s
root@ubuntu:~# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 37d
whoami ClusterIP 10.96.1.145 <none> 80/TCP 2m36s
root@ubuntu:~# kubectl get ingress
NAME CLASS HOSTS ADDRESS PORTS AGE
whoami-ingress traefik whoami.example.com 80 2m38s
浏览器访问whoami 示例应用,注意配置域名解析,指向EXTERNAL-IP
ingressRoute 示例
注意这里的 kind 为 IngressRoute。
# whoami-ingressroute.yaml
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: whoamiroute
spec:
entryPoints:
- web
routes:
- match: Host(`whoamiroute.example.com`)
kind: Rule
services:
- name: whoami
port: 80
查看创建的ingressRoute
root@ubuntu:~# kubectl get ingressroute.traefik.io
NAME AGE
dashboard 99m
whoamiroute 89s
浏览器访问 whoami 示例应用
更多推荐
所有评论(0)