k8集群中的入口——基于traefik

  

为了对外发布仓内的应用,k8支持两种负载均衡机制
1,一种是服务,用于实现四层TCP负载均衡
服务主要实现集群内部通信、以及基于四层的内外通信(如端口)
2,另一种是入口,用户实现七层HTTP负载均衡
进入主要实现基于七层的内外通信(如URL)
入口仅仅是一组路由规则的集合,它需要借助进入控制器才能发挥作用
进入控制器不受controller-manager管理,它作为一个附件直接运行在k8集群上
进入控制器本身也是以豆荚形式运行,它与被代理的豆荚运行在同一个网络
和服务不同的是,要使用入口,必须先创建ingress-controller这个吊舱和基于该吊舱的svc
对于小规模的应用我们使用NodePort或许能够满足我们的需求,但是当你的应用越来越多的时候,你就会发现对于NodePort的管理就非常麻烦了,这个时候使用入口就非常方便的了,可以避免管理大量的端口。

  

igress类型
1,单服务资源型
2,基于URL路径进行转发
3,基于虚拟主机进行转发
4, TLS类型
进入控制器可以由如下反向代理程序实现:
1, haproxy
2, nginx
3,特使
4, traefik
5, Vulcand

  

<>强创建基于treafik的入口
1,创建rbac认证

  
 <代码> apiVersion: v1
  :ServiceAccount
  元数据:
  名称:traefik-ingress-controller
  名称空间:kube-system
  ---
  :ClusterRole
  apiVersion: rbac.authorization.k8s.io/v1beta1
  元数据:
  名称:traefik-ingress-controller
  规则:
  - apiGroups:
  ——“”
  资源:
  ——服务
  ——端点
  ——秘密
  动词:
  ——得到
  ——列表
  - - - - - -看
  - apiGroups:
  ——扩展
  资源:
  - - - - - -进入
  动词:
  ——得到
  ——列表
  - - - - - -看
  ---
  :ClusterRoleBinding
  apiVersion: rbac.authorization.k8s.io/v1beta1
  元数据:
  名称:traefik-ingress-controller
  roleRef:
  apiGroup: rbac.authorization.k8s.io
  :ClusterRole
  名称:traefik-ingress-controller
  主题:
  类型:ServiceAccount
  名称:traefik-ingress-controller
  名称空间:kube-system  
  

美元kubectl创建- f rbac。yaml
serviceaccount“traefik-ingress-controller"创建
clusterrole.rbac.authorization.k8s。io“traefik-ingress-controller"创建
clusterrolebinding.rbac.authorization.k8s。io“traefik-ingress-controller"创建

  

2,创建基于treafik的入口控制器pod及svc
将该控制器舱部署在主人上
美元码头工人拉traefik vim traefik.yaml美元

  
 <代码>:部署/v1beta1 apiVersion:扩展
  元数据:
  名称:traefik-ingress-controller
  名称空间:kube-system
  标签:
  k8s-app: traefik-ingress-lb
  规范:
  副本:1
  选择器:
  matchLabels:
  k8s-app: traefik-ingress-lb
  模板:
  元数据:
  标签:
  k8s-app: traefik-ingress-lb
  名称:traefik-ingress-lb
  规范:
  serviceAccountName: traefik-ingress-controller
  terminationGracePeriodSeconds: 60
  纵容:
  接线员:“存在”#允许污点
  nodeSelector:
  kubernetes。io/主机名:大师#部署在掌握上
  容器:
  ——图片:traefik
  名称:traefik-ingress-lb
  港口:
  ——名称:http
  containerPort: 80
  hostPort: 80 #外网访问时不用使用nodePort端口,直接使用域名即可
  ——名称:管理员
  containerPort: 8080
  参数:
  - - - - api
  ————kubernetes
  ————logLevel=INFO
  ---
  类型:服务
  apiVersion: v1
  元数据:
  名称:traefik-ingress-service
  名称空间:kube-system
  规范:
  选择器:
  k8s-app: traefik-ingress-lb
  港口:
  ——协议:TCP
  端口:80
  名称:网络
  ——协议:TCP
  端口:8080
  名称:管理员
  类型:NodePort  
  

因为traefik容器中有两个端口,80年和8080年(管理端口),所以其对应的服务中也需要两个端口80和8080。
美元kubectl应用- f traefik.yaml
部署。扩展“traefik-ingress-controller"创建
服务“traefik-ingress-service"创建
kubectl得到美元svc - n kube-system
traefik-ingress-service NodePort 10.100.222.78 & lt; none>80:31657/TCP, 8080:31572/TCP 79 d
通过svc访问traefik的管理界面
http://192.168.1.243:31572

  

3,为上述入口控制器及其svc本身(8080)创建进入实例

  
 <代码> apiVersion:扩展/v1beta1
  :入口
  元数据:
  名称:traefik-web-ui
  名称空间:kube-system
  注释:
  kubernetes.io/入口。类:traefik
  规范:
  规则:
  (主持人:traefik.example.com
  http:
  道路:
  后端:
  名:traefik-ingress-service
  servicePort: 8080 

k8集群中的入口——基于traefik