Контекст
Я пытаюсь развернуть контейнерную службу API в кластере EKS Fargate и заставить ее обслуживать запросы с внешних интернет-адресов в качестве чрезмерно спроектированного POC/опыта обучения. Я сталкиваюсь с проблемами, когда дело доходит до понимания того, как направить сетевой трафик на службу Fargate. Моим основным руководством для проекта являются эти два учебника:
Но моя неопытность проявляется, когда дело доходит до принятия решения о том, стоит ли мне пытаться настроить шлюз API, балансировщик нагрузки приложений, контроллер входящего трафика ALB или использовать контроллер балансировщика нагрузки AWS, мои текущие самые дальние попытки были с последним. У меня большая часть инфраструктуры и компонентов EKS/Fargate работает с использованием Terraform и файлов .yaml для использования с kubectl.
Настраивать
У меня есть следующее развертывание с одной конфигурацией Terraform, которая успешно развертывается:
- VPC с частной и общедоступной подсетями и включенными шлюзами nat и vpn.
- Кластер EKS с coredns, kube-proxy, vpc-cni и одним профилем fargate, который выбирает пространство имен моего приложения и выделяет узлы частным подсетям VPC.
У меня есть следующие конфигурации '.yaml', которые согласуются между разными попытками метода:
- пространство имен.yaml (
вид: пространство имен
)
- развертывание.yaml (
вид: развертывание
)
- deploy_secret.yaml (
вид: Секрет
)
- сервис.yaml (
вид: сервис
, спецификация: тип: NodePort
)
Я рад опубликовать подробности любого из этих файлов, но этот пост уже очень длинный.
Проблема
Я просто подробно расскажу о попытке заставить AWS Load Balancer Controller работать, так как именно он использовался в учебном пособии EKS Workshop, но, пожалуйста, дайте мне знать, если мне определенно следует использовать один из других методов. Я также должен предварить, что проблемы возникают как с моим собственным приложением, так и с образцом приложения без каких-либо изменений.
После того, как я развернул свою инфраструктуру с помощью Terraform и успешно настроить и установить контроллер AWS LB Я создаю развертывание и сервис с помощью kubectl. Проблема начинается, когда я пытаюсь создать объект Ingress (?), предоставленная конфигурация выглядит так:
---
Версия API: networking.k8s.io/v1beta1
вид: Вход
метаданные:
пространство имен: мое пространство имен
имя: вход-myapp
аннотации:
kubernetes.io/ingress.class: альб
alb.ingress.kubernetes.io/scheme: выход в интернет
alb.ingress.kubernetes.io/целевой тип: ip
спецификация:
правила:
- http:
пути:
- дорожка: /*
серверная часть:
serviceName: сервис-myapp
сервисПорт: 80
Это возвращает сообщение об ошибке ошибка: ошибка при проверке "ingress.yaml":
, я опустил детали, потому что это решено в этот вопрос ведущий к этому запрос на вытягивание. Я перенастроил файл, чтобы он соответствовал измененному определению конфигурации, которое теперь выглядит так:
Версия API: networking.k8s.io/v1
вид: Вход
метаданные:
имя: вход-myapp
пространство имен: my-namesace
аннотации:
kubernetes.io/ingress.class: альб
alb.ingress.kubernetes.io/целевой тип: ip
alb.ingress.kubernetes.io/scheme: выход в интернет
спецификация:
по умолчаниюБэкенд:
оказание услуг:
имя: сервис-myapp
порт:
номер: 80
правила:
- http:
пути:
- дорожка: /*
серверная часть:
оказание услуг:
имя: сервис-myapp
порт:
номер: 80
тип_пути: специфика реализации
Это приводит к ошибке:
Ошибка сервера (InternalError): ошибка при создании "ingress.yaml": Произошла внутренняя ошибка: не удалось вызвать веб-перехватчик "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 и Ветка Reddit), но я изо всех сил пытаюсь понять, какое решение было в этих случаях.
Я предполагаю, что какая-то часть процесса не может достичь внешнего адреса при проверке нового входного объекта/конфигурации, но я не уверен, какой компонент пытается сделать этот запрос, и является ли это проблемой разрешения или сети, которая предотвращает Это. Любые рекомендации или подсказки приветствуются!