DevSecOps и промышленные решения
Программа курса
Модуль 0. Подготовка к занятию
Узнать и записать свой номер стенда: X=
Сообщить его в чат преподавателю
Модуль 1: Развертывание инфраструктуры предприятия
Теория
Лабораторные работы: Развертывание стенда и kubernetes кластера
1.1 Схема стенда, импорт, настройка и запуск VM gate и server
Запустите с правами Administrator
C:\cmder\cmder.exe
bash
cd
test -d conf && rm -rf conf
git clone http://val.bmstu.ru/unix/conf.git
cd conf/virtualbox/
!!! 10 - это номер курса, вместо X укажите Ваш номер стенда, если не знаете его, спросите преподавателя !!!
./setup.sh X 10
1.2 Настройка сети VM gate и server
# sh net_gate.sh
# init 6
# sh net_server.sh
# init 6
1.3 Развертывание FreeIPA
Развертывание FreeIPA
С использованием docker compose ? попробовать из репозитория вендора, для решения проблемы доступа к ДНС из других контейнеров на этой системе? или убрать на gate.isp.un A запись server.corpX.un
1.4 Развертывание Kubernetes
gate:~# ###git -C conf/ pull
gate:~# sh conf/dhcp.sh
Настройка MAC адресов 08:00:27:12:34:5N (для получения назначенного IP через
Сервис DHCP) и запуск kube1-4
Настройка клиента
DNS на gate и server
# cat /etc/resolv.conf
search corpX.un
nameserver 192.168.X.10
# host kubeN
1.5 Установка и инициализация компьютеров пользователей
Модуль 2: Развертывание приложений в кластере Kubernetes
2.1 Развертывание Keycloak
kube1:~# kubectl create ns my-keycloak-ns
kube1:~# kubectl create secret tls keycloak-tls --key /tmp/keycloak.key --cert /tmp/keycloak.crt -n my-keycloak-ns
Сервис Keycloak в
Kubernetes (версия 25.2.0, tls: true, postgresql.enabled: false, externalDatabase.host: “my-pgcluster-rw.my-pgcluster-ns”)
-
Интеграция Keycloak с
FreeIPA через LDAP
2.2 Развертывание GitLab
Использование распределённых хранилищ (
longhorn)
server# scp /opt/freeipa-data/gitlab.* kube1:/tmp/
server# scp /opt/freeipa-data/etc/ipa/ca.crt kube1:/tmp/
kubectl -n my-gitlab-ns create secret generic gitlab-tls \
--from-file=tls.crt=/tmp/gitlab.crt \
--from-file=tls.key=/tmp/gitlab.key \
--from-file=ca.crt=/tmp/ca.crt
...
privileged: true
...
- '22:22'
...
# - '/etc/gitlab:/etc/gitlab'
...
kube1:~/gitlab# kompose convert
kube1:~/gitlab# cat vol1-persistentvolumeclaim.yaml
...
storage: 2000Mi
kube1:~/gitlab# cat gitlab-deployment.yaml
...
image: ...
lifecycle:
postStart:
exec:
command:
- /bin/sh
- -c
- |
mkdir -p /etc/gitlab/trusted-certs/
cp /etc/gitlab/tmp/ca.crt /etc/gitlab/trusted-certs/ca.crt
...
volumeMounts:
- name: secret-tls-volume
subPath: tls.crt
mountPath: /etc/gitlab/ssl/gitlab.corpX.un.crt
- name: secret-tls-volume
subPath: tls.key
mountPath: /etc/gitlab/ssl/gitlab.corpX.un.key
- name: secret-tls-volume
subPath: ca.crt
mountPath: /etc/gitlab/tmp/ca.crt
...
hostname: gitlab
volumes:
- name: secret-tls-volume
secret:
secretName: gitlab-tls
...
kube1:~/gitlab# cat gitlab-service.yaml
...
spec:
loadBalancerIP: 192.168.X.66
type: LoadBalancer
...
kube1:~/gitlab# kubectl -n my-gitlab-ns apply -f vol1-persistentvolumeclaim.yaml,gitlab-service.yaml,gitlab-deployment.yaml
kube1:~/gitlab# kubectl -n my-gitlab-ns logs pods/gitlab-<TAB> -f
2.3 Стратегии развертывания и масштабирование нагрузки
server#
bash -c '
scp /opt/freeipa-data/etc/ipa/ca.crt kube1:/usr/local/share/ca-certificates/
ssh kube1 update-ca-certificates
ssh kube1 systemctl restart containerd
scp /opt/freeipa-data/etc/ipa/ca.crt kube2:/usr/local/share/ca-certificates/
ssh kube2 update-ca-certificates
ssh kube2 systemctl restart containerd
scp /opt/freeipa-data/etc/ipa/ca.crt kube3:/usr/local/share/ca-certificates/
ssh kube3 update-ca-certificates
ssh kube3 systemctl restart containerd
scp /opt/freeipa-data/etc/ipa/ca.crt kube4:/usr/local/share/ca-certificates/
ssh kube4 update-ca-certificates
ssh kube4 systemctl restart containerd
'
2.4 ArgoCD и универсальный Helm Chart
Модуль 3: Безопасность в DevOps
Инструменты для статического анализа кода
Анализ уязвимостей в контейнерах
Интеграция инструментов безопасности в CI/CD
Управление секретами и сертификатами
-
Интеграция с внешними системами идентификации
Использование IDS/IPS в Kubernetes
Модуль 4: Восстановление кластера после сбоев
Мониторинг кластера Kubernetes
Резервное копирование и восстановление данных приложений
Восстановление управляющих и рабочих узлов
Восстановление etcd
Черновик
DevSecOps
-
- Анализ кода и контейнеров на уязвимости
- Управление доступом в K8S
- Управление чувствительными данными в CI/CD (Hashicorp Vault, Mozilla Sops)
- Управление сертификатами (K8S cert-manager и FreeIPA)
Использование LDAP и OpenID для управления идентификацией (Keycloak и FreeIPA)
IDS/IPS (Suricata)
Промышленные решения
ArgoCD и универсальный Helm Chart
Распределенные блочные хранилища в K8S (Longhorn)
Операторы K8S и СУБД (CloudNativePG)
Брокеры сообщения (Kafka или RabbitMQ)
Service Mesh (Istio)