คำตอบที่ให้ไว้ข้างต้นโดย @Manikanta P ถูกต้อง อย่างไรก็ตามคำอธิบายของ "พอร์ต" อาจไม่ชัดเจนเล็กน้อยในการอ่านครั้งแรก ฉันจะอธิบายด้วยตัวอย่าง:
พิจารณาเว็บแอปพลิเคชันที่มีเนื้อหาคงที่ (หน้าแรกรูปภาพ ฯลฯ ) ที่โฮสต์โดย httpd และเนื้อหาไดนามิก (เช่นการตอบสนองต่อคำขอ ฯลฯ ) ที่โฮสต์โดย tomcat เว็บเซิร์ฟเวอร์ (หรือเนื้อหาคงที่) โดยมีการเสิร์ฟ httpd ที่ท่าเรือ80
ในขณะที่ AppServer (หรือเนื้อหาแบบไดนามิก) 8080
จะเสิร์ฟโดยคราวที่ท่าเรือ
สิ่งที่นักพัฒนาต้องการ: ผู้ใช้ควรสามารถเข้าถึงเว็บเซิร์ฟเวอร์จากภายนอก แต่ไม่ใช่แอปเซิร์ฟเวอร์จากภายนอก
วิธีแก้ไข: ประเภทบริการของเว็บเซิร์ฟเวอร์ใน service.yml จะเป็น NodePort ในขณะที่ประเภทบริการของ Appserver ใน service.yml จะเป็น ClusterIP
รหัสสำหรับ service.yml ของเว็บเซิร์ฟเวอร์:
spec:
selector:
app: Webserver
type: NodePort // written to make this service accessible from outside.
ports:
- nodePort: 30475 // To access from outside, type <host_IP>:30475 in browser.
port: 5050 // (ignore for now, I will explain below).
protocol: TCP
targetPort: 80 // port where httpd runs inside the webserver pod.
รหัสสำหรับ service.yml ของ Appserver
spec:
selector:
app: appserver
type: ClusterIP // written to make this service NOT accessible from outside.
ports:
- port: 5050 // port to access this container internally
protocol: TCP
targetPort: 8080 // port where tomcat runs inside the appserver pod.
นอกจากนี้โปรดทราบว่าในhttpd.conf
ไฟล์ของเว็บเซิร์ฟเวอร์เราจะเขียน IP ที่เปลี่ยนเส้นทางคำขอของผู้ใช้ไปยังเซิร์ฟเวอร์แอป IP นี้จะเป็น: host_IP:5050
.
เกิดอะไรขึ้นที่นี่? ผู้ใช้เขียนhostIP:30475
และเห็นหน้าเว็บเซิร์ฟเวอร์ เนื่องจากกำลังให้บริการโดย httpd ที่พอร์ต80
(targetport) เมื่อผู้ใช้คลิกปุ่มจะมีการร้องขอ คำขอนี้ถูกเปลี่ยนเส้นทางไปยัง Appserver เนื่องจากในhttpd.conf
ไฟล์5050
มีการกล่าวถึงพอร์ตและนี่คือพอร์ตที่คอนเทนเนอร์ของ Appserver และคอนเทนเนอร์ของเว็บเซิร์ฟเวอร์สื่อสารกันภายใน เมื่อ AppServer 8080
ได้รับการร้องขอก็สามารถที่จะตอบสนองการร้องขอเพราะคราวที่ทำงานภายในที่ท่าเรือ