Vlad
Service NodePort...? ingress-controller чаще всего это nginx
А, т.е. можно сделать Ingress == Nginx? Т.е. на уровне ingress-ngix на известные ручки будет проксироваться трафик, а на неизвестные будет 404 от nginx? Т.е. иметь nginx в каждой ноде не обязательно, достаточно его на уровне ingress?
Rainbow
У меня смутное ощущение, что вы запутались с ingress...
Rainbow
есть ingress-controller, который собирает ingress описания и генерит конфиг для чего-то вроде nginx (не обязательно nginx, их много). Вы хотите проксить трафик на поды по удобным ingress описаниям?
Rainbow
Вопрос звучал так, что nginx в виде прокси между клиентом и подом никак не устраивает и что делать.
Rainbow
По задумке работать должно так: Трафик попадает на Сервер -> Ingress k8s -> Service k8s -> Поды. service не участвует, ingress-controller отправляет трафик напрямую в поды (upstream с ip подов)
Lucky SB
а почему ?
Rainbow
Почему не участвует?
Lucky SB
почему не устраивает )
Rainbow
поды не http к примеру, разное бывает. nginx не все умеет проксить
Lucky SB
ну на самом деле nginx умеет проксить TCP/UDP произвольные...
Vlad
По задумке работать должно так: Трафик попадает на Сервер -> Ingress k8s -> Service k8s -> Поды. service не участвует, ingress-controller отправляет трафик напрямую в поды (upstream с ip подов)
Да, видимо я запутался чуток… Из той информации что прочитал в интернете сделал вывод, что: Снаружи данные попадают в Ingress, дальше по rules ингресс проксирует данные в определенные service, а service занимаеься балансировкой и проксирует данные уже в под. Видимо это не верно. Опишите пожалуйста схему как оно на самом деле
Lucky SB
но если у вас не http - то service nodeport
Lucky SB
ingres conntrooler - Это L7 балансировщик. на баре-метал там внутри может быть nginx, envoy, traefik... в амазоне или GCE - управлятор балансировщиком облака.
Vlad
Ага, т.е. igress работает в связке с service? Правильно я понимаю что такие конфиги корректы: apiVersion: v1 kind: Service metadata: name: my-service spec: selector: app: my-app #Обычное go приложение с одной ручкой /_info ports: - port: 80 targetPort: 80 type: ClusterIP ———————— apiVersion: extensions/v1beta1 kind: Ingress metadata: name: my-ingress spec: rules: - host: ih123.vds.myihor.ru http: paths: - backend: serviceName: my-service servicePort: 80
Rainbow
да
Lucky SB
а сервис - это L3 балансировщик - правила iptables ИЛИ ipvs
Rainbow
ClusterIP только поменяйте на LoadBalancer или строку убрать. На ihor. правильно же понял?, нет таких функций.
Lucky SB
если у тебя не HTTP/HTTPS трафик, а свой поток, на нестандартном порту, тогда рисуешь сервис типа NodePort
Lucky SB
и на каждом узле трафика получаешь iptables-правила, которые натят трафик на твой порт на случайный под
Rainbow
если у тебя не HTTP/HTTPS трафик, а свой поток, на нестандартном порту, тогда рисуешь сервис типа NodePort
либо network host либо там может быть нестандартная сеть и тп. Нельзя так однозначно говорить.
Lucky SB
У меня https/https
нублин. а чего тогда пишешь, что у тебя не http
Lucky SB
Vlad
да
Увы, но не работает 🙁 При curl Failed connect. Как буд-то данные не попадают в ingress или дальше не проксируются. Как подобные вещи дебажить? Заметил что в описании ingress не выставился Address, это ок? NAME my-ingress HOSTS ih123.vds.myihor.ru ADDRESS PORTS 80
Lucky SB
а ingress controller ты у себя запускал ?
Rainbow
если вы правильно поставили ingress, то при любом обращении он отдаст default backend - 404 Это есть?
Vlad
если вы правильно поставили ingress, то при любом обращении он отдаст default backend - 404 Это есть?
Нет, нету. Затык с настройкой ingress-controller. Теперь понял куда копать, спасибо!
Rainbow
helm?
Vlad
Пока без него
Vlad
Но возможно придется подключать
Vlad
Последний вопрос на сегодня: ingress контроллер он на уровне ingress или на уровне подов?
Rainbow
Не ставьте ingress руками. Поставьте helm $ cat ingress-values.yaml name: nginx-ingress namespace: kube-system rbac: create: true controller: kind: DaemonSet daemonset: useHostPort: true $ helm install stable/nginx-ingress --name nginx -f ingress-values.yaml --namespace kube-system У вас впереди ещё тонна более важных штук.
Lucky SB
namespace: kube-system это зря )
Rainbow
Чем?
Vlad
Отдельно стоящий или внутри каждого пода приложения он должен быть?
Rainbow
1+ независимо от подов. Зависит от того, как нужно. Я выше привел пример - будет 1 на каждую ноду.
Lucky SB
Все примеры в доке написаны для namespace: ingress-nginx
Rainbow
Это все причины не использовать kube-system?
Lucky SB
ну для новичка - вполне весомая причина. ну и чисто эстетически - нефиг класть то, к чему есть доступ снаружи в системный неймспейс
Rainbow
в calico есть доступ снаружи, убрать из kube-system?
Rainbow
в apiserver есть доступ снаружи, убрать?
Vlad
Схема 1 nginx на все поды возможна? 😄
Lucky SB
Не совсем понял что значит 1+ независимо от подов.
Daemonset - на каждом из узлов, подходящих по меткам запускает под с приложением.
Rainbow
Схема 1 nginx на все поды возможна? 😄
отвал нода с nginx будет плачевным, но можно. Обычно это пару на кластер и балансер сверху, на который идет трафик.
Vlad
Понял. Спасибо большое парни, очень выручили советом!
Vlad
А канонично - иметь nginx в каждом поде?
Rainbow
Поставьте через helm как я писал и идите дальше =) Потом станет ясно.
Vlad
Через helm он же поставится на каждое приложение
Rainbow
у вас будет один ingress-controller на весь кластер и больше не думаю, что сейчас нужно.
Vlad
Стало понятнее, спасибо!
Rainbow
Поды это низкоуровневая штука, напрямую ими никто особо не управляет напрямую. Идите дальше по документации, почитаете про Deployment/Daemonset и станет ясно как это масштабируется.
Олег
подскажите хорошую статью/видос, где достаточно доступно рассказывается про подключение подов по локалке в k8s например, подключение приложения к БД интересует больше информация по конфигам, как там правильно описать/объявить нужные конекты
Олег
А в чем проблема? Ну т.е есть твой под, есть у тебя где-то бд, и? Не коннектится? Или у тебя и бд в кубере тоже?
все в k8s, и БД, в том числе поскольку я поды настраиваю впервые, то для меня пока не совсем понятно, как там настраиваются конекты но исходя из док, есть небольшое понимание, что там как-то аналогично, как в docker-compose
Валентин
все в k8s, и БД, в том числе поскольку я поды настраиваю впервые, то для меня пока не совсем понятно, как там настраиваются конекты но исходя из док, есть небольшое понимание, что там как-то аналогично, как в docker-compose
Да дофига разных способов есть. Советую для начала разобраться в сущностях куба: под, деплой, сервис - в первую очередь, ну и все остальные там по пути всплывут. А потом уже выбирать тот способ конфигурирования, который подойдет лучше для конкретной задачи
Валентин
все в k8s, и БД, в том числе поскольку я поды настраиваю впервые, то для меня пока не совсем понятно, как там настраиваются конекты но исходя из док, есть небольшое понимание, что там как-то аналогично, как в docker-compose
Суть в том, что для решения это задачи не обязательно настраивать что-то, относящееся к поду приложения твоего. Можно например через сущность сервиса настроится
Олег
я пока не вкурсе всяких нюансов, пока еще разбираюсь
Anton
вброшу: кроме "запустить и посмотреть", что можно применить для планирования ресурсов? есть разрабы, они пилят свой код и запускают его на своих стендах в контейнерах. думаю как бы упростить сбор входных данных, чтобы они могли дать нагрузку и потом посмотреть максимум потребления за этот период, чтобы мне не делать тоже самое на тестовом стенде
Rainbow
Есть жа апы, которым резко может понадобиться гиг памяти, но в 95%это не нужно и тп.
Rainbow
Заставлять писать спеку на yandex tank только
Anton
тесты с yandex tank есть уже =) но не все аппы - http сервера. есть и такие, которые просто берут из очереди сообщение для обработки.
Rainbow
И с go например нюанс - он горутины запускает на всех процах, даже если в контейнере с лимитами. Там есть решения, но из коробки из-за такого происходит просадка по производительности. Это в общем дело разработчика имхо.
Anton
вы сами не можете на 100% адекватно это выяснять.
вот в том и задача, приблизиться к этому
Rainbow
А потом на хабре пишут что fullstack это остой. fullstack с опытом devops такое отлично делает сам =)
Anton
паблишера же написать строк 10-20.
как дать нагрузку - ясно. не ясно как потом оценить. cadvisor сажать рядом? или еще как то оценить создаваемую нагрузку?
Anton
вопрос не в том как сделать чтобы ПО работало. вопрос в том как собрать данные правильно
Rainbow
выгружать метрики входной назгрузки и выходной. Показать на одном графике.
Rainbow
выходная нагрузка что-то вроде время ответа и тп.