สิ่งที่ฉันต้องการหลีกเลี่ยงคือการตั้งค่าพ็อดแยกต่างหากเช่น HAProxy ซึ่งกำหนดเส้นทางต่อพอร์ต
คุณไม่จำเป็นต้องตั้งค่า Pod แยกต่างหาก
ตามค่าเริ่มต้น Kubernetes Ingress ไม่รองรับบริการ TCP หรือ UDP แต่ยกตัวอย่าง ทางเข้า nginx
คอนโทรลเลอร์จัดเตรียมกลไกเพื่อรองรับ TCP หรือ UDP บนพอร์ตต่างๆ คุณสามารถเปิดเผยพอร์ต TCP หรือ UDP ได้โดยแก้ไข ConfigMaps
ด้วยเหตุนี้ ตัวควบคุม Ingress นี้จึงใช้แฟล็ก '--tcp-services-configmap' และ '--udp-services-configmap' เพื่อชี้ไปที่ config map ที่มีอยู่ โดยที่คีย์คือพอร์ตภายนอกที่จะใช้ และค่าบ่งชี้ บริการที่จะเปิดเผยโดยใช้รูปแบบ:
<เนมสเปซ/ชื่อบริการ>:<พอร์ตบริการ>:[PROXY]:[PROXY]
ตรวจสอบข้อมูลเพิ่มเติม ที่นี่.
ConfigMap ดังกล่าวควรมีอยู่แล้ว ก่อน การปรับใช้ Ingress Controller
ดังนั้น พยายาม:
1. สร้าง ConfigMap ด้วยการกำหนดค่าบริการ TCP ต่อไปนี้
$ cat ingress-nginx-tcp.yml
api เวอร์ชัน: v1
ประเภท: ConfigMap
ข้อมูลเมตา:
ชื่อ: ingress-nginx-tcp
เนมสเปซ: ค่าเริ่มต้น
ข้อมูล:
"22": targetnamespace/target-service:22
2. ชี้ตัวควบคุม Ingress ไปที่ ConfigMap นี้โดยใช้ --tcp-services-configmap
ตั้งค่าสถานะในการกำหนดค่าดังนี้:
$ kubectl รับการปรับใช้ ingress-nginx-controller -o yaml
apiVersion: แอป/v1
ประเภท: การปรับใช้
ข้อมูลเมตา:
ชื่อ: ingress-nginx-controller
เนมสเปซ: ค่าเริ่มต้น
ข้อมูลจำเพาะ:
...
แม่แบบ:
...
ข้อมูลจำเพาะ:
ตู้คอนเทนเนอร์:
- หาเรื่อง:
- /nginx-ingress-ตัวควบคุม
- --tcp-services-configmap=$(POD_NAMESPACE)/ingress-nginx-tcp
...
3. เปิดเผยพอร์ต 22 ในบริการที่กำหนดไว้สำหรับ Ingress ดังนี้:
$ kubectl รับ svc ingress-nginx-controller -o yaml
api เวอร์ชัน: v1
ชนิด:บริการ
ข้อมูลเมตา:
ชื่อ: ingress-nginx-controller
เนมสเปซ: ค่าเริ่มต้น
ข้อมูลจำเพาะ:
พอร์ต:
- ชื่อ: tcp-22
โหนดพอร์ต: 30957
พอร์ต: 22
โปรโตคอล: TCP
พอร์ตเป้าหมาย: 22
...
ประเภท: LoadBalancer
...
คุณสามารถกำหนดจำนวนพอร์ตที่สามารถเปิดเผยได้โดยใช้วิธีนี้
มีอีกทางเลือกหนึ่งสำหรับผู้ที่กำลังใช้ แผนภูมิหางเสือ ingress-nginx. การกำหนดค่าส่วนใหญ่เสร็จสิ้นแล้ว และคุณเพียงแค่ระบุพอร์ตของคุณ ทีซีพี ส่วนเช่นนี้:
ทีซีพี:
2222: "default/example-tcp-svc:22"
ที่ไหน 2222
เป็นพอร์ตเปิดและ 22
เป็นท่าเรือที่ให้บริการ