servico de voz na plataforma (faster-whisper small) e transcricao ligada nos BFFs dos tenants e no molde
This commit is contained in:
@@ -164,6 +164,8 @@ spec:
|
||||
- { protocol: TCP, port: 8080 }
|
||||
# captacao (N16, 2026-09-29): o resumo diario vai pelo Service interno.
|
||||
- { protocol: TCP, port: 8083 }
|
||||
# servico de voz (05/10/2026): transcricao pelo BFF.
|
||||
- { protocol: TCP, port: 8091 }
|
||||
|
||||
# 4. HTTPS para a internet publica. Ver o cabecalho: nao da para estreitar
|
||||
# com flannel, e uma lista de CIDR de SaaS quebraria a cobranca sem aviso.
|
||||
|
||||
@@ -104,6 +104,7 @@ spec:
|
||||
- { name: ATM_ISSUER, value: "https://auth.athleticmap.com/realms/{{REALM}}" }
|
||||
- { name: ATM_TENANT, value: "{{TENANT}}" }
|
||||
- { name: ATM_PLANO, value: "{{PLANO}}" }
|
||||
- { name: ATM_TRANSCRICAO_URL, value: "http://servico-voz.plataforma-prod.svc:8091" } # servico de voz (05/10/2026)
|
||||
# `optional` porque o molde ainda NAO cria este Secret. Sem ele o
|
||||
# selo de consentimento simplesmente nao e emitido — o BFF sobe e
|
||||
# funciona (ver SeloDeConsentimento, que trata segredo vazio). No dia
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
# Servico de voz (05/10/2026): saida do BFF (pod frontend-spa) para a transcricao na plataforma.
|
||||
# Par da 24-netpol-tenants-na-voz da plataforma. Tenant novo: a porta 8091 esta no 00- do molde.
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: NetworkPolicy
|
||||
metadata:
|
||||
name: egress-voz
|
||||
namespace: acme-prod
|
||||
spec:
|
||||
podSelector:
|
||||
matchLabels: { app: frontend-spa }
|
||||
policyTypes: [Egress]
|
||||
egress:
|
||||
- to:
|
||||
- namespaceSelector:
|
||||
matchLabels: { kubernetes.io/metadata.name: plataforma-prod }
|
||||
podSelector:
|
||||
matchLabels: { app: servico-voz }
|
||||
ports:
|
||||
- { protocol: TCP, port: 8091 }
|
||||
@@ -90,6 +90,7 @@ spec:
|
||||
valueFrom: { secretKeyRef: { name: consentimento-selo, key: segredo } }
|
||||
- { name: ATM_TENANT, value: "acme" }
|
||||
- { name: ATM_PLANO, value: "prata" }
|
||||
- { name: ATM_TRANSCRICAO_URL, value: "http://servico-voz.plataforma-prod.svc:8091" } # servico de voz (05/10/2026)
|
||||
- { name: GARMIN_FRONTEND_REDIRECT, value: "https://acme.athleticmap.com/integracoes/garmin" }
|
||||
resources:
|
||||
requests: { cpu: 50m, memory: 256Mi }
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
# Servico de voz (05/10/2026): saida do BFF (pod frontend-spa) para a transcricao na plataforma.
|
||||
# Par da 24-netpol-tenants-na-voz da plataforma. Tenant novo: a porta 8091 esta no 00- do molde.
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: NetworkPolicy
|
||||
metadata:
|
||||
name: egress-voz
|
||||
namespace: demo-prod
|
||||
spec:
|
||||
podSelector:
|
||||
matchLabels: { app: frontend-spa }
|
||||
policyTypes: [Egress]
|
||||
egress:
|
||||
- to:
|
||||
- namespaceSelector:
|
||||
matchLabels: { kubernetes.io/metadata.name: plataforma-prod }
|
||||
podSelector:
|
||||
matchLabels: { app: servico-voz }
|
||||
ports:
|
||||
- { protocol: TCP, port: 8091 }
|
||||
@@ -90,6 +90,7 @@ spec:
|
||||
valueFrom: { secretKeyRef: { name: consentimento-selo, key: segredo } }
|
||||
- { name: ATM_TENANT, value: "demo" }
|
||||
- { name: ATM_PLANO, value: "bronze" }
|
||||
- { name: ATM_TRANSCRICAO_URL, value: "http://servico-voz.plataforma-prod.svc:8091" } # servico de voz (05/10/2026)
|
||||
- { name: GARMIN_FRONTEND_REDIRECT, value: "https://demo.athleticmap.com/integracoes/garmin" }
|
||||
resources:
|
||||
requests: { cpu: 50m, memory: 256Mi }
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
# Servico de voz (05/10/2026): saida do BFF (pod frontend-spa) para a transcricao na plataforma.
|
||||
# Par da 24-netpol-tenants-na-voz da plataforma. Tenant novo: a porta 8091 esta no 00- do molde.
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: NetworkPolicy
|
||||
metadata:
|
||||
name: egress-voz
|
||||
namespace: escolinha-prod
|
||||
spec:
|
||||
podSelector:
|
||||
matchLabels: { app: frontend-spa }
|
||||
policyTypes: [Egress]
|
||||
egress:
|
||||
- to:
|
||||
- namespaceSelector:
|
||||
matchLabels: { kubernetes.io/metadata.name: plataforma-prod }
|
||||
podSelector:
|
||||
matchLabels: { app: servico-voz }
|
||||
ports:
|
||||
- { protocol: TCP, port: 8091 }
|
||||
@@ -90,6 +90,7 @@ spec:
|
||||
valueFrom: { secretKeyRef: { name: consentimento-selo, key: segredo } }
|
||||
- { name: ATM_TENANT, value: "escolinha" }
|
||||
- { name: ATM_PLANO, value: "institucional" }
|
||||
- { name: ATM_TRANSCRICAO_URL, value: "http://servico-voz.plataforma-prod.svc:8091" } # servico de voz (05/10/2026)
|
||||
- { name: GARMIN_FRONTEND_REDIRECT, value: "https://escolinha.athleticmap.com/integracoes/garmin" }
|
||||
resources:
|
||||
requests: { cpu: 50m, memory: 256Mi }
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
# Servico de voz (05/10/2026): saida do BFF (pod frontend-spa) para a transcricao na plataforma.
|
||||
# Par da 24-netpol-tenants-na-voz da plataforma. Tenant novo: a porta 8091 esta no 00- do molde.
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: NetworkPolicy
|
||||
metadata:
|
||||
name: egress-voz
|
||||
namespace: piloto-prod
|
||||
spec:
|
||||
podSelector:
|
||||
matchLabels: { app: frontend-spa }
|
||||
policyTypes: [Egress]
|
||||
egress:
|
||||
- to:
|
||||
- namespaceSelector:
|
||||
matchLabels: { kubernetes.io/metadata.name: plataforma-prod }
|
||||
podSelector:
|
||||
matchLabels: { app: servico-voz }
|
||||
ports:
|
||||
- { protocol: TCP, port: 8091 }
|
||||
@@ -90,6 +90,7 @@ spec:
|
||||
valueFrom: { secretKeyRef: { name: consentimento-selo, key: segredo } }
|
||||
- { name: ATM_TENANT, value: "piloto" }
|
||||
- { name: ATM_PLANO, value: "institucional" }
|
||||
- { name: ATM_TRANSCRICAO_URL, value: "http://servico-voz.plataforma-prod.svc:8091" } # servico de voz (05/10/2026)
|
||||
- { name: GARMIN_FRONTEND_REDIRECT, value: "https://piloto.athleticmap.com/integracoes/garmin" }
|
||||
resources:
|
||||
requests: { cpu: 50m, memory: 256Mi }
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
# Servico de voz (05/10/2026): so o BFF dos tenants chega a porta 8091. Mesmo padrao do 23-netpol-tenants-no-captacao:
|
||||
# tenants novos pelo label, os 4 antigos pelo nome. Nenhum outro pod da plataforma fica exposto.
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: NetworkPolicy
|
||||
metadata:
|
||||
name: tenants-na-voz
|
||||
namespace: plataforma-prod
|
||||
spec:
|
||||
podSelector:
|
||||
matchLabels: { app: servico-voz }
|
||||
policyTypes: [Ingress]
|
||||
ingress:
|
||||
- from:
|
||||
- namespaceSelector:
|
||||
matchExpressions:
|
||||
- { key: athleticmap.io/tenant, operator: Exists }
|
||||
- namespaceSelector:
|
||||
matchLabels: { kubernetes.io/metadata.name: piloto-prod }
|
||||
- namespaceSelector:
|
||||
matchLabels: { kubernetes.io/metadata.name: demo-prod }
|
||||
- namespaceSelector:
|
||||
matchLabels: { kubernetes.io/metadata.name: acme-prod }
|
||||
- namespaceSelector:
|
||||
matchLabels: { kubernetes.io/metadata.name: escolinha-prod }
|
||||
ports:
|
||||
- { protocol: TCP, port: 8091 }
|
||||
@@ -0,0 +1,51 @@
|
||||
# Servico de voz (transcricao de AUDIO JA GRAVADO, portugues) — faster-whisper, modelo `small`, CPU int8.
|
||||
# Fonte: services/servico-voz do repositorio de codigo. Um so para todos os tenants: quem chama e o BFF de cada
|
||||
# tenant (`ATM_TRANSCRICAO_URL`), nunca o navegador. SEM Ingress: a protecao e a rede (24-netpol-tenants-na-voz).
|
||||
# O audio so existe em memoria/arquivo temporario durante a transcricao; o texto nao vai para log.
|
||||
# Uma transcricao por vez (o modelo usa 3 threads); 1 min de audio leva ~20-40 s de CPU.
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: servico-voz
|
||||
namespace: plataforma-prod
|
||||
labels: { app: servico-voz }
|
||||
spec:
|
||||
replicas: 1
|
||||
selector: { matchLabels: { app: servico-voz } }
|
||||
template:
|
||||
metadata:
|
||||
labels: { app: servico-voz }
|
||||
spec:
|
||||
securityContext: { runAsNonRoot: true, runAsUser: 10001 }
|
||||
containers:
|
||||
- name: servico-voz
|
||||
image: docker.io/library/servico-voz:1.1-small
|
||||
imagePullPolicy: Never
|
||||
ports: [{ containerPort: 8091 }]
|
||||
env:
|
||||
- { name: ATM_VOZ_MODELO, value: "small" }
|
||||
- { name: ATM_VOZ_THREADS, value: "3" }
|
||||
- { name: ATM_VOZ_MAX_MB, value: "25" }
|
||||
resources:
|
||||
requests: { cpu: 200m, memory: 600Mi }
|
||||
limits: { cpu: "3", memory: 2Gi }
|
||||
readinessProbe:
|
||||
httpGet: { path: /saude, port: 8091 }
|
||||
initialDelaySeconds: 15
|
||||
periodSeconds: 10
|
||||
livenessProbe:
|
||||
httpGet: { path: /saude, port: 8091 }
|
||||
initialDelaySeconds: 60
|
||||
periodSeconds: 30
|
||||
failureThreshold: 4
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: servico-voz
|
||||
namespace: plataforma-prod
|
||||
labels: { app: servico-voz }
|
||||
spec:
|
||||
selector: { app: servico-voz }
|
||||
ports: [{ name: http, port: 8091, targetPort: 8091 }]
|
||||
Reference in New Issue
Block a user