[บันทึกช่วยจำ] ลองเล่น Traefik Ingress ใน K8S Cluster บน On-Premises
จากครั้งที่เราทดลองใช้งาน NGINX Ingress บน K8S Cluster แล้ว เรามาลองใช้งาน Traefix ดูบ้างว่าการใช้งานจะแตกต่างกันมากน้อยขนาดไหน ซึ่งผู้เขียนเองก็ได้เคยใช้งานเจ้า Traefix มาแล้วแต่ใช้งานอยู่ Swarm Cluster ก็ต้องบอกเลยว่าสะดวกสบายมากๆ ในการจัดการบริหาร service ต่างๆ
ซึ่งเจ้า Traefix นั้น Open-Source ประเภท Edge Router ทำหน้าที่จัดการเมื่อมีการเรียกใช้งานจากหน้าบ้าน ว่าเมื่อมีการเรียกแบบนี้ต้องวิ่งไปหา service ตัวไหน หรือมีการจัดการ header อะไรเพิ่มเติมหรือเปล่าเป็นต้น
ส่วนประกอบต่างๆ ก็ยังมีเหมือนกับ NGINX Ingress
Ingress, Ingress Resource เป็น service ประเภทหนึ่งมีหน้าที่บริการ application ต่างๆ ที่อยู่ภายใน cluster ส่งออกไปข้างนอกโดยที่เราสามารถกำหนด rules ต่างๆได้ดัง
Content-based routing: ใช้ในการกำหนดการว่าหากมีการเรียกแบบนี้ให้ไป service ไหน โดยจะมีการแบ่งออกเป็น 2 แบบอีก
- Host-based routing. เป็นการกำหนดใช้ Hostname (FQDN) เป็นตัวกำหนด routing ว่าเรียกแบบนี้เข้ามาให้ไปที่ services อะไร เช่น images.demo.domain
- Path-based routing. เป็นการกำหนดใช้ pathเป็นตัวกำหนด routing ว่าเรียกแบบนี้เข้ามาให้ไปที่ services อะไร เช่น demo.domain/images
TLS/SSL termination: ใช้ในการทำเรื่อง Offload SSL certificate
สำหรับ infrastructure ทางผู้เขียนได้ใช่ของเดิมจากครั้งที่แล้ว
เอาละละเราไปลงมือทำกันเถอะ
ตั้งค่าเกี่ยว RBAC และ Deploy Ingress Controller
ขั้นตอนที่ 1 — สร้าง service account สำหรับ Ingress controller
dcadmin@k8s-operation:~$ kubectl apply -f traefik-ds.yaml
traefik-ds.yaml
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: traefik-ingress-controller
namespace: kube-system
---
kind: DaemonSet
apiVersion: apps/v1
metadata:
name: traefik-ingress-controller
namespace: kube-system
labels:
k8s-app: traefik-ingress-lb
spec:
selector:
matchLabels:
k8s-app: traefik-ingress-lb
name: traefik-ingress-lb
template:
metadata:
labels:
k8s-app: traefik-ingress-lb
name: traefik-ingress-lb
spec:
serviceAccountName: traefik-ingress-controller
terminationGracePeriodSeconds: 60
containers:
- image: traefik:v1.7
name: traefik-ingress-lb
ports:
- name: http
containerPort: 80
hostPort: 80
- name: admin
containerPort: 8080
hostPort: 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
ขั้นตอนที่ 2 — สร้าง cluster role และทำการ binding cluster role ให้กับ service account ที่สร้างขึ้นมา
dcadmin@k8s-operation:~$ kubectl apply -f traefik-rbac.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
- apiGroups:
- extensions
resources:
- ingresses/status
verbs:
- update
---
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
ขั้นตอนที่ 3— สร้าง service และ ingress resource สำหรับ UI dashboard
dcadmin@k8s-operation:~$ kubectl apply -f traefik-ui.yaml
traefik-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: 8080
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: traefik-web-ui
namespace: kube-system
spec:
rules:
- host: traefik-ui.k8s.lab.local
http:
paths:
- path: /
backend:
serviceName: traefik-web-ui
servicePort: web
ขั้นตอนที่ 4 — ตรวจสอบ pods, service และ ingress ต่างๆ
dcadmin@k8s-operation:~$ kubectl get all -n kube-system | grep traefik
ผลลัพธ์ที่ได้
pod/traefik-ingress-controller-m5hsr 1/1 Running 0 4m1s
pod/traefik-ingress-controller-smzx4 1/1 Running 0 4m1s
pod/traefik-ingress-controller-v2sgb 1/1 Running 0 4m1sservice/traefik-ingress-service ClusterIP 10.233.23.253 <none> 80/TCP,8080/TCP 4m2s
service/traefik-web-ui ClusterIP 10.233.55.191 <none> 80/TCP 3m50sdaemonset.apps/traefik-ingress-controller 3 3 3 3 3 <none> 4m2s
ขั้นตอนที่ 5 — แก้ไข hosts ที่เครื่องเราเองให้สามารถเรียกใช้งาน UI dashboard ได้
172.16.31.78 traefik-ui.k8s.lab.local
ขั้นตอนที่ 6 — ลองเรียกใช้งาน UI dashboard
ซึ่งเราจะสามารถ rule ต่างๆ ที่เราใช้จาก frontends ไปหา backends ตัวไหน ใช้ route rules อะไรอยู่
ทดลอง Deploy Application
ขั้นตอนที่ 1 — สร้าง deployment สำหรับ main application
dcadmin@k8s-operation:~$ kubectl apply -f nginx-deployment-main.yaml
nginx-deployment-main.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deploy-main
labels:
run: nginx
spec:
replicas: 2
selector:
matchLabels:
run: nginx-main
template:
metadata:
labels:
run: nginx-main
spec:
containers:
- image: nginx
name: nginx
ขั้นตอนที่ 2 — สร้าง service สำหรับ main application
dcadmin@k8s-operation:~$ kubectl apply -f nginx-service-main.yaml
nginx-service-main.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-service-main
labels:
run: nginx
spec:
ports:
- port: 80
protocol: TCP
selector:
run: nginx-main
ขั้นตอนที่ 3 — ตรวจสอบ pods และ service
dcadmin@k8s-operation:~$ kubectl get pods,services
ผลลัพธ์ที่ได้
NAME READY STATUS RESTARTS AGE
pod/nginx-deploy-main-7cc547b6f7-4txvp 1/1 Running 0 7s
pod/nginx-deploy-main-7cc547b6f7-ftq57 1/1 Running 0 7sNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.233.0.1 <none> 443/TCP 12h
service/nginx-service-main ClusterIP 10.233.63.11 <none> 80/TCP 7s
ขั้นตอนที่ 4 — สร้าง ingress resource เพื่อกำหนด rule การ routing โดยทางผู้เขียนจะใช้ Hostname (FQDN) เป็นชื่อ k8s.lab.local ทั้งนี้ผู้ที่ลองทำตามต้องไปทำการแก้ไขไฟล์ hosts ในเครื่องตัวเองให้ระบบ k8s.lab.local ไปที่ VIP ของ HA Proxy ด้วย
dcadmin@k8s-operation:~$ kubectl apply -f ingress-resource.yaml
ingress-resource.yaml
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: ingress-resource
annotations:
kubernetes.io/ingress.class: "nginx"
spec:
rules:
- host: k8s.lab.local
http:
paths:
- backend:
serviceName: nginx-service-main
servicePort: 80
ตรวจสอบ ingress resource
dcadmin@k8s-operation:~$ kubectl get ingress
ผลลัพธ์ที่ได้
NAME HOSTS ADDRESS PORTS AGE
ingress-resource k8s.lab.local 80 9s
ดูรายละเอียดของ ingress resource
dcadmin@k8s-operation:~$ kubectl describe ingress
ผลลัพธ์ที่ได้
Name: ingress-resource
Namespace: default
Address:
Default backend: default-http-backend:80 (<none>)
Rules:
Host Path Backends
---- ---- --------
k8s.lab.local
nginx-service-main:80 (10.233.84.9:80,10.233.88.8:80)
Annotations:
kubectl.kubernetes.io/last-applied-configuration: {"apiVersion":"networking.k8s.io/v1beta1","kind":"Ingress","metadata":{"annotations":{},"name":"ingress-resource","namespace":"default"},"spec":{"rules":[{"host":"k8s.lab.local","http":{"paths":[{"backend":{"serviceName":"nginx-service-main","servicePort":80}}]}}]}}Events: <none>
แก้ไข hosts ที่เครื่องเราเองด้วยนะ
172.16.31.78 k8s.lab.local
ขั้นตอนที่ 5 — ทดสอบลองเรียกใช้งาน main application
เย้เรียกเข้าใช้งานได้แล้ว
ขั้นตอนที่ 6— ตรวจสอบหน้า UI dashboard ดูซิ
ทดลอง Deploy Application ตัวต่อไป
ขั้นตอนที่ 1 — สร้าง deployment สำหรับ cat application
dcadmin@k8s-operation:~$ kubectl apply -f nginx-deployment-cat.yaml
nginx-deployment-cat.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
run: nginx
name: nginx-deploy-cat
spec:
replicas: 2
selector:
matchLabels:
run: nginx-cat
template:
metadata:
labels:
run: nginx-cat
spec:
volumes:
- name: webdata
emptyDir: {}
initContainers:
- name: web-content
image: busybox
volumeMounts:
- name: webdata
mountPath: "/webdata"
command: ["/bin/sh", "-c", 'echo "<title>Welcome to nginx!</title><h1>CAT Application<h1/><p> ____ _ ____<br />/ ___| / \ |_ _|<br />| | / _ \ | |<br />| |___ / ___ \ | |<br /> \____/_/ \_\_|</p>" > /webdata/index.html']
containers:
- image: nginx
name: nginx
volumeMounts:
- name: webdata
mountPath: "/usr/share/nginx/html"
ขั้นตอนที่ 2 — สร้าง service สำหรับ cat application
dcadmin@k8s-operation:~$ kubectl apply -f nginx-service-cat.yaml
nginx-service-cat.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-service-cat
labels:
run: nginx
spec:
ports:
- port: 80
protocol: TCP
selector:
run: nginx-cat
ขั้นตอนที่ 3 — ตรวจสอบ pods และ service
dcadmin@k8s-operation:~$ kubectl get pods,services
ผลลัพธ์ที่ได้
NAME READY STATUS RESTARTS AGE
pod/nginx-deploy-cat-c6cdd4b64-j74fw 1/1 Running 0 28s
pod/nginx-deploy-cat-c6cdd4b64-xdtw7 1/1 Running 0 28s
pod/nginx-deploy-main-7cc547b6f7-4txvp 1/1 Running 0 3m14s
pod/nginx-deploy-main-7cc547b6f7-ftq57 1/1 Running 0 3m14sNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.233.0.1 <none> 443/TCP 12h
service/nginx-service-cat ClusterIP 10.233.25.176 <none> 80/TCP 28s
service/nginx-service-main ClusterIP 10.233.63.11 <none> 80/TCP 3m14s
ขั้นตอนที่ 4 — แล้วเราจะเข้าใช้ cat application ยังไงนะ ลองเรียก cat.k8s.lab.local
อย่าลืม แก้ไข hosts ที่เครื่องเราเองด้วยนะ
172.16.31.78 cat.k8s.lab.local
ยังเรียกไม่ได้เพราะยังไม่ได้เพิ่ม rule บน ingress resource
ขั้นตอนที่ 5 — เพิ่ม rule สำหรับ cat.k8s.lab.local ให้เรียกไปที่ nginx-service-cat
dcadmin@k8s-operation:~$ kubectl apply -f ingress-resource.yaml
ingress-resource.yaml
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: ingress-resource
annotations:
kubernetes.io/ingress.class: "nginx"
spec:
rules:
- host: k8s.lab.local
http:
paths:
- backend:
serviceName: nginx-service-main
servicePort: 80
- host: cat.k8s.lab.local
http:
paths:
- backend:
serviceName: nginx-service-cat
servicePort: 80
ตรวจสอบ ingress resource
dcadmin@k8s-operation:~$ kubectl get ingress
ผลลัพธ์ที่ได้
NAME HOSTS ADDRESS PORTS AGE
ingress-resource k8s.lab.local,cat.k8s.lab.local 80 3m4s
ดูรายละเอียดของ ingress resource
dcadmin@k8s-operation:~$ kubectl describe ingress
ผลลัพธ์ที่ได้
Name: ingress-resource
Namespace: default
Address:
Default backend: default-http-backend:80 (<none>)
Rules:
Host Path Backends
---- ---- --------
k8s.lab.local
nginx-service-main:80 (10.233.84.9:80,10.233.88.8:80)
cat.k8s.lab.local
nginx-service-cat:80 (10.233.74.9:80,10.233.88.9:80)
Annotations:
kubectl.kubernetes.io/last-applied-configuration: {"apiVersion":"networking.k8s.io/v1beta1","kind":"Ingress","metadata":{"annotations":{},"name":"ingress-resource","namespace":"default"},"spec":{"rules":[{"host":"k8s.lab.local","http":{"paths":[{"backend":{"serviceName":"nginx-service-main","servicePort":80}}]}},{"host":"cat.k8s.lab.local","http":{"paths":[{"backend":{"serviceName":"nginx-service-cat","servicePort":80}}]}}]}}Events: <none>
ขั้นตอนที่ 5 — ทดสอบลองเรียกใช้งาน cat application อีกครั้ง
เย้เข้าได้แล้ว
ขั้นตอนที่ 6 — ตรวจสอบหน้า UI dashboard ดูซิ
ทดลอง Deploy Application อีกสัก 2 ตัว
ขั้นตอนที่ 1 — สร้าง deployment สำหรับ dog application
dcadmin@k8s-operation:~$ kubectl apply -f nginx-deployment-dog.yaml
nginx-deployment-dog.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
run: nginx
name: nginx-deploy-dog
spec:
replicas: 2
selector:
matchLabels:
run: nginx-dog
template:
metadata:
labels:
run: nginx-dog
spec:
volumes:
- name: webdata
emptyDir: {}
initContainers:
- name: web-content
image: busybox
volumeMounts:
- name: webdata
mountPath: "/webdata"
command: ["/bin/sh", "-c", 'echo "<title>Welcome to nginx!</title><h1>DOG Application<h1/><p>____ ___ ____<br />| _ \/ _ \ / ___|<br />| | | | | | | | _<br />| |_| | |_| | |_| |<br />|___/\___/ \___|</p>" > /webdata/index.html']
containers:
- image: nginx
name: nginx
volumeMounts:
- name: webdata
mountPath: "/usr/share/nginx/html"
ขั้นตอนที่ 2 — สร้าง service สำหรับ dog application
dcadmin@k8s-operation:~$ kubectl apply -f nginx-service-dog.yaml
nginx-service-dog.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-service-dog
labels:
run: nginx
spec:
ports:
- port: 80
protocol: TCP
selector:
run: nginx-dog
ขั้นตอนที่ 3 — สร้าง deployment สำหรับ rabbit application
dcadmin@k8s-operation:~$ kubectl apply -f nginx-deployment-rabbit.yaml
nginx-deployment-rabbit.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
run: nginx
name: nginx-deploy-rabbit
spec:
replicas: 2
selector:
matchLabels:
run: nginx-rabbit
template:
metadata:
labels:
run: nginx-rabbit
spec:
volumes:
- name: webdata
emptyDir: {}
initContainers:
- name: web-content
image: busybox
volumeMounts:
- name: webdata
mountPath: "/webdata"
command: ["/bin/sh", "-c", 'echo "<title>Welcome to nginx!</title><h1>RABBIT Application<h1/><p>____ _ ___ ___ ___ ____<br />| _ \ / \ | __ )| __ )_ _|_ _|<br />| |_) | / _ \ | _ \| _ \| | | |<br />| _ < / ___ \| |_) | |_) | | | |<br />|_| \_\/_/ \_\___/|___/___||_|</p>" > /webdata/index.html']
containers:
- image: nginx
name: nginx
volumeMounts:
- name: webdata
mountPath: "/usr/share/nginx/html"
ขั้นตอนที่ 4 — สร้าง service สำหรับ rabbit application
dcadmin@k8s-operation:~$ kubectl apply -f nginx-service-rabbit.yaml
nginx-service-rabbit.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-service-rabbit
labels:
run: nginx
spec:
ports:
- port: 80
protocol: TCP
selector:
run: nginx-rabbit
ขั้นตอนที่ 5 — ตรวจสอบ pods และ service
dcadmin@k8s-operation:~$ kubectl get pods,services
ผลลัพธ์ที่ได้
NAME READY STATUS RESTARTS AGE
pod/nginx-deploy-cat-c6cdd4b64-j74fw 1/1 Running 0 3m22s
pod/nginx-deploy-cat-c6cdd4b64-xdtw7 1/1 Running 0 3m22s
pod/nginx-deploy-dog-5dd6cb45c7-jrk4x 1/1 Running 0 23s
pod/nginx-deploy-dog-5dd6cb45c7-vn92n 1/1 Running 0 23s
pod/nginx-deploy-main-7cc547b6f7-4txvp 1/1 Running 0 6m8s
pod/nginx-deploy-main-7cc547b6f7-ftq57 1/1 Running 0 6m8s
pod/nginx-deploy-rabbit-5557fdf458-swmdj 1/1 Running 0 19s
pod/nginx-deploy-rabbit-5557fdf458-x2r94 1/1 Running 0 19sNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.233.0.1 <none> 443/TCP 12h
service/nginx-service-cat ClusterIP 10.233.25.176 <none> 80/TCP 3m22s
service/nginx-service-dog ClusterIP 10.233.61.154 <none> 80/TCP 23s
service/nginx-service-main ClusterIP 10.233.63.11 <none> 80/TCP 6m8s
service/nginx-service-rabbit ClusterIP 10.233.58.3 <none> 80/TCP 19s
ขั้นตอนที่ 6 — แก้ไข hosts ที่เครื่องเราเพื่อเพิ่ม hostname ที่เราจะเรียกเข้าไปใช้งาน service
172.16.31.78 dog.k8s.lab.local
172.16.31.78 rabbit.k8s.lab.local
ขั้นตอนที่ 7 — เพิ่ม rule สำหรับ dog.k8s.lab.local และ rabbit.k8s.lab.local ให้เรียกไปที่ nginx-service-dog และ nginx-service-rabbit
dcadmin@k8s-operation:~$ kubectl apply -f ingress-resource.yaml
ingress-resource.yaml
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: ingress-resource
annotations:
kubernetes.io/ingress.class: "nginx"
spec:
rules:
- host: k8s.lab.local
http:
paths:
- backend:
serviceName: nginx-service-main
servicePort: 80
- host: cat.k8s.lab.local
http:
paths:
- backend:
serviceName: nginx-service-cat
servicePort: 80
- host: dog.k8s.lab.local
http:
paths:
- backend:
serviceName: nginx-service-dog
servicePort: 80
- host: rabbit.k8s.lab.local
http:
paths:
- backend:
serviceName: nginx-service-rabbit
servicePort: 80
ตรวจสอบ ingress resource
dcadmin@k8s-operation:~$ kubectl get ingress
ผลลัพธ์ที่ได้
NAME HOSTS ADDRESS PORTS AGE
ingress-resource k8s.lab.local,cat.k8s.lab.local,dog.k8s.lab.local + 1 more... 80 5m53s
ดูรายละเอียดของ ingress resource
dcadmin@k8s-operation:~$ kubectl describe ingress
ผลลัพธ์ที่ได้
Name: ingress-resource
Namespace: default
Address:
Default backend: default-http-backend:80 (<none>)
Rules:
Host Path Backends
---- ---- --------
k8s.lab.local
nginx-service-main:80 (10.233.84.9:80,10.233.88.8:80)
cat.k8s.lab.local
nginx-service-cat:80 (10.233.74.9:80,10.233.88.9:80)
dog.k8s.lab.local
nginx-service-dog:80 (10.233.74.10:80,10.233.84.10:80)
rabbit.k8s.lab.local
nginx-service-rabbit:80 (10.233.84.11:80,10.233.88.10:80)
Annotations:
kubectl.kubernetes.io/last-applied-configuration: {"apiVersion":"networking.k8s.io/v1beta1","kind":"Ingress","metadata":{"annotations":{},"name":"ingress-resource","namespace":"default"},"spec":{"rules":[{"host":"k8s.lab.local","http":{"paths":[{"backend":{"serviceName":"nginx-service-main","servicePort":80}}]}},{"host":"cat.k8s.lab.local","http":{"paths":[{"backend":{"serviceName":"nginx-service-cat","servicePort":80}}]}},{"host":"dog.k8s.lab.local","http":{"paths":[{"backend":{"serviceName":"nginx-service-dog","servicePort":80}}]}},{"host":"rabbit.k8s.lab.local","http":{"paths":[{"backend":{"serviceName":"nginx-service-rabbit","servicePort":80}}]}}]}}Events: <none>
ขั้นตอนที่ 8 — ทดสอบลองเรียกใช้งาน dog application และ rabbit application
ขั้นตอนที่ 9— ตรวจสอบหน้า UI dashboard ดูซิ
ลองเปลี่ยนมาใช้ Path-based routing ดูซิ
ขั้นตอนที่ 1— แก้ไข ingress resource ไปใช้งาน path-base routing
dcadmin@k8s-operation:~$ kubectl apply -f ingress-resource.yaml
ingress-resource.yaml
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: ingress-resource
annotations:
traefik.frontend.rule.type: PathPrefixStrip
spec:
rules:
- host: k8s.lab.local
http:
paths:
- path: /
backend:
serviceName: nginx-service-main
servicePort: 80
- path: /cat
backend:
serviceName: nginx-service-cat
servicePort: 80
- path: /dog
backend:
serviceName: nginx-service-dog
servicePort: 80
- path: /rabbit
backend:
serviceName: nginx-service-rabbit
servicePort: 80
ตรวจสอบ ingress resource
dcadmin@k8s-operation:~$ kubectl get ingress
ผลลัพธ์ที่ได้
NAME HOSTS ADDRESS PORTS AGE
ingress-resource k8s.lab.local 80 9m16s
ดูรายละเอียดของ ingress resource
dcadmin@k8s-operation:~$ kubectl describe ingress
ผลลัพธ์ที่ได้
Name: ingress-resource
Namespace: default
Address:
Default backend: default-http-backend:80 (<none>)
Rules:
Host Path Backends
---- ---- --------
k8s.lab.local
/ nginx-service-main:80 (10.233.84.9:80,10.233.88.8:80)
/cat nginx-service-cat:80 (10.233.74.9:80,10.233.88.9:80)
/dog nginx-service-dog:80 (10.233.74.10:80,10.233.84.10:80)
/rabbit nginx-service-rabbit:80 (10.233.84.11:80,10.233.88.10:80)
Annotations:
kubectl.kubernetes.io/last-applied-configuration: {"apiVersion":"networking.k8s.io/v1beta1","kind":"Ingress","metadata":{"annotations":{"traefik.frontend.rule.type":"PathPrefixStrip"},"name":"ingress-resource","namespace":"default"},"spec":{"rules":[{"host":"k8s.lab.local","http":{"paths":[{"backend":{"serviceName":"nginx-service-main","servicePort":80},"path":"/"},{"backend":{"serviceName":"nginx-service-cat","servicePort":80},"path":"/cat"},{"backend":{"serviceName":"nginx-service-dog","servicePort":80},"path":"/dog"},{"backend":{"serviceName":"nginx-service-rabbit","servicePort":80},"path":"/rabbit"}]}}]}}traefik.frontend.rule.type: PathPrefixStrip
Events: <none>
เราจะเห็นได้ว่า rules ได้เปลี่ยนไปละ
ขั้นตอนที่ 2— ทดเรียกใช้งานหน้าเว็บ application ต่างๆ
main
cat
dog
rabbit
ขั้นตอนที่ 3 — ตรวจสอบหน้า UI dashboard ดูซิ
เราจะเห็นได้ว่า rules บนหน้า dashboard ก็เปลี่ยนไปด้วย
สุดท้ายการลองเล่นครั้งก็เป็นเพียงการใช้งานเบื้องต้น ตัว traefik ยังไม่ลูกเล่นอีกมากมายที่ให้เราใช้งาน แต่ต้องเรียนรู้ และหัดใช้งานกันต่อไป
สุดท้ายแล้วหากท่านไหนหลงเข้ามาอ่านแล้วเห็นว่าผมยังเข้าใจผิดในเรื่องใด สามารถให้ข้อมูลเพิ่มเติมได้ครับ