阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

kuberneters集群中使用traefik发布服务

195次阅读
没有评论

共计 2890 个字符,预计需要花费 8 分钟才能阅读完成。

前文已经介绍过了 k8s ingress 的实现原理和配置,本文将介绍替代方案 traefik。在开始配置之前我们先回顾一下 ingress 发布 k8s 服务的实现方案,ingress 方案需要使用下列的组件:

1、反向代理负载均衡器
2、ingress control
3、ingress
其中 ingress control 负责同 apiserver 进行通信,监测 pod 和 service 的变化,并更新反向代理负载均衡器的配置,同时让反向代理负载均衡器重载配置。

接下来我们来看看 traefik,官网地址:https://traefik.io/
Traefik (pronounced like traffic) is a modern HTTP reverse proxy and load balancer made to deploy microservices with ease. It supports several backends (Docker,Swarm mode,Kubernetes,Marathon, Consul,Etcd,Rancher,Amazon ECS, and a lot more) to manage its configuration automatically and dynamically.

Traefik 本质上是一个 http 的方向代理和负载均衡,可以支持 Docker, Swarm mode, Kubernetes, Marathon, Consul, Etcd, Rancher, Amazon ECS 等后端服务,动态的管理这些服务的配置文件(我们可以理解为自动发现这些后端服务的配置变更,并重新加载服务的配置)

下图是 traefik 的工作原理示意图:
kuberneters 集群中使用 traefik 发布服务
Traefik 的主要特点:
1、Go 语音编写、无需安装其他依赖包、速度快
2、支持 Rest API、多后端类型支持
3、支持配置文件热加载,不需要重启 app 进程
4、支持 Round Robin, rebalancer load-balancers 等负载均衡策略
5、自带 AngularJS Web UI 图形化界面
6、支持 https、自动更新 https 证书
7、支持 websocket、HTTP/2, GRPC、高可用集群等
8、支持网络错误重试、后端自动熔断(当后端应用错误数过多的时候,可以自动熔断)

总而言之, 在 k8s 集群中服务发布的方案选择,Traefik 可用作为 ingress 的替代解决方案,traefik 的特点足够说服我们将 ingress 替换成 Traefik,下面我们开始在 k8s 1.5.2 集群环境中使用 Traefik 来发布服务。

一、通过 yaml 文件已 daemonset 方式运行 traefik

# mkdir traefik
# cd traefik
# docker pullk docker.io/traefik# cat traefik.ds.yaml 
apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
  name: traefik-ingress-lb
  namespace: default
  labels:
    k8s-app: traefik-ingress-lb
spec:
  template:
    metadata:
      labels:
        k8s-app: traefik-ingress-lb
        name: traefik-ingress-lb
    spec:
      terminationGracePeriodSeconds: 60
      hostNetwork: true
      restartPolicy: Always
      containers:
      – image: docker.io/traefik
        name: traefik-ingress-lb
        resources:
          limits:
            cpu: 200m
            memory: 30Mi
          requests:
            cpu: 100m
            memory: 20Mi
        ports:
        – name: http
          containerPort: 80
          hostPort: 80
        – name: admin
          containerPort: 8081
        args:
        – –web
        – –web.address=:8081
        – –kubernetes
        – –kubernetes.endpoint=http://192.168.115.5:8080

二、通过 yaml 文件创建 webui 的 service、ingress

# cat ui.yaml
apiVersion: v1
kind: Service
metadata:
  name: traefik-web-ui
  namespace: default
spec:
  selector:
    k8s-app: traefik-ingress-lb
  ports:
  – name: web
    port: 80
    targetPort: 8081

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: traefik-web-ui
  namespace: default
spec:
  rules:
  – host: traefik-ui.local
    http:
      paths:
      – path: /
        backend:
          serviceName: traefik-web-ui
          servicePort: web

三、通过 yaml 文件创建 kubernetes-dashboard 和 frontend 的 ingress

# cat traefik.ing.yaml 
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: traefik-ingress
spec:
  rules:
  – host: k8s.webui
    http:
      paths:
      – path: /
        backend:
          serviceName: kubernetes-dashboard 
          servicePort: 80
  – host: k8s.frontend
    http:
      paths:
      – path: /
        backend:
          serviceName: frontend
          servicePort: 80

三、通过上述 yaml 配置文件创建 pod 和 ingress

# cd kubernetes/traefik/
# kubectl get pod
# kubectl get svc
# kubectl create -f .

kuberneters 集群中使用 traefik 发布服务

# kubectl get pod
# kubectl get svc
# kubectl get ingress

kuberneters 集群中使用 traefik 发布服务
四、访问应用测试
修改测试机 hosts 文件,因为 traefik 采用 demonset 的方式运行,所以 hosts 记录指向 k8s 集群中任意的节点均可
kuberneters 集群中使用 traefik 发布服务
kuberneters 集群中使用 traefik 发布服务
kuberneters 集群中使用 traefik 发布服务
可以通过访问集群内任意节点的 8081 端口查看 taefik 的图形化界面
kuberneters 集群中使用 traefik 发布服务
kuberneters 集群中使用 traefik 发布服务
后续将研究一下如何在 k8s 集群中发布 https 协议的服务。

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计2890字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中