ClusterIP: บริการสามารถเข้าถึงได้โดย
พ็อด/ บริการใน Clusterถ้าฉันสร้างบริการที่เรียกว่า myservice ในเนมสเปซเริ่มต้นประเภท: ClusterIP ดังนั้นที่อยู่ DNS แบบคงที่ที่คาดการณ์ได้สำหรับบริการจะถูกสร้างขึ้น:
myservice.default.svc.cluster.local (หรือเพียงแค่ myservice.default หรือโดยฝักในเนมสเปซเริ่มต้นเพียง "myservice" จะทำงาน)
และชื่อ DNS นั้นสามารถแก้ไขได้โดยพ็อดและบริการภายในคลัสเตอร์เท่านั้น
NodePort: บริการสามารถเข้าถึงได้โดยไคลเอนต์บน LAN / ไคลเอนต์เดียวกันที่สามารถ ping โฮสต์โหนด K8s (และพ็อด / บริการในคลัสเตอร์) (หมายเหตุเพื่อความปลอดภัยโหนดโฮสต์ k8s ของคุณควรอยู่บนซับเน็ตส่วนตัวดังนั้นไคลเอ็นต์บนอินเทอร์เน็ตจะชนะ ไม่สามารถเข้าถึงบริการนี้)
หากฉันให้บริการที่เรียกว่า mynodeportservice ใน mynamespace namespace ประเภท: NodePort บน 3 โหนดโหนดคลัสเตอร์ จากนั้นให้บริการประเภท: ClusterIP จะถูกสร้างขึ้นและลูกค้าสามารถเข้าถึงได้ภายในคลัสเตอร์ที่ที่อยู่ DNS แบบคงที่ที่คาดเดาได้ดังต่อไปนี้:
mynodeportservice.mynamespace.svc.cluster.local (หรือเพียง mynodeportservice.mynamespace)
สำหรับแต่ละพอร์ตที่ mynodeportservice ฟังบนโหนดในช่วง 30000 - 32767 จะถูกเลือกแบบสุ่ม เพื่อให้ไคลเอ็นต์ภายนอกที่อยู่นอกคลัสเตอร์สามารถเข้าถึงบริการ ClusterIP ที่มีอยู่ภายในคลัสเตอร์ ให้บอกว่าโหนดโฮสต์ 3 K8 ของเรามี IP 10.10.10.1, 10.10.10.2, 10.10.10.3, บริการ Kubernetes กำลังฟังบนพอร์ต 80 และ Nodeport เลือกโดยสุ่มคือ 31852
ลูกค้าที่อยู่นอกคลัสเตอร์สามารถเยี่ยมชมได้ 10.10.10.1:31852, 10.10.10.2:31852, หรือ 10.10.10.3:31852 (เนื่องจาก NodePort ถูกฟังโดยโหนด Kubernetes ทุกโฮสต์) Kubeproxy จะส่งต่อคำร้องขอไปยังพอร์ต 80 ของ mynodeportservice
LoadBalancer: บริการสามารถเข้าถึงได้โดยทุกคนที่เชื่อมต่อกับอินเทอร์เน็ต * (สถาปัตยกรรมทั่วไปคือ L4 LB สามารถเข้าถึงได้โดยสาธารณะบนอินเทอร์เน็ตโดยวางไว้ใน DMZ หรือให้ทั้งโหนดส่วนตัวและสาธารณะ IP และโฮสต์โหนด k8s อยู่บนเครือข่ายส่วนตัวย่อย)
( หมายเหตุ: นี่เป็นบริการประเภทเดียวที่ใช้งานไม่ได้กับการใช้งานของ Kubernetes 100% เช่นเดียวกับ Kubernetes โลหะเปลือยทำงานได้เมื่อ Kubernetes มีการรวมผู้ให้บริการคลาวด์)
หากคุณสร้างบริการ mylbservice จะมี L4 LB VM เกิดขึ้น (บริการ IP ของคลัสเตอร์และบริการ NodePort จะถูกวางโดยปริยายเช่นกัน) เวลานี้ NodePort ของเราคือ 30222 แนวคิดคือ L4 LB จะมี IP สาธารณะที่ 1.2.3.4 และจะโหลดยอดคงเหลือและส่งต่อการรับส่งข้อมูลไปยังโหนดโฮสต์ 3 K8 ที่มีที่อยู่ IP ส่วนตัว (10.10.10.1:30222, 10.10.10.2:30222, 10.10.10.3:30222) จากนั้น Kube Proxy จะส่งต่อไปยังบริการประเภท ClusterIP ที่มีอยู่ภายในคลัสเตอร์
คุณยังถามว่า: ประเภทบริการ NodePort ยังคงใช้ ClusterIP อยู่หรือไม่ ใช่ *
หรือว่า NodeIP เป็น IP จริง ๆ ที่พบเมื่อคุณรัน kubectl เพื่อรับโหนด? ใช่ยัง
ช่วยให้วาดเส้นประระหว่างพื้นฐาน:
ภาชนะอยู่ในฝัก พ็อดอยู่ภายในเรพลิคาชุด เรพลิคาอยู่ภายในการปรับใช้
ในทำนองเดียวกัน:
บริการ ClusterIP เป็นส่วนหนึ่งของบริการ NodePort บริการ NodePort เป็นส่วนหนึ่งของบริการโหลดบาลานซ์
ในแผนภาพนั้นคุณแสดงให้เห็นว่าลูกค้าจะเป็นฝักภายในคลัสเตอร์
externalIPs
เปลี่ยนแปลงสมการที่นี่ได้อย่างไร โดยเฉพาะมันเป็นไปได้ที่จะกำหนดexternalIPs
อาร์เรย์ให้กับClusterIP
-type Service และจากนั้นบริการจะสามารถเข้าถึงได้บน IP ภายนอกเช่นกัน? เมื่อใดที่คุณจะเลือกสิ่งนี้ผ่าน NodePort