

Kubernetes Ingress คืออะไร? — คู่มือฉบับสมบูรณ์ 2026
ในโลกของการพัฒนาแอปพลิเคชันสมัยใหม่ด้วยคอนเทนเนอร์และ Kubernetes (K8s) การจัดการการเข้าถึงบริการจากภายนอกคลัสเตอร์เป็นหนึ่งในความท้าทายสำคัญที่ DevOps Engineer และทีมพัฒนาไม่อาจมองข้ามได้ คำถามที่มักเกิดขึ้นคือ “เราจะเปิดให้ผู้ใช้ภายนอกเข้าถึง Pod หรือ Service หลายสิบตัวภายในคลัสเตอร์ของเราได้อย่างไรอย่างมีประสิทธิภาพและปลอดภัย?” นี่คือจุดที่ Kubernetes Ingress เข้ามาเป็นพระเอกตัวจริง ในคู่มือฉบับสมบูรณ์ปี 2026 นี้ เราจะเจาะลึกทุกแง่มุมของ Ingress ตั้งแต่พื้นฐานจนถึงแนวทางการใช้งานจริง พร้อมอัปเดตเทรนด์และเครื่องมือล่าสุด
Kubernetes Ingress คืออะไร? ทำความเข้าใจแก่นแท้
Kubernetes Ingress ไม่ใช่เซิร์ฟเวอร์หรือโปรเซส แต่เป็นทรัพยากร (Resource) ประเภทหนึ่งของ Kubernetes API ที่ทำหน้าที่เป็นกฎ (Rule) สำหรับจัดการการเข้าถึงบริการจากภายนอกคลัสเตอร์ไปยัง Service ภายใน โดยปกติแล้ว การเปิดบริการสู่โลกภายนอกใน K8s สามารถทำได้ผ่าน Service ประเภท LoadBalancer หรือ NodePort แต่ทั้งสองวิธีมีข้อจำกัดเมื่อต้องจัดการกับหลายๆ บริการ เช่น ต้องใช้ External IP จำนวนมาก หรือจัดการเกี่ยวกับ SSL/TLS termination, Routing ตาม path/domain ที่ซับซ้อนได้ยาก
Ingress จึงเข้ามาแก้ไขปัญหานี้โดยทำหน้าที่เป็น “เลเยอร์ 7 (Application Layer) รูทเตอร์” ที่กำหนดกฎการเราต์ติ้งขาเข้า (Inbound Traffic) เพียงจุดเดียว โดยอาศัยไดรเวอร์ที่เรียกว่า Ingress Controller ในการอ่านกฎจาก Ingress Resource และแปลงเป็นคอนฟิกูเรชันของโปรแกรมที่ทำหน้าที่เป็นโหลดบาลานเซอร์จริงๆ เช่น Nginx, Traefik, HAProxy, หรือแม้แต่โซลูชันคลาวด์เช่น AWS ALB Ingress Controller
องค์ประกอบหลักของระบบ Ingress
- Ingress Resource: ไฟล์ YAML ที่ประกาศกฎการเราต์ติ้ง เช่น แมปโดเมนและพาธไปยัง Service ใด, การตั้งค่า SSL/TLS
- Ingress Controller: โปรแกรมที่รันเป็น Pod ในคลัสเตอร์ คอยเฝ้าดู (Watch) การเปลี่ยนแปลงของ Ingress Resource และอัพเดตคอนฟิกของโหลดบาลานเซอร์จริงๆ ตามนั้น
- โหลดบาลานเซอร์ภายนอก (Optional): ในบางสภาพแวดล้อมคลาวด์ อาจมี LoadBalancer Service อีกชั้นที่รับ traffic จากอินเทอร์เน็ตมาสู่ Ingress Controller
เหตุผลที่ต้องใช้ Ingress: มากกว่าแค่การเราต์ติ้ง
การนำ Ingress มาใช้นั้นให้ประโยชน์ที่เกินกว่าการเป็น “ทางเข้า” ธรรมดา มาดูเหตุผลหลักๆ:
- ศูนย์กลางการจัดการ: จัดการการเข้าถึงบริการทั้งหมดผ่านทรัพยากร Kubernetes แบบ Declarative ได้จากที่เดียว แทนที่จะไปปรับคอนฟิกที่เซิร์ฟเวอร์โหลดบาลานเซอร์หลายจุด
- ประหยัดทรัพยากร IP และ Cost: ใช้ External IP เพียงหนึ่งหรือไม่กี่ตัวสำหรับบริการทั้งหมด แทนที่แต่ละ Service จะต้องขอ IP ภายนอกของตัวเอง (ในกรณี LoadBalancer)
- การจัดการ SSL/TLS ที่ง่ายดาย: รองรับการ terminate SSL ที่ Ingress Controller ทำให้แอปภายในไม่ต้องกังวลเรื่องการเข้ารหัส และทำงานร่วมกับเครื่องมือจัดการ Certificate เช่น Cert-manager ได้อย่างลงตัว
- ความยืดหยุ่นในการเราต์ติ้ง: กำหนดกฎที่ซับซ้อนได้ เช่น เราต์ตามชื่อโฮสต์ (host-based), พาธ (path-based), เฮดเดอร์ (header), หรือแม้แต่น้ำหนัก (canary deployment)
- Observability: จุดรวม traffic ช่วยให้การเก็บ Log, Metrics และการทำ Tracing เป็นไปได้อย่างมีประสิทธิภาพมากขึ้น
สถาปัตยกรรมและการทำงานของ Ingress
เพื่อให้เห็นภาพที่ชัดเจน เรามาแตกส่วนการทำงานของระบบ Ingress ตั้งแต่ผู้ใช้เรียกใช้จนถึง Pod ปลายทาง
- ผู้ใช้เข้าถึง URL เช่น
https://app.siamcafe.co.th/api/v1/orders - DNS ชี้มาที่ External IP ของ LoadBalancer (อาจเป็นของคลาวด์ provider หรือเซิร์ฟเวอร์ที่รัน Ingress Controller โดยตรง)
- Traffic ถูกส่งมายัง Pod ของ Ingress Controller (เช่น Nginx Ingress Controller) ที่รันอยู่ในคลัสเตอร์
- Ingress Controller อ่านกฎจาก Ingress Resource ที่ถูกสร้างไว้ (ผ่าน Kubernetes API Server)
- Controller ตรวจพบว่าโฮสต์
app.siamcafe.co.thและพาธ/api/v1/ordersถูกแมปกับ Kubernetes Service ชื่อorder-serviceบนพอร์ต 8080 - Controller ส่งต่อ request ไปยังหนึ่งใน Pod ที่เป็น backend ของ
order-service(ผ่านกลไก Service และ kube-proxy) - Pod ของแอปพลิเคชันประมวลผลและส่ง response กลับไปยังผู้ใช้ตามเส้นทางเดิม
ความสัมพันธ์ระหว่างองค์ประกอบเหล่านี้สามารถแสดงได้ด้วยไดอะแกรมเชิงตรรกะดังนี้:
อินเทอร์เน็ต
|
v
[ External Load Balancer ] (เช่น Cloud Load Balancer, MetalLB)
|
v
[ Ingress Controller Pods ] (เช่น Nginx, Traefik) <--- watches ---> [ Kubernetes API Server ]
| ^
| |
v [ Ingress Resource YAML ]
[ Kubernetes Service (ClusterIP) ]
|
v
[ Application Pods ] (Labels match Service Selector)
ประเภทของ Ingress Controller ที่นิยมในปี 2026
การเลือก Ingress Controller ที่เหมาะสมเป็นกุญแจสำคัญ ประสิทธิภาพและฟีเจอร์แตกต่างกันไปตาม use case ต่อไปนี้คือตัวเลือกชั้นนำที่ยังคงความร้อนแรงในปี 2026:
1. NGINX Ingress Controller
เป็นผู้เล่นเก่าที่แข็งแกร่งและนิยมมากที่สุด มีสองสายหลัก: kubernetes/ingress-nginx (ชุมชนดูแล) และ NGINX Inc./nginx-ingress (เชิงพาณิชย์พร้อมซัพพอร์ต) ให้ประสิทธิภาพสูงและเสถียร เรียนรู้ง่าย คอนฟิกผ่าน Annotation ได้หลากหลาย
2. Traefik Proxy
ได้ความนิยมจากความทันสมัยและการตั้งค่าที่ง่ายดายผ่าน Dynamic Configuration รองรับ Service Discovery อัตโนมัติ มีแดชบอร์ดสำหรับ monitoring ในตัว และทำงานได้ดีกับเทคโนโลยีใหม่ๆ เช่น HTTP/3, WebAssembly
3. HAProxy Ingress
ตัวเลือกสำหรับผู้ที่ต้องการประสิทธิภาพสูงสุดในระดับ Enterprise มีอัตราการส่งต่อ request ที่เร็วมาก รองรับการคอนฟิกที่ละเอียดและทรงพลัง เหมาะกับ workload ที่ต้องการ latency ต่ำและ throughput สูง
4. Cloud Provider Specific Controllers
เช่น AWS Load Balancer Controller (สำหรับ ALB/NLB), GKE Ingress (สำหรับ Google Cloud Load Balancer), และ Azure Application Gateway Ingress Controller (AGIC) ตัวเลือกเหล่านี้ integrate กับบริการจัดการโหลดบาลานเซอร์ของคลาวด์ผู้ให้บริการโดยตรง มักให้การจัดการที่ง่ายและฟีเจอร์เฉพาะแพลตฟอร์ม
5. Envoy Gateway & Istio IngressGateway
สำหรับระบบที่ใช้ Service Mesh และต้องการความสามารถขั้นสูงด้านการควบคุม traffic, security policy, และ observability ที่ครอบคลุม Envoy Gateway (โครงการจาก CNCF) กำลังมาแรงในฐานะ Ingress Controller ที่ใช้ Envoy Proxy เป็น core
| Controller | จุดเด่น | จุดที่ควรพิจารณา | เหมาะสำหรับ |
|---|---|---|---|
| NGINX (ชุมชน) | นิยมสูง, เอกสารครบ, Annotation หลากหลาย, ประสิทธิภาพดี | คอนฟิกขั้นสูงอาจซับซ้อน, แดชบอร์ดต้องติดตั้งเพิ่ม | ทีมส่วนใหญ่, workload ทั่วไป, การเริ่มต้นใช้งาน |
| Traefik | ตั้งค่าเริ่มต้นง่าย, แดชบอร์ดในตัว, อัพเดตคอนฟิกอัตโนมัติ, รองรับโปรโตคอลใหม่ | ประสิทธิภาพอาจไม่สูงสุดเมื่อเทียบกับ NGINX/HAProxy ในบาง workload | ทีมที่ต้องการพัฒนารวดเร็ว, Dynamic environment, Cloud-native stack |
| HAProxy | ประสิทธิภาพและความเร็วสูงสุด, คอนฟิกละเอียดระดับลึก, เสถียรภาพระดับ Enterprise | การเรียนรู้ curve สูง, การจัดการผ่าน ConfigMap อาจซับซ้อน | ระบบที่ต้องการ throughput สูงและ latency ต่ำ, Workload วิกฤต |
| AWS ALB | Integrate กับ AWS ดี, จัดการ SSL/TLS, WAF จากคลาวด์โดยตรง, ไม่ต้องดูแลเซิร์ฟเวอร์ | Lock-in กับ AWS, Cost อาจสูงขึ้นตาม traffic | ระบบที่รันบน AWS และต้องการใช้บริการ managed ของ AWS อย่างเต็มที่ |
การติดตั้งและคอนฟิกูเรชันพื้นฐาน
ในส่วนนี้เราจะสาธิตการติดตั้งและใช้งาน NGINX Ingress Controller (ชุมชน) บนคลัสเตอร์มาตรฐาน
ขั้นตอนที่ 1: ติดตั้ง Ingress Controller
ใช้ Helm ซึ่งเป็น package manager ของ Kubernetes เป็นวิธีที่แนะนำในปี 2026 เนื่องจากจัดการ dependency และการอัพเกรดได้ง่าย
# Add the official Helm repository
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
# Install the controller in a dedicated namespace
helm install ingress-nginx ingress-nginx/ingress-nginx \
--namespace ingress-nginx \
--create-namespace \
--set controller.service.type=LoadBalancer # ใช้ NodePort หากไม่มี External LB
รอสักครู่และตรวจสอบว่าติดตั้งสำเร็จ:
kubectl get pods -n ingress-nginx
kubectl get svc -n ingress-nginx # ดู EXTERNAL-IP
ขั้นตอนที่ 2: สร้างแอปพลิเคชันและ Service ตัวอย่าง
สร้าง Deployment และ Service ง่ายๆ สองตัวเพื่อทดสอบการเราต์ติ้ง
# api-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: api-app
spec:
replicas: 2
selector:
matchLabels:
app: api-app
template:
metadata:
labels:
app: api-app
spec:
containers:
- name: api-container
image: nginx:alpine
ports:
- containerPort: 80
env:
- name: NGINX_CONTENT
value: "Hello from API Service"
---
apiVersion: v1
kind: Service
metadata:
name: api-service
spec:
selector:
app: api-app
ports:
- protocol: TCP
port: 80
targetPort: 80
สร้างอีก Deployment สำหรับเว็บแอป และ apply ไฟล์ทั้งหมด:
kubectl apply -f api-deployment.yaml
kubectl apply -f web-deployment.yaml
ขั้นตอนที่ 3: สร้าง Ingress Resource
นี่คือหัวใจของการตั้งค่า มาสร้างกฎ Ingress ที่เราต์ตามพาธ (path-based routing)
# example-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: siamcafe-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: / # สำคัญสำหรับ path rewrite
spec:
ingressClassName: nginx # ระบุ class ของ controller ที่จะใช้
rules:
- host: demo.siamcafe.co.th # ใช้ localhost หรือแก้ไข /etc/hosts หากทดสอบ locally
http:
paths:
- path: /api
pathType: Prefix
backend:
service:
name: api-service
port:
number: 80
- path: /
pathType: Prefix
backend:
service:
name: web-service
port:
number: 80
apply Ingress resource:
kubectl apply -f example-ingress.yaml
kubectl get ingress
หากทุกอย่างถูกต้อง เมื่อคุณเข้าถึง http://demo.siamcafe.co.th/api คุณควรเห็นข้อความจาก API Service และเมื่อเข้าถึง http://demo.siamcafe.co.th คุณควรเห็นหน้าเว็บหลัก
เทคนิคขั้นสูงและการใช้งานจริง (Real-World Use Cases)
นอกจากการเราต์ติ้งพื้นฐานแล้ว Ingress ยังทำอะไรได้อีกมากมาย มาดู use case จริงที่พบได้บ่อยในระบบ Production
1. Canary Deployment และการปล่อยแบบค่อยเป็นค่อยไป
ใช้เพื่อปล่อยเวอร์ชันใหม่ของแอปให้กับผู้ใช้บางส่วนก่อน (เช่น 10% ของ traffic) เพื่อทดสอบและ monitor ความผิดปกติ โดยไม่กระทบผู้ใช้ทั้งหมด สามารถทำได้ผ่าน annotation ของ NGINX Ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: canary-ingress
annotations:
nginx.ingress.kubernetes.io/canary: "true"
nginx.ingress.kubernetes.io/canary-weight: "10" # ส่ง 10% ของ traffic มาที่นี้
spec:
rules:
- host: app.siamcafe.co.th
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: new-version-service # Service ของเวอร์ชันใหม่
port:
number: 80
โดยมี Ingress หลักที่ส่ง 90% ของ traffic ไปยังเวอร์ชันเดิม
2. การจัดการ SSL/TLS กับ Cert-Manager อัตโนมัติ
ในยุคที่ HTTPS เป็นมาตรฐาน การจัดการใบรับรอง SSL ให้อัตโนมัติเป็นสิ่งจำเป็น ใช้ Cert-Manager ร่วมกับ Ingress เพื่อขอและต่ออายุใบรับรองจาก Let’s Encrypt โดยอัตโนมัติ
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: tls-ingress
annotations:
cert-manager.io/cluster-issuer: "letsencrypt-prod" # ระบุ ClusterIssuer
spec:
tls:
- hosts:
- shop.siamcafe.co.th
secretName: siamcafe-tls-secret # Cert-manager จะสร้าง Secret นี้ให้
rules:
- host: shop.siamcafe.co.th
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: shop-service
port:
number: 443
3. การป้องกันด้วย Rate Limiting และ Basic Auth
Ingress Controller หลายตัวสามารถทำหน้าที่เป็นเกตเวย์ด้านความปลอดภัยเบื้องต้นได้ เช่น จำกัดจำนวน request ต่อวินาทีจาก IP เดียวกัน หรือใส่การยืนยันตัวตนแบบพื้นฐาน
metadata:
annotations:
nginx.ingress.kubernetes.io/limit-rps: "10" # 10 requests ต่อวินาทีต่อ IP
nginx.ingress.kubernetes.io/auth-type: basic
nginx.ingress.kubernetes.io/auth-secret: basic-auth-secret
nginx.ingress.kubernetes.io/auth-realm: "Authentication Required - SiamCafe"
4. ใช้กับ Microservices และ API Gateway Pattern
ในระบบ Microservices ที่มีบริการย่อย数十ตัว Ingress มักทำหน้าที่เป็น API Gateway ระดับแรก (Edge Gateway) จัดการเกี่ยวกับ CORS, Request/Response Transformation, Circuit Breaker (ผ่าน annotation ขั้นสูงหรือใช้ร่วมกับ Service Mesh) ก่อนส่งไปยัง API Gateway ตัวหลักหรือบริการย่อยโดยตรง
แนวทางปฏิบัติที่ดีที่สุด (Best Practices) ปี 2026
จากประสบการณ์การใช้งานในระบบขนาดใหญ่ เราได้รวบรวม best practices ที่ควรยึดถือ:
- ใช้ Ingress Class และแยก Environment: กำหนด
ingressClassNameให้ชัดเจน และพิจารณาใช้ Ingress Controller แยกสำหรับ workload ที่สำคัญ程度ต่างกัน (เช่น internal vs external) - จัดการ TLS ที่ Ingress Controller: ทำ SSL Termination ที่ Ingress เพื่อลด overhead ในแอปพลิเคชัน และใช้นโยบายความปลอดภัยที่แข็งแกร่ง เช่น TLS 1.3 เท่านั้น
- ติดตั้งและคอนฟิก Health Check: ตั้งค่า health check probe ที่เหมาะสมที่ Ingress Controller ไปยัง backend services เพื่อตัด Pod หรือ Service ที่ล้มเหลวออกจากการเราต์ติ้ง
- บันทึก Log และ Metrics อย่างเป็นระบบ: Enable access log ของ Ingress Controller และส่งไปยัง centralized logging system (เช่น Elasticsearch, Loki) รวมถึงส่ง metrics (จำนวน request, latency, error rate) ไปยัง Prometheus เพื่อ monitoring
- กำหนด Resource Limit ให้ Controller: Ingress Controller เป็น critical component ต้องกำหนด requests/limits ที่เหมาะสมสำหรับ CPU และ memory เพื่อป้องกันไม่ให้ถูก evict หรือแย่งทรัพยากรกับ workload อื่น
- ใช้แยก Namespace สำหรับ Controller: ติดตั้ง Ingress Controller ใน namespace แยก (เช่น
ingress-nginx) ไม่ปะปนกับแอปพลิเคชัน business logic - ทบทวน Security Policy อย่างสม่ำเสมอ: ใช้ NetworkPolicy เพื่อควบคุม traffic เข้าออก Pod ของ Ingress Controller ตรวจสอบและอัปเดต annotation ด้านความปลอดภัยเป็นประจำ
- เตรียมแผน Disaster Recovery: ออกแบบให้มี Ingress Controller มากกว่า 1 replica และกระจาย across availability zones พร้อมทั้งมีกระบวนการ backup/restore คอนฟิกที่รวดเร็ว
อนาคตของ Kubernetes Ingress และ Gateway API
แม้ Ingress API จะประสบความสำเร็จอย่างมาก แต่ก็มีข้อจำกัดในด้านความสามารถและความยืดหยุ่น เช่น การกำหนดกฎที่ซับซ้อนข้าม namespace, การเราต์ระดับ TCP/UDP, หรือการแบ่งบทบาทหน้าที่ระหว่างทีมเครือข่ายและทีมพัฒนา Gateway API จึงถูกออกแบบมาเป็น successor รุ่นต่อไป
Gateway API เป็นชุดของทรัพยากร API แบบใหม่ (GatewayClass, Gateway, HTTPRoute, TCPRoute เป็นต้น) ที่มีโมเดลการทำงานแบบ object-oriented และรองรับการแบ่งบทบาท (Role-Oriented) ได้ดีกว่า โดยในปี 2026 Gateway API กำลังเข้าสู่ stage ของการ production-ready มากขึ้นเรื่อยๆ และเริ่มถูกนำไปใช้ควบคู่หรือแทนที่ Ingress ในหลายองค์กร
| ด้าน | Ingress API (ดั้งเดิม) | Gateway API (ใหม่) |
|---|---|---|
| โมเดลการแบ่งบทบาท | จำกัด ทีมเดียวมักจัดการทั้งหมด | ชัดเจน: Infrastructure Provider (จัดการ Gateway), Application Developer (จัดการ Route) |
| ความสามารถในการแสดงผล | พื้นฐาน: Host/Path routing, TLS | ครอบคลุมมากขึ้น: Header-based routing, Traffic splitting, Mirroring, TCP/UDP routing |
| ขอบเขต (Scope) | Namespace ของ Ingress เองเท่านั้น | รองรับ Route ที่อ้างอิงข้าม Namespace ได้ |
| สถานะ | Stable (v1) มานาน, รู้จักกว้างขวาง | บางฟีเจอร์ Stable, บางฟีเจอร์ยัง Beta, กำลังเติบโตเร็ว |
| คำแนะนำ | ใช้ได้ดีสำหรับระบบส่วนใหญ่ในปัจจุบัน | เริ่มศึกษาและทดลองใช้ โดยเฉพาะสำหรับระบบใหม่หรือที่มีความซับซ้อนสูง |
Summary
Kubernetes Ingress ได้พิสูจน์ตัวเองแล้วว่าเป็นองค์ประกอบที่ขาดไม่ได้ในสถาปัตยกรรมคลัสเตอร์สมัยใหม่ ทำหน้าที่เป็นประตูหลักที่ชาญฉลาด คอยจัดการและควบคุมการไหลของ traffic จากภายนอกเข้าสู่บริการจำนวนมากภายในคลัสเตอร์อย่างมีระเบียบ ปลอดภัย และมีประสิทธิภาพ ตั้งแต่การเราต์ติ้งตามกฎง่ายๆ ไปจนถึงการ deploy แบบ canary การจัดการใบรับรอง SSL อัตโนมัติ และการป้องกันขั้นพื้นฐาน การเลือก Ingress Controller ที่เหมาะสมกับวัฒนธรรมและความต้องการของทีม เช่น NGINX, Traefik หรือตัวจัดการเฉพาะคลาวด์ จะส่งผลอย่างมากต่อประสบการณ์การทำงานและความเสถียรของระบบ
ในขณะที่เราควรยึดถือแนวทางปฏิบัติที่ดีที่สุดเพื่อให้ระบบมีเสถียรภาพและความปลอดภัย เราก็ต้องไม่หยุดนิ่ง และเริ่มทำความเข้าใจกับอนาคตอย่าง Gateway API ซึ่งพร้อมจะนำพาการจัดการ traffic ขาเข้าไปสู่ระดับใหม่ของความยืดหยุ่นและการทำงานเป็นทีม ไม่ว่าคุณจะกำลังเริ่มต้นกับ Kubernetes หรือดูแลระบบ production ขนาดใหญ่ การลงทุนเวลาเพื่อทำความเข้าใจ Ingress อย่างลึกซึ้งตามคู่มือฉบับสมบูรณ์นี้ จะเป็นรากฐานที่แข็งแกร่งสำหรับการสร้างและบริหารแอปพลิเคชันบนคลัสเตอร์ได้อย่างมั่นใจในปี 2026 และต่อไปในอนาคต