traefik安装
注意这篇文档有个错误,需要改正一下: 1、nginx1-7.yaml nginx1-8.yaml traefik.yaml 这三个文件里面的80端口需要改成8080端口,否则报错,其他的文件不变。 2、如果突然不能访问了,就把 8080重新改回来80 就可以访问了 3、严格按照下面的过程操作,先创建测试的nginx,再创建traefik所有相关的yaml文件, 在Kubernetes上使用Traefik Traefik介绍 部署测试用的两个服务 Role Based Access Control configuration (Kubernetes 1.6+ only) 部署Traefik 部署 Ingress 部署Traefik UI 访问测试 健康检查 提前下载镜像: docker pull nginx:1.7.9
docker pull nginx:1.8 docker pull traefik 一、Traefik介绍 traefik 是一个前端负载均衡器,对于微服务架构尤其是 kubernetes 等编排工具具有良好的支持;同 nginx 等相比,traefik 能够自动感知后端容器变化,从而实现自动服务发现。 由于微服务架构以及 Docker 技术和 kubernetes 编排工具最近几年才开始逐渐流行,所以一开始的反向代理服务器比如 nginx、apache 并未提供其支持,毕竟他们也不是先知; 所以才会出现 Ingress Controller 这种东西来做 kubernetes 和前端负载均衡器如 nginx 之间做衔接; 即 Ingress Controller 的存在就是为了能跟 kubernetes 交互,又能写 nginx 配置,还能 reload 它,这是一种折中方案; 而 traefik 天生就是提供了对 kubernetes 的支持,也就是说 traefik 本身就能跟 kubernetes API 交互,感知后端变化, 因此可以得知: 在使用 traefik 时,Ingress Controller 已经没什么用了, 二、部署测试用的两个服务 部署两个服务nginx1-7和nginx1-8,后面用Traefik去负载这两个服务: 注意:下面每个service都是对应了两个pod副本,这样才可以实现service负载这两个pod cat>nginx1-7.yaml<<EOF
apiVersion: v1
kind: Service
metadata:
name: frontend
spec:
ports:
- port: 80
targetPort: 80
selector:
app: nginx1-7
---
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: nginx1-7-deployment
spec:
replicas: 2
template:
metadata:
labels:
app: nginx1-7
spec:
containers:
- name: nginx
image: nginx:1.7.9
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
EOF cat>nginx1-8.yaml<<EOF
apiVersion: v1
kind: Service
metadata:
name: my-nginx
spec:
ports:
- port: 80
targetPort: 80
selector:
app: nginx1-8
---
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: nginx1-8-deployment
spec:
replicas: 2
template:
metadata:
labels:
app: nginx1-8
spec:
containers:
- name: nginx
image: nginx:1.8
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
EOF 运行两个服务: [root@node1 nginx_ingress]# kubectl create -f nginx1-7.yaml
service "frontend" created
deployment "nginx1-7-deployment" created
[root@node1 nginx_ingress]# kubectl create -f nginx1-8.yaml
service "my-nginx" created
deployment "nginx1-8-deployment" created 三、Role Based Access Control configuration (Kubernetes 1.6+ only) 这里部署的是1.13.0 集群,开启了RBAC,授权需要使用角色和绑定角色 cat>ingress-rbac.yaml<<EOF
apiVersion: v1
kind: ServiceAccount
metadata:
name: ingress
namespace: kube-system --- kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: ingress
subjects:
- kind: ServiceAccount
name: ingress
namespace: kube-system
roleRef:
kind: ClusterRole
name: cluster-admin
apiGroup: rbac.authorization.k8s.io
EOF 四、部署Traefik cat>traefik-deploy.yaml<<EOF
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: traefik-ingress-lb
namespace: kube-system
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
serviceAccountName: ingress
containers:
- image: traefik
imagePullPolicy: IfNotPresent
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: 8580
hostPort: 8580
args:
- --web
- --web.address=:8580
- --kubernetes
EOF 其中 traefik 监听 node 的 80 和 8580 端口,80 提供正常服务,8580 是其自带的 UI 界面,原本默认是 8080,因为环境里端口冲突了,所以这里临时改一下。 注意:这里用的是Deploy类型,没有限定该pod运行在哪个主机上。 五、部署 Ingress
部署ingress这一步是核心。从下面的yaml文件里 host: traefik.nginx.io在traefik界面上是可以看到的,它对应前面的service名字my-nginx,而service里面的my-nginx对应两个pod副本,起到负载均衡作用
同样:host: traefik.nginx.io在traefik界面上是可以看到的,它对应前面的service里面的frontend,而service名字frontend对应两个pod副本,起到负载均衡作用
cat>traefik.yaml<<EOF
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: traefik-ingress
namespace: default
spec:
rules:
- host: traefik.nginx.io
http:
paths:
- path: /
backend:
serviceName: my-nginx
servicePort: 80
- host: traefik.frontend.io
http:
paths:
- path: /
backend:
serviceName: frontend
servicePort: 80
EOF 其中的backend中要配置default namespace中启动的service名字,如果你没有配置namespace名字,默认使用default namespace,如果你在其他namespace中创建服务想要暴露到kubernetes集群外部,可以创建新的ingress.yaml文件,同时在文件中指定该namespace,其他配置与上面的文件格式相同。path就是URL地址后的路径,如traefik.frontend.io/path,service将会接受path这个路径,host最好使用service-name.filed1.filed2.domain-name这种类似主机名称的命名方式,方便区分服务。 根据实际环境中部署的service的名字和端口自行修改,有新service增加时,修改该文件后可以使用kubectl replace -f traefik.yaml来更新。 六、部署Traefik UI traefik 本身还提供了一套 UI 供我们使用,其同样以 Ingress 方式暴露,只需要创建一下即可。 cat>traefik-ui-service.yaml<<EOF
apiVersion: v1
kind: Service
metadata:
name: traefik-web-ui
namespace: kube-system
spec:
selector:
k8s-app: traefik-ingress-lb
ports:
- name: web
port: 80
targetPort: 8580
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: traefik-web-ui
namespace: kube-system
spec:
rules:
- host: traefik-ui.local
http:
paths:
- path: /
backend:
serviceName: traefik-web-ui
servicePort: web
EOF 最后一起创建: [root@node1 traefik]# kubectl create -f .
serviceaccount "ingress" created
clusterrolebinding "ingress" created
deployment "traefik-ingress-lb" created
service "traefik-web-ui" created
ingress "traefik-web-ui" created
ingress "traefik-ingress" created 七、访问测试 1、查看traefik pod被分配到了哪台主机上: [root@node1 traefik]# kubectl get pods -n kube-system -l k8s-app=traefik-ingress-lb -o wide
NAME READY STATUS RESTARTS AGE IP NODE
traefik-ingress-lb-4237248072-1dg9n 1/1 Running 0 2m 172.16.7.152 172.16.7.152 浏览器输入http://172.16.7.152:8580/,将可以看到dashboard。如下图所示:左侧蓝色部分部分列出的是所有的rule,右侧绿色部分是所有的backend。 在Kubernetes集群的任意一个节点上执行。假如现在我要访问nginx的"/"路径。 curl -H Host:traefik.nginx.io http://172.16.7.152/ 如果需要在kubernetes集群以外访问就需要设置DNS,或者修改本机的hosts文件。 172.16.7.152 traefik.nginx.io
172.16.7.152 traefik.frontend.io 所有访问这些地址的流量都会发送给172.16.7.152这台主机,就是我们启动traefik的主机。 Traefik会解析http请求header里的Host参数将流量转发给Ingress配置里的相应service。 修改hosts后就就可以在kubernetes集群外访问以上两个service。
2、下图左侧 Host:traefik.frontend.io 就是上面部署 Ingress里面定义的host,对应着下图右侧第二个框里面的内容
3、下图右侧traefik.frontend.io/下面的service下面的两个链接就是最开始定义的第一个deopoyment里面的两个pod副本访问地址,然后负载这两个pod副本,相当于nginx负载后面两个相同的服务一样,如下所示:
http://10.244.0.119:80 1
http://10.244.0.118:80 1
4、查看traefik.frontend.io对应的负载均衡策略,默认是 Load Balancer Method wrr 轮询负载均衡机制,如下图所示,
八、健康检查 关于健康检查,测试可以使用 kubernetes 的 Liveness Probe 实现,如果 Liveness Probe检查失败,则 traefik 会自动移除该 pod。 【示例】:我们定义一个 test-health 的 deployment,健康检查方式是 cat /tmp/health,容器启动 2 分钟后会删掉这个文件,模拟健康检查失败。 test-health的deployment: [root@node1 traefik]# cat test-health-deploy.yaml
apiVersion: v1
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
name: test
namespace: default
labels:
test: alpine
spec:
replicas: 1
selector:
matchLabels:
test: alpine
template:
metadata:
labels:
test: alpine
name: test
spec:
containers:
- image: mritd/alpine:3.4
name: alpine
resources:
limits:
cpu: 200m
memory: 30Mi
requests:
cpu: 100m
memory: 20Mi
ports:
- name: http
containerPort: 80
args:
command:
- "bash"
- "-c"
- "echo ok > /tmp/health;sleep 120;rm -f /tmp/health"
livenessProbe:
exec:
command:
- cat
- /tmp/health
initialDelaySeconds: 20
test-health-deploy.yaml
test-health 的 service: [root@node1 traefik]# vim test-health-service.yaml
apiVersion: v1
kind: Service
metadata:
name: test
labels:
name: test
spec:
ports:
- port: 8123
targetPort: 80
selector:
name: test
test-health-service.yaml
test-health的 Ingress: [root@node1 traefik]# vim test-health-ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: test
spec:
rules:
- host: test.com
http:
paths:
- path: /
backend:
serviceName: test
servicePort: 8123
test-health-ingress.yaml 全部创建好以后,进入 traefik ui 界面,可以观察到每隔 2 分钟健康检查失败后,kubernetes 重建 pod,同时 traefik 会从后端列表中移除这个 pod。
报错解决: 1、出现下面情况属于正常,刷新界面、或者等几分钟,过一会自己就会恢复。不要乱改yaml文件,越改越乱。可能是笔记本的磁盘空间小了,现在还剩20G,也可能笔记本配置低2、过一会只看到frontend,my-nginx会挂掉。不用管,只看frontend就行,这就是负载后面两个pod副本,达到了目的 参照:http://www.mamicode.com/info-detail-2109270.html 原文地址:http://www.cnblogs.com/zhaojiankai/p/7898282.html traefik实现负载均衡参照: https://www.cnblogs.com/aguncn/p/7210830.html
traefik安装的更多相关文章
- k8s二进制部署 - traefik安装
配置traefik资源清单rbac.yaml 配置traefik资源清单 rbac.yaml apiVersion: v1 kind: ServiceAccount metadata: name: t ...
- Kubernetes环境Traefik部署与应用
本作品由Galen Suen采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可.由原作者转载自个人站点. 概述 本文用于整理基于Kubernetes环境的Traefik部署与应用, ...
- Traefik 控制面板 SaaS 服务 Pilot
文章转载自:https://mp.weixin.qq.com/s?__biz=MzU4MjQ0MTU4Ng==&mid=2247485572&idx=1&sn=8ffa2bc7 ...
- k8s二进制部署 - 总结
镜像仓库: 安装软件:docker.docker-compose.harbor.nginx 1.下载cfssl.cfssljson.cfssl-certinfo,增加执行权限并放在PATH环境变量路径 ...
- traefik 结合 docker-compose 的快速安装及使用
traefik 介绍 traefik 是一个为了让部署微服务更加便捷而诞生的现代HTTP反向代理.负载均衡工具. 它支持多种后台 (Docker, Swarm, Kubernetes, Maratho ...
- Kubernetes实战(二):k8s v1.11.1 prometheus traefik组件安装及集群测试
1.traefik traefik:HTTP层路由,官网:http://traefik.cn/,文档:https://docs.traefik.io/user-guide/kubernetes/ 功能 ...
- Docker Compose + Traefik v2 快速安装, 自动申请SSL证书 http转https 初次尝试
前言 昨晚闲得无聊睡不着觉,拿起服务器尝试部署了一下Docker + Traefik v2.1.6 ,以下是一些配置的总结,初次接触,大佬勿喷. 我的系统环境是 Ubuntu 18.04.3 LTS ...
- 在k8s集群中安装traefik,并结合kuboard界面使用
安装traefik 参考步骤:https://blog.51cto.com/u_13760351/2764008?xiangguantuijian&01 修改好的四个yaml文件下载地址:ht ...
- 在单机Docker上安装 Traefik 反向代理-负载均衡器
一.创建Traefik和容器应用的连接网络 sudo docker network create traefik-net 二.下载Traefik样本配置文件wget https://raw.githu ...
随机推荐
- 大数据调度工具oozie详细介绍
背景 之前项目中的sqoop等离线数据迁移job都是利用shell脚本通过crontab进行定时执行,这样实现的话比较简单,但是随着多个job复杂度的提升,无论是协调工作还是任务监控都变得麻烦,我们选 ...
- springboot-注解-@Repository、@Service、@Controller 和 @Component
Spring 2.5 中除了提供 @Component 注释外,还定义了几个拥有特殊语义的注释,它们分别是:@Repository.@Service 和 @Controller.在目前的 Spring ...
- wordpress调用指定分类除外的置顶文章
我们有时需要根据实际需要进行一些设置,比如wordpress调用指定分类除外的置顶文章,如何实现呢?随ytkah一起来看看吧,用如下代码插入到需要调取的位置 <div class="r ...
- GeoIP简介与资源,定位经纬度,获取用户IP
所谓GeoIP,就是通过来访者的IP,定位他的经纬度,国家/地区,省市,甚至街道等位置信息.这里面的技术不算难题,关键在于有个精准的数据库.有了准确的数据源就奇货可居赚点小钱,可是发扬合作精神,集体贡 ...
- springMVC(2)
SpringMVC_JSR303数据校验 1.需要加入hibernate validator验证框架 2.在springMVC配置文件中添加<mvc:annotation-driven/> ...
- Ansible自动部署lnmp架构+上线电商
1.首先准备3台机器 ansible机器:192.168.52.34 目标主机:192.168.52.35 目标主机:192.168.52.36 2.关闭防火墙 [root@localhost ~]# ...
- (尚031)Vue_案例_自定义事件(组件间通信第2种方式:vue自定义事件)
自定义事件: 我们知道,父组件使用prop传递数据的子组件,但子组件怎么跟父组件通信呢? 这个时候Vue的自定义事件系统就派得上用场了. 自定义事件知道两件事: (1).绑定 (2).触发 注意:$o ...
- 设置Git--在Git中设置您的用户名--创建一个回购--Fork A Repo--社会化
设置Git GitHub的核心是名为Git的开源版本控制系统(VCS).Git负责计算机上本地发生的所有GitHub相关的事情. 要在命令上使用Git,您需要在计算机上下载,安装和配置Git. 如果要 ...
- java 中类初始化,构造方法,静态成员变量,静态块的加载顺序
1.编译和运行概念要搞清:编译即javac的过程,负责将.java文件compile成.class文件,主要是类型.格式检查与编译成字节码文件,而加载是指java *的过程,将.class文件加载到内 ...
- 云服务器搭建JDK+Tomcat+MySQL环境
一.首先租赁一台云服务器(阿里云服务器或者腾讯云服务器) 其实可以在windows电脑上使用VMware workstation来安装虚拟机进行操作,毕竟云服务器低配也是很贵的.不过可以使用学生价去租 ...