ค้นหาเว็บไซต์

วิธีปรับใช้ Nginx บนคลัสเตอร์ Kubernetes


ในบทความล่าสุดของเรา เราได้พูดคุยถึงวิธีการตั้งค่าและเรียกใช้คลัสเตอร์ Kubernetes แล้ว เรามาพูดคุยกันว่าเราจะใช้บริการ NGINX บนคลัสเตอร์ของเราได้อย่างไร

ฉันจะดำเนินการปรับใช้นี้บนเครื่องเสมือนที่โฮสต์โดยผู้ให้บริการคลาวด์สาธารณะ เช่นเดียวกับบริการคลาวด์สาธารณะหลายๆ บริการ โดยทั่วไปแล้วหลายๆ บริการจะรักษารูปแบบ IP สาธารณะและส่วนตัวสำหรับเครื่องเสมือนของตน

สภาพแวดล้อมการทดสอบ

Master Node - Public IP: 104.197.170.99 and Private IP: 10.128.15.195
Worker Node 1 - Public IP: 34.67.149.37 and Private IP: 10.128.15.196
Worker Node 2 - Public IP: 35.232.161.178 and Private IP: 10.128.15.197

การปรับใช้ NGINX บนคลัสเตอร์ Kubernetes

เราจะดำเนินการปรับใช้นี้จากโหนดหลัก

เริ่มต้นด้วยการตรวจสอบสถานะของคลัสเตอร์ โหนดทั้งหมดของคุณควรอยู่ในสถานะ พร้อม

kubectl get nodes

เราสร้างการใช้งาน NGINX โดยใช้อิมเมจ NGINX

kubectl create deployment nginx --image=nginx

ตอนนี้คุณสามารถดูสถานะการปรับใช้ของคุณได้แล้ว

kubectl get deployments

หากคุณต้องการดูรายละเอียดเพิ่มเติมเกี่ยวกับการปรับใช้ คุณสามารถเรียกใช้คำสั่ง อธิบาย ตัวอย่างเช่น เป็นไปได้ที่จะกำหนดจำนวนเรพลิกาของการปรับใช้ที่กำลังรันอยู่ ในกรณีของเรา เราคาดว่าจะเห็นการจำลอง 1 รายการที่ทำงานอยู่ (เช่น 1/1 แบบจำลอง)

kubectl describe deployment nginx

ขณะนี้การใช้งาน Nginx ของคุณใช้งานได้แล้ว คุณอาจต้องการเปิดเผยบริการ NGINX ไปยัง IP สาธารณะที่สามารถเข้าถึงได้บนอินเทอร์เน็ต

การเปิดเผยบริการ Nginx ของคุณไปยังเครือข่ายสาธารณะ

Kubernetes มีตัวเลือกมากมายในการเปิดเผยบริการของคุณตามฟีเจอร์ที่เรียกว่าประเภทบริการ Kubernetes ซึ่งได้แก่:

  1. ClusterIP – โดยทั่วไปบริการประเภทนี้จะเปิดเผยบริการบน IP ภายใน ซึ่งสามารถเข้าถึงได้ภายในคลัสเตอร์เท่านั้น และอาจเป็นไปได้เฉพาะภายในโหนดคลัสเตอร์เท่านั้น
  2. NodePort – นี่คือตัวเลือกพื้นฐานที่สุดในการเปิดเผยบริการของคุณให้สามารถเข้าถึงได้ภายนอกคลัสเตอร์ของคุณบนพอร์ตเฉพาะ (เรียกว่า NodePort) บนทุกโหนดในคลัสเตอร์ เราจะอธิบายตัวเลือกนี้ในไม่ช้า
  3. LoadBalancer – ตัวเลือกนี้ใช้ประโยชน์จากบริการ Load Balancing ภายนอกที่นำเสนอโดยผู้ให้บริการหลายรายเพื่อให้สามารถเข้าถึงบริการของคุณได้ นี่เป็นตัวเลือกที่น่าเชื่อถือมากกว่าเมื่อคำนึงถึงความพร้อมใช้งานสูงสำหรับบริการของคุณ และมีคุณสมบัติมากกว่าการเข้าถึงเริ่มต้น
  4. ExternalName – บริการนี้เปลี่ยนเส้นทางการรับส่งข้อมูลไปยังบริการภายนอกคลัสเตอร์ ด้วยเหตุนี้บริการจึงถูกแมปกับชื่อ DNS ที่สามารถโฮสต์ออกจากคลัสเตอร์ของคุณได้ สิ่งสำคัญคือต้องทราบว่าสิ่งนี้ไม่ได้ใช้การพรอกซี

ประเภทบริการเริ่มต้นคือ ClusterIP

ในสถานการณ์ของเรา เราต้องการใช้ประเภทบริการ NodePort เนื่องจากเรามีทั้งที่อยู่ IP สาธารณะและส่วนตัว และเราไม่ต้องการโหลดบาลานเซอร์ภายนอกในตอนนี้ ด้วยบริการประเภทนี้ Kubernetes จะกำหนดบริการนี้บนพอร์ตในช่วง 30000+

kubectl create service nodeport nginx --tcp=80:80

เรียกใช้คำสั่ง get svc เพื่อดูข้อมูลสรุปของบริการและพอร์ตที่เปิดเผย

kubectl get svc

ตอนนี้คุณสามารถตรวจสอบได้ว่าหน้า Nginx สามารถเข้าถึงได้บนโหนดทั้งหมดโดยใช้คำสั่ง curl

curl master-node:30386
curl node-1:30386
curl node-2:30386

อย่างที่คุณเห็น คุณสามารถไปที่หน้า “ยินดีต้อนรับสู่ NGINX! ” ได้

การเข้าถึงที่อยู่ IP สาธารณะชั่วคราว

ดังที่คุณอาจสังเกตเห็นว่า Kubernetes รายงานว่าฉันไม่ได้ลงทะเบียน IP สาธารณะที่ใช้งานอยู่ หรือไม่ได้ลงทะเบียน EXTERNAL-IP เลย

kubectl get svc

มาตรวจสอบว่าเป็นจริงหรือไม่ว่าฉันไม่มี IP ภายนอกแนบมากับอินเทอร์เฟซของฉันโดยใช้คำสั่ง IP

ip a

ไม่มี IP สาธารณะอย่างที่คุณเห็น

ตามที่กล่าวไว้ข้างต้น ขณะนี้ฉันกำลังใช้งานการปรับใช้นี้บน เครื่องเสมือน ที่นำเสนอโดยผู้ให้บริการระบบคลาวด์สาธารณะ ดังนั้น แม้ว่าจะไม่มีอินเทอร์เฟซใดที่กำหนด IP สาธารณะ แต่ผู้ให้บริการ VM ก็ได้ออกที่อยู่ IP ภายนอกชั่วคราว

ที่อยู่ IP ภายนอกชั่วคราวคือที่อยู่ IP ชั่วคราวที่ยังคงแนบอยู่กับ VM จนกว่าอินสแตนซ์เสมือนจะหยุดทำงาน เมื่อรีสตาร์ทอินสแตนซ์เสมือน จะมีการกำหนด IP ภายนอกใหม่ โดยพื้นฐานแล้ว นี่เป็นวิธีง่ายๆ สำหรับผู้ให้บริการในการใช้ประโยชน์จาก IP สาธารณะที่ไม่ได้ใช้งาน

ความท้าทายในที่นี้ นอกเหนือจากข้อเท็จจริงที่ว่า IP สาธารณะของคุณไม่คงที่ ก็คือ IP สาธารณะชั่วคราว เป็นเพียงส่วนขยาย (หรือพร็อกซี) ของ IP ส่วนตัว และด้วยเหตุนี้ บริการจะ เข้าถึงได้บนพอร์ต 30386 เท่านั้น นั่นหมายความว่าบริการจะเข้าถึงได้บน URL นั่นคือ 104.197.170.99:30386 ซึ่งถ้าคุณตรวจสอบ เบราว์เซอร์ของคุณ คุณควรจะเห็นหน้ายินดีต้อนรับ

ด้วยเหตุนี้ เราจึงติดตั้งใช้งาน NGINX บนคลัสเตอร์ Kubernetes แบบ 3 โหนดได้สำเร็จ