การเปิดเผยบริการ k8s ด้วย tcp

ฉันมีคลัสเตอร์ eks ทุกอย่างพร้อมใช้งานแล้ว ฉันต้องการใช้บริการที่ฟังคำขอ TCP บนพอร์ต 5000 ฉันกำลังพยายามอ่านเกี่ยวกับเรื่องนี้ แต่คำแนะนำทั้งหมดที่ฉันพบใช้ http สำหรับตัวอย่าง ฉันคิดว่าฉันสับสนเล็กน้อยกับแนวคิดที่แตกต่างกันทั้งหมด ถ้าฉันกำหนด:

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  type: LoadBalancer
  ports:
    - port: 5000
      targetPort: 5000
      protocol: TCP

และเรียกใช้สิ่งนี้ (จริง ๆ แล้วใช้หางเสือ) ฉันสามารถเห็นบน aws-console ว่ามีการสร้างโหลดบาลานเซอร์แบบคลาสสิก แต่ฉันไม่สามารถ ping มันได้

โดยพื้นฐานแล้ว ฉันจะสร้าง Network Load Balancer ที่ส่งต่อพอร์ต 5000 ไปยังบริการของฉันได้อย่างไร ดูเหมือนว่านี่ควรจะง่ายโดยฉันไม่สามารถหาวิธีการทำเช่นนี้ได้ ในที่สุดฉันต้องการมี staticIP สำหรับ nlb เพื่อให้สามารถส่งคำขอไปยังพอร์ตนั้นได้ ฉันจำเป็นต้องติดตั้ง nginx (หรือตัวควบคุมทางเข้าอื่น ๆ ) เพื่อให้ใช้งานได้หรือไม่


person J. Doe    schedule 27.01.2021    source แหล่งที่มา
comment
เอกสารเหล่านี้อาจเป็นประโยชน์กับคุณ 1) การปรับสมดุลโหลดเครือข่าย บน Amazon EKS 2) การใช้ Network Load Balancer กับ NGINX Ingress Controller บน Amazon EKS   -  person amitd    schedule 27.01.2021


คำตอบ (1)


ก่อนอื่น คุณกำลังมาถูกทางในการสร้างบริการด้วยประเภท LoadBalancer สิ่งเดียวที่ขาดหายไปเมื่อดูเนื้อหา Service.yaml คือฟิลด์ตัวเลือกในออบเจ็กต์บริการหายไป ซึ่งบริการของคุณไม่ทราบว่าพ็อดใดที่จะส่งต่อการรับส่งข้อมูล ลองเพิ่มดูครับ

หากคุณกำลังจะเปิดเผยบริการเดียวต่อสาธารณะ ประเภท LoadBalancer ก็สมเหตุสมผลดี แต่ถ้าคุณจะมีบริการหลายรายการ การสร้างบริการ LoadBalancer หลายบริการอาจมีค่าใช้จ่ายสูง ในกรณีนั้น Nginx Ingress จะช่วยคุณในการต้องการบริการประเภท LoadBalancer เพียงบริการเดียวเท่านั้น อ้างอิง https://medium.com/better-programming/how-to-expose-your-services-with-kubernetes-ingress-7f34eb6c9b5a

person Rushikesh    schedule 27.01.2021