feat(aula-14): adicionar Istio Traffic Splitting com canary deployment

- Instala Istio (base + istiod + ingressgateway)
- Configura Kiali e Jaeger para observabilidade
- Deploy de app-backend v1 e v2 com traffic splitting 90/10
- Integra com Victoria Metrics da aula-12
- Inclui teste-stress.sh para validar distribuição de tráfego
- Tráfego externo passa pelo Istio Gateway via NGINX Ingress
This commit is contained in:
ArgoCD Setup
2026-01-24 07:40:51 -03:00
parent 3e53328214
commit 3860809e5c
22 changed files with 1545 additions and 0 deletions

View File

@@ -0,0 +1,6 @@
FROM node:24-alpine
WORKDIR /app
COPY app.js .
EXPOSE 3000
USER node
CMD ["node", "app.js"]

View File

@@ -0,0 +1,32 @@
const http = require("http");
const MAX_REQUESTS = parseInt(process.env.MAX_REQUESTS) || 5;
let requestCount = 0;
let frozen = false;
const server = http.createServer((req, res) => {
if (frozen) {
return;
}
requestCount++;
console.log(`[v1] request ${requestCount}/${MAX_REQUESTS}`);
if (requestCount >= MAX_REQUESTS) {
frozen = true;
console.log("[v1] Aplicação travou");
}
if (req.url === "/health") {
res.writeHead(200);
res.end("ok");
return;
}
res.writeHead(200);
res.end(`v1 - Request ${requestCount}\n`);
});
server.listen(3000, () => {
console.log(`[v1] Porta 3000 (trava após ${MAX_REQUESTS} requests)`);
});

View File

@@ -0,0 +1,6 @@
FROM node:24-alpine
WORKDIR /app
COPY app.js .
EXPOSE 3000
USER node
CMD ["node", "app.js"]

View File

@@ -0,0 +1,21 @@
const http = require("http");
let requestCount = 0;
const server = http.createServer((req, res) => {
if (req.url === "/health") {
res.writeHead(200);
res.end("ok");
return;
}
requestCount++;
console.log(`[v2] request ${requestCount}`);
res.writeHead(200);
res.end(`v2 - Request ${requestCount}\n`);
});
server.listen(3000, () => {
console.log("[v2] Porta 3000 (estável)");
});