我是靠谱客的博主 醉熏外套,这篇文章主要介绍traefik安装,现在分享给大家,希望可以做个参考。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
注意这篇文档有个错误,需要改正一下: 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副本,起到负载均衡作用

复制代码
1
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
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负载后面两个相同的服务一样,如下所示:

复制代码
1

http://10.244.0.119:80 1
http://10.244.0.118:80 1


复制代码
1


4、查看traefik.frontend.io对应的负载均衡策略,默认是 Load Balancer Method wrr 轮询负载均衡机制,如下图所示,

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86

八、健康检查 关于健康检查,测试可以使用 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


 

转载于:https://www.cnblogs.com/effortsing/p/10624179.html

最后

以上就是醉熏外套最近收集整理的关于traefik安装的全部内容,更多相关traefik安装内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(78)

评论列表共有 0 条评论

立即
投稿
返回
顶部