บริบท
ฉันกำลังพยายามปรับใช้บริการ API ที่มีคอนเทนเนอร์กับคลัสเตอร์ EKS Fargate และขอให้บริการดังกล่าวจากที่อยู่อินเทอร์เน็ตภายนอกเป็น POC/ประสบการณ์การเรียนรู้ที่ได้รับการออกแบบทางวิศวกรรม ฉันพบปัญหาในการทำความเข้าใจวิธีกำหนดเส้นทางการรับส่งข้อมูลเครือข่ายไปยังบริการ Fargate คำแนะนำหลักของฉันสำหรับโครงการคือบทช่วยสอนสองบทนี้:
แต่ความไร้ประสบการณ์ของฉันแสดงให้เห็นเมื่อต้องตัดสินใจว่าฉันควรลองตั้งค่าเกตเวย์ API, Application Load Balancer, ALB Ingress Controller หรือใช้ AWS Load Balancer Controller ความพยายามที่ไกลที่สุดในปัจจุบันของฉันอยู่ที่สิ่งหลัง ฉันมีโครงสร้างพื้นฐานและส่วนประกอบ EKS/Fargate ส่วนใหญ่ที่ทำงานโดยใช้ไฟล์ Terraform และ '.yaml' เพื่อใช้กับ kubectl
ติดตั้ง
ฉันมีการปรับใช้ต่อไปนี้ด้วยการกำหนดค่า Terraform เดียวที่ปรับใช้สำเร็จ:
- VPC ที่มีซับเน็ตส่วนตัวและสาธารณะ และเปิดใช้งานทั้งเกตเวย์ nat และ vpn
- คลัสเตอร์ EKS ที่มี coredns, kube-proxy, vpc-cni และโปรไฟล์ fargate เดียวที่เลือกเนมสเปซแอปพลิเคชันของฉันและจัดสรรโหนดให้กับซับเน็ตส่วนตัวของ VPC
ฉันมีการกำหนดค่า '.yaml' ต่อไปนี้ที่สอดคล้องกันระหว่างความพยายามในวิธีการต่างๆ:
- เนมสเปซ.yaml (
ชนิด: เนมสเปซ
)
- Deployment.yaml (
ประเภท: การปรับใช้
)
- Deploy_secret.yaml (
ประเภท: ความลับ
)
- service.yaml (
ชนิด:บริการ
, ข้อมูลจำเพาะ: ประเภท: NodePort
)
ฉันยินดีที่จะโพสต์รายละเอียดของไฟล์เหล่านี้ แต่โพสต์นี้ยาวมากแล้ว
ปัญหา
ฉันจะลงรายละเอียดเกี่ยวกับการพยายามทำให้ AWS Load Balancer Controller ทำงาน เนื่องจากเป็นตัวควบคุมที่ใช้ในบทเรียนเวิร์กช็อป EKS แต่โปรดแจ้งให้เราทราบหากฉันควรใช้หนึ่งในวิธีอื่นอย่างแน่นอน ฉันควรเกริ่นด้วยว่าปัญหาเกิดขึ้นกับทั้งแอปพลิเคชันของฉันเองและแอปพลิเคชันตัวอย่างโดยไม่มีอะไรเปลี่ยนแปลง
หลังจากที่ฉันปรับใช้โครงสร้างพื้นฐานกับ Terraform และประสบความสำเร็จ ติดตั้งและติดตั้ง AWS LB Controller ฉันสร้างการปรับใช้และบริการด้วย kubectl ปัญหาเริ่มต้นเมื่อฉันพยายามสร้างวัตถุ Ingress (?) การกำหนดค่าที่ให้มามีลักษณะดังนี้:
---
apiVersion: networking.k8s.io/v1beta1
ชนิด: ทางเข้า
ข้อมูลเมตา:
เนมสเปซ: เนมสเปซของฉัน
ชื่อ: ingress-myapp
คำอธิบายประกอบ:
kubernetes.io/ingress.class: alb
alb.ingress.kubernetes.io/scheme: เชื่อมต่ออินเทอร์เน็ต
alb.ingress.kubernetes.io/target-type: ip
ข้อมูลจำเพาะ:
กฎ:
- http:
เส้นทาง:
- เส้นทาง: /*
แบ็กเอนด์:
ชื่อบริการ: service-myapp
พอร์ตบริการ: 80
สิ่งนี้ส่งคืนข้อผิดพลาดว่า ข้อผิดพลาด: ข้อผิดพลาดในการตรวจสอบ "ingress.yaml":
ฉันละเว้นรายละเอียดเพราะสิ่งนี้ได้รับการแก้ไขใน คำถามนี้ นำไปสู่สิ่งนี้ ดึงคำขอ. ฉันได้กำหนดค่าไฟล์ใหม่ตามข้อกำหนดการกำหนดค่าที่เปลี่ยนแปลง ซึ่งตอนนี้มีลักษณะดังนี้:
รุ่น api: networking.k8s.io/v1
ชนิด: ทางเข้า
ข้อมูลเมตา:
ชื่อ: ingress-myapp
เนมสเปซ: my-namesace
คำอธิบายประกอบ:
kubernetes.io/ingress.class: alb
alb.ingress.kubernetes.io/target-type: ip
alb.ingress.kubernetes.io/scheme: เชื่อมต่ออินเทอร์เน็ต
ข้อมูลจำเพาะ:
แบ็กเอนด์เริ่มต้น:
บริการ:
ชื่อ: service-myapp
ท่า:
จำนวน: 80
กฎ:
- http:
เส้นทาง:
- เส้นทาง: /*
แบ็กเอนด์:
บริการ:
ชื่อ: service-myapp
ท่า:
จำนวน: 80
ประเภทเส้นทาง: การนำไปใช้งานเฉพาะ
ส่งผลให้เกิดข้อผิดพลาด:
ข้อผิดพลาดจากเซิร์ฟเวอร์ (InternalError): เกิดข้อผิดพลาดขณะสร้าง "ingress.yaml": เกิดข้อผิดพลาดภายใน: ไม่สามารถเรียก webhook "vingress.elbv2.k8s.aws": โพสต์ "https://aws-load-balancer-webhook-service.kube -system.svc:443/validate-networking-v1-ingress?timeout=10s": เกินกำหนดเวลาบริบท
ผมก็ตามไปด้วย โพสต์นี้ อธิบายปัญหาที่คล้ายกัน ดังนั้นฉันจึงแน่ใจว่าการอ้างอิงถึง LBC ทั้งหมดของฉันใช้ 2.4.0 แต่ไม่ส่งผลกระทบต่อปัญหา ฉันยังดูทั้งสองหัวข้อนี้ (ปัญหา GitHub และ กระทู้เร้ดดิท) แต่ฉันไม่เข้าใจว่าวิธีแก้ปัญหาในกรณีเหล่านี้คืออะไร
สิ่งที่ฉันอนุมานคือบางส่วนของกระบวนการไม่สามารถเข้าถึงที่อยู่ภายนอกได้เมื่อตรวจสอบความถูกต้องของวัตถุ/การกำหนดค่าขาเข้าใหม่ แต่ฉันไม่แน่ใจว่าส่วนประกอบใดที่พยายามส่งคำขอนั้น และไม่ว่าจะเป็นการอนุญาตหรือปัญหาเครือข่ายที่ขัดขวาง มัน. คำแนะนำหรือคำแนะนำใด ๆ ที่ชื่นชม!