Vlad
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 произвольные...
Lucky SB
но если у вас не http - то service nodeport
Rainbow
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
Vlad
Rainbow
ClusterIP только поменяйте на LoadBalancer или строку убрать. На ihor. правильно же понял?, нет таких функций.
Lucky SB
если у тебя не HTTP/HTTPS трафик, а свой поток, на нестандартном порту, тогда рисуешь сервис типа NodePort
Rainbow
Vlad
Lucky SB
и на каждом узле трафика получаешь iptables-правила, которые натят трафик на твой порт на случайный под
Rainbow
Vlad
Vlad
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
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
Rainbow
Чем?
Vlad
Отдельно стоящий или внутри каждого пода приложения он должен быть?
Rainbow
1+ независимо от подов. Зависит от того, как нужно. Я выше привел пример - будет 1 на каждую ноду.
Lucky SB
Все примеры в доке написаны для namespace: ingress-nginx
Rainbow
Это все причины не использовать kube-system?
Lucky SB
ну для новичка - вполне весомая причина.
ну и чисто эстетически - нефиг класть то, к чему есть доступ снаружи в системный неймспейс
Vlad
Rainbow
в calico есть доступ снаружи, убрать из kube-system?
Rainbow
в apiserver есть доступ снаружи, убрать?
Lucky SB
Vlad
Схема 1 nginx на все поды возможна? 😄
Vlad
Понял. Спасибо большое парни, очень выручили советом!
Vlad
А канонично - иметь nginx в каждом поде?
Vlad
Rainbow
Поставьте через helm как я писал и идите дальше =) Потом станет ясно.
Vlad
Через helm он же поставится на каждое приложение
Rainbow
у вас будет один ingress-controller на весь кластер и больше не думаю, что сейчас нужно.
Vlad
Стало понятнее, спасибо!
Rainbow
Поды это низкоуровневая штука, напрямую ими никто особо не управляет напрямую. Идите дальше по документации, почитаете про Deployment/Daemonset и станет ясно как это масштабируется.
Олег
подскажите хорошую статью/видос, где достаточно доступно рассказывается про подключение подов по локалке в k8s
например, подключение приложения к БД
интересует больше информация по конфигам, как там правильно описать/объявить нужные конекты
Валентин
Валентин
все в k8s, и БД, в том числе
поскольку я поды настраиваю впервые, то для меня пока не совсем понятно, как там настраиваются конекты
но исходя из док, есть небольшое понимание, что там как-то аналогично, как в docker-compose
Да дофига разных способов есть. Советую для начала разобраться в сущностях куба: под, деплой, сервис - в первую очередь, ну и все остальные там по пути всплывут. А потом уже выбирать тот способ конфигурирования, который подойдет лучше для конкретной задачи
Валентин
Олег
я пока не вкурсе всяких нюансов, пока еще разбираюсь
Anton
вброшу: кроме "запустить и посмотреть", что можно применить для планирования ресурсов?
есть разрабы, они пилят свой код и запускают его на своих стендах в контейнерах. думаю как бы упростить сбор входных данных, чтобы они могли дать нагрузку и потом посмотреть максимум потребления за этот период, чтобы мне не делать тоже самое на тестовом стенде
Rainbow
Rainbow
Есть жа апы, которым резко может понадобиться гиг памяти, но в 95%это не нужно и тп.
Rainbow
Заставлять писать спеку на yandex tank только
Anton
тесты с yandex tank есть уже =) но не все аппы - http сервера. есть и такие, которые просто берут из очереди сообщение для обработки.
Rainbow
И с go например нюанс - он горутины запускает на всех процах, даже если в контейнере с лимитами. Там есть решения, но из коробки из-за такого происходит просадка по производительности. Это в общем дело разработчика имхо.
Rainbow
Anton
Rainbow
А потом на хабре пишут что fullstack это остой. fullstack с опытом devops такое отлично делает сам =)
Anton
вопрос не в том как сделать чтобы ПО работало. вопрос в том как собрать данные правильно
Rainbow
выгружать метрики входной назгрузки и выходной. Показать на одном графике.
Rainbow
выходная нагрузка что-то вроде время ответа и тп.