User Tools

Site Tools


devsecops_и_промышленные_решения

This is an old revision of the document!


DevSecOps и промышленные решения

Программа курса

Модуль 0. Подготовка к занятию

  1. Узнать и записать свой номер стенда: X=
  2. Сообщить его в чат преподавателю

Модуль 1: Развертывание инфраструктуры предприятия

Теория

Лабораторные работы: Развертывание стенда и kubernetes кластера

1.1 Схема стенда, импорт, настройка и запуск VM gate и server

  • !!! kubeN 8Gb RAM + 4 CPU!!!
Запустите с правами 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

  • gate
# sh net_gate.sh

# init 6
  • server
# sh net_server.sh

# init 6
  • Создать в Putty профили gate, server и подключиться

1.3 Развертывание FreeIPA

  • Развертывание FreeIPA С использованием docker compose ? попробовать из репозитория вендора, для решения проблемы доступа к ДНС из других контейнеров на этой системе? или убрать на gate.isp.un A запись server.corpX.un

1.4 Развертывание Kubernetes

  • Настройка сервера DHCP на gate
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 (??? может в k8s?) Развертывание GitLab

# cat docker-compose.yml
...
    userns_mode: 'host'
...
        external_url 'https://server.corpX.un:4443'
...
      - '4443:4443'
...
  • Создать УЗ student через REST API интерфейс ??? Может это в ДЕВОПС2 а здесь интегрировать с KC?
  • ??? Может, не понадобится, или не сразу
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
'

kubeN#
crictl pull server.corpX.un:5000/student/gowebd
crictl images
crictl rmi server.corpX.un:5000/student/gowebd

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”)

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
...
      - '2222:22'
...
#      - '/etc/gitlab:/etc/gitlab'
...
kube1:~/gitlab# cat docker-compose.yml
services:
  gitlab:
    privileged: true
    image: 'gitlab/gitlab-ce:18.6.2-ce.0'
#    image: 'gitlab/gitlab-ce:latest'
    restart: always
    hostname: 'gitlab.corpX.un'
    environment:
      GITLAB_ROOT_PASSWORD: "strongpassword"
      GITLAB_OMNIBUS_CONFIG: |
        prometheus_monitoring['enable'] = false
        gitlab_rails['registry_enabled'] = true
        gitlab_rails['registry_host'] = "gitlab.corpX.un"
        external_url 'https://gitlab.corpX.un'
        registry_external_url 'https://gitlab.corpX.un:5000'
        gitlab_rails['registry_port'] = "5050"
        registry['registry_http_addr'] = "127.0.0.1:5050"
    ports:
      - '443:443'
      - '2222:22'
      - '5000:5000'
    volumes:
      - vol1:/var/opt/gitlab
    shm_size: '256m'
volumes:
  vol1:
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
...
      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
  • Стратегии развертывания и масштабирование нагрузки
  • 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)
devsecops_и_промышленные_решения.1765783449.txt.gz · Last modified: 2025/12/15 10:24 by val