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
traefik-ds.yaml
ui.yaml
my-ingress.yaml (這裡我們對叢集中的 elasticsearch和kibana開啟了Ingress)
三:部署與驗證
1.建立資源 kubectl create -f .
2. 通過kubectl logs -f 確認pod正常啟動
3.traefik dashboard
4.如果需要在kubernetes叢集以外訪問就需要設定DNS,或者修改本機的hosts檔案。然後通過Igress配置中的host 直接訪問service.
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
點選(此處)摺疊或開啟
-
---
-
kind: ClusterRole
-
apiVersion: rbac.authorization.k8s.io/v1beta1
-
metadata:
-
name: traefik-ingress-controller
-
rules:
-
- apiGroups:
-
- ""
-
resources:
-
- services
-
- endpoints
-
- secrets
-
verbs:
-
- get
-
- list
-
- watch
-
- apiGroups:
-
- extensions
-
resources:
-
- ingresses
-
verbs:
-
- get
-
- list
-
- watch
-
---
-
kind: ClusterRoleBinding
-
apiVersion: rbac.authorization.k8s.io/v1beta1
-
metadata:
-
name: traefik-ingress-controller
-
roleRef:
-
apiGroup: rbac.authorization.k8s.io
-
kind: ClusterRole
-
name: traefik-ingress-controller
-
subjects:
-
- kind: ServiceAccount
-
name: traefik-ingress-controller
- namespace: kube-system
點選(此處)摺疊或開啟
-
---
-
apiVersion: v1
-
kind: ServiceAccount
-
metadata:
-
name: traefik-ingress-controller
-
namespace: kube-system
-
---
-
kind: DaemonSet
-
apiVersion: extensions/v1beta1
-
metadata:
-
name: traefik-ingress-controller
-
namespace: kube-system
-
labels:
-
k8s-app: traefik-ingress-lb
-
spec:
-
template:
-
metadata:
-
labels:
-
k8s-app: traefik-ingress-lb
-
name: traefik-ingress-lb
-
spec:
-
serviceAccountName: traefik-ingress-controller
-
terminationGracePeriodSeconds: 60
-
hostNetwork: true
-
containers:
-
- image: traefik
-
name: traefik-ingress-lb
-
ports:
-
- name: http
-
containerPort: 80
-
hostPort: 80
-
- name: admin
-
containerPort: 8080
-
securityContext:
-
capabilities:
-
drop:
-
- ALL
-
add:
-
- NET_BIND_SERVICE
-
args:
-
- --api
-
- --kubernetes
-
- --logLevel=INFO
-
---
-
kind: Service
-
apiVersion: v1
-
metadata:
-
name: traefik-ingress-service
-
namespace: kube-system
-
spec:
-
selector:
-
k8s-app: traefik-ingress-lb
-
ports:
-
- protocol: TCP
-
port: 80
-
name: web
-
- protocol: TCP
-
port: 8080
-
name: admin
- type: NodePort
點選(此處)摺疊或開啟
-
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: 8580
-
---
-
apiVersion: extensions/v1beta1
-
kind: Ingress
-
metadata:
-
name: traefik-web-ui
-
namespace: kube-system
-
spec:
-
rules:
-
- host: traefik-ui.local
-
http:
-
paths:
-
- path: /
-
backend:
-
serviceName: traefik-web-ui
- servicePort: web
點選(此處)摺疊或開啟
-
apiVersion: extensions/v1beta1
-
kind: Ingress
-
metadata:
-
name: traefik-ingress
-
namespace: kube-system
-
spec:
-
rules:
-
- host: elasticsearch.donkey
-
http:
-
paths:
-
- path: /
-
backend:
-
serviceName: elasticsearch-logging
-
servicePort: 9200
-
- host: kibana.donkey
-
http:
-
paths:
-
- path: /
-
backend:
-
serviceName: kibana-logging
- 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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- kubernetes實踐之五十二:Helm
- kubernetes實踐之四十四:Ingress詳解
- kubernetes實踐之四十二:StatefulSet
- kubernetes實踐之十三: 負載均衡機制Ingress負載
- kubernetes實踐之六十二:Secret 使用
- 【Kubernetes系列】第5篇 Ingress controller - traefik元件介紹Controller元件
- kubernetes實踐之七十二:Istio之策略與遙測
- kubernetes物件之Ingress物件
- kubernetes實踐之二十二:Pod
- kubernetes實踐之六十八:部署 coredns 外掛DNS
- Kubernetes Ingress 日誌分析與監控的最佳實踐
- 部署一個支援Dapr 的Kubernetes APISIX IngressAPI
- kubernetes1.13.X實踐-部署
- kubernetes實踐之三十二:Jenkins和SonarQube整合Jenkins
- kubernetes之Ingress釋出Dashboard(二)
- Kubernetes Ingress
- k8s安裝traefik ingressK8S
- kubernetes traefik multiple namespacesnamespace
- 乾貨|Kubernetes叢集部署 Nginx-ingress ControllerNginxController
- kubernetes實踐之十一:EFK
- kubernetes實踐之六十:Cabin-Manage Kubernetes
- Kubernetes 部署 Laravel 應用的最佳實踐Laravel
- minikube部署Traefik【2】
- kubernetes實踐之五十七:PodPreset
- kubernetes實踐之五十八:CronJob
- kubernetes實踐之五十九:NetworkPolicy
- kubernetes實踐之十九:API概述API
- kubernetes實踐之十七:架構架構
- kubernetes實踐之八:TLS bootstrappingTLSbootAPP
- Kubernetes(k8s)部署安全最佳實踐K8S
- 利用 Kubeadm部署 Kubernetes 1.13.1 叢集實踐錄
- SpringCloud 應用在 Kubernetes 上的最佳實踐 — 部署篇(工具部署)SpringGCCloud
- kubernetes系列(十二) - 儲存之Secret
- kubernetes實踐之十:Kubernetes-dashboard+Heapster+InfluxDB+GrafanaUXGrafana
- 利用 Kubernetes 降本增效?EasyMR 基於 Kubernetes 部署的探索實踐
- kubernetes實踐之六十九:istio-1.0.0部署和試用
- Nginx Ingress 高併發實踐Nginx
- kubernetes實踐之六十四:CoreDNSDNS