Список тегов, используемых в канале:
—-------------------------------
Лекции и материалы
—-------------------------------
#Занятие
#Лекции
Лекция
#junior
—---------
Linux
—---------
#ssh
#bash
#bash_tips_and_tricks
#awk
#tmux
#console
#utils
#troubleshooting
#nmap
#apt
#bind
#sound
#power_management
—----------
DevOps
—----------
#jenkins
#ansible
#git
#kubernetes
#deploy
#ceph
#docker
#puppet
—------------------
Virtualization
—------------------
#vmware
vagrant
—------------------
Networking
—---------------—
#networking
#proxy
#socks
—---------
InfoSec
—---------
#vulns
#security
#ctf
—-------------
Windows
—-------------
#RDTS
#windows_server2012
#RDP
—------------
Datacenters
—---------—
#ovh
#hetzner
—-------
Other
—-------
#android
#jira
—------------------------------------------------
Ссылки и сторонние материалы
—------------------------------------------------
#read
#thirdparty
Updated: 29.05.18
—-------------------------------
Лекции и материалы
—-------------------------------
#Занятие
#Лекции
Лекция
#junior
—---------
Linux
—---------
#ssh
#bash
#bash_tips_and_tricks
#awk
#tmux
#console
#utils
#troubleshooting
#nmap
#apt
#bind
#sound
#power_management
—----------
DevOps
—----------
#jenkins
#ansible
#git
#kubernetes
#deploy
#ceph
#docker
#puppet
—------------------
Virtualization
—------------------
#vmware
vagrant
—------------------
Networking
—---------------—
#networking
#proxy
#socks
—---------
InfoSec
—---------
#vulns
#security
#ctf
—-------------
Windows
—-------------
#RDTS
#windows_server2012
#RDP
—------------
Datacenters
—---------—
#ovh
#hetzner
—-------
Other
—-------
#android
#jira
—------------------------------------------------
Ссылки и сторонние материалы
—------------------------------------------------
#read
#thirdparty
Updated: 29.05.18
Docker up to date checking
Сервис для проверки ваших докер контейнеров на "обновленность". Для публичных - бесплатно. приватные - за денежку.
https://anchore.io/
#docker
Сервис для проверки ваших докер контейнеров на "обновленность". Для публичных - бесплатно. приватные - за денежку.
https://anchore.io/
#docker
Anchore
Software supply chain security solutions • Anchore
Protect your software supply chain with policy-based container security solutions.
Убитый контейнер докера не запускается
Ошибка:
#docker #troubleshooting #networking
Ошибка:
endpoint with name XXXX already exists in network bridge.
Решение:docker network disconnect --force bridge <Container ID or Endpoint ID or Container NAME>
Это не для тех, кто не умеет гуглить, а для того чтобы наоборот каждый раз не гуглить когда такое возникает=)#docker #troubleshooting #networking
Запускаем задачу в background в докер контейнере через ansible
Особо ничего сложного, nohup да &, однако процесс все равно не отпускает консоль, посему ansible зависает. Чтобы этого не происходило, можно применить такую конструкцию:
Особо ничего сложного, nohup да &, однако процесс все равно не отпускает консоль, посему ansible зависает. Чтобы этого не происходило, можно применить такую конструкцию:
- name: run bg job#docker #ansible
shell: docker exec -i <container> sh -c 'nohup CMD &'
async: 45
poll: 0
RBAC on docker registry
Поигрался тут на днях с одним сервисом который позволяет использвать token-based аутентификацию пользователя с docker registry. Стандартный вариант логин-пароль уже не удовлетворяет потребностям и пришлось искать что-то другое. В итоге набрел на готовое решение от cesanta/docker_auth. Написано на go, легковестный token-сервис с поддержкой различных способов аутентификации пользователей и также, что самое главное - это ACL. С помощью acl можно задавать кто, и какие репозитории может пушить и пуллить, с точностью до регулярного выражения. В качестве базы хранения пользователей-acl можно выбрать статический файл, mongodb, ldap и некоторые другие. В том числе можно использовать и сторонний софт, хоть самопис. токен будет выдаваться в зависимости от кода ответа этого софта. И тут уже можно сделать все что угодно - хоть выдавать токены в зависимости от времени суток. Поковырявшись в этом собрал готовое решение, запускаемое через docker-compose. Оно содержит набор из 3 контейнеров: docker_auth, docker registry и mongo. После старта docker-compose все что нужно сделать - загрузить список правил и пользователей в mongo через простейший shell-скрипт.
https://github.com/bykvaadm/docker_auth
#docker #auth
Поигрался тут на днях с одним сервисом который позволяет использвать token-based аутентификацию пользователя с docker registry. Стандартный вариант логин-пароль уже не удовлетворяет потребностям и пришлось искать что-то другое. В итоге набрел на готовое решение от cesanta/docker_auth. Написано на go, легковестный token-сервис с поддержкой различных способов аутентификации пользователей и также, что самое главное - это ACL. С помощью acl можно задавать кто, и какие репозитории может пушить и пуллить, с точностью до регулярного выражения. В качестве базы хранения пользователей-acl можно выбрать статический файл, mongodb, ldap и некоторые другие. В том числе можно использовать и сторонний софт, хоть самопис. токен будет выдаваться в зависимости от кода ответа этого софта. И тут уже можно сделать все что угодно - хоть выдавать токены в зависимости от времени суток. Поковырявшись в этом собрал готовое решение, запускаемое через docker-compose. Оно содержит набор из 3 контейнеров: docker_auth, docker registry и mongo. После старта docker-compose все что нужно сделать - загрузить список правил и пользователей в mongo через простейший shell-скрипт.
https://github.com/bykvaadm/docker_auth
#docker #auth
GitHub
bykvaadm/docker_auth
example of cesanta/docker_auth. Contribute to bykvaadm/docker_auth development by creating an account on GitHub.
Cleanup docker registry
Проверено для версии 2.6.2
1. добавить в конфиг registry эти строки и перезапустить:
2. получаем список тегов для репозитория и выбираем список на удаление
3. помечаем объекты на удаление через api
4. заходим внутрь контейнера и запускаем garbage-collector.
Итого наша задача - получить список тегов, выбрать нужные на удаление. На каждый тег получить sha256 манифеста (docker-content-digest в заголовке ответа), а затем пометить этот заголовок на удаление. К концу 3-го пункта никакие данные еще не удалены. Удаление происходит не вручную, а с помощью нативного сборщика мусора. согласно помеченным манифестам будут удалены выбранные теги.
#docker #registry
Проверено для версии 2.6.2
1. добавить в конфиг registry эти строки и перезапустить:
storage:
delete:
enabled: true
2. получаем список тегов для репозитория и выбираем список на удаление
curl -u <user>:<password> https://<registry_host>/v2/<repo_name>/tags/list
3. помечаем объекты на удаление через api
repo="REPO_PATH"
tag_list='TAG LIST separated by space'
user="USER"
pwd="PASSWORD"
registry_host="<registry_host>"
header="Accept: application/vnd.docker.distribution.manifest.v2+json"
for tag in ${tag_list}; do
digest=$(curl -I -u $user:$pwd -H "$header" "https://${registry_host}/v2/${repo}/manifests/${tag}" 2>/dev/null| awk '$1 == "docker-content-digest:" {print $2}'| tr -dc '[[:print:]]')
curl -XDELETE -u $user:$pwd -H "$header" "https://${registry_host}/v2/${repo}/manifests/${digest}"
done
4. заходим внутрь контейнера и запускаем garbage-collector.
registry garbage-collect /etc/docker/registry/config.yml
Итого наша задача - получить список тегов, выбрать нужные на удаление. На каждый тег получить sha256 манифеста (docker-content-digest в заголовке ответа), а затем пометить этот заголовок на удаление. К концу 3-го пункта никакие данные еще не удалены. Удаление происходит не вручную, а с помощью нативного сборщика мусора. согласно помеченным манифестам будут удалены выбранные теги.
#docker #registry
Интегрируем проверку на уязвимости в CI
The Anchore Engine is an open source project that provides a centralized service for inspection, analysis and certification of container images.
https://github.com/anchore/anchore-engine
https://medium.com/devopslinks/step-by-step-guide-to-integrate-opensource-container-security-scanner-anchore-engine-with-cicd-580da8db5dfc
#docker #jenkins #security
The Anchore Engine is an open source project that provides a centralized service for inspection, analysis and certification of container images.
https://github.com/anchore/anchore-engine
https://medium.com/devopslinks/step-by-step-guide-to-integrate-opensource-container-security-scanner-anchore-engine-with-cicd-580da8db5dfc
#docker #jenkins #security
Нападение без объявления войны
я хз че это было, но вы поймете когда вам это понадобится))
https://github.com/moby/moby/blob/master/contrib/init/systemd/docker.socket
(Ну а так, ошибка такая: docker.service: Failed to schedule restart job: Unit docker.socket not found.)
#docker #troubleshooting
я хз че это было, но вы поймете когда вам это понадобится))
https://github.com/moby/moby/blob/master/contrib/init/systemd/docker.socket
(Ну а так, ошибка такая: docker.service: Failed to schedule restart job: Unit docker.socket not found.)
#docker #troubleshooting
GitHub
moby/contrib/init/systemd/docker.socket at master · moby/moby
The Moby Project - a collaborative project for the container ecosystem to assemble container-based systems - moby/moby
куда можно потратить 3 часа
Способов потерять время - сотни. Можно поваляться на траве в погожий денек, написать какой-нибудь прикольной зеленоглазой девчонке, а можно... собирать пакеты и тестировать их в докере. И убить эти 3 часа в попытке исполнить .examples/.docs скрипты установки. Ну это те, которые приносят файлики в /usr/share/docs/<package>. Вы кладете туда файл, а он не приезжает после установки пакета. Самое главное что если пакет вскрыть с помощью ar, то нужные файлы там есть. При установке пакета - в нужных местах не появляются. Самое бесячее, что в нужной папке появляется файл copyright, а твои другие - нет.
Ларчик-то просто открывался. Всего-навсего в докере из коробки лежит конфиг dpkg, который говорит, мол copyright клади, а другие файлы не клади...
#packaging #docker
Способов потерять время - сотни. Можно поваляться на траве в погожий денек, написать какой-нибудь прикольной зеленоглазой девчонке, а можно... собирать пакеты и тестировать их в докере. И убить эти 3 часа в попытке исполнить .examples/.docs скрипты установки. Ну это те, которые приносят файлики в /usr/share/docs/<package>. Вы кладете туда файл, а он не приезжает после установки пакета. Самое главное что если пакет вскрыть с помощью ar, то нужные файлы там есть. При установке пакета - в нужных местах не появляются. Самое бесячее, что в нужной папке появляется файл copyright, а твои другие - нет.
Ларчик-то просто открывался. Всего-навсего в докере из коробки лежит конфиг dpkg, который говорит, мол copyright клади, а другие файлы не клади...
#packaging #docker
Интересное наблюдение
На одном из серверов выполнил вот такую команду:
Вы наверное тоже насторожились как и я, какого хрена nginx запущен от папета. Оказалось все довольно просто. На сервере nginx запущен в докере:
А вот ответ на вопрос как так получилось:
#docker
На одном из серверов выполнил вот такую команду:
# ps aux | grep nginx
puppet 6754 ... nginx: worker process
puppet 6755 ... nginx: worker process
Вы наверное тоже насторожились как и я, какого хрена nginx запущен от папета. Оказалось все довольно просто. На сервере nginx запущен в докере:
# docker exec -ti 4da030b0cfb5 ps aux | grep nginx
nginx 668 nginx: worker process
nginx 669 nginx: worker process
А вот ответ на вопрос как так получилось:
# grep puppet /etc/passwd
puppet:x:105:109:Puppet configuration ....
# docker exec -ti 4da030b0cfb5 grep nginx /etc/passwd
nginx:x:105:111:nginx user
#docker
terraform create dockreg secret in k8s
resource "kubernetes_secret" "company-dkr-key" {#terraform #docker #kubernetes
metadata {
name = "company-dkr-key"
namespace = "${kubernetes_namespace.company.metadata.0.name}"
}
data = {
".dockerconfigjson" = "{\"auths\":{\"${var.company-dkr-url}\":{\"username\":\"${var.company-dkr-user}\",\"password\":\"${var.company-dkr-password}\",\"email\":\"email\",\"auth\":\"${base64encode(format("%s:%s", var.company-dkr-user, var.company-dkr-password))}\"}}}"
## OR u can also do this from file
# ".dockercfg" = "${file("${path.module}/docker.cfg")}"
}
type = "kubernetes.io/dockercfg"
}
как сбросить пароль на postgresql в запущенном docker контейнере без перезапуска
Рубрика "костылим с буквой"
ОСТОРОЖНО прочитанное далее может вызвать кровотечение из глаз и непреодолимое желание расшибить себе лоб рукой.
вы были предупреждены.
Раскатывал я тут хелм сентри... Дано: не работающий Job, который использует пароль из секрета, и криво написанный авторами чарт, в котором слетает пароль пользователя в postgres. Задача - установить в контенере на лету нужный пароль пользователя.
#рукиизжопы #костыли #postgresql #docker #sentry #kubernetes
Рубрика "костылим с буквой"
ОСТОРОЖНО прочитанное далее может вызвать кровотечение из глаз и непреодолимое желание расшибить себе лоб рукой.
вы были предупреждены.
Раскатывал я тут хелм сентри... Дано: не работающий Job, который использует пароль из секрета, и криво написанный авторами чарт, в котором слетает пароль пользователя в postgres. Задача - установить в контенере на лету нужный пароль пользователя.
# получаем пароль который должен быть выставлен на постгре
kubectl -n sentry get secret sentry-sentry-postgresql -o yaml | awk '$1=/postgresql-password:/ {print $2}' | base64 -d; echo
# получаем ноду на которой крутится постгре и ssh-шимся на нее
kubectl -n sentry get po -o wide | awk '$1~/.*postgr.*/ {print $7}'
# получаем id контейнера и логинимся туда под рутом
docker ps | grep postgr | grep entry | awk '{print $1}'
docker exec -ti -u0 <container_id> bash
# узнаем пользователя под которым запущен постгре
grep Uid /proc/1/task/1/status
# разрешаем логиниться из-под локалхоста
sed -ibak 's/^\([^#]*\)md5/\1trust/g' /opt/bitnami/postgresql/conf/
# добавляем пользователя в систему и переходим в него
useradd postgres -u 1001
su postgres
# выставляем переменные окружения и релоадим сервис
export PGDATA=/bitnami/postgresql/data
/opt/bitnami/postgresql/bin/pg_ctl reload
# логинимся в postgres и выставляем пароль
psql -U postgres
ALTER USER postgres WITH PASSWORD 'XXX';
возвращаем назад изменения или перестартуем контейнер.
#рукиизжопы #костыли #postgresql #docker #sentry #kubernetes
Happy New Year! With a new year upon us, it's time to reflect on the best Docker content and projects from 2019 sourced from our Docker experts and our exceptional Docker community and community leaders. Check out our most binge-worthy content of 2019 as you begin to map your Docker journey for 2020.
Top 5 Docker Blogs from 2019
Intro Guide to Dockerfile Best Practices by Tibor Vass - July 2, 2019
Happy Pi Day with Docker and Raspberry Pi by Paulo Frazao - March 14, 2019
5 Things to Try with Docker Desktop WSL 2 Tech Preview by Ben De St Paer-Gotch - July 31, 2019
New in Docker Hub: Personal Access Token by Shenea Leven - September 19, 2019
Docker's Next Chapter: Advancing Developer Workflows for Modern Apps by Scott Johnston - November 13, 2019
Top Docker & Docker Captain Projects:
Container registry with commands in an Alpine image
Golang library with API to run Docker container
docker-compose stack for Prometheus monitoring
Sample node app for Docker examples
#docker #подборка
Top 5 Docker Blogs from 2019
Intro Guide to Dockerfile Best Practices by Tibor Vass - July 2, 2019
Happy Pi Day with Docker and Raspberry Pi by Paulo Frazao - March 14, 2019
5 Things to Try with Docker Desktop WSL 2 Tech Preview by Ben De St Paer-Gotch - July 31, 2019
New in Docker Hub: Personal Access Token by Shenea Leven - September 19, 2019
Docker's Next Chapter: Advancing Developer Workflows for Modern Apps by Scott Johnston - November 13, 2019
Top Docker & Docker Captain Projects:
Container registry with commands in an Alpine image
Golang library with API to run Docker container
docker-compose stack for Prometheus monitoring
Sample node app for Docker examples
#docker #подборка
Собрал стенд для обучения работы с hashicorp vault
Разворачивается через вагрант на локальных вм. Поднимается куб кластер в котором поднимается HA версия vault с бекендом на HA etcd.
НА - это не на, а аббревиатура. написано большими буквами потому что я не помню как пишется high availabilпыр-пыр-пыр. etcd используется вместо консула потому что почему бы и нет. разница в бэкенде не существенна при обучении работы с vault. (ну на самом деле, потому что консул в кубе можно развернуть только один кластер, а это значит что мы отдаем его только под секреты - ведь не шарить же его еще с кем-то если мы там храним секреты, а в данном случае кажется избыточным поднимать консул, ведь если у вас будет 20 нод, вы получите 20 реплик консула (так написан чарт), а у etcd по-прежнему останется 3. )
В данном репозитории ТОЛЬКО сам стенд. материалы для обучения продаются, как говорится, отдельно =)
https://github.com/bykvaadm/vault-on-kubernetes-stand
#virtualbox
#vagrant
#ansible
#kubernetes
#helm
#docker
#etcd
#ingress
#hashicorp
#vault
#обучение
З.Ы. поделились аналогичным стендом, на компоузах и с консулом. https://github.com/temalovepizza/vaultstuff
Разворачивается через вагрант на локальных вм. Поднимается куб кластер в котором поднимается HA версия vault с бекендом на HA etcd.
НА - это не на, а аббревиатура. написано большими буквами потому что я не помню как пишется high availabilпыр-пыр-пыр. etcd используется вместо консула потому что почему бы и нет. разница в бэкенде не существенна при обучении работы с vault. (ну на самом деле, потому что консул в кубе можно развернуть только один кластер, а это значит что мы отдаем его только под секреты - ведь не шарить же его еще с кем-то если мы там храним секреты, а в данном случае кажется избыточным поднимать консул, ведь если у вас будет 20 нод, вы получите 20 реплик консула (так написан чарт), а у etcd по-прежнему останется 3. )
В данном репозитории ТОЛЬКО сам стенд. материалы для обучения продаются, как говорится, отдельно =)
https://github.com/bykvaadm/vault-on-kubernetes-stand
#virtualbox
#vagrant
#ansible
#kubernetes
#helm
#docker
#etcd
#ingress
#hashicorp
#vault
#обучение
З.Ы. поделились аналогичным стендом, на компоузах и с консулом. https://github.com/temalovepizza/vaultstuff
GitHub
GitHub - bykvaadm/vault-on-kubernetes-stand
Contribute to bykvaadm/vault-on-kubernetes-stand development by creating an account on GitHub.
Собираем helm-чарт в gitlab-ci и пушим в docker registry
Используем экспериментальную фичу с oci-registry в которую научился хелм. Это значит что мы можем чарты теперь просто пушить рядом с контейнерами докера с таким же именованием и тегированием.
#helm
#gitlab
#docker
Используем экспериментальную фичу с oci-registry в которую научился хелм. Это значит что мы можем чарты теперь просто пушить рядом с контейнерами докера с таким же именованием и тегированием.
deploy_helm:Структура репозитория - файлы чарта и .gitlab-ci.yml. После запуска деплоя создается воркер - докер с поддержкой docker-in-docker. Мы качаем публичный контейнер хелма на альпине. Все пробросы нужны для того чтобы хелм внутри докера умел ходить в регистри и сохранять промежуточный кэш для докер регистри. Помещаю его в "алиас" команды хелма для того чтобы логически отделить запуск хелма и запуск докера. последние 2 строки - сохранить чарт в локальный кэш и подготовить для пуша в регистри и собственно запушить. Чтобы всё это работало нужно подготовить docker config.json с готовыми параметрами пользователя для доступа к докер регистри и сохранить его в переменные джобы как файл.
stage: deploy
image: docker:18-dind
services:
- docker:18-dind
environment: { name: production }
tags: [docker]
only:
refs: [master]
script:
- export CHART_VERSION=$(grep version Chart.yaml | awk '{print $2}')
- chmod 400 $DOCKERCONFIG
- mkdir registry
- alias helm='docker run -v $(pwd)/regisry:/root/.cache/helm/registry -v $(pwd):/apps -v ${DOCKERCONFIG}:/root/.docker/config.json -e DOCKER_CONFIG="/root/.docker" -e HELM_REGISTRY_CONFIG="/root/.docker/config.json" -e HELM_EXPERIMENTAL_OCI=1 alpine/helm'
- helm chart save . registry.company.com/helm/charts/debezium:${CHART_VERSION}
- helm chart push registry.company.com/helm/charts/debezium:${CHART_VERSION}
#helm
#gitlab
#docker
Делаем резервные копии postgres на s3 (minio)
В гисте приложен кусочек плейбука ansible который настраивает резервное копирование через mc клиент. скрипт умеет выгружать в bucket по-отдельности каждую базу из списка, оценивать размер и время совершения последнего копирования каждой базы и отдавать эту информацию в формате prometheus, а также подчищать из s3 устаревшие копии.
https://gist.github.com/bykvaadm/434a4eef5392528c9c0e4788937301bc
#postgres
#docker
#patroni
#ansible
#minio
#prometheus
В гисте приложен кусочек плейбука ansible который настраивает резервное копирование через mc клиент. скрипт умеет выгружать в bucket по-отдельности каждую базу из списка, оценивать размер и время совершения последнего копирования каждой базы и отдавать эту информацию в формате prometheus, а также подчищать из s3 устаревшие копии.
https://gist.github.com/bykvaadm/434a4eef5392528c9c0e4788937301bc
#postgres
#docker
#patroni
#ansible
#minio
#prometheus
Gist
Postgres patron backup on Minio with prometheus monitoring
Postgres patron backup on Minio with prometheus monitoring - README.md
Читаем документацию вместе с Буквой
Я довольно часто натыкаюсь при работе с коллегами разработчиками на то, что они используют или в шелл скриптах (ci/cd) или в юнит файлах конструкцию
#docker
Я довольно часто натыкаюсь при работе с коллегами разработчиками на то, что они используют или в шелл скриптах (ci/cd) или в юнит файлах конструкцию
ExecStartPre= docker pull ...
которая при перезапуске всегда им подтягивает latest версию контейнера. В целом звучит логично, однако правильнее воспользоваться встроенным функционалом docker, а именно ключом --pull=always, который выполнит ту же самую задачу и будет более простым в использовании.#docker