Table of Contents

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

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

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

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

Модуль 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

server# apt update

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

gate:~# ###git -C conf/ pull

gate:~# sh conf/dhcp.sh
# 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

2.2 Развертывание GitLab

kube1:~/gitlab# sed -i -e 's/server.corpX/gitlab.corpX/' docker-compose.yml
...
    privileged: true
...
      - '22:22'
...
#      - '/etc/gitlab:/etc/gitlab'
...
server# scp /opt/freeipa-data/etc/ipa/ca.crt kube1:/tmp/

kube1:~/gitlab# kubectl -n my-gitlab-ns create configmap ca-crt --from-file=/tmp/ca.crt
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
#                  apt update && DEBIAN_FRONTEND=noninteractive apt install msmtp-mta bsd-mailx -y
#                  echo -e 'account default\nhost mail.corpX.un' > /etc/msmtprc
...   
          volumeMounts:
            - name: gitlab-tls-volume
              subPath: tls.crt
              mountPath: /etc/gitlab/ssl/gitlab.corpX.un.crt
            - name: gitlab-tls-volume
              subPath: tls.key
              mountPath: /etc/gitlab/ssl/gitlab.corpX.un.key
#            - name: ca-crt-volume
#              subPath: ca.crt
#              mountPath: /etc/gitlab/tmp/ca.crt
...
      hostname: gitlab
...
      volumes:
        - name: gitlab-tls-volume
          secret:
            secretName: gitlab-tls
#        - name: ca-crt-volume
#          configMap:
#            name: ca-crt
...
kube1:~/gitlab# cat gitlab-service.yaml
...
spec: 
  loadBalancerIP: 192.168.X.65
  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 Стратегии развертывания и масштабирование нагрузки

kube1:~/webd-k8s# cat my-webd-deployment.yaml
...
        image: httpd
        lifecycle:
...
                cd /usr/local/apache2/htdocs/
                echo "<h1>Hello from htwebd on $(hostname) ver1.1</h1>" > index.html
kube1:~/webd-k8s# cp my-webd-deployment.yaml my-webd-deployment2.yaml
kube1:~/webd-k8s# cp my-webd-service.yaml my-webd-service2.yaml
...

2.4 ArgoCD и универсальный Helm Chart

kube1:~/webd-k8s# kubectl delete ns my-ns

kube1:~/webd-k8s# curl -fsSL https://val.bmstu.ru/unix/uni-webd-chart.tgz | tar xzvf -

kube1:~/webd-k8s# less uni-webd-chart/values.yaml
...
service:
  port: 80
...
kube1:~/webd-k8s# mkdir -p apps/htwebd/

kube1:~/webd-k8s# cat apps/htwebd/values.yaml
hostname: htwebd

replicaCount: 2
image:
  repository: httpd
kube1:~/webd-k8s# cat env.yaml
domain: corpX.un
kube1:~/webd-k8s# helm template my-htwebd uni-webd-chart/ -f apps/htwebd/values.yaml -f env.yaml
server# scp /opt/freeipa-data/etc/ipa/ca.crt kube1:/usr/local/share/ca-certificates/

server# ssh kube1 update-ca-certificates
kube1:~/webd-k8s# mkdir apps/ehwebd

kube1:~/webd-k8s# cp uni-webd-chart/values.yaml apps/ehwebd/

...

kube1:~/webd-k8s# helm template my-ehwebd uni-webd-chart/ -f apps/ehwebd/values.yaml -f env.yaml

Модуль 3: Безопасность в DevOps

Модуль 4: Восстановление кластера после сбоев

Черновик

DevSecOps

Промышленные решения

client1:~# time docker build -t gitlab.corpX.un:5000/student/gowebd:ver1.1 gowebd/
...
client1:~# time docker build -t gitlab.corpX.un:5000/student/gowebd:ver1.2 gowebd/
server#
cp /opt/freeipa-data/etc/ipa/ca.crt kube1:/usr/local/share/ca-certificates/
update-ca-certificates
systemctl reload docker
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
'