您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關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
點擊(此處)折疊或打開
---
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
traefik-ds.yaml
點擊(此處)折疊或打開
---
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
ui.yaml
點擊(此處)折疊或打開
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
my-ingress.yaml (這里我們對集群中的 elasticsearch和kibana開啟了Ingress)
點擊(此處)折疊或打開
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.
感謝各位的閱讀!關于“Kubernetes中如何部署Traefik Ingress”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。