kuberneters集群中使用traefik發布服務
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的工作原理示意圖:
Traefik的主要特點:
1、Go語音編寫、無需安裝其他依賴包、速度快
2、支持Rest API、多後端類型支持
3、支持配置文件熱加載,不需要重啟app進程
4、支持Round Robin, rebalancer load-balancers等負載均衡策略
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 .
# kubectl get pod
# kubectl get svc
# kubectl get ingress
四、訪問應用測試
修改測試機hosts文件,因為traefik采用demonset的方式運行,所以hosts記錄指向k8s集群中任意的節點均可
可以通過訪問集群內任意節點的8081端口查看taefik的圖形化界面
kuberneters集群中使用traefik發布服務