Maxim
Защищённый по хешу(например nginx secure link)
Dmitry
Икс реал айпи не работает
в ingress наверное нужно в заголовки X-RealIP добавить
Dmitry
как это сделать - смотреть в доках конкретного контроллера
Maxim
в ingress наверное нужно в заголовки X-RealIP добавить
Не сработал. $remote_addr пустой, или если x-real-ip, то это другая переменная?
Dmitry
Не сработал. $remote_addr пустой, или если x-real-ip, то это другая переменная?
Да можно любой заголовок использовать. Главное чтобы ingress его создавал и туда ip клиента добавлял
Dmitry
Например контроллер от nginx (который от компании nginx) в configMap умеет опцию real-ip-header - которая создает заголовок X-Real-Ip и туда добавляет ip адрес клиента. (https://github.com/nginxinc/kubernetes-ingress/blob/master/docs/configmap-and-annotations.md)
Anonymous
Ява сама может CORS, зачем nginx?
Ява умеет. До неё запрос должен дойти. Есть условный site.my.domain и api.my.domain с одного на другой запросу с нужными заголовками нужно дойти. Но в условной "середине", проходя через ингресс заголовки режутся и получаем ошибку.
Anonymous
а envoy?
Я на него пристально смотрю и хочу попробовать. Он, вроде, все что мне нужно умеет и tcp понимает. Прам интересно.
Denis
а как в kubernets сделать зависмость одной группы подов от другой. Есть микросервисное приложение, хотелось бы запускать микросервисы в некой поледовательности
Anonymous
нахера на ингересе логика ?
Но вообще интересный вопрос. Если есть логика, которая может быть разрулена на уровне http сервера. Зачем трафик с этой логикой пускать внутрь кубера, когда можно разобрать либо до (на l7 балансировщике), либо на входе (ингресе). Тем более если для этого есть аннотации и все такое. А внутри уже максимально просто чтобы работало. Мне думалось, что это одна из задач.
Валентин
а как в kubernets сделать зависмость одной группы подов от другой. Есть микросервисное приложение, хотелось бы запускать микросервисы в некой поледовательности
Оно не микросервисное, раз нельзя их в любом порядке независимо выкладывать. Но не суть. В кубе есть разве что init контейнер, но вот прям чтоб разные поды разных приложений выкатить друг за другом - такого нет
Alexander
Как могу передать реальный айпи с ингресса на под?
Если в облаке, то бывает облачный балансировщик скрывает. Лечится использованием Proxy режима или externalTrafficPolicy: Local на ингресс контроллере
Валентин
ок, спасибо
Можно разве что с ready пробой накостылить. Ну т.е куб выкатил под и дергает у него пробу, а там скрипт, который дергает другое приложение. Как то приложение стало отвечать - так проба стала отдавать ок и типа деплой окончен. Но один фиг запустятся приложения одновременно. А инит-контейнеры нужны для чего-то типа миграций или подготовки файла-конфига и т.п.
Yury
Если на сервисе некому слушать, то падай. Куб переподнимет и однажды все заработает
Yuri
он разом всё будет запускать и рестартить пока не включится
Yuri
супер большие таймеры не пробы не советую, при деплое долго тупить будет
Denis
Вот я и думал, может есть какое нибудь дополнение, которое позволит сделать логику запуска
Yuri
нет необходимости, всё что нужно это правильные exit коды от приложения чтоб куб понимал когда надо передёрнуть
Валентин
Вот я и думал, может есть какое нибудь дополнение, которое позволит сделать логику запуска
Тут просто подход другой, приложения достаточно независимы должны быть. Опять же: когда самый первый раз выкладываешь ладно, но потом ведь авторизация уже запущена и работает, зачем на этозавязываться?
Denis
не совсем удобно, если на ноде нужно запустить 100 pods, из которых 90 будет постоянно перезапускатся и создавать лишнюю нагрузку, которая будет мешать запуску нужных 10 pods
Denis
после запуска обслуживающих 10 pods, уже нет разницы в каком порядке будет запускатся
Yuri
можно накостылить скриптом wait-for-it, или просто курлом стучать и ждать 200 от сервиса, потом запускать остальные сервисы
Yuri
но есть риск эффекта домино когда один из сервисов завалится
Denis
ну вот такого костыля и не охота, полюбому есть какое нить дополнение
Yuri
и ещё, есть liveness таймер, по сути это wait на перезапуск
Denis
наверное readiness
Yuri
можно поставить 20-60 секунд и ждать пока отработает, рестарт лупов меньше.
Denis
ну по сути оно так и есть
Anonymous
после запуска обслуживающих 10 pods, уже нет разницы в каком порядке будет запускатся
А что будет, если запустятся обслуживаююие контейнеры, потом обычные, а потом обслуживающие упадут?
Anonymous
liveness
А с обычныни контейнерами, пока будет liveness отрабатывать - что будет? Они будут работать, или для обычных приложений обслуживающие нужны?
Anonymous
да и liveness просто делает чек сервиса с определенным интервалом. работоспособность он не гарантирует. И единственное что может сделать - рестарт контейнера.
Egor
появился новый вопрос , как заставить чтобы под ходил из вне под кластерным IP, и слушал тоже его?
Anton
появился новый вопрос , как заставить чтобы под ходил из вне под кластерным IP, и слушал тоже его?
использовать headless service, тогда ходить будешь в под напрямую, мимо прослоек
Egor
А просто так не реализовать?
Egor
куб не умеет прибивать ip к поду гвоздями?
Andrey
Всем привет. Помогите разобраться. Ingress nginx валит ошибку в логи: E0724 09:01:40.082357 7 controller.go:704] Failed to determine a suitable ClusterIP Endpoint for Service "kube-public/ext-service": no ClusterIP found for Service "kube-public/ext-service" kube-public/ext-service - это сервис который ведет на внешний IP. "spec": { "type": "ExternalName", "sessionAffinity": "None", "externalName": "1.2.3.4" } Рядом стоит точно такой же кластер, там все выглядит 1 в 1, и ClusterIP нет у этого сервиса, но nginx такой ошибки не валит.
Dmitry
ingress направляет трафик на endpoint'ы в сервисе, соответственно если их в сервисе нет, то он не сможет это делать
Andrey
А что выдает ? kubectl get endpoints ext-service -n kube-public
Error from server (NotFound): endpoints "ext-service" not found такое сообщение в обоих кластерах.
Dmitry
я правильно понял, что у тебя служба называется ext-service в namespace'е kube-public? Если это так, ты видимо не создал endpoints для своей внешней службы. Вроде их нужно создать, иначе куда запросы то направлять сервис должен?
Lucky SB
все верно. Но в одном кластере все ок, в другом ошибку валит nginx. Хотя endpoints нету в обоих кластерах.
Еще раз. скажи версии ингресс-контроллеров в твоих кластерах. Я так понимаю первый кластер не ты настраивал. и щас пытаешься на ощупь повторить настройки ?
Andrey
Еще раз. скажи версии ингресс-контроллеров в твоих кластерах. Я так понимаю первый кластер не ты настраивал. и щас пытаешься на ощупь повторить настройки ?
В обоих кластерах: quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.24.1 оба кластера настраивал я. Причем наливал с одного и того же kubespray вплоть до версии коммита. Я предполагаю что где-то изменил что-то руками в обход yml файла, но service и ingress одинаковые на кластрерах.
Dmitry
все верно. Но в одном кластере все ок, в другом ошибку валит nginx. Хотя endpoints нету в обоих кластерах.
У тебя служба типа externalName, то есть работает на уровне DNS и не имеет endpoints, поэтому направить трафик через ingress мне кажется нельзя (так как ingress'у нужны endpoints службы). Можно попробовать создать службу без селектора и отдельно задать для нее endpoints с именем как у службы (kind: Endpoints). Но возможно есть и лучше решения.
Lucky SB
все верно. для таких извратов создают сервис ClusterIP без селектора и к нему руками создают endpoints с нужными ip адресами
Dmitry
а то что это работает в другом кластере - сомневаюсь. Я бы залез в под ингресса и посмотрел конфиг nginx (в кластере где это работает)
Lucky SB
а сервис типа ExternalName возвращает CNAME
Roman
Привет, подскажите, кто как забирает секреты из Vault с помощью k8s auth method? Есть ли какие-то готовые решения, чтобы тащить через init-container + shared volume (tmpfs), ну либо сразу в окружение через entrypoint какой-нибудь? Или есть более правильный путь?
krakazyabra
Народ, всем привет! есть мысли, почему helm upgrade -f может долдго выполняться? например, закомментил строчку в values.yaml, а helm 2 минуты применяет этот конфиг. и не важно, с ошибкой он, или без.
Roman
решение от BanzaiCloud видел ?
Нет, он ходит через k8s auth и там какой-то из этих двух методов доставки секретов используется? Если да, то я гляну, благодарю за наводку :)
Roman
https://banzaicloud.com/blog/inject-secrets-into-pods-vault/
ага, уже тоже наткнулся, присмотрюсь, ещё раз спасибо
Alim
http://v1.uncontained.io/playbooks/operationalizing/secure-forward-splunk.html
Alim
https://www.youtube.com/watch?v=ADgPjhchscU
Andrey
У тебя служба типа externalName, то есть работает на уровне DNS и не имеет endpoints, поэтому направить трафик через ingress мне кажется нельзя (так как ingress'у нужны endpoints службы). Можно попробовать создать службу без селектора и отдельно задать для нее endpoints с именем как у службы (kind: Endpoints). Но возможно есть и лучше решения.
Я понял в чем у меня прикол. У меня в сервисе в externalName прописан не hostname, а IP. Вероятно по этому оно работает без endpoint. type: ExternalName externalName: 1.2.3.4 А ingress, как оказалось ошибку про отсутствие ClusterIP дает в обоих кластерах
Anton
Перестал работать resolv хостов в k8s baremetal Куда смотреть? В поде # cat /etc/resolv.conf nameserver 10.96.0.10 search site-testing.svc.cluster.local svc.cluster.local cluster.local options ndots:5 # host redis-testing-master 10.96.0.10 ;; connection timed out; no servers could be reached
Anton
kubectl get pods -A |grep coredns
coredns запущен kubectl -n kube-system -l k8s-app=kube-dns get pods NAME READY STATUS RESTARTS AGE coredns-86c58d9df4-pwh6z 1/1 Running 0 90d coredns-86c58d9df4-rrdrg 1/1 Running 0 11h coredns-86c58d9df4-t7xkq 1/1 Running 2 90d в логах такое E0721 22:14:42.632667 1 reflector.go:205] github.com/coredns/coredns/plugin/kubernetes/controller.go:318: Failed to list *v1.Namespace: Get https://10.96.0.1:443/api/v1/namespaces?limit=500&resourceVersion=0: dial tcp 10.96.0.1:443: connect: connection refused
Solyar
Товарищи кто при конфигурации GlusterFS сталкивался с таким? MountVolume.SetUp failed for volume "heketi-storage" : mount failed: mount failed: exit status 1 Mounting command: systemd-run Mounting arguments: --description=Kubernetes transient mount for /var/lib/kubelet/pods/096eddaf-adfc-11e9-8a62-00155d671404/volumes/kubernetes.io~glusterfs/heketi-storage --scope -- mount -t glusterfs -o backup-volfile-servers=1.1.1.1,log-file=/var/lib/kubelet/plugins/kubernetes.io/glusterfs/heketi-storage/heketi-storage-copy-job-w6qbm-glusterfs.log,log-level=ERROR :heketidbstorage /var/lib/kubelet/pods/096eddaf-adfc-11e9-8a62-00155d671404/volumes/kubernetes.io~glusterfs/heketi-storage Output: Running scope as unit run-r6fb833bf2d1d497598b53de9a91ba64b.scope. WARNING: getfattr not found, certain checks will be skipped.. Mount failed. Please check the log file for more details. the following error information was pulled from the glusterfs log to help diagnose this issue: /usr/sbin/glusterfs(_start+0x29)[0x4055f9]
Салтыдык
только с таким и сталкивался. В итоге просто забросил эту затею
krakazyabra
Mik
Кто юзает для куба примитбл инстансы(GKE)? Небыло у вас проблемы что с чего-то поды перестают резолвить днс, скейл в 0 потом обратно возвращает к жизни
Mik
@gcp_ru
спс
Михаил
Порекламирую немного профильный канал)