🔐
1 · Flujo TLS Handshake
TLS Mutual Authentication — patients-service ↔ diet-plans-service
patients-svc
namespace: production
diet-plans-svc
namespace: production
Jerarquía de certificados — NutriFlow PKI
Root CA
│
├── Intermediate CA — cluster-prod
│ │
│ ├── workload: patients-service
│ ├── workload: billing-service
│ ├── workload: diet-plans-service
│ ├── workload: auth-service
│ └── workload: [8 servicios restantes]
│
└── Intermediate CA — monitoring
│
└── workload: prometheus, grafana, alertmanager
⚙️
3 · Configuraciones YAML — Istio
# Política mesh-wide: STRICT en producción
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
name: default
namespace: istio-system
labels:
app.kubernetes.io/managed-by: nutriflow-security
spec:
mtls:
mode: STRICT
---
# Override: PERMISSIVE para namespace legacy durante migración
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
name: default
namespace: legacy-integrations
spec:
mtls:
mode: PERMISSIVE
---
# Override específico: billing-service STRICT + métricas sin mTLS
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
name: billing-service
namespace: production
spec:
selector:
matchLabels:
app: billing-service
mtls:
mode: STRICT
portLevelMtls:
8080:
mode: STRICT
9090: # puerto métricas Prometheus
mode: DISABLE
# mTLS para todo el tráfico interno (.cluster.local)
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
name: default-mtls
namespace: istio-system
spec:
host: "*.svc.cluster.local"
trafficPolicy:
tls:
mode: ISTIO_MUTUAL
---
# mTLS hacia API externa de pagos (Stripe)
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
name: stripe-api
namespace: production
spec:
host: api.stripe.com
trafficPolicy:
tls:
mode: SIMPLE
caCertificates: /etc/ssl/certs/ca-certificates.crt
# ClusterIssuer basado en la Intermediate CA de NutriFlow
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: nutriflow-istio-ca
spec:
ca:
secretName: nutriflow-intermediate-ca-secret
---
# Montar la CA en Istio (cacerts secret)
# kubectl create secret generic cacerts -n istio-system \
# --from-file=ca-cert.pem=intermediate-ca.crt \
# --from-file=ca-key.pem=intermediate-ca.key \
# --from-file=root-cert.pem=root-ca.crt \
# --from-file=cert-chain.pem=cert-chain.pem