Kirill
всем привет. кто-нибудь юзает не nginx ingress controller? на чем выбор основан?
Puma
судя по инсталяциям он уже стандарт дефакто
Mr.
на том что есть одно знакомое слово - nginx
Anton
Я создаю переменную окружения в поде так:
- name: MY_NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeNameно мне нужно обработать значение переменной и перезаписать ее к моменту, когда entrypoint контейнера уже запустится. Можно как-то сделать?
Andor
что куда тебе надо переписать-то?
Anton
у меня создастся в поде переменная "MY_NODE_NAME", так? Она будет иметь некое значение. Например myhost.example.com. Мне нужно сделать на нее sed "s/\.*//", чтобы в ней остался только "myhost". Чтобы потом когда процесс контейнера ее будет читать, там остался только myhost.
Andor
ты в курсе что ты хочешь странного?
Anton
процесс не знает, в каком кластере он запущен, поэтому работает с переменной как есть и сам не знает как ее обрабатывать. Как ее обрабаывать может знать только манифест, потому что манифест это точка деплоя в специфический кластер.
Anton
в одном кластере клиентский сертификат ноды в CN имеет "myhost.example.com", в другом кластере — "myhost". Откуда процессу об этом знать.
Andor
а зачем там иметь не fqdn?
Anton
понятия не имею зачем kubespray так ставит
Anton
может на конкретной операционке "hostname -f" не так сработало при установке (если kubespray его использует)
𝚔𝚟𝚊𝚙𝚜
Anton
Anton
я таки думаю, это kubespray так сделал. Сертификат разве кублет генерит?
Anton
в 1.10
𝚔𝚟𝚊𝚙𝚜
𝚔𝚟𝚊𝚙𝚜
𝚔𝚟𝚊𝚙𝚜
Сертификат вообще невозможно сгенерить под singlename емнип
Vadim
Vadim
так что hostname == hostname -f
Vadim
разве что спуфить через аргументы кубелета
Vadim
это всё счастье с 1.10
Vadim
𝚔𝚟𝚊𝚙𝚜
При этом hostname -f показывает валидный fqdn
Vadim
https://github.com/golang/go/blob/50bd1c4d4eb4fac8ddeb5f063c099daccfb71b26/src/os/sys_linux.go#L12-L53
Andor
я тут короче с солтом недавно развлекался
Andor
пришлось аж в трёх местах ему прописывать чтобы он нормально стал определять fqdn
Andor
точнее, имя ноды из fqdn
𝚔𝚟𝚊𝚙𝚜
/proc/sys/kernel/hostname - конечно же
𝚔𝚟𝚊𝚙𝚜
вот там singlename у меня
Vadim
или Uname сискол это вернул
𝚔𝚟𝚊𝚙𝚜
𝚔𝚟𝚊𝚙𝚜
это два разных подхода, redhat там fqdn хранит, но обычно там singlename
https://serverfault.com/questions/331936/setting-the-hostname-fqdn-or-short-name
Vadim
мы всюду суем fqdn, да, 1) сюрпризов меньше, 2) с клаудпровайдерами проще
Vadim
в апстриме конечно же можно выстрелись себе в ногу, не знал что в дебиане это дефолтная опция
𝚔𝚟𝚊𝚙𝚜
А домен должен через /etc/hosts конфигуриться
Vadim
ну да, потом получишь сертификат без fqdn, атакующему будет очень удобно
Grey
народ ктонить ранчер 2й юзает?
Grey
как оно?
Andor
быковато
𝚔𝚟𝚊𝚙𝚜
Grey
ну хоть не мумувато
𝚔𝚟𝚊𝚙𝚜
Grey
мне он напоминает coreos
Игорь
потом я его удалил и поставил кубер
𝚔𝚟𝚊𝚙𝚜
Vadim
я предполагаю ты утащил сертификат с одной ноды, он валидный
𝚔𝚟𝚊𝚙𝚜
А если есть доступ к мастерам то и с fqdn прокатит точно так же как и м singlename. Apiserver не делает проверку по хостнейму при обращении с ноды
𝚔𝚟𝚊𝚙𝚜
если сертификат валидный - тебя пропустят
𝚔𝚟𝚊𝚙𝚜
хотя я конечно могу ошибаться, не вижу причин почему это не будет работать
Vadim
hostname.foo коннектится с сертификатом hostname, его пропускают и добавляют новую ноду hostname.foo
Vadim
hostname.fqdn будет послан, потому что такая нода уже есть
𝚔𝚟𝚊𝚙𝚜
Vadim
не будет
думаешь две одинаковых добавит?
𝚔𝚟𝚊𝚙𝚜
я постоянно реджойню ноды при перезагрузке, они всегда используют старые имена
𝚔𝚟𝚊𝚙𝚜
если ноды нет, она добавится
𝚔𝚟𝚊𝚙𝚜
хотя эта логика может быть заложена в kubeadm
Vadim
так одна, откуда серт утащен есть
Vadim
и она, предположительно, жива
Vadim
впрочем это и правда слабый вектор, особенно если случайно утащил временный серт и все надо сделать за 20 минут
𝚔𝚟𝚊𝚙𝚜
произойдет следующее:
фейковый kubelet при джойне обновит node.status в api-server, из-за чего сможет получить какие-то джобы и обновлять состояние, но старый кубелет тоже по прежнему будет получать джобы и обновлять состояние. Возникнет достаточно интересный конфликт. Но это произойдет в любом случае используешь ты fqdn в сертах или нет :)
Alexey
Всем ку. Вопрос по хелм. Заметил странное поведение.
{{- if .Values.image.repository -}}
image: "{{ .Values.image.repository }}:{{ .Chart.AppVersion }}"
{{- else -}}
image: "{{ .Values.defaults.image.repository }}:{{ .Chart.AppVersion }}"
{{- end -}}
Ругается на отсутствующую .Values.image.repository, ну как бы да, для этого else и есть у меня
В описании
an empty string
a nil (empty or null)
an empty collection (map, slice, tuple, dict, array)
Потому делаю правильно, кто стакивался, как выходить ?
Почему то конструкция вида
{{ .Values.image.repository | default .Values.defaults.image.repository }} тут не работает.
Alexey
Вот ошибка
executing "index/templates/deployment.yaml" at <.Values.image.reposi...>: can't evaluate field repository in type interface {}
Andor
ну у тебя же вроде отсутствующий ключ в коллекции?
Andor
это не то же самое
Andor
но лучше доку читануть, да
Alexey
Ну как бы да, идея такая, если я set-м проставляю image.repository в CI, то он должен брать и использовать путь из ci, иначе брать из секции defaults
Andor
{{if eq (index .MyMap "KeyThatDoesntExist") "mystring"}}
{{.}}
{{end}
Andor
тебе примерно такое надо иметь в if
Alexey
стринга я не знаю заранее, не знаю с чем сравнивать
Отделение Bereke Bank