iGRPIGRP 3.0Documentation

Visão geral

Helm Chart de instalação do stack do IGRP num cluster Kubernetes — componentes, pré-requisitos, instalação e verificação.

O igrp-stack é o Helm Chart que instala a plataforma IGRP num cluster Kubernetes: base de dados, gestão de acessos, gateway de APIs, object storage, processos e notificações. Enquanto o Workspace te dá a plataforma no teu portátil, o igrp-stack dá-te a mesma plataforma num cluster — para ambientes de teste, homologação e produção.

Versão exacta, nunca ranges

A versão actual é 0.2.0-beta. Em SemVer, 0.2.0-beta é inferior a 2.1.0 — um range como ^2.0.0 ou >=2.0.0 nunca a apanha, e um range aberto puxa a versão errada. Usa sempre a versão exacta.

Chartsoci://registry.nosi.cv/igrp-charts
Imagens IGRPregistry.nosi.cv/igrp/* (tag 0.2.0-beta)
Imagens de terceirosregistry.nosi.cv/igrp-mirror/* — nada vem do Docker Hub

Componentes

Arquitectura do IGRP Stack: serviços funcionais (App Center, Access Management, Process Management, Process Studio), microserviços de notificações (UI, API e Temporal.io) e serviços de base (identidade via Autentika ou Keycloak, PostgreSQL e MinIO)

O diagrama mostra a visão funcional — o que cada serviço faz e como se relacionam. A tabela abaixo é a visão de instalação: os 14 subcharts, todos com <nome>.enabled.

SubchartO que éOnde responde
igrp-pg-clusterPostgreSQL (operador CloudNative-PG)igrp-pg-cluster-rw:5432
igrp-redisRedis — obrigatório (sessão do access-management)igrp-redis-master:6379
igrp-minioObject storage S3 + consola de administraçãodomains3api · domain/minio/
igrp-keycloakIdP upstream opcionaldomain/auth
igrp-access-managementAuthorization Server OAuth2 — emite JWT, gere utilizadores e permissõesvia gateway
igrp-gateway-apiGateway de APIs com discovery automáticodomainapi
igrp-app-centerFrontend principaldomain/
igrp-process-studio-api / -uiDesenho de processosdomain/apps/igrp-process-studio
igrp-process-management-api / -uiExecução de processosdomain/apps/igrp-process-management
igrp-notification-temporalTemporal — motor de workflowsinterno
igrp-notification-api / -uiNotificações: e-mail, in-app, webhooksdomain/apps/notifications

Três domínios, três entradas: domain serve as UIs, a consola do MinIO e o Keycloak; domainapi serve todas as APIs através do gateway; domains3api é o endpoint S3.

Todos os frontends autenticam no access-management, partilhando um cliente OIDC. O IdP a montante escolhe-se lá: Keycloak, Autentika/WSO2 ou utilizadores locais.


Pré-requisitos

RequisitoVerificar com
Operador CloudNative-PG (≥ 1.25)kubectl get pods -n cnpg-system
StorageClass (ex.: longhorn)kubectl get storageclass
nginx IngressControllerkubectl get ingressclass
DNS dos 3 domíniosgetent hosts <domain>
helm ≥ 3.8 e kubectlhelm version

Instalação

1. Perfil de values

Empilham-se com -f, sempre por cima do values.yaml:

IdPTesteProdução
Keycloakvalues.yaml+ values.prod.yaml
Autentika+ values.autentika.yaml+ values.prod.yaml + values.autentika.prod.yaml

O values.yaml traz passwords de teste públicas

O values.yaml instala sem passos manuais, mas as credenciais que traz são públicas — nunca num ambiente exposto. O values.prod.yaml esvazia-as todas e sobe o PostgreSQL para 3 instâncias.

2. Domínios

global:
  domain:      apps.exemplo.cv       # UIs, consola MinIO, Keycloak
  domainapi:   api.exemplo.cv        # APIs, via gateway
  domains3api: s3api.exemplo.cv      # endpoint S3

3. Instalar

Teste — um comando:

helm upgrade --install igrp-stack oci://registry.nosi.cv/igrp-charts/igrp-stack \
  --version 0.2.0-beta -n igrp-stack --create-namespace -f values.yaml

Produção — os segredos num ficheiro à parte, fora do git:

# secrets.yaml
igrp-pg-cluster:
  dbUsers:
    users:
      accessManagement:     {password: "..."}
      keycloak:             {password: "..."}
      processStudio:        {password: "..."}
      processManagement:    {password: "..."}
      notification:         {password: "..."}
      notificationTemporal: {password: "..."}
igrp-access-management:
  oauthClient: {clientSecret: "..."}
  secrets:     {smtp-password: "..."}
igrp-keycloak:
  igrp:      {clientSecrets: {accessManagement: "..."}}
  keycloak:  {auth: {adminPassword: "..."}}
igrp-minio:
  minio: {auth: {rootPassword: "..."}}
igrp-app-center:
  nextauth: {secret: "..."}
helm upgrade --install igrp-stack oci://registry.nosi.cv/igrp-charts/igrp-stack \
  --version 0.2.0-beta -n igrp-stack --create-namespace \
  -f values.yaml -f values.prod.yaml -f secrets.yaml

As 6 passwords de base de dados são obrigatórias

Sem elas o render falha de propósito. Em produção, a alternativa recomendada é não ter segredos no git de todo — ver Instalação de produção.

4. Por ArgoCD

O repo de deployment tem um Chart.yaml que redeclara o umbrella mais o values.yaml do ambiente. Duas regras que poupam horas:

  1. Um repo que redeclara o umbrella não herda o values.yaml dele — todo o wiring tem de estar no values do ambiente.
  2. Sincronizar pelo botão SYNC ou argocd app sync. Um kubectl patch do .operation corre com skipHooks=true e nenhum Job de inicialização corre.

Ver Instalação via ArgoCD.

Não há passos manuais

15 Jobs criam as bases de dados, o schema do Authorization Server, as chaves RSA, os clientes OAuth, o bucket do MinIO e o namespace do Temporal — por sync-waves, de -5 (chaves) a 5 (API de notificações).


Verificação

kubectl get pods -n igrp-stack          # nada parado
kubectl get jobs -n igrp-stack          # todos Complete

# nenhuma imagem de fora do nosso registry (só deve sair alpine:3.17, hook de teste)
kubectl get pods -n igrp-stack --field-selector=status.phase=Running \
  -o jsonpath='{range .items[*]}{range .spec.containers[*]}{.image}{"\n"}{end}{end}' \
  | sort -u | grep -v '^registry.nosi.cv/'

curl -sk -o /dev/null -w '%{http_code}\n' https://<domain>/
curl -sk -o /dev/null -w '%{http_code}\n' https://<domainapi>/igrp-access-management/.well-known/openid-configuration
curl -sk -o /dev/null -w '%{http_code}\n' https://<domains3api>/minio/health/live

A consola do MinIO não se valida por curl

Devolve 200 em qualquer caminho. Testa o redirect e abre no browser:
curl -sk -o /dev/null -w '%&#123;http_code&#125; %&#123;redirect_url&#125;\n' https://<domain>/minio deve dar 301 para /minio/.


Por onde seguir

PáginaPara quê
ConfiguraçãoTodos os campos de values que se configuram na prática
Instalação de produçãoSem segredos no git — Sealed Secrets ou Secrets directos
ArgoCDGitOps, segredos, armadilhas do sync
Clientes OAuthRegistar clientes e service accounts por curl
How is this guide?

Última atualização: