玩转K8S之如何访问业务应用(Traefik-ingress篇)

简介: 先介绍下什么是Traefik,Traefik是一个为了让部署微服务更加便捷而诞生的现代HTTP反向代理、负载均衡工具。 它支持多种后台 (Docker, Swarm, Kubernetes, Marathon, Mesos, Consul, Etcd, Zookeeper, BoltDB, Rest API, file…) 来自动化、动态的应用它的配置文件设置。

先介绍下什么是Traefik,Traefik是一个为了让部署微服务更加便捷而诞生的现代HTTP反向代理、负载均衡工具。 它支持多种后台 (Docker, Swarm, Kubernetes, Marathon, Mesos, Consul, Etcd, Zookeeper, BoltDB, Rest API, file…) 来自动化、动态的应用它的配置文件设置。


architecture.png

为什么比较偏向域Traefik呢,下面来简单对比下。

ingress:

使用nginx作为前端负载均衡,通过ingress controller不断的和kubernetes api交互,实时获取后端service,pod等的变化,然后动态更新nginx配置,并刷新使配置生效,达到服务发现的目的。

traefik:

traefik本身设计的就能够实时跟kubernetes api交互,感知后端service,pod等的变化,自动更新配置并重载。

相对来说traefik更快速方便,同时支持更多的特性,使反向代理,负载均衡更直接更高效。

来看看如何部署,很简单先把源码clone下来。

1

[root@k8smaster ~]# git clone https://github.com/containous/traefik.git

来看看目录下都有什么,顺便找到对应的K8S文件。

1

2

3

4

5

6

7

8

[root@k8smaster ~]# cd traefik/

[root@k8smaster traefik]# cd examples/

[root@k8smaster examples]# cd k8s

[root@k8smaster k8s]# ls

cheese-default-ingress.yaml cheese-ingress.yaml cheeses-ingress.yaml traefik-ds.yaml ui.yaml

cheese-deployments.yaml cheese-services.yaml traefik-deployment.yaml traefik-rbac.yaml

[root@k8smaster k8s]# pwd

/root/traefik/examples/k8s

OK,到这一层就找到了所需的文件,一般呢只需要两个文件,第一个就是deployment和rbac。

原因呢很简单,在第一篇部署的时候我们就说了,由于在Kubernets1.6之后启用了RBAC鉴权机制,所以需配置ClusterRole以及ClusterRoleBinding来对api-server的进行相应权限的鉴权。

那rbac这个文件呢就是创建ClusterRole和ClusterRoleBinding的,至于deployment文件这里就不说了,相信看到本篇文章的童鞋已经对K8S有了基本认识。

开始创建rbac

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

[root@k8smaster k8s]# kubectl apply -f traefik-rbac.yaml

clusterrole.rbac.authorization.k8s.io "traefik-ingress-controller" created

clusterrolebinding.rbac.authorization.k8s.io "traefik-ingress-controller" created

检查是否成功

[root@k8smaster k8s]# kubectl get clusterrolebinding

NAME AGE

cluster-admin 113d

flannel 113d

heapster 113d

kubeadm:kubelet-bootstrap 113d

……….

traefik-ingress-controller 3s

[root@k8smaster k8s]# kubectl get clusterrole

NAME AGE

admin 113d

cluster-admin 113d

edit 113d

flannel 113d

可以看到clusterrole,clusterrolebinding都创建成功了,下面创建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

[root@k8smaster k8s]# kubectl apply -f traefik-deployment.yaml

serviceaccount "traefik-ingress-controller" created

deployment.extensions "traefik-ingress-controller" created

service "traefik-ingress-service" created

检查是否成功

[root@k8smaster k8s]# kubectl get svc,deployment,pod -n kube-system

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE

heapster ClusterIP 10.106.236.144 <none> 80/TCP 113d

kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP 113d

kubernetes-dashboard-external NodePort 10.108.106.113 <none> 9090:30090/TCP 113d

traefik-ingress-service NodePort 10.98.76.58 <none> 80:30883/TCP ,8080:30731/TCP 17s

NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE

heapster 1 1 1 1 113d

kube-dns 1 1 1 1 113d

kubernetes-dashboard 1 1 1 1 113d

traefik-ingress-controller 1 1 1 0 18s

NAME READY STATUS RESTARTS AGE

etcd-k8smaster 1/1 Running 6 113d

heapster-6595c54cb9-f7gvz 1/1 Running 4 113d

kube-apiserver-k8smaster 1/1 Running 6 113d

……….

traefik-ingress-controller-bf6486db6-jzd8w 1/1 Running 0 17s

可以看到service和pod都起来了。

刚才前面也说到了有个非常简洁漂亮的界面,非常适合运维统计管理,下面来看看。

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

[root@k8smaster k8s]# cat ui.yaml

---

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: 8080

---

apiVersion: extensions/v1beta1

kind: Ingress

metadata:

name: traefik-web-ui

namespace: kube-system

spec:

rules:

- host: traefik-ui.minikube

http:

paths:

- path: /

backend:

serviceName: traefik-web-ui

servicePort: web

[root@k8smaster k8s]# kubectl apply -f ui.yaml

service "traefik-web-ui" created

ingress.extensions "traefik-web-ui" created

[root@k8smaster k8s]# kubectl describe ing traefik-web-ui -n kube-system

Name: traefik-web-ui

Namespace: kube-system

Address:

Default backend: default-http-backend:80 (<none>)

Rules:

Host Path Backends

---- ---- --------

traefik-ui.minikube

/ traefik-web-ui:web (10.0.100.203:8080,10.0.100.204:8080)

刚才发布了一个traefix-web-ui的ingress,接下来我们就可以通过域名了访问了,玩过K8S的相信都能看懂刚才ui-ingress那个yml文件里面有一个域名,名为traefik-ui.minikube,后端traefix-web-ui的service,可以看到关联到了pod地址10.0.100.203:8080和10.0.100.204:8080。

下面我们修改本机hosts文件,使我们可以通过traefik-ui.minikube域名来访问traefix-ui

博客01.png

好了本文到此结束,本篇文章只是初步实现了Traefix的http访问代理,怎么让traefix实现https代理以及怎么对traefix进行更多的配置,将在后续的博文中来讨论。

本文转自中文社区-玩转K8S之如何访问业务应用(Traefik-ingress篇)

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务&nbsp;ACK 容器服务&nbsp;Kubernetes&nbsp;版(简称&nbsp;ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情:&nbsp;https://www.aliyun.com/product/kubernetes
相关文章
|
2月前
|
存储 运维 Kubernetes
批处理及有状态等应用类型在 K8S 上应该如何配置?
批处理及有状态等应用类型在 K8S 上应该如何配置?
|
2月前
|
Kubernetes 应用服务中间件 nginx
百度搜索:蓝易云【使用Kubernetes部署Nginx应用教程】
现在,你已经成功在Kubernetes集群上部署了Nginx应用。通过访问Service的外部IP地址,你可以访问Nginx服务。
41 4
|
3月前
|
Kubernetes 负载均衡 Linux
Kubernetes的应用
Kubernetes的应用
34 0
|
3月前
|
存储 Kubernetes 监控
Kubernetes快速进阶与实战:构建可靠的容器化应用平台
Kubernetes快速进阶与实战:构建可靠的容器化应用平台
92 0
|
6天前
|
Kubernetes 监控 Cloud Native
构建高效云原生应用:基于Kubernetes的微服务治理实践
【4月更文挑战第13天】 在当今数字化转型的浪潮中,企业纷纷将目光投向了云原生技术以支持其业务敏捷性和可扩展性。本文深入探讨了利用Kubernetes作为容器编排平台,实现微服务架构的有效治理,旨在为开发者和运维团队提供一套优化策略,以确保云原生应用的高性能和稳定性。通过分析微服务设计原则、Kubernetes的核心组件以及实际案例,本文揭示了在多变的业务需求下,如何确保系统的高可用性、弹性和安全性。
11 4
|
7天前
|
JSON Kubernetes Go
无缝集成:在IntelliJ IDEA中利用Kubernetes插件轻松管理容器化应用
无缝集成:在IntelliJ IDEA中利用Kubernetes插件轻松管理容器化应用
17 0
无缝集成:在IntelliJ IDEA中利用Kubernetes插件轻松管理容器化应用
|
18天前
|
消息中间件 Kubernetes Kafka
Terraform阿里云创建资源1分钟创建集群一键发布应用Terraform 创建 Kubernetes 集群
Terraform阿里云创建资源1分钟创建集群一键发布应用Terraform 创建 Kubernetes 集群
14 0
|
29天前
|
边缘计算 Kubernetes 负载均衡
容器编排技术在云计算中的应用
随着云计算技术的飞速发展,容器编排技术作为一种重要的部署和管理工具,正在逐渐成为云计算领域的热门话题。本文将介绍容器编排技术在云计算中的应用,探讨其在提高应用程序部署效率、资源利用率以及系统可靠性方面的优势,并分析其未来发展趋势。
|
1月前
|
人工智能 自然语言处理 Kubernetes
LLM 技术图谱(LLM Tech Map)& Kubernetes (K8s) 与AIGC的结合应用
LLM 技术图谱(LLM Tech Map)& Kubernetes (K8s) 与AIGC的结合应用
61 0
|
2月前
|
JavaScript NoSQL Redis
深入浅出:使用 Docker 容器化部署 Node.js 应用
在当今快速发展的软件开发领域,Docker 作为一种开源的容器化技术,已经成为了提高应用部署效率、实现环境一致性和便于维护的关键工具。本文将通过一个简单的 Node.js 应用示例,引导读者从零开始学习如何使用 Docker 容器化技术来部署应用。我们不仅会介绍 Docker 的基本概念和操作,还会探讨如何构建高效的 Docker 镜像,并通过 Docker Compose 管理多容器应用。此外,文章还将涉及到一些最佳实践,帮助读者更好地理解和应用 Docker 在日常开发和部署中的强大功能。
66 0