本文主要是介绍Kubenetes 中使用 Traefik 作为 Ingress 转发流量,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Kubenetes 中使用 Traefik 作为 Ingress 转发流量
Ingress 就是 Kubernetes 机器外访问集群的入口,将请求的 URL 转发到不同的 Service 上,相当于 Nginx 等代理服务器
路由信息由 Ingress Controller 提供,Ingress Controller 可以理解为监视器,不断请求 Kubernetes API 实时感知 Service 和 Pod 的状态,结合上下文的 Ingress 生成配置,然后更新反向代理服务器的配置,达到服务发现的作用
Traefik 是一个开源的反向代理与负载均衡工具,能够与常见的微服务系统直接整合,可以实现自动化动态配置
通过配置文件部署 Traefik
配置
- Ingress-rbac.yaml
用于 Service Account 验证
apiVersion: v1
kind: ServiceAccount
metadata:name: ingressnamespace: kube-system---kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:name: ingress
subjects:- kind: ServiceAccountname: ingressnamespace: kube-system
roleRef:kind: ClusterRolename: cluster-adminapiGroup: rbac.authorization.k8s.io
- traefik-daemon-set.yaml
使用 DaemonSet 部署 Traefik
apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:name: traefik-ingress-lbnamespace: kube-systemlabels:k8s-app: traefik-ingress-lb
spec:template:metadata:labels:k8s-app: traefik-ingress-lbname: traefik-ingress-lbspec:terminationGracePeriodSeconds: 60hostNetwork: truerestartPolicy: AlwaysserviceAccountName: ingresscontainers:- image: traefikname: traefik-ingress-lbresources:limits:cpu: 200mmemory: 30Mirequests:cpu: 100mmemory: 20Miports:- name: httpcontainerPort: 80hostPort: 80- name: admincontainerPort: 8580hostPort: 8580args:- --web- --web.address=:8580- --kubernetes
- traefik-ui.yaml
创建 Traefik 的 UI
apiVersion: v1
kind: Service
metadata:name: traefik-web-uinamespace: kube-system
spec:selector:k8s-app: traefik-ingress-lbtype: NodePort ports:- name: webport: 80targetPort: 8580
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:name: traefik-web-uinamespace: kube-system
spec:rules:- host: traefik-ui.localhttp:paths:- path: /backend:serviceName: traefik-web-uiservicePort: web
部署
kubectl apply -f .
通过 Helm 部署 Traefik
- 创建 values.yaml
dashboard:enabled: truedomain: dashboard.traefik
serviceType: LoadBalancer
rbac:enabled: true
deployment:hostPort:httpEnabled: truehttpsEnabled: truedashboardEnabled: true
helm install --values values.yaml stable/traefik --name traefik
这样就会启用 Dashboard,更改 Host 指向相应的节点和端口,访问dashboard.traefik:${PORT}
就可以看到 Dashboard
- Host
192.168.0.110 dashboard.traefik
- 也可以直接下载 Traefik 的 Helm Release,解压后修改相应的配置后再安装
helm fetch stable/traefiktar -xvf traefik-1.24.1.tgzhelm install --values values.yaml ./traefik --name traefik
部署应用
- backend-ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:name: backend-ingressnamespace: default
spec:rules:- host: rest.hellowoodes.comhttp:paths:- path: /backend:serviceName: backendservicePort: 8080
修改 Host 将域名指向相应的节点 IP
测试
- 获取端口
kubectl get service -l app=traefik
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
traefik LoadBalancer 10.106.137.170 <pending> 80:32311/TCP,443:30677/TCP 1s
traefik-dashboard ClusterIP 10.108.91.184 <none> 80/TCP 1s
-
访问相应的 NodeIP 和地址 http://dashboard.traefik:32311,可以看到 Traefik 的 Dashboard
-
因为在values.yaml 中已经配置了
deployment.hostPort.httpEnabled
和deployment.hostPort.httpsEnabled
,所以也可以直接访问 dashboard.traefik
- 访问backend 应用
curl http://rest.hellowoodes.com/ping
Pong%
参考资料
- Helm Traefik
- Kubernetes Traefik Installation (helm)
- Kubernetes Ingress Controller
- 安装traefik ingress
- 微服务边界路由Traefik:基于京东云Kubernetes集群及Helm Chart
这篇关于Kubenetes 中使用 Traefik 作为 Ingress 转发流量的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!