kubernetes實踐之十二:部署Traefik Ingress

百聯達發表於2018-04-07
一:前言
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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章