1.理解Ingress
簡單的說,ingress就是從kubernetes集群外訪問集群的入口,將用戶的URL請求轉發到不同的service上。Ingress相當於nginx、apache等負載均衡方向代理服務器.
它最大的優點是能夠與常見的微服務系統直接整合,可以實現自動化動態配置。
2.以下配置文件可以在kubernetes-handbookGitHub倉庫中的../manifests/traefik-ingress/目錄下找到。
2.1創建ingress-rbac.yaml
將用於service account驗證。
apiVersion: v1
kind: ServiceAccount
metadata:
name: ingress
namespace: kube-system
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: ingress
subjects:
- kind: ServiceAccount
name: ingress
namespace: kube-system
roleRef:
kind: ClusterRole
name: cluster-admin
apiGroup: rbac.authorization.k8s.io
2.2 創建名為traefik-ingress的ingress,文件名ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: traefik-ingress
namespace: default
spec:
rules:
- host: traefik.nginx.io
http:
paths:
- path: /
backend:
serviceName: my-nginx
servicePort: 80
- host: traefik.frontend.io
http:
paths:
- path: /
backend:
serviceName: frontend
servicePort: 80
path就是URL地址后的路徑,如traefik.frontend.io/path,service將會接受path這個路徑,host最好使用service-name.filed1.filed2.domain-name這種類似主機名稱的命名方式,方便區分服務。
根據你自己環境中部署的service的名字和端口自行修改,有新service增加時,修改該文件后可以使用kubectl replace -f ingress.yaml來更新。
2.3創建DaemonSet
我們使用DaemonSet類型來部署Traefik,並使用nodeSelector來限定Traefik所部署的主機。
apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
name: traefik-ingress-lb
namespace: kube-system
labels:
k8s-app: traefik-ingress-lb
spec:
template:
metadata:
labels:
k8s-app: traefik-ingress-lb
name: traefik-ingress-lb
spec:
terminationGracePeriodSeconds: 60
hostNetwork: true
restartPolicy: Always
serviceAccountName: ingress
containers:
- image: traefik
name: traefik-ingress-lb
resources:
limits:
cpu: 200m
memory: 30Mi
requests:
cpu: 100m
memory: 20Mi
ports:
- name: http
containerPort: 80
hostPort: 80
- name: admin
containerPort: 8580
hostPort: 8580
args:
- --web
- --web.address=:8580
- --kubernetes
nodeSelector:
edgenode: "true"
給nodes打標簽
kubectl label nodes node1 edgenode=true
kubectl label nodes node2 edgenode=true
2.4 Traefik UI
使用下面的yaml配置來創建Traefik的Web UI。
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
訪問該地址http://node1:8580/將可以看到dashboard。
2.6在客戶端修改hosts 后直接訪問
10.2.1.226 traefik.nginx.io
10.2.1.226 traefik.frontend.io