kubernetes实践之十二:部署Traefik Ingress

一:前言
1. 到目前为止 Kubernetes 暴露服务的有三种方式,分别为 LoadBlancer Service、NodePort Service、Ingress。官网对 Ingress 的定义为管理对外服务到集群内服务之间规则的集合,通俗点讲就是它定义规则来允许进入集群的请求被转发到集群中对应服务上,从来实现服务暴漏。 Ingress 能把集群内 Service 配置成外网能够访问的 URL,流量负载均衡,终止SSL,提供基于域名访问的虚拟主机等等
LoadBlancer Service:LoadBlancer Service 是 Kubernetes 结合云平台的组件,如国外 GCE、AWS、国内阿里云等等,使用它向底层云平台申请创建负载均衡器来实现,有局限性,对于使用云平台的集群比较方便。

NodePort Service:  NodePort Service 是通过在节点上暴漏端口,然后通过将端口映射到具体某个服务上来实现服务暴漏,比较直观方便,但是对于集群来说,随着 Service 的不断增加,需要的端口越来越多,很容易出现端口冲突,而且不容易管理。当然对于小规模的集群服务,还是比较不错的。

Ingress:  Ingress 使用开源的反向代理负载均衡器来实现对外暴漏服务,比如 Nginx、Apache、Haproxy等。

2.traefik 是一个前端负载均衡器,对于微服务架构尤其是 kubernetes 等编排工具具有良好的支持;同 nginx 等相比,traefik 能够自动感知后端容器变化,从而实现自动服务发现

二:yaml文件

可以通过 https://github.com/containous/traefik/tree/master/examples/k8s 下载 所需要的yaml文件; 我们使用了如下几个文件:

traefik-rbac.yaml

点击(此处)折叠或打开

  1. ---
  2. kind: ClusterRole
  3. apiVersion: rbac.authorization.k8s.io/v1beta1
  4. metadata:
  5.   name: traefik-ingress-controller
  6. rules:
  7.   - apiGroups:
  8.       - ""
  9.     resources:
  10.       - services
  11.       - endpoints
  12.       - secrets
  13.     verbs:
  14.       - get
  15.       - list
  16.       - watch
  17.   - apiGroups:
  18.       - extensions
  19.     resources:
  20.       - ingresses
  21.     verbs:
  22.       - get
  23.       - list
  24.       - watch
  25. ---
  26. kind: ClusterRoleBinding
  27. apiVersion: rbac.authorization.k8s.io/v1beta1
  28. metadata:
  29.   name: traefik-ingress-controller
  30. roleRef:
  31.   apiGroup: rbac.authorization.k8s.io
  32.   kind: ClusterRole
  33.   name: traefik-ingress-controller
  34. subjects:
  35. - kind: ServiceAccount
  36.   name: traefik-ingress-controller
  37.   namespace: kube-system
traefik-ds.yaml

点击(此处)折叠或打开

  1. ---
  2. apiVersion: v1
  3. kind: ServiceAccount
  4. metadata:
  5.   name: traefik-ingress-controller
  6.   namespace: kube-system
  7. ---
  8. kind: DaemonSet
  9. apiVersion: extensions/v1beta1
  10. metadata:
  11.   name: traefik-ingress-controller
  12.   namespace: kube-system
  13.   labels:
  14.     k8s-app: traefik-ingress-lb
  15. spec:
  16.   template:
  17.     metadata:
  18.       labels:
  19.         k8s-app: traefik-ingress-lb
  20.         name: traefik-ingress-lb
  21.     spec:
  22.       serviceAccountName: traefik-ingress-controller
  23.       terminationGracePeriodSeconds: 60
  24.       hostNetwork: true
  25.       containers:
  26.       - image: traefik
  27.         name: traefik-ingress-lb
  28.         ports:
  29.         - name: http
  30.           containerPort: 80
  31.           hostPort: 80
  32.         - name: admin
  33.           containerPort: 8080
  34.         securityContext:
  35.           capabilities:
  36.             drop:
  37.             - ALL
  38.             add:
  39.             - NET_BIND_SERVICE
  40.         args:
  41.         - --api
  42.         - --kubernetes
  43.         - --logLevel=INFO
  44. ---
  45. kind: Service
  46. apiVersion: v1
  47. metadata:
  48.   name: traefik-ingress-service
  49.   namespace: kube-system
  50. spec:
  51.   selector:
  52.     k8s-app: traefik-ingress-lb
  53.   ports:
  54.     - protocol: TCP
  55.       port: 80
  56.       name: web
  57.     - protocol: TCP
  58.       port: 8080
  59.       name: admin
  60.   type: NodePort
ui.yaml

点击(此处)折叠或打开

  1. apiVersion: v1
  2. kind: Service
  3. metadata:
  4.   name: traefik-web-ui
  5.   namespace: kube-system
  6. spec:
  7.   selector:
  8.     k8s-app: traefik-ingress-lb
  9.   ports:
  10.   - name: web
  11.     port: 80
  12.     targetPort: 8580
  13. ---
  14. apiVersion: extensions/v1beta1
  15. kind: Ingress
  16. metadata:
  17.   name: traefik-web-ui
  18.   namespace: kube-system
  19. spec:
  20.   rules:
  21.   - host: traefik-ui.local
  22.     http:
  23.       paths:
  24.       - path: /
  25.         backend:
  26.           serviceName: traefik-web-ui
  27.           servicePort: web
my-ingress.yaml (这里我们对集群中的  elasticsearch和kibana开启了Ingress )

点击(此处)折叠或打开

  1. apiVersion: extensions/v1beta1
  2. kind: Ingress
  3. metadata:
  4.   name: traefik-ingress
  5.   namespace: kube-system
  6. spec:
  7.   rules:
  8.   - host: elasticsearch.donkey
  9.     http:
  10.       paths:
  11.       - path: /
  12.         backend:
  13.           serviceName: elasticsearch-logging
  14.           servicePort: 9200
  15.   - host: kibana.donkey
  16.     http:
  17.       paths:
  18.       - path: /
  19.         backend:
  20.           serviceName: kibana-logging
  21.           servicePort: 5601

三:部署与验证

1.创建资源  kubectl create -f .


2. 通过kubectl logs -f     确认pod正常启动

3. traefik  dashboard


4. 如果需要在kubernetes集群以外访问就需要设置DNS,或者修改本机的hosts文件。然后通过Igress配置中的host  直接访问service.

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28624388/viewspace-2152650/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/28624388/viewspace-2152650/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值