DevOps FM – Telegram
DevOps FM
4.94K subscribers
636 photos
12 videos
10 files
751 links
♾️ Канал для тех, кто живёт DevOps и системным администрированием.

Новости, статьи, best practices, инструменты и чилл-аут контент. Cloud Native, Docker, Kubernetes, CI/CD, БД, мониторинг etc.

По вопросам — к Ладе @b_vls
Download Telegram
Бесплатный видеокурс по SRE

Как раз можно на выходных посмотреть (хотя, конечно, на выходных лучше отдыхать 🏖)

Курс выпустили Тинькофф Образование буквально на днях. 14 видео, +- по часу. Рассказываются основные темы, начиная от "Что такое SRE" до "Как тестировать в продакшен". Хороший способ прокачать экспертизу, тем более всё на русском языке.

Желаем отличной пятницы и классных выходных! 🔥

#видео
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥28👍1
Всем DevOps! 🖖

Начинаем эту неделю с нетипичной для нас рекомендации — книги «Ansible for DevOps». Никто не будет утверждать, что можно изучить инструмент или технологию только по книгам, но книги точно могут помочь.

Ansible — это инструмент Infrastructure as a Code для автоматизации задач по подготовке и конфигурированию инфраструктуры.

📚 Kнига «Ansible for DevOps» начинается с основ: установки Ansible, создания базового файла инвентаризации и базовых концепций, а затем рассказывает о многочисленных возможностях использования Ansible, включая специальные команды, базовые и расширенные плейбуки, развертывание приложений, предоставление сервера нескольким провайдерам и даже оркестровку Docker.

P.S. Об этой книге нам рассказал подписчик, спасибо :) Если вы знаете какой-то классный материал, инструмент и т.д. и хотите поделиться им с сообществом — пишите!

#книги
👍10🔥9👏1
Рассказываем про два open-source инструмента с похожими названиями 😎

▪️Kube-Scanopen-source утилита для оценки риска кластера среды оркестрации, в основе которого лежит Kubernetes.

Для расчета уровня риска используется модель Octarine Kubernetes Common Configuration Scoring System (KCCSS). Она похожа на Common Vulnerability Scoring System (CVSS), стандарт для расчета уровня риска по уязвимостям, только вместо акцента на уязвимости делается акцент на конфигурацию и параметры безопасности в ней.

▪️KubiScan open-source утилита, которая собирает информацию о том, где и какие расширенные привилегии используются на уровне кластера Kubernetes, если в основе контроля доступа лежит RBAC.

Инструмент был опубликован в рамках исследования «Защита кластеров Kubernetes путем устранения рискованных разрешений»

#open_source
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10
Sber OPS Meetup: удобство, функциональность, надежность

Бесплатный митап — отличная возможность пообщаться с единомышленниками и обсудить актуальные темы ИТ-сопровождения: Kubernetes Governance as a Code, dev/staging/testing-ветки, рабочее пространство администратора и техподдержку для сотрудников.

🗓 Когда? 10 июля 18:00 (МСК, GMT+3)

🌐 Онлайн — трансляция на сайте
📍 Офлайн — офис Сбера по адресу: Москва, Кутузовский проспект, 32, корпус Г

Что в программе? Доклады!

▪️«Kubernetes Governance as a Code, или Как содержать кластеры в чистоте и порядке»

▪️«Разделение на dev/master-ветки при деплое на стенды: паттерн или антипаттерн?»

▪️«Единое рабочее пространство администратора, или Когда закончилось место на панели вкладок»

▪️«Как мы в Сбере предоставляем техническую поддержку сотрудникам»

➡️ Для участия в онлайне или офлайне нужно зарегистрироваться.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
Сегодня целых два повода, чтобы немного расслабиться: маленькая пятница 🥳 и день трудоголика 😭

Поэтому предлагаем посмотреть познавательную документалку «Kubernetes: The Documentary». Фильм в двух частях (раз, два), на английском, но есть русские субтитры.

Как создавался Kubernetes? Почему он стал open-source и что сделало его, по сути, стандартом оркестрации? Об этом фильм :) Особенно интересно, что всю историю рассказывают люди, принимавшие непосредственное участие в разработке Kubernetes: инженеры из Google, Red Hat, Twitter и других компаний.

Всем DevOps! 🖖

#видео
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥4
GitHub опубликовали отличную статью «Introduction to SELinux»

SELinux — самый популярный модуль безопасности Linux, используемый для изоляции и защиты системных компонентов друг от друга.

В статье рассказывается про различия между MAC (Mandatory Access Control) и DAC (Discretionary Access Control), объясняются основы системы типов SELinux и то, как SELinux работает в ядре Linux, предлагаются полезные инструменты и примеры взаимодействия с SELinux.

Бонус: На русском есть еще такая статья, тоже очень подробная :)

#статьи
👍13
Первый общедоступный релиз Flux v2

Flux — это инструмент для синхронизации кластеров Kubernetes с источниками конфигурации (такими как репозитории Git и артефакты OCI) и автоматизации обновлений конфигурации при появлении нового кода для развертывания.

Подробнее о релизе можно почитать здесь, а документация проекта — вот тут.

#новости #open_source
👍111
Kubernetes Examples 🗒

Нередко бывает, что нужен фрагмент YAML с демонстрацией чего-то конкретного: пода, простого деплоя или чего-нибудь подобного. Например, для базового тестирования окружения или в качестве примера, с которым можно поработать.

В общем, можно поискать нужный YAML в этом репозитории — в нем собраны примеры стандартных функций и шаблонов Kubernetes. Есть и сайт, вдруг кому-то удобнее :)

Всем DevOps и отличных выходных! 🖖

#open_source
👍20🔥7🙏1
Ииии.... Об этой книге нам тоже рассказал подписчик, большое-большое спасибо :) Разумеется, делимся!

📝 Есть такой специалист, Джин Ким, основатель и ex-CTO компании Tripwire и автор книг по IT. Пожалуй, самая известная его работа — «Проект "Феникс". Роман о том, как DevOps меняет бизнес к лучшему». Но мы хотим порекомендовать другую книгу: «Руководство по DevOps».

📚 Цель этой книги — подробная кодификация принципов и методик DevOps. В книге описаны основные шаги и принципы построения производственного взаимодействия, автоматизации процессов и развития культуры разработки ПО. Теория щедро сдобрена историями реальных людей и компаний, прошедших непростой, но интересный путь к DevOps.

P.S. Если вы знаете какой-то классный материал, инструмент, увидели интересную новость и т.д. и хотите поделиться ими с сообществом — пишите!

#книги
🔥13👍41
It's Wednesday, my friends! 🆘

Пособирали разных статей, делимся подборкой.

▪️Гайд «GitHub to GitLab migration the easy way» — как перейти с GitHub на GitLab, используя функцию импорта проектов. Рассматривается и ручная миграция GitHub Actions в GitLab pipelines. Есть видео :)

▪️Статья «How to delegate tasks as a senior/lead engineer?» — как эффективно делегировать задачи членам команды. Забавные аналогии и жизненные ситуации прилагаются.

▪️Статья «Как я стал девопсом в городе, в котором есть только завод» — всегда интересно почитать про путь в профессию, особенно, когда у автора в моногороде два пути: на завод или в IT.

▪️Статья «Монолит или микросервисы это не вопрос технологических предпочтений, это про time-to-market» — из названия все понятно, автор рассматривает вопрос монолит vs микросервисы через призму команд, их взаимодействия и интересов бизнеса.

(кстати, делали подборку всякого интересного на эту тему — вот здесь)

Всем DevOps! 🖖

#статьи
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥1
В эфире — новости!

▪️На 15 августа 2023 года запланирован релиз Kubernetes 1.28. Ожидается 59 новых улучшений , из которых 33 — alpha, 19 — beta и 15 — stable. Подробное описание доступно в release notes (пока черновик).

▪️Состоялся релиз KubeVirt 1.0.0. Подробности — в release notes.

KubeVirt — это надстройка по управлению ВМ для K8s. Его цель — обеспечить общую основу для решений виртуализации поверх K8s. С помощью KubeVirt можно управлять ВМ как ресурсом K8s, подобно подам.

▪️В пятницу, 7 июля 2023 года, в инфраструктуре Jenkins произошел серьезный сбой с 11:05 UTC до 15:25 UTC, Jenkins выпустили Postmortem об этом инциденте.

*️⃣Писали про Postmortem здесь :)

▪️Компания Yandex Cloud проинформировала пользователей об ограничении доступности Managed service for Elasticsearch.

Действующие пользователи смогут работать с существующими кластерами и создавать новые до апреля 2024 года. Пользователи, которые пока не работали с Elasticsearch в облаке, не смогут создать кластеры сервиса с 20 июля 2023 года.

▪️Istio получили статус CNCF Graduated project. Первоначально Istio был разработан Google и IBM и построен на основе проекта Envoy от Lyft. В настоящее время в проекте участвуют более 16 компаний, в том числе многие крупнейшие поставщики сетевых услуг и облачные организации по всему миру. Istio — третий по активности проект CNCF по количеству открытых и смерженных PR.

Istio — инструмент конфигурации service mesh

#новости
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12
Всем DevOps! 🖖

Полезное про CI/CD components в GitLab

В релизе GitLab 16.1 была представлена экспериментальная фича — CI/CD components. Это «строительные блоки», которые упрощают построение пайплайна. Компоненты можно переиспользовать, они поддерживают входные параметры и позволяют настраивать их в зависимости от контекста пайплайна.

В ближайшее время появится еще и CI/CD каталог — централизованное хранилище компонентов.

В статье можно подробнее узнать обо всех преимуществах компонентов и посмотреть, как с ними работать.

#статьи
👍13
Всем DevOps! 🖖

Начнем неделю с полезных советов: Три простых приема для уменьшения Docker-образов 💻

Образы, которые используют одни и те же слои и весят меньше — быстрее переносятся и деплоятся.
Но как контролировать размер, когда каждое выполнение оператора RUN создает новый слой? Плюс, еще нужны промежуточные артефакты до создания самого образа...

1️⃣ Объединяем несколько слоев в один с помощью поэтапной сборки Docker-образов

Когда Git-репозиторий разрастается, можно просто свести всю историю изменений в один commit и забыть о нем. Оказалось, что нечто подобное можно реализовать и в Docker — посредством поэтапной сборки.

Давайте создадим контейнер Node.js.

Начнем с index.js:

const express = require('express')
const app = express()
app.get('/', (req, res) => res.send('Hello World!'))
app.listen(3000, () => {
console.log(Example app listening on port 3000!)
})

и package.json:

{
"name": "hello-world",
"version": "1.0.0",
"main": "index.js",
"dependencies": {
"express": "^4.16.2"
},
"noscripts": {
"start": "node index.js"
}
}

Упакуем приложение со следующим Dockerfile:

FROM node:8
EXPOSE 3000
WORKDIR /app
COPY package.json index.js ./
RUN npm install
CMD ["npm", "start"]

Создадим образ:

$ docker build -t node-vanilla .

Проверим, что все работает:

$ docker run -p 3000:3000 -ti --rm --init node-vanilla

Теперь можно пройти по ссылке: http://localhost:3000 и увидеть там «Hello World!».

В Dockerfile теперь у нас есть операторы COPY и RUN, так что фиксируем увеличение как минимум на два слоя, по сравнению с исходным образом:

$ docker history node-vanilla

Как видим, итоговый образ возрос на пять новых слоев: по одному для каждого оператора в нашем Dockerfile. Давайте теперь опробуем поэтапную Docker-сборку. Используем тот же самый Dockerfile, состоящий из двух частей:

FROM node:8 as build
WORKDIR /app
COPY package.json index.js ./
RUN npm install
FROM node:8
COPY --from=build /app /
EXPOSE 3000
CMD ["index.js"]

Первая часть Dockerfile создает три слоя. Затем слои объединяются и копируются на второй и заключительный этапы. Сверху в образ добавляются еще два слоя. В итоге имеем три слоя.

Давайте пробовать. Сначала создаем контейнер:

$ docker build -t node-multi-stage .

Проверяем историю:

$ docker history node-multi-stage

Смотрим, изменился ли размер файла:

$ docker images | grep node-
node-multi-stage 331b81a245b1 678MB
node-vanilla 075d229d3f48 679MB

Да, он стал меньше, но пока не значительно. Есть способы уменьшить его сильнее.

*️⃣2 и 3 приемы будут чуть позже :)

#лонгрид
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🤩31
2️⃣ Сносим все лишнее из контейнера с помощью distroless

Текущий образ предоставляет нам Node.js, yarn, npm, bash и много других полезных бинарников. Также, он создан на базе Ubuntu. Таким образом, развернув его, мы получаем полноценную операционную систему со множеством полезных бинарников и утилит.

При этом они не нужны нам для запуска контейнера. Единственная нужная зависимость — это Node.js.

Docker-контейнеры должны обеспечивать работу одного процесса и содержать минимально необходимый набор инструментов для его запуска. Целая операционная система для этого не требуется.

Таким образом, мы можем вынести из него все, кроме Node.js.

Но как?

В Google уже пришли к подобному решению — GoogleCloudPlatform/distroless.

Описание к репозиторию гласит:

Distroless-образы содержат только приложение и зависимости для его работы. Там нет менеджеров пакетов, shell'ов и других программ, которые обычно есть в стандартном дистрибутиве Linux.

Это то, что нужно!

Запускаем Dockerfile, чтобы получить новый образ:

FROM node:8 as build
WORKDIR /app
COPY package.json index.js ./
RUN npm install
FROM gcr.io/distroless/nodejs
COPY --from=build /app /
EXPOSE 3000
CMD ["index.js"]

Собираем образ как обычно:

$ docker build -t node-distroless .

Приложение должно нормально заработать. Чтобы проверить, запускаем контейнер:

$ docker run -p 3000:3000 -ti --rm --init node-distroless

И идем на http://localhost:3000. Стал ли образ легче без лишних бинарников?

$ docker images | grep node-distroless
node-distroless 7b4db3b7f1e5 76.7MB

Еще как! Теперь он весит всего 76,7 МБ, на целых 600 Мб меньше!

Все круто, но есть один важный момент. Когда контейнер запущен, и надо его проверить, подключиться можно с помощью:

$ docker exec -ti <insert_docker_id> bash

Подключение к работающему контейнеру и запуск bash очень похоже на создание SSH-сессии.

Но поскольку distroless — это урезанная версия исходной операционной системы, там нет ни дополнительных бинарников, ни, собственно, shell!

Как подключиться к запущенному контейнеру, если нет shell?

Самое интересное, что никак.

Это не очень хорошо, так как исполнять в контейнере можно только бинарники. И единственный, который можно запустить — это Node.js:

$ docker exec -ti <insert_docker_id> node

На самом деле в этом есть и плюс, ведь если вдруг какой-то злоумышленник сможет получить доступ к контейнеру, он причинит намного меньше вреда, чем если бы у него был доступ к shell. Иными словами, меньше бинарников — меньше вес и выше безопасность. Но, правда, ценой более сложной отладки.

Тут надо бы оговориться, что подключать и отлаживать контейнеры на prod-окружении не стоит. Лучше положиться на правильно настроенные системы логирования и мониторинга.

Но что, если нам-таки нужен дебаггинг, и при этом мы хотим, чтобы docker-образ имел наименьший размер?

#лонгрид
Please open Telegram to view this post
VIEW IN TELEGRAM
👍131
3️⃣ Уменьшаем базовые образы с помощью Alpine

Можно заменить distroless на Alpine-образ.

Alpine Linux — это ориентированный на безопасность, легкий дистрибутив на основе musl libc и busybox. Но не будем верить на слово, а лучше проверим.

Запускаем Dockerfile с использованием node:8-alpine:

FROM node:8 as build
WORKDIR /app
COPY package.json index.js ./
RUN npm install
FROM node:8-alpine
COPY --from=build /app /
EXPOSE 3000
CMD ["npm", "start"]

Создаем образ:

$ docker build -t node-alpine .

Проверяем размер:

$ docker images | grep node-alpine
node-alpine aa1f85f8e724 69.7MB

На выходе имеем 69.7MB — это даже меньше, чем distroless-образ.

Проверим, можно ли подключиться к работающему контейнеру (в случае с distrolles-образом мы не могли этого сделать).

Запускаем контейнер:

$ docker run -p 3000:3000 -ti --rm --init node-alpine
Example app listening on port 3000!

И подключаемся:

$ docker exec -ti 9d8e97e307d7 bash
OCI runtime exec failed: exec failed: container_linux.go:296:
starting container process caused "exec: \"bash\":
executable file not found in $PATH": unknown

Неудачно. Но, возможно, у контейнера есть sh'ell…:

$ docker exec -ti 9d8e97e307d7 sh / #

Отлично! У нас получилось подключиться к контейнеру, и при этом его образ имеет ещё и меньший размер. Но и тут не обошлось без нюансов.

Alpine-образы основаны на muslc — альтернативной стандартной библиотеке для C. В то время, как большинство Linux-дистрибутивов, таких как Ubuntu, Debian и CentOS, основаны на glibc. Считается, что обе эти библиотеки предоставляют одинаковый интерфейс для работы с ядром.

Однако у них разные цели: glibc является наиболее распространенной и быстрой, muslc же занимает меньше места и написана с уклоном в безопасность. Когда приложение компилируется, как правило, оно компилируется под какую-то определенную библиотеку C. Если потребуется использовать его с другой библиотекой, придется перекомпилировать.

Другими словами, сборка контейнеров на Alpine-образах может привести к неожиданному развитию событий, поскольку используемая в ней стандартная библиотека C отличается. Разница будет заметна при работе с прекомпилируемыми бинарниками, такими как расширения Node.js для C++.

Например, готовый пакет PhantomJS не работает на Alpine.

Так какой же базовый образ выбрать?

Alpine, distroless или ванильный образ — решать, конечно, лучше по ситуации.

Если имеем дело с prod-ом и важна безопасность, возможно, наиболее уместным будет distroless.

Каждый бинарник, добавленный к Docker-образу, добавляет определенный риск к стабильности всего приложения. Этот риск можно уменьшить, имея только один бинарник, установленный в контейнере.

Например, если злоумышленник смог найти уязвимость в приложении, запущенном на базе distroless-образа, он не сможет запустить в контейнере shell, потому что его там нет!

Если же по каким-то причинам размер docker-образа для вас крайне важен, определенно стоит присмотреться к образам на основе Alpine.

Они реально маленькие, но, правда, ценой совместимости. Alpine использует немного другую стандартную библиотеку C — muslc, так что иногда будут всплывать какие-то проблемы. С примерами можно ознакомиться по ссылкам: https://github.com/grpc/grpc/issues/8528 и https://github.com/grpc/grpc/issues/6126.

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

Да, они большие, но зато максимально похожи на полноценную машину с установленной Ubuntu. Кроме того, доступны все бинарники в ОС.

#лонгрид
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🤩1
This media is not supported in your browser
VIEW IN TELEGRAM
Всем DevOps! 🖖
Сегодня — делимся небольшой подборкой про деплой.

▪️Самая полезная ссылка. Можно получить ответ на вопрос «Когда лучше деплоить в продакшен» (спойлер: сегодня это могут делать Рыбы, Стрельцы и Овны 🤝)

▪️Ладно, сейчас будет и правда полезная ссылка. В этом репозитории подробно рассказывается про разные стратегии деплоя в Kubernetes: ramped, recreate, blue/green, canary, A/B-тестирование и т.д. Можно визуализировать с помощью Prometheus и Grafana. Есть и в формате статьи с наглядными схемами.

▪️Серия статей про канареечный деплой в k8s с использованием разных инструментов: часть 1 (Gitlab CI), часть 2 (Argo Rollouts), часть 3 (Istio), часть 4 (Jenkins-X, Istio и Flagger). На русском языке.

P.S. Если вы знаете какой-то классный материал, инструмент, увидели интересную новость, хотите задать вопрос, рассказать интересный случай из практики — и поделиться этим с сообществом — пишите! Ну или в комменты :)

#статьи #интересное #memes
👍12😁5
Станислав Тибекин, CVO компании Nixys, рассказал про разные формы DevOps-подряда.

Сможете больше узнать о потребностях бизнеса и продуктовой разработки, о том, как найти подход к каждому проекту, и о том, как сильно DevOps-инженеры влияют на успех продукта в целом.

➡️ Приятного чтения!

#статья_Nixys
👍8🔥32
Всем DevOps! 🖖

Рады поделиться полезными материалами про Kubernetes Network Policy

Сетевые политики (Network Policies) Kubernetes позволяют настроить сетевое взаимодействие между группами подов и узлами сети.

▪️Репозиторий kubernetes-network-policy-recipes — содержит различные варианты использования сетевых политик Kubernetes и примеры файлов YAML, которые можно просто скопировать и вставить использовать при настройке.

▪️Интерактивный конструктор Network Policies для Kubernetes — помогает создавать, визуализировать и изучать сетевые политики Kubernetes.

▪️Репозиторий с тестами для Kubernetes Network Policies

▪️Отличное руководство по сетевой модели Kubernetes — руководство довольно длинное и разделено на несколько разделов: базовая терминология Kubernetes, сетевая модель Kubernetes, подробное обсуждение маршрутизации трафика в Kubernetes с использованием нескольких различных вариантов. Прилагается глоссарий сетевых терминов.

#статьи
👍11🔥6
Всем DevOps! 🖖
Как прошли выходные?

Предлагаем начать неделю со статьи под кодовым названием «pipeline to hell», точнее — как случайно не сделать такой пайплайн.

Вообще статья называется «CI/CD Security: What is It, Risks & Best Practices»: почему безопасность CI/CD имеет решающее значение, OWASP Top 10 CI/CD рисков безопасности, как сделать безопасный пайплайн и прочие полезные рекомендации.

Примерное время прочтения: 27 минут, нужно использовать VPN :(

#статьи
7👍3
Представляем nxs-data-anonymizer — удобный инструмент для анонимизации баз данных 🔥

И не просто инструмент, а open source инструмент компании Nixys! Поддерживает PostgreSQL (все версии) и MySQL/MariaDB/Percona (все версии).

Решение получилось достаточно гибким и простым в эксплуатации, и строится на следующих основных идеях:

⚙️ Потоковая обработка данных. Не обязательно предварительно готовить и сохранять где-то на диске дамп исходной базы. Инструмент может менять на лету данные, которые ему передаются на stdin. А выдавать всё — на stdout.

⚙️ Значения описываются Go template. То, на что вы хотите заменить нужные вам ячейки в таблице, определяется шаблонами как в Helm, который многим должен быть знаком.

⚙️ Использование условий и данных других ячеек в строке. Фильтры могут быть гибкими и делать те или иные подстановки в зависимости от значений других (или даже себя самого) ячеек в той же строке;

⚙️ Проверка уникальности данных.

Подробно рассказали про инструмент в статье на Хабре! Делитесь вашим мнением в комментариях :)

И, конечно, заходите в репозиторий — пользуйтесь инструментом, ставьте звездочки, оставляйте PR, рассказывайте коллегам 🦾

💻 Ссылка на GitHub

#open_source #статья_Nixys
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16👍10🎉6
Мы не договорили! 😁 Недавно делали подборку про Network Policy в Kubernetes, сегодня хочется сделать тематический день и рассказать про управление трафиком в Kubernetes-кластере с Calico.

Поехали! 💻

Одно из ключевых и очевидных преимуществ Calico перед другими плагинами — это значительное расширение функционала для настройки сетевых политик — возможность в качестве источников и целей при создании правил задавать диапазоны портов и IP-адресов, протоколы, атрибуты HTTP-запросов, и даже возможность задавать логирование определенного трафика.

Помимо этого Calico добавляет свою политику GlobalNetworkPolicy. Она позволяет применять набор правил доступа по селектору не только для pod’ов, но и для групп хостов/контейнеров/pod’ов, и контролировать применение мер безопасности для различных цепочек путей трафика с помощью таких параметров, как preDNAT, doNotTrack и applyOnForward.

Задачу по обеспечению базовых принципов безопасности мы условно разделим на две:

1)
на подзадачу по настройке взаимодействия между pod’ами

2) на подзадачу по настройке доступа к узлу в целом

Решить первую подзадачу можно при помощи такой сущности Kubernetes как NetworkPolicies и при этом можно расширить функционал данной сущности, если использовать её с api, предоставляемого Calico. Для решения второй подзадачи мы будем использовать сущность GlobalNetworkPolicy. По ходу дела так же будем анализировать детали и начнем с Zero Trust Networking.

Zero Trust Networking

Первое, что стоит учесть при написании сетевых политик, это то, что и Kubernetes, и Calico считают наилучшим подход Zero Trust Networking, то есть по умолчанию запросы из используемой сети всегда считаются враждебными.

Согласно данной концепции существуют следующие требования к контролю доступа:

*
Правила применяются ко всем сетевым подключениям (не только к тем, которые пересекают границы защищаемой зоны).
* Идентификация удаленного endpoint всегда основана на нескольких критериях, включая надежные криптографические доказательства идентичности. В частности, идентификаторы сетевого уровня, такие как IP-адрес и порт, сами по себе недостаточны, поскольку могут быть подделаны враждебной сетью.
* Все ожидаемые и разрешенные сетевые подключения явно указаны в белом списке. Любое соединение, явно не занесенное в белый список, отклоняется.
* Трафик от скомпрометированных workload (pod/VM/container) не должен иметь возможности обойти применение сетевых политик.

Во многих Zero Trust Networks также реализуется шифрование всего сетевого трафика. Это не является обязательным требованием (если речь идет не о передаче приватных данных), но для соответствия критериям Zero Trust Networks шифрование должно использоваться для каждого сетевого соединения.

Эти принципы влияют, к примеру, на следующее: если есть какая-либо сущность, имеющая метку, то по умолчанию весь трафик для неё разрешён. Но если будет создана хоть одна Policy, в которой будет фигурировать метка конкретной сущности, то для этой сущности будет запрещён весь трафик, кроме того, который был явно разрешён в только что созданной или уже имеющихся политиках.

Аналогично с HostEndpoint, как только он будет создан, весь трафик к хосту будет запрещен, кроме определенного перечня портов, который останется открытым. Причем, даже если вы создадите политики, которые явно запрещают доступ к этим портам, они останутся открытыми.

Для того, чтобы запретить доступ к этим портам нужно будет изменить конфигурацию Felix. Felix — это компонент Calico, демон, запущенный на всех машинах, которые обслуживает Calico.

*️⃣1/6: продолжение следует :)

#лонгрид
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16👍4