Ingress ไม่ใช่ NAT

Ingress ไม่ใช่ NAT! แต่เป็นนิยามใหม่ของ Forward port และ Load Balance ที่ยืดหยุ่นที่สุด!

Ingress คืออะไร?

Ingress ชื่อเรียกการออกแบบสถาปัตยกรรมที่ช่วยให้ผู้ใช้เข้าถึงเว็บแอปพลิเคชันของเราโดยใช้เพียง URL ชื่อเดียวโดยวิธีการคอนฟิกไฟล์ กำหนดเส้นทางการรับส่งข้อมูลไปยัง service ต่าง ๆ ในคลัสเตอร์
หากเป็น Google Cloud จะเรียก Ingress เซอร์วิสบริการนี้ว่า LoadBalancer (GKE Ingress for HTTP(S) Load Balancing) เมื่อคุณสร้างคลัสเตอร์บน GKE ระบบจะสร้าง ingress-service ขึ้นมาให้ เช่น
ถ้า Deploy เว็บ WordPress แอปพลิเคชัน เจ้า GKE (Kubernetes) ก็จะสร้าง ingress-space ใน Deployment เช่น nginx-ingress-controller เป็นต้น

Image credit: Nginx ingress controller for GCP(GKE)

หากกรณี Deploy จาก Marketplace บน Google Cloud คุณมีหน้าที่เพียงกำหนดค่า Replicas ที่อยู่ในส่วนของ Deployment

อธิบายเพิ่มเติมคือ เมื่อ Pod ตาย Kubernetes จะสร้าง Pod ขึ้นใหม่มาแทนที่โดยอัตโนมัติ สร้างจนครบตามจำนวนที่ต้องการ (ตามค่าที่กำหนดของ Replicas)

หากไม่ Deploy จาก Marketplace ก็ต้องเขียน Deployment กำหนด Replica ขึ้นมาเองตามความต้องการ และ ConfigMap + Service (ระบุ port และ path)
เช่น shop และ video อยู่คนล่ะ Service เป็นต้น

www. domain .com/shop
www. domain .com/video

Image credit: KodeKloud

ซอฟต์แวร์ผลิตภัฑณ์ที่ใช้ทำ Ingress Controller เช่น GCE Load Balance HTTP(s), NGINX, Contour, HAPROXY, Traefik, Istio ครับ

ให้เข้าใจง่าย ๆ Ingress ก็คือ ตัวกระจายงาน (โหลดบาลานเซอร์) ที่รับงานมา (Request) ส่งต่อ (Route traffic) ให้แต่ละ Service (Pod) ที่ยืดหยุ่นที่สุด! โดยแต่ละ Service จะต้องบอกว่าจะส่งต่องาน (Request) ไปให้ Pod ของ Deployment ไหน

สรุปสั้นๆ… Ingress = LoadBalancer + Route traffic
มองผ่านๆ เหมือนจะคล้ายกับ iptables rules + NAT 55++
แล้ว…อีหวังว่ะ Ingress firewall rules???

สรุปยาวๆ… การติดตั้ง Kubernetes มีหลายวิธีง่าย ๆ ก็ควักตังค์จ่ายใช้แบบ 3rd-party เช่น Google GKE, Amazon EKS, Azure AKS, OpenShift, Rancher เป็นต้นครับ แต่ถ้าสายโหดหน่อยงมเองก็พวก Kubernetes-the-hard-way (manual) ครับ

NAT (Network Address Translation) คืออะไร

ส่วน NAT เป็นคอนเซ็ปต์ออกแบบมาเพื่อให้เราใช้ IP Address ติดต่อสื่อสารอย่างประหยัดประหยัดยังไงหว่า… สมมุติว่าอินเทอร์เน็ตที่เราเชื่อมต่อใช้อยู่บน Router และ Server ได้รับ  IP Address แบบ Static IP Address จากผู้ให้บริการอินเทอร์เน็ต (ISP) ของคุณกำหนดให้และจะไม่มีการเปลี่ยนแปลง (เว้นยกเลิกใช้บริการ)

Image credit: community.tp-link.com, NAT (Network Address Translation)

กรณีที่เซิร์เวอร์ภายในเราเป็นเว็บเซิร์ฟเวอร์ IP Address (192.168.10.10) ทำงานที่พอร์ต 80 และเมลเซิร์ฟเวอร์เป็น IP Address (192.168.10.11) ทำงานที่พอร์ต 25

ตัวอย่างในการทำ NAT ก็เช่น การทำ Static NATคือการแปลง IP Address แบบ Private (192.168.10.10) เข้ากับ IP Address แบบ Static เช่น IP Address (192.168.10.10) จะถูกแปลงไปเป็น 188.188.88.8 เป็นต้น

ดังนั้นผู้ใช้นอกเครื่อข่ายจะเข้าถึงเว็บเซิร์ฟเวอร์ผ่าน IP Address หมายเลข 188.188.88.8 และคุณสมบัติ NAT ที่อยู่บน Router ก็จะทำการ Forward ไปยังเครื่องภายในเครือข่ายของเรา (192.168.10.10)

ส่วนวิธีการทำ NAT บนเครื่องเซิร์ฟเวอร์ เช่น Linux ก็จะใช้ architecture ของ Iptables และ Netfilter ครับ และ NAT ยังมีส่วนที่เป็น nat (DNAT) และ nat (SNAT) อีก ^^

Scroll to top
X