Context
Încerc să implementez un serviciu API containerizat într-un cluster EKS Fargate și să-l fac să deservească cererile de la adrese de internet externe ca o experiență POC/de învățare supra-proiectată. Întâmpin probleme când vine vorba de a înțelege cum să direcționez traficul de rețea către serviciul Fargate. Îndrumarea mea principală pentru proiect sunt aceste două tutoriale:
Dar lipsa mea de experiență se arată atunci când vine vorba de a decide dacă ar trebui să încerc să configurez un API Gateway, un Application Load Balancer, un ALB Ingress Controller sau să folosesc AWS Load Balancer Controller, cele mai ulterioare încercări ale mele actuale au fost cu cel din urmă. Majoritatea infrastructurii și componentelor EKS/Fargate funcționează folosind fișierele Terraform și „.yaml” pentru a le folosi cu kubectl.
Înființat
Am următoarele implementări cu o singură configurație Terraform care se implementează cu succes:
- Un VPC cu subrețele private și publice și atât gateway-uri nat, cât și vpn activate
- Un cluster EKS cu coredns, kube-proxy, vpc-cni și un singur profil fargate care selectează spațiul de nume al aplicației mele și alocă noduri subrețelelor private ale VPC-ului.
Am următoarele configurații „.yaml” care sunt consecvente între diferitele încercări de metodă:
- namespace.yaml (
fel: spațiu de nume
)
- deployment.yaml (
fel: Desfăşurare
)
- deploy_secret.yaml (
fel: Secret
)
- service.yaml (
fel: Serviciu
, spec:tip: NodePort
)
Sunt bucuros să postez detaliile oricăruia dintre aceste fișiere, dar această postare este deja foarte lungă.
Problema
Voi intra în detalii pentru a încerca să funcționeze controlerul AWS Load Balancer, deoarece acesta a fost cel folosit în tutorialul EKS Workshop, dar vă rog să-mi spuneți dacă cu siguranță ar trebui să folosesc una dintre celelalte metode. De asemenea, ar trebui să prefațez că problemele apar atât cu propria mea aplicație, cât și cu aplicația eșantion, cu nimic schimbat.
După ce îmi implementez infrastructura cu Terraform și cu succes configurați și instalați controlerul AWS LB Îmi creez implementarea și serviciul cu kubectl. Problema începe când încerc să creez obiectul Ingress (?), configurația furnizată arată astfel:
---
apiVersion: networking.k8s.io/v1beta1
fel: Intrare
metadate:
spatiu de nume: spatiul-meu
nume: ingress-myapp
adnotari:
kubernetes.io/ingress.class: alb
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/target-type: ip
specificație:
reguli:
- http:
trasee:
- cale: /*
backend:
serviceName: service-myapp
servicePort: 80
Aceasta returnează o eroare care spune eroare: eroare la validarea „ingress.yaml”:
, am omis detalii deoarece acest lucru este rezolvat în această întrebare conducând la aceasta cerere de tragere. Am reconfigurat fișierul pentru a urma definiția de configurare modificată, care acum arată astfel:
apiVersion: networking.k8s.io/v1
fel: Intrare
metadate:
nume: ingress-myapp
namespace: my-namesace
adnotari:
kubernetes.io/ingress.class: alb
alb.ingress.kubernetes.io/target-type: ip
alb.ingress.kubernetes.io/scheme: internet-facing
specificație:
defaultBackend:
serviciu:
nume: service-myapp
port:
număr: 80
reguli:
- http:
trasee:
- cale: /*
backend:
serviciu:
nume: service-myapp
port:
număr: 80
pathType: ImplementationSpecific
Aceasta are ca rezultat eroarea:
Eroare de la server (InternalError): eroare la crearea „ingress.yaml”: a apărut o eroare internă: nu a reușit apelarea webhook „vingress.elbv2.k8s.aws”: postați „https://aws-load-balancer-webhook-service.kube -system.svc:443/validate-networking-v1-ingress?timeout=10s": termenul limită a contextului a fost depășit
am urmat împreună cu acest post descriind o problemă similară, așa că m-am asigurat că toate referințele mele la LBC foloseau 2.4.0, dar nu au afectat problema. M-am uitat și în aceste două fire (Problemă GitHub și Firul Reddit) dar mă chinui să înțeleg care a fost soluția în aceste cazuri.
Ceea ce deduc este că o parte a procesului nu poate ajunge la o adresă externă atunci când validează noul obiect/configurație de intrare, dar nu sunt sigur ce componentă încearcă să facă acea solicitare și dacă este o permisiune sau o problemă de rețea care împiedică aceasta. Orice îndrumare sau sfaturi sunt apreciate!