И по просьбам трудящихся,Wireguard vpn, локальная сеть и проброс портов для доступа из вне:Оказывается, хороший человек, который все это делал - просто воспользовался мауналом (в этом ничего плохого нет, зачем пилить велосипеды?):https://noostyche.ru/blog/2022/03/29/ispolzovanie-wireguard-klientami-s-serymi-ip/Вводные: локальная сеть комнаты общежития, VPS на самом дешевом хостинге и туториал выше. Для проброса портов использовался скрипт с iptables таблицей nat (https://ru.wikipedia.org/wiki/NAT)Сам скрипт добавления проброса порта:#!/bin/bashEXT_IP="белый IP вашей VPSки"INT_IP="Внутренний адрес VPSки в сети ВПН"EXT_IF=ens3 (интерфейс VPSки, на который приходит внешний трафик)INT_IF=wg_ihor (интерфейс VPN)LAN_IP="Адрес сервера внутри сети VPN, на который нужно отправлять трафик"SRV_PORT=$1iptables -t nat -A PREROUTING --dst $EXT_IP -p tcp --dport $SRV_PORT -j DNAT --to-destination $LAN_IPiptables -t nat -A POSTROUTING --dst $LAN_IP -p tcp --dport $SRV_PORT -j SNAT --to-source $INT_IPiptables -t nat -A OUTPUT --dst $EXT_IP -p tcp --dport $SRV_PORT -j DNAT --to-destination $LAN_IPiptables -I FORWARD 1 -i $EXT_IF -o $INT_IF -d $LAN_IP -p tcp -m tcp --dport $SRV_PORT -j ACCEPTгде SRV_PORT - нужный порт для проброса (первый аргумент при вызове баш скрипта)Также, для персистентности правил на впн сервере (так как они сбросятся после перезагрузки), стоит после отрабатывания скрипта сделать:netfilter-persistent saveа после перезагрузки VPSки:netfilter-persistent startили сделать маленькый скрипт:#!/bin/shnetfilter-persistent startИ засунуть его в крончик:@reboot /path/to/script/netfilter-persist-start.sh
Junior DevOps/SR engineer
@devops_june
Меня зовут Леша и я начинающий DevOps инженер в компании Флант
Похожие каналы
Все →Последние посты
Как какать, когда ты тормоз.Значится, как все было.Развернули с одним очень хорошим человеком на новом сервере гитлаб в докере (по инструкции с офф сайта: https://docs.gitlab.com/ee/install/docker.html). Настроили бэкапы (в будущем планировали переехать из обычного докера в кубы), но не особо придали значения, что у гитлаба кучу разных вариантов бэкапов. Прожили так пару недель.Затем зачесалось кое у кого кое-где (у вашего покорного слуги), снесли к чертовой бабушке докер и накатили кубик (не простой, а золотой https://deckhouse.io/en/). Конечно, и бэкапы, и маунты от гитлаба оставили.Начали жить по-новому и все было хорошо, до момента осознания, что бэкапы были сделаны "неправильно" и их не получится без танцев с бубнами перенести в новый гитлаб (который теперь в кластере k8s). Поняв, что даже бубен племени майя и жертвоприношения не особо помогут с восстановлением бэкапа в новый инстанс гитлаба, решил запустить гитлаб у себя на ноуте (почему на ноуте - потому что куб работает на containerd и deckhouse (который не простой куб, а золотой) не любит containerd и docker на одной машине) и перенести все репы вручную. Перенес на ноут маунты старого докерного гитлаба, начал запускать и столкнулся с ошибкой доступов. Провозившись часа полтора, нашел наконец решение: https://stackoverflow.com/a/48037595. Оказалось, что проблема во внутреннем устройстве файловой системы OSX и что нужно было запускать все из домашней директории, а не из /tmp, как хотел изначально. В общем, потратив всего часа 3-4 на все эти манипуляции, получилось поднять локально гитлаб и достать старые репы. Дальше все пошло легче.Первым делом, сделал себе acess token для доступа к api гитлаба (https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html)Затем, вытащил все проекты, которые уже были в нем, и сохранил в файл их repo_url для клонирования (стоит упомянуть, что все требуемые к восстановлению репы были в одной группе (папке)):curl -sSf -H "PRIVATE-TOKEN: $GITLAB_API_TOKEN" "http://127.0.
Благодаря очень хорошему человеку, у нас появился сервачок, на котором можно делать всякое.В общем, необязательно иметь белый ipшник, чтобы ходить на удалённую машину по ssh (или любому другому протоколу).Берём самый дешёвый хостинг, разворачиваем на нем самую дешёвую виртуальную машину, ставим openvpn (или wireguard).Подключаем сервер в любой сети с доступом в интернет к этому впну, заворачиваем через iptables проброс порта на тачке с впном до вашего сервера и профит:) (ещё надо не забыть сконфигурить в впне роут до подключенного устройства)ssh из любой точки мира до вашего сервера дома без платы за белый IP у провайдера. Подробный мануал, может быть, напишу, а может и нет:)
#оффтоп Сегодня в маршрутке девчушка лет 4-х спросила маму: «А если всем попросить Лёшу не бросать канал на первой неделе после создания, он сможет это сделать?» С мамой плакала половина маршрутки… Леша, как так?!!
#оффтопВ общем, сюда уже несколько дней ничего не выкладывал. Есть, что рассказать, но со временем сложно:(((Может, у кого-то из вас есть какие-то интересные штуки?)

#оффтопКогда выкатил говно-коммит и коллеге пришлось его поправлять
#оффтопЕсли у вас есть вопросы по древнешумерскому и не очень - пожалуйста, пишите, буду рад помочь вам разобраться и самому подтянуть знания:)
#держувкурсе На работе надо было обновить api-версии для TLS сертификатов в k8s у аддона cert-manager c certmanager.k8s.io/v1alpha1 на cert-manager.io/v1 и чтобы понять, в каких репозиториях хранятся эти серты, просто сделал: kubectl get -A certificates.…Теперь про сертификаты.Для того, чтобы безопасно общаться в сети (прикольная статья от Касперского) - нужно иметь что-то, что будет шифровать, аутентифицировать пользователей и проверять целостность доставленных и полученных данных.Для этого и был придуман протокол TLS. Чтобы вы могли им пользоваться, нужно что-то, что будет подтверждать вашу "личность" и шифровать данные - это и делают сертификаты.У kubernetes есть дополнение cert-manager - этот аддон позволяет автоматизировать процесс получения и подписания сертификатов в кластере.Так как kubernetes рабоатет как REST-api, то у него в описании его абстракций (манифестах) есть поле apiVersion, которое говорит кластеру, в какую версию смотреть. Но бывает так, что одна версия устаревает и появляется новая. Об этом пересланный пост:)
Рубрика #держувкурсе или истории из жизни: Поставили задачу - развернуть jmeter в кубах. Для тех, кто не знает, что это за зверь: jmeter - это десктопная утилита для нагрузочного тестирования приложений (У нее, конечно, есть CLI, но его функционал ограничен…Теперь про jmeter.Как вы поняли, контейнер - это процесс. Причем в данном посте говорится о контейнере в кластере k8s. Так вот, этот кластер развернут на нескольких серверах, и, что логично, физического доступа к серверам нет (ну, кроме, возможно пары человек). Поэтому возникает вопрос - как запустить приложение с UI без монитора на рабочей машине (сервере) удаленно?И тут на помощь приходит VNC (Virtual Network Computing) - система удаленного доступа к рабочему столу. Фактически, репозиторий из сообщения выше, позволяет развернуть VNC сервер прямо в контейнере (там не все так просто, но я в этом не разбираюсь. Если кто-то знает, буду рад ликбезу:))И таким образом, можно подключаться через специальные утилиты напрямую к контейнеру удаленно и спокойно им управлять прямо в UI.Но, конечно, без костылей и танцев с бубнами не обойдется:)
Кстати, начал совсем с оркестратора, а классную статью про контейнеры не скинул:)))) https://faun.pub/the-missing-introduction-to-containerization-de1fbb73efc5 И ее перевод: https://habr.com/ru/post/541288/ Для хорошего понимания, советую почитать еще вот…И так, первое, что надо понять из #держувкурсе - это контейнеры. Это, фактически, просто изолированный процесс (с помощью различных технологий ядра операционной системы).Docker - это волшебная утилита, которая позволила стандартизировать описание и запуск контейнеров (докер не первый, и не последний - но сейчас это стандарт)Kubernetes - это ещё более крутая штука, которая вышла из Google. Если коротко, то это набор абстракций для управления, мониторинга и запуска большого количества контейнеров.Но очень советую почитать статейки из сообщения выше и почитать overview документации kubernetes - все должно встать на свои места :)Займет не больше часа на все, но очень круто для саморазвития
#оффтопВчера мне один хороший человек сказал, что писать на древнешумерском - не круто. Поэтому сегодня приехала пояснительная бригада из 7 "Б" и будет разбираться со всем вчера написанным (заодно и сам разберусь, хых)
И в догонку еще #интересныйфакт Вместо того, чтобы открывать питон и через пандас найти уникальные значения какого-то стобца, либо через встроенный yaml-парсер перебирать данные, можно сделать cat filename.tsv | cut -f<номер столбца> | sort [аргументы, в…#держувкурсеНа работе надо было обновить api-версии для TLS сертификатов в k8s у аддона cert-manager c certmanager.k8s.io/v1alpha1 на cert-manager.io/v1 и чтобы понять, в каких репозиториях хранятся эти серты, просто сделал:kubectl get -A certificates.certmanager.k8s.io -l heritage!=deckhouse -o yaml | grep "project.werf.io/git" | awk -F ': ' '{print $2}' | sort -n | uniqПрошелся по полученным репам, поменял версии, выкатил - профит
И в догонку еще #интересныйфактВместо того, чтобы открывать питон и через пандас найти уникальные значения какого-то стобца, либо через встроенный yaml-парсер перебирать данные, можно сделатьcat filename.tsv | cut -f<номер столбца> | sort [аргументы, в зависимости от сортировки] | uniqcat filename.yaml | grep <нужное поле> | awk -F": " '{print $2}' | sort | uniqИ получить то же самое, только быстрее и проще. А потом можно хвастаться, какие вы хацкеры:)
#интересныйфактА вы знали, что линуксовая утилита sed как разделитель для регулярных выражений может использовать не только "/"?До недавнего времени я лепил вот такие штуки:sed -i 's/\/path\/to\/smth\//\/another\/path\/to\/smth\//g' filenameа оказалось, что можно делать все гораздно проще, например:sed -i 's^/path/to/smth/^/another/path/to/smth/^g' filenameОпять же, не будь умных людей вокруг, так и мучался бы с конструкциями \/тредик на стаковерфлоу:https://stackoverflow.com/questions/5864146/using-different-delimiters-in-sed-commands-and-range-addressesМораль: читайте man <команда>
#оффтопДобавил комменты к постам, правда они появятся только для будущих (с этого)Если что, можем похоливарить о предыдущих тут