K8s之traefik(ingess)发布服务-实战

K8s之traefik(ingess)发布服务实战

上篇描述了基于k8s集群安装部署traefik作为ingress服务,简单演示了一下发布服务,本篇将细节讲述如果结合traefik发布业务服务。

安装部署参考:

https://blog.51cto.com/michaelkang/2429929

版本介绍

traefik:v1.7
k8s:v1.15.1

快速部署traefik

如果你的k8s集群已经部署完成,想快速部署traefik,执行命令如下:

kubectl create -f https://raw.githubusercontent.com/containous/traefik/v1.7/examples/k8s/traefik-rbac.yaml
kubectl create -f https://raw.githubusercontent.com/containous/traefik/v1.7/examples/k8s/traefik-ds.yaml

执行成功,在浏览器数据一个node节点的IP地址:8080 端口即可看到traefik的管理页面。

实战开始

编写一个业务yaml文件

如果对yaml不太熟悉,看这边:https://blog.51cto.com/michaelkang/2429745

---
#配置deployment
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
#设置dm名称
  name: dm-pttest
#添加标签 pttest
  labels:
    app: pttest
spec:
# 通过replicas声明pod个数是2
  replicas: 2
# 通过标签选择被控制的pod
  selector:
    matchLabels:
      app: pttest
# 在template中定义pod
  template:
    metadata:
# 给pod打上标签app=pttest
      labels:
        app: pttest
    spec:
      containers:
# 声明容器名称,注意不是pod名称,pod名称应该定义在metadata中
      - name: myapp
        image: ikubernetes/myapp:v1
        ports:
        - containerPort: 80

---
#服务配置
apiVersion: v1
# 声明一个Service资源对象
kind: Service
metadata:
#pod 名称
  name: svcpttest
  labels:
    app: pttest
  annotations:
#检查后端服务返回错误率,大于%50,踢出集群
    traefik.backend.circuitbreaker: "NetworkErrorRatio() > 0.5"
spec:
  ports:
  - name: http
    port: 80
  selector:
    app: pttest

---
#配置ingress
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: myapp-traefik-ingress
  annotations:
    kubernetes.io/ingress.class: traefik
spec:
  rules:
  - host: pttest.pt.com
    http:
      paths:
      - path: /
#指定后端服务
        backend:
          serviceName: svcpttest
          servicePort: 80

验证服务

#查看服务
[[email protected] traefik]# kubectl get svc -o wide
NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGE     SELECTOR

svcpttest    ClusterIP   10.245.148.114   <none>        80/TCP    2m12s   app=pttest  <==lable

#查看container
[[email protected] traefik]# kubectl get pods  -o wide
NAME                         READY   STATUS    RESTARTS   AGE     IP             NODE         NOMINATED NODE   READINESS GATES
dm-pttest-6f6cd797f5-cdjk5   1/1     Running   0          63s     10.244.3.115   kubnode-01   <none>           <none>
dm-pttest-6f6cd797f5-tqh54   1/1     Running   0          63s     10.244.4.135   kubnode-02   <none>           <none>

#ingress 信息
[[email protected] traefik]# kubectl get ingress
NAME                    HOSTS           ADDRESS   PORTS   AGE
myapp-traefik-ingress   pttest.pt.com             80      23s

#deployment
[[email protected] traefik]# kubectl get deploy
NAME        READY   UP-TO-DATE   AVAILABLE   AGE

dm-pttest   2/2     2            2           12m

验证访问:

请求pttest.pt.com,?服务svcpttest会把请求负载给后端的pod。

#请求两次分别返回两个
[[email protected] traefik]# curl -H "HOST:pttest.pt.com" http://172.20.101.166/hostname.html
dm-pttest-6f6cd797f5-cdjk5

[[email protected] traefik]# curl -H "HOST:pttest.pt.com" http://172.20.101.166/hostname.html
dm-pttest-6f6cd797f5-tqh54

扩容节点

kubectl edit deployment dm-pttest

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  annotations:
    deployment.kubernetes.io/revision: "1"
  creationTimestamp: "2019-08-16T10:13:49Z"
  generation: 1
  labels:
    app: pttest
  name: dm-pttest
  namespace: default
  resourceVersion: "3871589"
  selfLink: /apis/extensions/v1beta1/namespaces/default/deployments/dm-pttest
  uid: 153a60fb-66df-4884-aa9a-49ac47cebd2c
spec:
  progressDeadlineSeconds: 2147483647
  replicas: 5                             《=====pod数量,有默认2个,调整到5个

保存退出,k8s集群会自动执行;

验证

kubectl get pods

[[email protected] traefik]# kubectl get pods
NAME                         READY   STATUS    RESTARTS   AGE
dm-pttest-6f6cd797f5-cdjk5   1/1     Running   0          17m
dm-pttest-6f6cd797f5-qd4cl   1/1     Running   0          99s
dm-pttest-6f6cd797f5-r25dc   1/1     Running   0          99s
dm-pttest-6f6cd797f5-tbfmh   1/1     Running   0          99s
dm-pttest-6f6cd797f5-tqh54   1/1     Running   0          17m

#请求
[[email protected] traefik]# curl -H "HOST:pttest.pt.com" http://172.20.101.166/hostname.html
dm-pttest-6f6cd797f5-r25dc
[[email protected] traefik]# curl -H "HOST:pttest.pt.com" http://172.20.101.166/hostname.html
dm-pttest-6f6cd797f5-tbfmh
[[email protected] traefik]# curl -H "HOST:pttest.pt.com" http://172.20.101.166/hostname.html
dm-pttest-6f6cd797f5-tqh54
[[email protected] traefik]# curl -H "HOST:pttest.pt.com" http://172.20.101.166/hostname.html
dm-pttest-6f6cd797f5-cdjk5
[[email protected] traefik]# curl -H "HOST:pttest.pt.com" http://172.20.101.166/hostname.html
dm-pttest-6f6cd797f5-qd4cl
[[email protected] traefik]# curl -H "HOST:pttest.pt.com" http://172.20.101.166/hostname.html
dm-pttest-6f6cd797f5-r25dc
[[email protected] traefik]# curl -H "HOST:pttest.pt.com" http://172.20.101.166/hostname.html
dm-pttest-6f6cd797f5-tbfmh

使用命令调整pod数量

调整pod数量为1;
kubectl scale deployment dm-pttest --replicas=1

调整pod数量为2;
kubectl scale deployment dm-pttest --replicas=2

参考文档

https://kubernetes.io/zh/docs/concepts/services-networking/connect-applications-service/
https://blog.csdn.net/u010606397/article/details/90752262

原文地址:https://blog.51cto.com/michaelkang/2430244

时间: 2024-11-01 10:50:41

K8s之traefik(ingess)发布服务-实战的相关文章

Kubernetes 1.9集群使用traefik发布服务

在前文中介绍了在kubernetes 1.5.2集群环境中使用traefik进行服务发布.Traefik采用daemonset方式部署,连接api-server走的是http协议,也未配置rbac.本文将介绍在k8s 1.9版本中使用deployment方式部署traefik来进行服务发布. 在开始之前,需要先了解一下什么是RBAC.RBAC(基于角色的访问控制)使用?rbac.authorization.k8s.io? API 组来实现权限控制,RBAC 允许管理员通过 Kubernetes

【架构】微服务实战:从发布到架构——上篇

微服务实战:从发布到架构——上篇  MaxLeap2016-03-23 10:42 “微服务”是当前软件架构领域非常热门的词汇,能找到很多关于微服务的定义.准则,以及如何从微服务中获益的文章,在企业的实践中去应用“微服务”的资源却很少.本篇文章中,会介绍微服务架构(Microservices Architecture)的基础概念,以及如何在实践中具体应用. 单体架构(Monolithic Architecture ) 企业级的应用一般都会面临各种各样的业务需求,而常见的方式是把大量功能堆积到同一

【架构】微服务实战:从发布到架构——下篇

 MaxLeap2016-03-25 13:53 上篇文章介绍了微服务和单体架构的区别.微服务的设计.消息.服务间通信.数据去中心化,本篇会继续深入微服务,介绍其它特性. 治理去中心化 通常“治理”的意思是构建方案,并且迫使人们通过努力达到组织的目标.SOA治理指导开发者开发可重用的服务,以及随着时间推移,服务应该怎么被设计和开发.治理建立了服务提供者和消费者之间对于服务的协定,告诉消费者能从服务提供获取到什么样的支持. SOA中有两种常见的治理: 设计时的治理-定义和控制服务的创建.设计和服务

k8s 使用 traefik 将clusterIP的 svc 暴露服务的方法

0. 前置条件 安装好k8s.. traefik的简介图 1. 安装 traefik 方法: 创建一个目录 并且存放部分文件等. mkdir /traefik cd /traefik git clone https://github.com/containous/traefik.git cd traefik/examples/k8s/ 里面的文件主要有偶: [[email protected] k8s]# tree.├── cheese-default-ingress.yaml├── chees

kubernetes集群中使用ingress发布服务

当我们将kubernetes的应用部署完之后,就需要对外发布服务的访问地址.kubernetes 将服务发布到外部访问的方式主要有:LoadBlancer ServiceNodePort ServiceIngress 一.LoadBlancer ServiceLoadBlancer Service 是 kubernetes 深度结合云平台的一个组件:当使用 LoadBlancer Service 暴露服务时,实际上是通过向底层云平台申请创建一个负载均衡器来向外暴露服务:目前 GCE.AWS.阿里

Linux系统中DHCP服务实战

Linux系统中DHCP服务实战部署 一.实验要求 1.将系统的主机名改成s01.benet.com 2.搭建一台dhcp服务器为局域网分配IP地址,要求分配192.168.40.0/24 3.为boss保留192.168.40.188地址 二.实验环境 虚拟机VMware Workstation11.0 RED HET 6.5 三.实验步骤 1.将系统的主机名改成s01.benet.com 2.搭建dhcp服务.为局域网分配IP地址 3.测试主机分配地址效果 4.给boss分配192.168.

Axis1.4之即时发布服务

下载axis1.4开发包,解压开发包,将webapps目录下的axis文件夹拷贝到tomcat的webapps目录下.启动tomcat,在浏览器输入http://localhost:8080/axis得到如下页面: 实用axis的发布服务平台,创建和发布WebService服务有两种方式:即时发布和定制发布.即时发布服务很少用,但是为了知识体系的完整性,这里还是讲一下.本篇文章只讲即时发布服务. 写一个没有包的Java类HelloWS.java: public class HelloWS{ pu

ArcGIS Server发布服务,打包成功,发布失败

打包成功,发布失败 部分解决方案: ①   查看Server对于源数据所在文件夹是否有读写权限,若无赋予Server账户至少读写权限.读写权限的赋予:对应存放数据的文件夹上右键→属性→ 安全 赋予arcgis server account(如果安装时没有改名字, 默认名字为arcgis)读写权限,如果列表中没有该账户,点 编辑→ 添加→ 输入对象名称→ 检查名称 ②   在arcmap里新建一个空白的mxd,添加一个本地的数据,如存放在本地的shapefile或file gdb里的要素类,然后发

WIN 10 IIS 服务或万维网发布服务,或者依赖这两种服务的某个服务未能启动。该服务或所依赖的服务可能在启动期间发生错误或者已禁用。

环境:win10 企业版 今天重启iis的时候报出了下面的错误: 即:IIS 服务或万维网发布服务,或者依赖这两种服务的某个服务未能启动.该服务或所依赖的服务可能在启动期间发生错误或者已禁用.在网络上搜索解决方案,比如: 即:点击打开链接 这三个服务我也禁止了: 上面的方案我在win7下操作成功了(之前win7下也遇到过这个问题),但在win 10下没有效果. 于是查看系统日志: 具体信息如下:日志名称:          System来源:            Service Control