kubernetes 部署 traefik

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
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值