Данный репозиторий содержит глобальные файлы конфигураций, необходимые для развертывания инфраструктуры.
Обратите внимание: все действия выполняются на операционной системе
Ubuntu 24.04.3 LTSот имени пользователяroot.
Для того чтобы развернуть инфраструктуру, выполните следующие команды:
# change ssh port
nano sshd_config # uncomment `Port 22` & set it to `1024`
systemctl daemod-reload
systemctl restart ssh.socket
# firewall
ufw default deny incoming
ufw default allow outgoing
ufw allow 1024/tcp
ufw allow 6443/tcp
ufw allow 10250/tcp
ufw enable
# cri-o & k8s pkgs repos
apt-get update
apt-get install -y software-properties-common curl
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.34/deb/Release.key | gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.34/deb/ /" | tee /etc/apt/sources.list.d/kubernetes.list
curl -fsSL https://download.opensuse.org/repositories/isv:/cri-o:/stable:/v1.34/deb/Release.key | gpg --dearmor -o /etc/apt/keyrings/cri-o-apt-keyring.gpg
echo "deb [signed-by=/etc/apt/keyrings/cri-o-apt-keyring.gpg] https://download.opensuse.org/repositories/isv:/cri-o:/stable:/v1.34/deb/ /" | tee /etc/apt/sources.list.d/cri-o.list
# cri-o & k8s pkgs
apt-get update
apt-get install -y cri-o kubelet kubeadm kubectl
apt-mark hold kubelet kubeadm kubectl cri-o
# cri-o
systemctl start crio.service
nano /etc/crio/crio.conf.d/*.conf # add `pause_image="registry.k8s.io/pause:3.10.1"` after `[crio.image]`
systemctl restart crio.service
# k8s env
swapoff -a
sed -ri '/\sswap\s/s/^#?/#/' /etc/fstab
modprobe br_netfilter
echo "br_netfilter" >> /etc/modules
echo 1 > /proc/sys/net/ipv4/ip_forward
# k8s repo
apt install -y git
cd /home
git config credential.helper store
git clone https://github.com/sogeor/k8s.git
# k8s cluster
cd /home/k8s
kubeadm init --config misc/kubeadm/init.yaml
export KUBECONFIG=/etc/kubernetes/admin.conf
# k8s env
nano ~/.bashrc # add to eof `export KUBECONFIG=/etc/kubernetes/admin.conf`
# k8s post-setup
kubectl taint nodes --all node-role.kubernetes.io/control-plane:NoSchedule-Теперь необходимо прописать следующую команду:
kubectl edit configmap -n kube-system kube-proxyДалее найти часть конфигурации, содержащую:
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfigurationПосле этого задать следующие значения:
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
ipvs:
strictARP: trueДалее введите следующие команды:
# k8s proxy
kubectl delete pod -n kube-system -l k8s-app=kube-proxy
# flannel
kubectl apply -f https://github.com/flannel-io/flannel/releases/download/v0.27.4/kube-flannel.yml
# metallb
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.15.3/config/manifests/metallb-native.yaml
cd /home/k8s
kubectl apply -f misc/metallb
# metrics-server
cd /home/k8s
kubectl apply -f misc/metrics-server
# istio
cd
curl -L https://istio.io/downloadIstio | sh -
mv istio-*/ istio/
export PATH=~/istio/bin:$PATH
# istio env
nano ~/.bashrc # add to eof `export PATH=~/istio/bin:$PATH`
# istio install
cd /home/k8s
istioctl install -f misc/istioctl/install.yaml
# cert manager
kubectl apply --server-side -f https://github.com/cert-manager/cert-manager/releases/download/v1.19.1/cert-manager.yaml
curl -fsSL -o cmctl https://github.com/cert-manager/cmctl/releases/latest/download/cmctl_linux_amd64
chmod +x cmctl
sudo mv cmctl /usr/local/bin
# configure istio gateway & cert manager
kubectl apply -f misc/istio-system
# prometheus operator
kubectl apply -f misc/monitoring/namespace.yaml
TMPDIR=$(mktemp -d)
LATEST=$(curl -s https://api.github.com/repos/prometheus-operator/prometheus-operator/releases/latest | jq -cr .tag_name)
cd $TMPDIR
curl -s "https://raw.githubusercontent.com/kubernetes-sigs/kustomize/master/hack/install_kustomize.sh" | bash
curl -s "https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/refs/tags/$LATEST/kustomization.yaml" > kustomization.yaml
curl -s "https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/refs/tags/$LATEST/bundle.yaml" > bundle.yaml
./kustomize edit set namespace monitoring && kubectl create -k "$TMPDIR"
# postgres operator
kubectl apply -f https://raw.githubusercontent.com/cloudnative-pg/cloudnative-pg/release-1.27/releases/cnpg-1.27.1.yaml
kubectl apply -f misc/cnpg-system
# mongodb operator
kubectl apply --server-side -f https://raw.githubusercontent.com/percona/percona-server-mongodb-operator/v1.21.1/deploy/crd.yaml
kubectl apply -f misc/psmdb
# kafka operator
kubectl apply -f kafka/namespace.yaml
kubectl create -f 'https://strimzi.io/install/latest?namespace=kafka' -n kafka
# secrets reflector
kubectl -n kube-system apply -f https://github.com/emberstack/kubernetes-reflector/releases/latest/download/reflector.yaml
# misc
kubectl apply -f misc/namespace.yaml
kubectl apply -f misc/native-storage.yaml
kubectl apply -f misc/robots-virtual-service.yamlДля того чтобы настроить Cloudflare, выполните следующие действия:
- Войдите в Cloudflare Dashboard по адресу: https://dash.cloudflare.com.
- Выберите раздел
Account API tokens. - Нажмите
Create Token. - Возле
Edit zone DNSнажмитеUse template. - В 3-м разделе поля
Zone Resourcesвыберите ваш домен (sogeor.com). - Нажмите
Continue to summary. - Нажмите
Create Token. - Скопируйте API ключ и сохраните его для дальнейших действий.
Чтобы Cert Manager мог работать с DNS записями домена самостоятельно, выполните следующие команды:
CLOUDFLARE_TOKEN= # Укажите здесь API токен, полученный на 8 шаге при работе с Cloudflare
kubectl create secret generic cloudflare -n istio-system \
--type='Opaque' \
--from-literal=token=${CLOUDFLARE_TOKEN}Чтобы задать свой логин Cloudflare, обратитесь к полю
misc/istio-system/letsencrypt.yaml.
Для того чтобы начать работу с SSO сервером, выполните следующие команды:
kubectl create secret generic keycloak-postgres-cluster-role -n sso \
--type='kubernetes.io/basic-auth' \
--from-literal=username='keycloak' \
--from-literal=password=$(shuf -er -n32 {A..Z} {a..z} {0..9} | tr -d '\n')
kubectl label secret keycloak-postgres-cluster-role -n sso "cnpg.io/reload=true"
mkdir -p /root/data/sso/postgres-cluster/volume-0
mkdir /root/data/sso/postgres-cluster/volume-1
mkdir /root/data/sso/postgres-cluster/volume-2
cd /home/k8s
git pull
kubectl apply -f ssoИз-за Istio первый вход в панель администратора не удастся, пока будет существовать RequestAuthentication. Собственно
говоря, чтобы настроить Keycloak, введите следующие команды:
cd /home/k8s
git pull
kubectl detele -f misc/istio-system/request-authentication.yamlТеперь создайте пароль для bootstrap пользователя, используя следующие команды:
KC_BOOTSTRAP_PASSWORD= # Укажите здесь любой пароль для bootstrap пользователя
kubectl create secret generic keycloak-bootstrap-secret -n sso \
--type='kubernetes.io/basic-auth' \
--from-literal=username='bootstrap' \
--from-literal=password=${KC_BOOTSTRAP_PASSWORD}Далее войдите в панель администратора, расположенную по адресу: https://sso.sogeor.com/admin. Выполните следующие
действия в области master:
При входе в панель используйте логин
bootstrapи пароль, указанный на предыдущем шаге.
- Во вкладке
GroupsнажмитеCreate group. - В открывшемся окне введите в поле имени
Cluster Operatorsи нажмитеCreate. - Выберите группу
Cluster Operatorsв списке доступных. - В разделе
Role mappingнажмитеAssign role, выберитеRealm roles. - В открывшемся окне поставьте галочку напротив роли
adminи нажмитеAssign. - Во вкладке
UsersнажмитеAdd user. - В поле
Required user actionsдобавьтеUpdate Password. - В поле
Email verifiedустановите переключатель в положениеOn. - Заполните поля
Username,Email,First name,Last name. - Нажмите
Join Groups. - В открывшемся окне поставьте галочку напротив группы
Cluster Operatorsи нажмитеJoin. - Нажмите
Create. - В разделе
CredentialsнажмитеSet password. - В поля
PasswordиPassword confirmationвведите временный пароль. - В поле
Temporaryустановите переключатель в положениеOn. - Нажмите
Save, потомSave password. - В правом верхнем углу нажмите на
bootstrap, потом наSign out. - Войдите в свой аккаунт, используя временный пароль, заданный на 14 шаге.
- В разделе
Usersпоставьте галочку напротив пользователяbootstrapи нажмитеDelete user. - В разделе
Manage realmsнажмитеCreate realm. - В поле
Realm nameвведитеpublic. - Нажмите
Create. - Нажмите
Create realm. - В поле
Realm nameвведитеsystem. - Нажмите
Create. - В разделе
ClientsнажмитеCreate client. - В поле
Client IDвведитеservice-oauth2-proxy. - Нажмите
Next. - В поле
Client authenticationпереключите переключатель в положениеOn. - В поле
Authentication flowоставьте галочку только уStandard flow. - В поле
PKCE MethodвыберитеS256. - Нажмите
Next. - В поле
Valid redirect URIsдобавьтеhttps://service.sogeor.com/oauth2/callback. - Нажмите
Save. - В разделе
Credentialsскопируйте и сохраните пароль из поляClient Secret— он понадобится для настройки OAuth Proxy для мониторинга. - В разделе
ClientsнажмитеCreate client. - В поле
Client IDвведитеapi-oauth2-proxy. - Нажмите
Next. - В поле
Client authenticationпереключите переключатель в положениеOn. - В поле
Authentication flowоставьте галочку только уStandard flow. - В поле
PKCE MethodвыберитеS256. - Нажмите
Next. - В поле
Valid redirect URIsдобавьтеhttps://api.sogeor.com/oauth2/callback. - Нажмите
Save. - В разделе
Credentialsскопируйте и сохраните пароль из поляClient Secret— он понадобится для настройки OAuth Proxy для микросервисов. - Во вкладке
Realm rolesнажмитеCreate role. - В поле
Role nameзадайтеapi-explorer. - Нажмите
Save. - Во вкладке
Realm rolesнажмитеCreate role. - В поле
Role nameзадайтеoperator. - Нажмите
Save. - В разделе
Associated rolesнажмитеAssign roleи выберитеRealm roles. - В открывшемся окне поставьте галочку напротив роли
api-exporterи нажмитеAssign. - Во вкладке
GroupsнажмитеCreate group. - В открывшемся окне введите в поле имени
Cluster Operatorsи нажмитеCreate. - Выберите группу
Cluster Operatorsв списке доступных. - В разделе
Role mappingнажмитеAssign role, выберитеRealm roles. - В открывшемся окне поставьте галочку напротив роли
operatorи нажмитеAssign. - Во вкладке
UsersнажмитеCreate new user. - В поле
Required user actionsдобавьтеUpdate Password. - В поле
Email verifiedустановите переключатель в положениеOn. - Заполните поля
Username,Email,First name,Last name. - Нажмите
Join Groups. - В открывшемся окне поставьте галочку напротив группы
Cluster Operatorsи нажмитеJoin. - Нажмите
Create. - В разделе
CredentialsнажмитеSet password. - В поля
PasswordиPassword confirmationвведите временный пароль и запомните его — он понадобится при входе в OAuth Proxy для мониторинга. - В поле
Temporaryустановите переключатель в положениеOn. - Нажмите
Save, потомSave password.
Далее необходимо применить RequestAuthentication обратно. Для этого выполните следующие команды:
cd /home/k8s
git pull
kubectl apply -f misc/istio-system/request-authentication.yamlДля того чтобы начать работу с Prometheus, выполните следующие команды:
cd /home/k8s
git pull
kubectl apply -f misc/monitoring/prometheusДля того чтобы начать работу с Alert Manager, выполните следующие команды:
cd /home/k8s
git pull
kubectl apply -f misc/monitoring/alertmanagerДля того чтобы начать работу с OAuth Proxy, выполните следующие команды:
KC_SERVICE_OAUTH2_PROXY_PASSWORD= # Укажите здесь пароль, полученный на 35 шаге при настройке Keycloak
kubectl create secret generic oauth2-proxy -n service \
--type='Opaque' \
--from-literal=client-id='service-oauth2-proxy' \
--from-literal=client-secret=${KC_SERVICE_OAUTH2_PROXY_PASSWORD} \
--from-literal=cookie-secret=$(shuf -er -n32 {A..Z} {a..z} {0..9} | tr -d '\n')
cd /home/k8s
git pull
kubectl apply -f service/oauth2-proxyДля того чтобы начать работу с Grafana, выполните следующие команды:
mkdir -p /root/data/service/grafana/volume
cd /home/k8s
git pull
kubectl apply -f service/grafanaВойдите в аккаунт администратора по адресу: https://service.sogeor.com/grafana. В качестве логина и пароля используйте
admin. Поменяйте имя пользователя и прочие данные в профиле, если необходимо. Установите язык на русский.
Далее необходимо подключить Prometheus к Grafana. Для этого выполните следующие действия:
- В разделе подключения выберите
Добавление нового подключения, потомPrometheus. - Нажмите
Добавить новый источник данных. - В поле
Prometheus server URLвведитеhttp://prometheus.monitoring.svc.cluster.local:8080/prometheus. - Нажмите
Сохранить и протестировать.
Также можно добавить некоторые панели в соответствующем разделе Дашборды, если требуется.
Для того чтобы подготовить Nexus к работе, а также создать возможность для мониторинга его состояния, введите следующие команды:
kubectl create secret generic nexus-postgres-cluster-role -n nexus \
--type='kubernetes.io/basic-auth' \
--from-literal=username='nexus' \
--from-literal=password=$(shuf -er -n32 {A..Z} {a..z} {0..9} | tr -d '\n')
kubectl label secret nexus-postgres-cluster-role -n nexus "cnpg.io/reload=true"
mkdir -p /root/data/nexus/nexus/volume
mkdir -p /root/data/nexus/postgres-cluster/volume-0
mkdir /root/data/nexus/postgres-cluster/volume-1
mkdir /root/data/nexus/postgres-cluster/volume-2
cd /home/k8s
git pull
kubectl apply -f nexusДля того чтобы подготовить Nexus к работе, а также создать возможность для мониторинга его состояния, введите следующие команды:
Далее войдите в аккаунт администратора, перейдя по адресу: https://nexus.sogeor.com и нажав на иконку человека в правом верхнем углу. Чтобы посмотреть временный пароль администратора, введите следующую команду:
cat /root/data/nexus/nexus/volume/admin.passwordТеперь необходимо выполнить следующие действия:
- В разделе
Settings -> Security -> UsersнажмитеCreate local user. - Задайте поля
ID,Fist name,Last name,Email,Password,Confirm password. - В поле
Statusустановите значениеActive. - В разделе
Rolesперетащите рольnx-adminв колонкуGranted. - Нажмите
Create local user. - Выберите пользователя
admin. - В поле
Statusустановите значениеDisabled. - Нажмите
Save. - Перезайдите в Nexus, но под своим аккаунтом. Учтите, что нужно использовать значение из поля
ID, а неEmailв качестве логина. - В разделе
Settings -> Security -> RolesнажмитеCreate role. - В поле
Typeустановите значениеNexus role. - В поле
Role IDустановите значениеnx-github. - В поле
Role Nameустановите значениеnx-github. - Нажмите
Modify Applied Privileges. - Найдите и поставьте галочку напротив:
nx-repository-admin-*-*-*иnx-repository-view-*-*-*. - Нажмите
Confirm, потомSave. - Нажмите
Create role. - В поле
Typeустановите значениеNexus role. - В поле
Role IDустановите значениеnx-prometheus. - В поле
Role Nameустановите значениеnx-prometheus. - Нажмите
Modify Applied Privileges. - Найдите и поставьте галочку напротив
nx-metrics-all. - Нажмите
Confirm, потомSave. - Нажмите
Create role. - В поле
Typeустановите значениеNexus role. - В поле
Role IDустановите значениеnx-k8s. - В поле
Role Nameустановите значениеnx-k8s. - Нажмите
Modify Applied Privileges. - Найдите и поставьте галочку напротив:
nx-repository-admin-docker-docker-github-browse,nx-repository-admin-docker-docker-github-read,nx-repository-admin-docker-docker-hub-browse,nx-repository-admin-docker-docker-hub-read,nx-repository-admin-docker-docker-public-browse,nx-repository-admin-docker-docker-public-read,nx-repository-admin-docker-docker-releases-browse,nx-repository-admin-docker-docker-releases-read,nx-repository-admin-docker-docker-snapshots-browse,nx-repository-admin-docker-docker-snapshots-read,nx-repository-view-docker-*-browseиnx-repository-view-docker-*-read. - Нажмите
Confirm, потомSave. - В разделе
Settings -> Security -> UsersнажмитеCreate local user. - В поле
IDустановите значениеnx-github. - В поле
First nameустановите значениеGithub. - В поле
Last nameустановите значениеWorkflow. - В поле
Emailустановите значениеexample@gmail.com. - Задайте поля
PasswordиConfirm password, а также запомните пароль — он понадобится для CI/CD. - В поле
Statusустановите значениеActive. - В разделе
Rolesперетащите рольnx-githubв колонкуGranted. - Нажмите
Save. - Нажмите
Create local user. - В поле
IDустановите значениеnx-prometheus. - В поле
First nameустановите значениеNexus. - В поле
Last nameустановите значениеPrometheus. - В поле
Emailустановите значениеexample@gmail.com. - Задайте поля
PasswordиConfirm password, а также запомните пароль — он понадобится для мониторинга Nexus. - В поле
Statusустановите значениеActive. - В разделе
Rolesперетащите рольnx-prometheusв колонкуGranted. - Нажмите
Save. - Нажмите
Create local user. - В поле
IDустановите значениеnx-k8s. - В поле
First nameустановите значениеK8s. - В поле
Last nameустановите значениеCluster. - В поле
Emailустановите значениеexample@gmail.com. - Задайте поля
PasswordиConfirm password, а также запомните пароль — он понадобится для K8s. - В поле
Statusустановите значениеActive. - В разделе
Rolesперетащите рольnx-k8sв колонкуGranted. - Нажмите
Save. - В разделе
Realmsнажмите наDocker Bearer Token Realm, чтобы активировать. - В разделе
Settings -> Repository -> Repositoriesнажмитеnuget-group. - Нажмите
Delete repository, потомYes. - Нажмите
nuget-hosted, потомDelete repository, а послеYes. - Нажмите
nuget-org-proxy, потомDelete repository, а послеYes. - Нажмите
Create repository. - Выберите
docker (proxy). - В поле
Nameукажитеdocker-github. - В поле
Enable Docker V1 APIпоставьте галочку. - В поле
Remote storageукажитеhttps://ghcr.io. - В поле
Use the Nexus Repository truststoreпоставьте галочку. - Нажмите
View certificate. - Нажмите
Add certificate to truststore. - Нажмите
Create repository. - Нажмите
Create repository. - Выберите
docker (proxy). - В поле
Nameукажитеdocker-hub. - В поле
Enable Docker V1 APIпоставьте галочку. - В поле
Remote storageукажитеhttps://registry-1.docker.io. - В поле
Use the Nexus Repository truststoreпоставьте галочку. - Нажмите
View certificate. - Нажмите
Add certificate to truststore. - Нажмите
Create repository. - Нажмите
Create repository. - Выберите
docker (hosted). - В поле
Nameукажитеdocker-releases. - В поле
Enable Docker V1 APIпоставьте галочку. - В поле
Deployment PolicyвыберитеDisable redeploy. - В поле
Proprietary Componentsпоставьте галочку. - В поле
Allow redeploy only on 'latest' tagпоставьте галочку. - Нажмите
Create repository. - Нажмите
Create repository. - Выберите
docker (hosted). - В поле
Nameукажитеdocker-snapshots. - В поле
Enable Docker V1 APIпоставьте галочку. - В поле
Deployment PolicyвыберитеAllow redeploy. - В поле
Proprietary Componentsпоставьте галочку. - Нажмите
Create repository. - Нажмите
Create repository. - Выберите
docker (group). - В поле
Nameукажитеdocker-public. - В поле
Enable Docker V1 APIпоставьте галочку. - В поле
Member repositoriesперетащите все репозитории в правую колонку и расположите их в следующем порядке:docker-snapshots,docker-releases,docker-hub,docker-github. - В поле
Proprietary Componentsпоставьте галочку. - Нажмите
Create repository.
Далее необходимо сохранить пароль для мониторинга Nexus. Для этого выполните следующие команды:
NX_PROMETHEUS_PASSWORD= # Укажите здесь пароль, заданный на 45 шаге при настройке Nexus
kubectl create secret generic nexus-prometheus-user -n nexus \
--type='kubernetes.io/basic-auth' \
--from-literal=username='nx-prometheus' \
--from-literal=password=${NX_PROMETHEUS_PASSWORD}Для того чтобы создать токены и сохранить их в K8s, выполните следующие команды:
NX_K8S_PASSWORD= # Укажите здесь пароль, заданный на 54 шаге при настройке Nexus
for suffix in github hub public releases snapshots; do
kubectl create secret docker-registry nexus-docker-${suffix} -n misc --docker-server=https://nexus.sogeor.com/docker-${suffix}/ --docker-username=nx-k8s --docker-password=${NX_K8S_PASSWORD} --docker-email=example@gmail.com
kubectl annotate secret nexus-docker-${suffix} -n misc \
"reflector.v1.k8s.emberstack.com/reflection-allowed=true" \
"reflector.v1.k8s.emberstack.com/reflection-auto-enabled=true" \
"reflector.v1.k8s.emberstack.com/reflection-auto-namespaces=api,service,web"
doneДля того чтобы начать работу с Apache Kafka, выполните следующие команды:
mkdir -p /root/data/kafka/broker/volume-0
mkdir /root/data/kafka/broker/volume-1
mkdir /root/data/kafka/broker/volume-2
mkdir -p /root/data/kafka/controller/volume-0
mkdir /root/data/kafka/controller/volume-1
mkdir /root/data/kafka/controller/volume-2
cd /home/k8s
git pull
kubectl apply -f kafkaДля того чтобы начать работу с OAuth Proxy, выполните следующие команды:
KC_API_OAUTH2_PROXY_PASSWORD= # Укажите здесь пароль, полученный на 45 шаге при настройке Keycloak
kubectl create secret generic oauth2-proxy -n api \
--type='Opaque' \
--from-literal=client-id='api-oauth2-proxy' \
--from-literal=client-secret=${KC_API_OAUTH2_PROXY_PASSWORD} \
--from-literal=cookie-secret=$(shuf -er -n32 {A..Z} {a..z} {0..9} | tr -d '\n')
cd /home/k8s
git pull
kubectl apply -f api/oauth2-proxyДля того чтобы начать работу с PostgreSQL кластером, выполните следующие команды:
for service in inventory notifications orders payments; do
kubectl create secret generic "${service}-postgres-cluster-role" -n api \
--type='kubernetes.io/basic-auth' \
--from-literal=username="${service}" \
--from-literal="password=$(shuf -er -n32 {A..Z} {a..z} {0..9} | tr -d '\n')"
kubectl label secret "${service}-postgres-cluster-role" -n api "cnpg.io/reload=true"
done
mkdir -p /root/data/api/postgres-cluster/volume-0
mkdir /root/data/api/postgres-cluster/volume-1
mkdir /root/data/api/postgres-cluster/volume-2
cd /home/k8s
git pull
kubectl apply -f api/postgres-clusterДля того чтобы начать работу с MongoDB кластером, выполните следующие команды:
kubectl create secret generic mongodb-cluster-exporter-user -n api \
--type='kubernetes.io/basic-auth' \
--from-literal=username=exporter \
--from-literal="password=$(shuf -er -n32 {A..Z} {a..z} {0..9} | tr -d '\n')"
for service in cart notifications orders payments products; do
kubectl create secret generic "${service}-mongodb-cluster-user" -n api \
--type='kubernetes.io/basic-auth' \
--from-literal=username="${service}" \
--from-literal="password=$(shuf -er -n32 {A..Z} {a..z} {0..9} | tr -d '\n')"
done
mkdir -p /root/data/api/mongodb-cluster/config-volume-0
mkdir /root/data/api/mongodb-cluster/config-volume-1
mkdir /root/data/api/mongodb-cluster/config-volume-2
mkdir /root/data/api/mongodb-cluster/volume-0
mkdir /root/data/api/mongodb-cluster/volume-1
mkdir /root/data/api/mongodb-cluster/volume-2
cd /home/k8s
git pull
kubectl apply -f api/mongodb-clusterВо-первых, необходимо получить токен Github с правами на чтение содержимого репозитория. Для этого выполните следующие действия:
- Войдите на Github, перейдя по адресу: https://github.com/settings/personal-access-tokens.
- В разделе
Fine-grained personal access tokensнажмитеGenerate new token. - В поле
Token nameустановите значениеSogeor Config Server. - В поле
Resource ownerвыберите владельца репозитория (например, sogeor). - В поле
Expirationпо желанию выберите иное значение. - В поле
Repository accessвыберитеOnly select repositories. - Нажмите
Select repositoriesи поставьте галочку возлеsogeor/configs. - В поле
Permissions, в разделеRepositories, нажмитеAdd permissions. - Поставьте галочку возле
Contents. - Нажмите
Generate token. - Нажмите
Generate token. - Скопируйте токен и сохраните его для дальнейших действий.
Во-вторых, необходимо сохранить токен Github в кластере. Для этого выполните следующие команды:
GITHUB_OWNER= # Укажите здесь владельца репозитория, выбранного на 4
GITHUB_TOKEN= # Укажите здесь токен Github, полученный на 12 шаге
kubectl create secret generic config-server-github -n api \
--type='kubernetes.io/basic-auth' \
--from-literal=username=${GITHUB_OWNER} \
--from-literal=password=${GITHUB_TOKEN}В-третьих, разверните сервер с помощью следующих команд:
cd /home/k8s
git pull
kubectl apply -f api/config-serverЕсли ваш репозиторий отличается от https://github.com/sogeor/configs, то необходимо указать иную ссылку в api/config-server/v1/deployment.yaml.
Для того чтобы развернуть сервер, выполните следующие команды:
cd /home/k8s
git pull
kubectl apply -f api/docs-serverВо-первых, создайте в system области Keycloak сервера клиент с именем api-cart-service аналогично
api-oauth2-proxy, но не задавайте поля PKCE Method и Valid redirect URIs. Не забудьте скопировать пароль клиента.
Во-вторых, сохраните логин и пароль клиента в кластере:
KC_API_CART_SERVICE_SECRET= # Укажите здесь пароль клиента api-cart-service
kubectl create secret generic cart -n api \
--type='Opaque' \
--from-literal=client-id='api-cart-service' \
--from-literal=client-secret=${KC_API_CART_SERVICE_SECRET}В-третьих, разверните микросервис с помощью следующих команд:
cd /home/k8s
git pull
kubectl apply -f api/cartВо-первых, создайте в system области Keycloak сервера клиент с именем api-inventory-service аналогично
api-oauth2-proxy, но не задавайте поля PKCE Method и Valid redirect URIs. Не забудьте скопировать пароль клиента.
Во-вторых, сохраните логин и пароль клиента в кластере:
KC_API_INVENTORY_SERVICE_SECRET= # Укажите здесь пароль клиента api-inventory-service
kubectl create secret generic inventory -n api \
--type='Opaque' \
--from-literal=client-id='api-inventory-service' \
--from-literal=client-secret=${KC_API_INVENTORY_SERVICE_SECRET}В-третьих, разверните микросервис с помощью следующих команд:
cd /home/k8s
git pull
kubectl apply -f api/inventoryВ-четвёртых, обновите настройки PgBouncer для базы данных микросервиса:
kubectl delete -f api/postgres-cluster/pooler-rw.yaml
kubectl apply -f api/postgres-cluster/pooler-rw.yamlВо-первых, создайте в system области Keycloak сервера клиент с именем api-notifications-service аналогично
api-oauth2-proxy, но не задавайте поля PKCE Method и Valid redirect URIs. Не забудьте скопировать пароль клиента.
Во-вторых, сохраните логин и пароль клиента в кластере:
KC_API_NOTIFICATIONS_SERVICE_SECRET= # Укажите здесь пароль клиента api-notifications-service
kubectl create secret generic notifications -n api \
--type='Opaque' \
--from-literal=client-id='api-notifications-service' \
--from-literal=client-secret=${KC_API_NOTIFICATIONS_SERVICE_SECRET}В-третьих, разверните микросервис с помощью следующих команд:
cd /home/k8s
git pull
kubectl apply -f api/notificationsВо-первых, создайте в system области Keycloak сервера клиент с именем api-orders-service аналогично
api-oauth2-proxy, но не задавайте поля PKCE Method и Valid redirect URIs. Не забудьте скопировать пароль клиента.
Во-вторых, сохраните логин и пароль клиента в кластере:
KC_API_ORDERS_SERVICE_SECRET= # Укажите здесь пароль клиента api-orders-service
kubectl create secret generic orders -n api \
--type='Opaque' \
--from-literal=client-id='api-orders-service' \
--from-literal=client-secret=${KC_API_ORDERS_SERVICE_SECRET}В-третьих, разверните микросервис с помощью следующих команд:
cd /home/k8s
git pull
kubectl apply -f api/ordersВ-четвёртых, обновите настройки PgBouncer для базы данных микросервиса:
kubectl delete -f api/postgres-cluster/pooler-rw.yaml
kubectl apply -f api/postgres-cluster/pooler-rw.yamlВо-первых, создайте в system области Keycloak сервера клиент с именем api-payments-service аналогично
api-oauth2-proxy, но не задавайте поля PKCE Method и Valid redirect URIs. Не забудьте скопировать пароль клиента.
Во-вторых, сохраните логин и пароль клиента в кластере:
KC_API_PAYMENTS_SERVICE_SECRET= # Укажите здесь пароль клиента api-payments-service
kubectl create secret generic payments -n api \
--type='Opaque' \
--from-literal=client-id='api-payments-service' \
--from-literal=client-secret=${KC_API_PAYMENTS_SERVICE_SECRET}В-третьих, разверните микросервис с помощью следующих команд:
cd /home/k8s
git pull
kubectl apply -f api/paymentsВ-четвёртых, обновите настройки PgBouncer для базы данных микросервиса:
kubectl delete -f api/postgres-cluster/pooler-rw.yaml
kubectl apply -f api/postgres-cluster/pooler-rw.yamlВо-первых, создайте в system области Keycloak сервера клиент с именем api-products-service аналогично
api-oauth2-proxy, но не задавайте поля PKCE Method и Valid redirect URIs. Не забудьте скопировать пароль клиента.
Во-вторых, сохраните логин и пароль клиента в кластере:
KC_API_PRODUCTS_SERVICE_SECRET= # Укажите здесь пароль клиента api-products-service
kubectl create secret generic products -n api \
--type='Opaque' \
--from-literal=client-id='api-products-service' \
--from-literal=client-secret=${KC_API_PRODUCTS_SERVICE_SECRET}В-третьих, разверните микросервис с помощью следующих команд:
cd /home/k8s
git pull
kubectl apply -f api/productsВо-первых, создайте в system области Keycloak сервера клиент с именем web аналогично
api-oauth2-proxy, но не задавайте поля PKCE Method и Valid redirect URIs. Не забудьте скопировать пароль клиента.
Во-вторых, сохраните логин и пароль клиента в кластере:
KC_WEB_SYSTEM_SECRET= # Укажите здесь пароль клиента web в system области
kubectl create secret generic web-system -n web \
--type='Opaque' \
--from-literal=client-id='web' \
--from-literal=client-secret=${KC_WEB_SYSTEM_SECRET}В-третьих, создайте в public области Keycloak сервера клиент с именем web аналогично
api-oauth2-proxy, но не задавайте поля PKCE Method и Valid redirect URIs. Не забудьте скопировать пароль клиента.
В-четвёртых, сохраните логин и пароль клиента в кластере:
KC_WEB_PUBLIC_SECRET= # Укажите здесь пароль клиента web в public области
kubectl create secret generic web-public -n web \
--type='Opaque' \
--from-literal=client-id='web' \
--from-literal=client-secret=${KC_WEB_PUBLIC_SECRET}В-пятых, разверните веб-приложение с помощью следующих команд:
cd /home/k8s
git pull
kubectl apply -f web