TG Telegram Group Link
Channel: DevOps
Back to Bottom
Forwarded from Machinelearning
🚀 VS Code трансформируется в опенсорнсый ИИ-редактор!

Команда Visual Studio Code объявила о планах трансформировать VS Code в редактор с открытым исходным кодом для работы с ИИ.

Конкуренция - двигатели прогресса! Где-то напряглась команда Cursor 🤓

🔗 Подробности: aka.ms/open-source-ai-editor

#VSCode #OpenSource #ИИ #Разработка #Сообщество
🔧 DevOps Pro Tips: Оптимизация контейнеров как у SRE Google

Контейнер — это не просто Dockerfile. Это микросистема, и если её не настраивать — она будет жечь CPU, RAM и SSD без пользы. Вот 🔥 продвинутые советы по настройке контейнеров:

Ограничь права контейнера

docker run --read-only --cap-drop=ALL --security-opt no-new-privileges ...

▪️ --read-only — защищает файловую систему
▪️ --cap-drop=ALL — удаляет лишние привилегии
▪️ no-new-privileges — запрещает повышение прав в процессе

Установи лимиты CPU и памяти

docker run --memory="512m" --cpus="1.5" ...

▪️ Не давай контейнеру жрать весь хост — особенно на multi-tenant нодах
▪️ Используй cpu-shares, cpuset, ulimits для тонкой настройки

Чисти от мусора
- Используй multi-stage builds — минимизируй размер образа
- Оставляй только необходимые бинарники и конфиги
- Пример:

FROM golang:1.22 as builder
WORKDIR /app
COPY . .
RUN go build -o app

FROM alpine:3.19
COPY --from=builder /app/app /bin/app
ENTRYPOINT ["/bin/app"]


Используй distroless или Alpine
- Образы типа gcr.io/distroless/static — без шелла, package manager и мусора
- alpine — легче, но следи за совместимостью с glibc

Пропиши healthcheck

HEALTHCHECK --interval=30s --timeout=3s CMD curl -f http://localhost:8080/health || exit 1

▪️ Kubernetes будет перезапускать только при реальных сбоях

Подключи observability
- Встраивай Prometheus exporter
- Логи — в stdout/stderr (для kubectl logs и EFK/PLG стека)
- Используй otel, если нужен tracing

Проверь, чем занят контейнер

docker top <container>
docker inspect --format '{{ .HostConfig }}' <container>

▪️ Вовремя заметишь, если процесс форкает что-то лишнее или идёт через /dev

💡 Эти практики критичны, если:
- Вы деплоите в прод с autoscaling
- Контейнеры крутятся в k8s или Fargate
- Вам важно сократить издержки на ресурсы и повысить безопасность

Минимальный, безопасный, ограниченный и наблюдаемый контейнер — залог стабильности продакшна.

@devopsitsec
⚡️ OneUptime — open-source-платформа для мониторинга всего и сразу. Этот инструмент предлагает готовый комплект: от мониторинга uptime до управления инцидентами. Редкий случай, когда open-source-проект не уступает коммерческим аналогам по функционалу.

Особенность проекта в глубокой интеграция компонентов. Например, при падении сервиса система автоматически создаёт инцидент, уведомляет ответственных через эскалацию и обновляет статус-страницу. Есть даже встроенный APM с трейсами и метриками производительности. Развернуть можно на Kubernetes или через Docker Compose.

🤖 GitHub

@devopsitsec
Шпаргалка_по_командам_Linux_для_среднего_и_продвинутого_уровня_1.pdf
149.2 KB
🖥 Шпаргалка по командам Linux для среднего и продвинутого уровня

Сохраняйте себе, чтобы не потерять

📌 Полная версия онлайн
Please open Telegram to view this post
VIEW IN TELEGRAM
🏰 SSHportal — умный шлюз для SSH-доступа без головной боли. Этот проект превращает управление SSH-доступом в интуитивный процесс. Вместо ручного редактирования authorized_keys на каждом сервере, SSHportal централизует контроль через единую точку входа с ролевой моделью доступа.

Инструмент имеет встроенную систему инвайтов: можно приглашать пользователей без обмена ключами вручную. Под капотом SQLite/MySQL для хранения данных и полная совместимость с обычными SSH-клиентами.

🤖 GitHub

@devopsitsec
🧠 Claude Opus решил баг, с которым я боролся почти 5 лет — личная история разработчика C++ и бывшего старший инженер FAANG с

💬 Один из пользователей на Reddit поделился настоящим инсайтом: после многолетней борьбы с трудноуловимым багом, ему наконец-то помог… Claude Opus.
Баг был из тех, что появляются раз в полгода, ведут себя нестабильно, и каждый раз ускользают от дебаггера. В отчаянии он просто описал проблему Claude-у — без стеков, логов, трейсинга. И внезапно получил абсолютно точный ответ: баг оказался связан с тем, как обрабатывались замыкания внутри лямбд, теряющих доступ к нужному контексту после асинхронного вызова.

🤯 Результат: 5 лет неуловимого бага ушли за 30 секунд диалога с ИИ.

📌 Это не просто красивая история. Она показывает, как LLM уровня Opus начинает конкурировать не только с поиском и документацией — но и с самим процессом инженерного мышления.

🔍 Что можно вынести:
• Не бойся формулировать даже "глупые" вопросы — хорошие модели часто угадывают суть
• Застрял на баге? Попробуй объяснить его как человеку — иногда именно это помогает найти решение
• Хороший ИИ не заменит опыт, но может стать отличным напарником по отладке

📎 Оригинальный пост на Reddit

@devopsitsec
🌒 LunaTrace — бесплатный open-source инструмент для аудита безопасности зависимостей. Он автоматически сканирует зависимости в проектах, выявляет уязвимости и интегрируется с GitHub Pull Requests, чтобы предупреждать о рисках до деплоя.

Главное преимущество проекта — это гибкость развёртывания. Можно использовать готовый SaaS или запустить свою инстанс-версию. Помимо мониторинга, в арсенале есть Log4Shell CLI для поиска и исправления уязвимых JAR-файлов и блог с разборами security-проблем.

🤖 GitHub

@devsecops
🔍 Google Cloud представил **KHI (Kubernetes History Inspector)** — инструмент, который превращает логи Kubernetes в интерактивную визуальную историю.

🧠 Зачем нужен KHI:
• Когда что-то ломается в кластере, часто приходится разбираться по сырым логам, и это ад
• KHI решает эту проблему: загружает все события в память и строит понятную временную шкалу всего, что происходило с ресурсами

🚀 Что умеет:
• Визуализирует логи как временную шкалу: деплой, рестарты, скейлы, падения
• Поддерживает фильтры и поиск — быстро находит нужные события
• Работает без агентов — использует уже существующие логи
• Показывает историю манифестов, состояния контейнеров, эвенты подов и многое другое

🛠 Подходит для:
• Отладки инцидентов и RCA (root cause analysis)
• Разработчиков и SRE, которым важно понимать, что именно пошло не так и когда

📎 GitHub: https://github.com/GoogleCloudPlatform/khi


@devopsitsec
⚡️ Composerize — мгновенное преобразование docker run в docker-compose. Composerize решает проблему нечитаемых строк с десятками флагов одним движением — конвертирует запуск контейнера через CLI в аккуратный compose.yaml.

Инструмент доступен как, так и npm-пакет. Под капотом — парсинг флагов с их корректным переносом в YAML-структуру. Проект особенно удобен, когда нужно интегрировать новый сервис в существующий стек: Composerize умеет мержить конфиги, поддерживает разные версии Compose и даже настраивает отступы.

🤖 GitHub

@DevopsDocker
🗄 YTsaurus теперь как сервис в Yandex Cloud

Платформа для распределенной обработки и хранения данных, которую раньше использовали внутри Яндекса, теперь доступна внешним командам.

Поддерживает работу с эксабайтами, масштабируется до миллиона CPU, работает с ClickHouse, Spark, MapReduce. Можно строить пайплайны, гонять аналитику, собирать хранилища и обрабатывать логи - всё в одной системе.

Стриминговые, структурированные и неструктурированные данные - поддержка на уровне ядра. Подходит как для тяжёлых ML-задач, так и для типовых ETL-процессов.
Инфраструктура управляется как сервис - без ручного развертывания и поддержки.

@devopsitsec
Media is too big
VIEW IN TELEGRAM
История создания Kubernetes — от внутреннего инструмента Google до мировой революции
Когда в 2014 году Google выложил в открытый доступ свой внутренний проект под странным именем Kubernetes, мало кто осознал, что это начало настоящей контейнерной революции. Но за этой лаконичной оболочкой скрывалась мощь, проверенная на миллиардах пользователей Google Search, Gmail и YouTube.

🔥 Всё началось с Borg
Внутри Google уже с 2003 года существовала система управления контейнерами — Borg. Это был секретный, монструозный и невероятно мощный оркестратор, позволявший запускать сотни тысяч задач на десятках тысяч серверов. Но Borg был закрыт, сложный и не предназначен для внешнего мира.

💡 Факт: Borg умел автоматически лечить упавшие сервисы задолго до того, как "self-healing" стал модным словом в DevOps.

🚀 Почему Kubernetes?
Google хотел подарить миру упрощённую, но эффективную версию Borg — с понятным API, без проприетарных завязок и... с хорошим маркетингом. Так родился Kubernetes — проект с открытым исходным кодом, построенный на Go, и вдохновлённый Borg и его экспериментальным "младшим братом" — Omega.

🔷 Факт: Название "Kubernetes" пришло из греческого языка и означает "штурман". Это намёк: Kubernetes управляет "флотом" контейнеров как кораблями.

👨‍💻 Кто стоял у истоков?
Изначально за Kubernetes отвечали три инженера Google:

Joe Beda

Brendan Burns

Craig McLuckie

Позже к ним присоединился Brian Grant, архитектор Borg, и вскоре десятки инженеров со всего мира стали развивать проект под крылом Cloud Native Computing Foundation (CNCF).

🧨 Факт: Kubernetes стал самым активным проектом на GitHub в 2015 году — больше коммитов, чем у Linux!

🌐 Как Kubernetes завоевал мир?
🔄 Контейнеры стали стандартом благодаря Docker, но их нужно было как-то управлять — и тут вошёл Kubernetes.

🎯 Kubernetes оказался универсальным: он мог запускаться на ноутбуке, в дата-центре, в облаке, даже на Raspberry Pi.

💥 Все большие игроки — AWS, Azure, IBM, Red Hat — вынуждены были поддержать Kubernetes, иначе рисковали остаться вне игры.

📦 Экосистема вокруг Kubernetes выросла в десятки раз: Helm, Istio, Prometheus, ArgoCD, Knative — всё это родилось в его тени.

🛡 Факт: Kubernetes — это не просто оркестратор. Это операционная система для облака. Она изменила сам подход к разработке: теперь приложения проектируются "cloud-native", а не "серверные".

⚙️ Kubernetes сегодня
Сейчас Kubernetes:

Работает в каждом втором крупном enterprise-проекте

Поддерживается всеми облачными провайдерами

Является де-факто стандартом для микросервисной архитектуры

Вдохновил создание K8s-альтернатив: Nomad, OpenShift, K3s, и других

💡 Вывод
Kubernetes — это не просто проект, это движение, начатое с утечки идей из недр Google и переросшее в открытую революцию управления инфраструктурой. Как Git изменил подход к коду, так Kubernetes изменил подход к запуску программ. Сегодня без Kubernetes — ни один серьёзный DevOps не чувствует себя в безопасности.

Хочешь больше таких историй из мира технологий? 😉

https://www.youtube.com/shorts/CNVdG6LS9kE
🌟 Selenium Docker Images готовые контейнеры для автотестов
Для тех, кто устал настраивать Selenium Grid вручную, сообщество Selenium выкатило официальные Docker-образы. В одном контейнере уже собраны браузеры (Chrome, Firefox, Edge), VNC для отладки и сам Selenium Server — остаётся только запустить тесты.

Инструмент особенно удобен для CI/CD:
— Поддержка multi-arch (amd64, arm64)
— Готовые теги для beta-версий браузеров
— Встроенная запись видео тестов

Запуск элементарный:

docker run -d -p 4444:4444 --shm-size=2g selenium/standalone-chrome


🤖 GitHub

@DevopsDocker
🚀 go-svelte-spa — простой шаблон для Go + Svelte SPA

🔗 https://github.com/joelseq/go-svelte-spa

Этот проект — минималистичный стартовый шаблон, который объединяет мощь Go и фронтенд на Svelte в одном репозитории. Отлично подойдёт для быстрого создания одностраничных приложений (SPA) с современным интерфейсом и надёжным сервером.

🧩 Что внутри:

Go-сервер:
- Отдаёт статические файлы фронтенда
- Поддерживает SPA-маршруты через fallback на index.html

Svelte SPA:
- Структура с App.svelte, маршрутизацией и Vite
- Лёгкий, быстрый и понятный фронтенд

Makefile + Vite + Docker (опционально)

⚙️ Как запустить:


# Сборка фронта
cd frontend
npm install
npm run build

# Запуск Go-сервера
cd ..
go run main.go


📦 Кому подойдёт:
- Go-разработчикам, которым нужен современный UI
- Тем, кто хочет обойтись без сложных фреймворков
- Для MVP, pet-проектов, админок и внутренних тулов

🔥 Если хочешь быстрый и удобный стек без лишнего — go-svelte-spa отличный выбор.

📁 Репозиторий: https://github.com/joelseq/go-svelte-spa
Forwarded from Golang
🖥 Представлен язык программирования Gauntlet, расширяющий возможности Go

Доступен первый альфа-выпуск языка программирования Gauntlet, надстройки над языком Go, решающей некоторые архитектурные проблемы и добавляющей дополнительную функциональность.
Программы на языке Gauntlet поддерживают все возможности языка Go, транслируются в представление на языке Go и интегрируются с существующей экосистемой Go без необходимости задействования обвязок (binding).

Развиваемый проектом инструментарий написан на языке F# и распространяется пол лицензией GPLv3. Для работы с кодом предоставляется дополнение к редактору VSCode.

Решаемые в Gauntlet проблемы:

• Назойливый вывод ошибок, связанных с неиспользуемыми переменными (Gauntlet добавляет для всех неиспользуемых переменных заглушки вида "_ = a").
• Раздутый код для обработки ошибок. В Gauntlet вместо условных блоков вида "if err != nil" используются однострочные выражения "try-with".
• Назойливый способ импорта и экспорта (например, в Go необходимо, чтобы экспортируемые имена начинались на заглавную букву).
• Отсутствие тенарного оператора. В Gauntlet можно использовать выражения вида 'let properWord = @String len(lines) > 1 ? "lines" : "line"'.
•Отсутствие синтаксиса switch-case.
• Усложнённые циклы "for". В Gauntlet можно писать "for let _, c in "Hello" {" вместо "for _, c := range "Hello" {".
• Необычный оператор присваивания (":=" для одновременного объявления и инициализации переменных; "=" для изменения значения уже объявленных переменных).
• Невозможность вызова функций по цепочке (в Gauntlet поддерживается вызов вида 'let trimmedLines = fileContentStrVersion => strings.trimSpace(_) => strings.split(_, "\n")'.

Расширенные возможности Gauntlet:

• Синтаксис "when-is" похожий на switch.case, но манипулирующий выражениями.
• Поддержка pipe-каналов, позволяющих по цепочке пропускать значение через несколько выражений или функций. например "10 => add(_, 10) => add(_, 30) => divide(_, 2)".
• Выражения "try .. with" и "force .. with".
• Выражение "wrapper" для создания псевдонимов типов (например. "wrapper Int Dollars").


✔️ Github
✔️ Gauntlet
✔️ Новость

#Gauntlet #golang

@golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
🛠 25+ FTP-вопросов для собеседований: разбор с ответами

Если ты DevOps-инженер, системный администратор или сетевой специалист, то протокол FTP (File Transfer Protocol) тебе наверняка знаком. На собеседованиях часто задают вопросы по его устройству, безопасности и конфигурации. Команда Tecmint собрала ключевые FTP-вопросы с ответами, которые стоит выучить. Вот основные из них:

🔹 Что такое FTP?
File Transfer Protocol — это стандартный сетевой протокол, используемый для передачи файлов между клиентом и сервером по TCP/IP.

🔹 На каких портах работает FTP?
По умолчанию:
• Порт 21 — управляющее соединение
• Порт 20 — передача данных (в активном режиме)

🔹 Чем отличается активный и пассивный режим FTP?
В активном режиме сервер инициирует соединение для передачи данных, в пассивном — клиент сам подключается к случайному порту сервера.
💡 Пассивный режим чаще используют за NAT/фаерволами.

🔹 Что такое анонимный FTP?
Это доступ к FTP-серверу без пароля (обычно используется anonymous или ftp в качестве логина). Часто применяется для публичных загрузок.

🔹 Какие популярные FTP-серверы в Linux?
• vsftpd
• proftpd
• Pure-FTPd

🔹 Как обеспечить безопасность FTP?
Обычный FTP передаёт данные в незашифрованном виде. Для защиты используют:
• FTPS (FTP over SSL/TLS)
• SFTP (через SSH) — это вообще другой протокол
Также: ограничение по IP, chroot jail, шифрование паролей, запрет анонимного доступа.

🔹 Различия между FTP и SFTP?
• SFTP работает через SSH (порт 22)
• Обеспечивает полное шифрование
• Безопаснее, но несовместим с обычными FTP-клиентами

🔹 Какие команды FTP стоит знать?
get, put — загрузка и выгрузка
ls, cd, pwd, mget, mput
passive / active — переключение режима

🔹 Как ограничить пользователя FTP в своём каталоге?
Через chroot jail: chroot_local_user=YES в vsftpd.conf

🔹 Как протестировать FTP-сервер?
Можно использовать:
ftp (CLI)
lftp — продвинутый CLI
• GUI-клиенты: FileZilla, WinSCP

📚 Все 25+ вопросов с ответами ты найдёшь тут → https://www.tecmint.com/ftp-interview-questions-and-answers/

⚙️ Отличный чеклист для подготовки к собеседованию или аудиту инфраструктуры!

#FTP #DevOps #Linux #Собеседование #Sysadmin #SFTP #Безопасность


@devopsitsec
🎯 Задача для продвинутых DevOps-инженеров: «Неуловимый таймаут»

🧠 Уровень: Senior DevOps / SRE / Infrastructure Architect
📦 Стек: Kubernetes, Docker, NGINX, Istio, PostgreSQL, Prometheus, Cloudflare

📍 Ситуация:

Продакшен-приложение периодически отдаёт 504 Gateway Timeout на определённые API-запросы. Проблема:
- возникает только при внешнем трафике (через Cloudflare)
- не воспроизводится в staging-окружении
- не зависит от нагрузки — может случиться в 3 часа ночи
- происходит на разных endpoint'ах, но всегда спустя 100 секунд

📈 Метрики:
- В K8s pod'ах таймаутов нет
- NGINX ingress не логирует ошибок
- Istio mesh — без аномалий
- PostgreSQL работает стабильно, без долгих транзакций
- В логах нет ни timeout, ни broken pipe, ни reset by peer

---

🧩 Ваша задача:

1. Найти, где именно происходит таймаут — в сети, прокси, mesh, firewall или app
2. Выяснить, почему именно 100 секунд
3. Подтвердить гипотезу, не разрушая прод
4. Предложить решение без увеличения всех таймаутов подряд
5. Составить диагностический plan на случай повторного возникновения

💡 Подсказка:

- NGINX по умолчанию имеет proxy_read_timeout 60, но это не оно
- Cloudflare автоматически завершает соединения по таймауту 100 секунд
- Если вы используете long-polling или upload, CDN может прерывать соединение до ответа

🛠 Решение (примерный путь):

1. Проверить `curl -v` через Cloudflare и напрямую — сравнить TTL
2. Выставить `proxy_request_buffering off` и `client_body_timeout`
3. Обновить Ingress с `
nginx.ingress.kubernetes.io/proxy-read-timeout: "180"`
4. Проверить KeepAlive между Envoy и backend
5. В Cloudflare использовать `chunked encoding` или WebSockets, если запросы >100с

📌 **Вывод:**
Таймаут в 100 секунд — не случайность. Это один из самых частых лимитов на уровне облачных прокси и CDN. DevOps-инженер должен уметь находить такие «невидимые» границы между слоями системы и грамотно обходить их.

💬 Поделись решением с командой — и запиши его в postmortem, чтобы не попасться второй раз.

@devopsitsec
Крутой репозиторий, который содержит 2600+ вопросов с ответами и упражнений по DevOps, SRE, CI/CD, Kubernetes, Linux и не только.


Отлично подходит для подготовки к собесам и прокачки навыков.

Ссылка тут.
🎯 Как ускорить навигацию в командной строке


🔁 Повторный запуск под root — sudo !!

user@host: cat /var/log/messages
cat /var/log/messages: Permission denied.
Как не надо: Вверх. Влево. Влево. Влево. …. sudo Enter. Рррр.
Как надо: sudo !!


🔂 Повтор последнего аргумента — Alt + .

Вы захотели еще раз воспользоваться только что написанным аргументом? Например, созданной директорией?

Как не надо: mkdir MyNewDirectory; cd MyNewDirectory
Как надо:

mkdir MyNewDirectory
cd <Alt+.>


🔍 Поиск команды в истории — Ctrl + R

Какую же команду я только что запускал? Вверх. Вверх. Вверх. Вверх. О, вот и она!

Снова и снова вам приходится копаться в истории, ведь вы не знаете более подходящих альтернатив. Но что, если я скажу вам о том, что есть… поиск?

Как не надо: Вверх. Вверх. Вверх. Enter.
Как надо: Ctrl+R

Просто нажмите Ctrl+R и введите первые буквы нужной команды. Если поиск не выдал нужную команду сразу, то нажмите Ctrl+R еще раз. Повторное нажатие используется для прокрутки результатов. Ниже приведен поиск для cat.

(reverse-i-search)cat: sudo cat /var/log/messages


🏠 Домашняя директория — cd

Вы не на шутку удивитесь, узнав, сколько людей не знают этого способа! cd. Да, так просто. Без лишних аргументов вы сразу попадете в начальную директорию.


🔙 Назад в прошлую директорию — cd -

Иногда простой способ — самый лучший. Допустим, вы были в директории /var/www/foo, а теперь оказались в /etc . Простая команда cd — вернет вас обратно в /var/www/foo .

Как не надо: cd /var/www/foo
Как надо: cd -


🎭 Фоновый режим, передний план и контроль задач

Возможно, вам потребуется какое-то время, чтобы привыкнуть, но оно того стоит. Допустим, вы редактируете файл в vim (вы же не будете этого делать в nano, да?!). И вот вам вдруг захотелось что-то найти в директории /var/www/html. Конечно же, вы можете выйти из vim, перейти в нужную директорию, а потом вдруг решить, что неплохо было бы вернуться к редактированию. Есть и другой вариант — перевести vim в фоновый режим и вернуться к нему позже.

Напишите: Ctrl+Z. Эта комбинация переводит все текущие задачи с переднего плана в фоновый режим. Полезно как минимум для: less, cat, man, vim и т.д.

«И куда же отправится моя активная задача?» — спросите вы. Напишите jobs и сами узнаете.

user@host: jobs
[1] Stopped vim
Супер. Теперь можно заняться чем-то другим. А как только вы решите вернуться к задаче, напишите fg. Эта команда возвращает фоновую задачу (vim) на передний план. Обратите внимание, что фоновые процессы приостанавливаются. Поэтому если в файле вы выполняли что-то из разряда tail, то для завершения команды потребуется какое-то время. Если же в фоновом режиме запущено несколько задач, то напишите fg 3 , где 3 — это номер задачи для возобновления. Увидеть список задач можно по команде jobs.
🧠 Задача: Безопасный CI/CD для Docker-образов в GitLab

Условие:
У вас есть следующий пайплайн:


build_and_push:
image: docker:latest
services:
- docker:dind
variables:
DOCKER_HOST: tcp://docker:2375
DOCKER_TLS_CERTDIR: ""
script:
- docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" "$CI_REGISTRY"
- docker build -t "$CI_REGISTRY_IMAGE:latest" .
- docker push "$CI_REGISTRY_IMAGE:latest"


Он работает, но содержит серьёзные проблемы безопасности и архитектурные ошибки.

🚨 Проблемы:

1. `docker:dind` и `tcp://docker:2375` — критически уязвимы.
Это значит, что любой процесс может получить root-доступ к Docker-демону, а значит и к хосту раннера.

2. Нет валидации образов или сканирования.
В репозиторий может попасть уязвимый образ.

3. Использование тега `latest`.
Тег можно перезаписать в любой момент — нарушает идемпотентность и аудит.

4. Пароли в переменных среды.
Лучше использовать безопасные токены (например, OIDC).

5. Нет изоляции сборки.
Образ может использовать --privileged, --network=host, и не быть sandboxed.

Цель: Переделать пайплайн

Переход от DIND → kaniko, добавить проверку безопасности и стабильную версификацию.

🛡️ Обновлённый .gitlab-ci.yml


variables:
IMAGE_TAG: "${CI_COMMIT_SHORT_SHA}"

build_and_push:
image:
name: gcr.io/kaniko-project/executor:latest
entrypoint: [""]
script:
- echo "{\"auths\":{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"}}}" > /kaniko/.docker/config.json
- /kaniko/executor \
--context $CI_PROJECT_DIR \
--dockerfile $CI_PROJECT_DIR/Dockerfile \
--destination $CI_REGISTRY_IMAGE:$IMAGE_TAG \
--destination $CI_REGISTRY_IMAGE:stable \
--snapshotMode=redo \
--single-snapshot

scan_image:
image: aquasec/trivy:latest
stage: test
script:
- trivy image --exit-code 1 --severity HIGH,CRITICAL $CI_REGISTRY_IMAGE:$IMAGE_TAG


🔍 Разбор улучшений:

Kaniko — работает без привилегий, не требует docker.sock
`IMAGE_TAG` = SHA — версии стабильны, audit-friendly
Trivy — автоматическое сканирование уязвимостей
Удаление `latest` — используем stable и SHA
Нет `docker:dind` — безопаснее, проще и быстрее
Безопасная аутентификация — можно заменить username/password на OIDC в GitLab

📌 Дополнительно:

1. Добавьте rules: в пайплайн, чтобы запускать сборку только по main или тэгам.
2. Используйте readonly контейнеры и fsGroup если применимо.
3. Ограничьте доступ к runner через protected: true.

💣 Бонус: почему docker:dind = уязвимость?

Если runner запускается в privileged режиме, то docker:dind даёт возможность выполнять произвольные команды от root внутри и вне контейнера — включая монтирование хостовых директорий. Это делает возможным побег из контейнера.

💡 Такой пайплайн не только безопаснее, но и более прозрачен, масштабируем и предсказуем.
This media is not supported in your browser
VIEW IN TELEGRAM
🐧 Малоизвестный, но полезный совет для Linux

Хочешь ускорить работу в терминале?

Используй символы восклицательный знак и доллар — это магия последнего аргумента предыдущей команды.

🔧 Пример:

mkdir new_project
cd !$

📌 Ещё пример:

curl https://example.com/file.zip
wget !$

Другими словами эти символы, заменяются последним аргументом предыдущей строки команды.


🔁 Работает с vim, cp, mv, tar и др.

💡 Экономит много времени!
HTML Embed Code:
2025/07/07 11:26:59
Back to Top