mTLS Service Mesh กับ SaaS Architecture —

mTLS ใน Service Mesh

mTLS เข้ารหัสการสื่อสารสองทาง Client Server ยืนยันตัวตนด้วย Certificate Service Mesh จัดการอัตโนมัติ Istio Linkerd Consul Connect
SaaS Architecture ใช้ mTLS ป้องกัน Service-to-Service Communication Zero Trust ไม่เชื่อใจอะไรเลย ทุก Request ยืนยันตัวตน
Istio mTLS Configuration
=== Istio mTLS Configuration ===
1. Install Istio
curl -L https://istio.io/downloadIstio | sh -
cd istio-1.21.0
export PATH=$PWD/bin:$PATH
istioctl install --set profile=demo -y
2. Enable Sidecar Injection
kubectl label namespace default istio-injection=enabled
3. PeerAuthentication — บังคับ mTLS ทั้ง Namespace
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
name: default
namespace: default
spec:
mtls:
mode: STRICT # STRICT = บังคับ mTLS, PERMISSIVE = ยอมรับทั้ง mTLS และ plaintext
4. PeerAuthentication — Mesh-wide (ทั้ง Cluster)
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
name: default
namespace: istio-system
spec:
mtls:
mode: STRICT
5. DestinationRule — บังคับ mTLS เมื่อเรียก Service
apiVersion: networking.istio.io/v1beta1
เนื้อหาเกี่ยวข้อง — แนะนำให้อ่าน External Secrets Operator Real-time Processing
kind: DestinationRule
metadata:
name: api-service
spec:
host: api-service.default.svc.cluster.local
trafficPolicy:
tls:
mode: ISTIO_MUTUAL # ใช้ Istio certificates
6. AuthorizationPolicy — Zero Trust
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
แนะนำเพิ่มเติม — บทวิเคราะห์จาก XM Signal
metadata:
name: api-policy
namespace: default
spec:
selector:
matchLabels:
app: api-service
action: ALLOW
rules:
- from:
- source:
principals: ["cluster.local/ns/default/sa/frontend-sa"]
to:

- operation:
methods: ["GET", "POST"]
paths: ["/api/*"]
7. ตรวจสอบ mTLS Status
istioctl x describe pod <pod-name>
istioctl proxy-config secret <pod-name>
istioctl analyze
8. Kiali Dashboard (Visualization)
istioctl dashboard kiali
from dataclasses import dataclass
from typing import List
@dataclass
เนื้อหาเกี่ยวข้อง — Ansible Vault Distributed System
class IstioConfig:
name: str
kind: str
namespace: str
description: str
configs = [
IstioConfig("default-mtls", "PeerAuthentication", "default",
"บังคับ mTLS ทั้ง Namespace"),
IstioConfig("mesh-mtls", "PeerAuthentication", "istio-system",
"บังคับ mTLS ทั้ง Mesh"),
IstioConfig("api-dr", "DestinationRule", "default",
"บังคับ mTLS เมื่อเรียก API Service"),
IstioConfig("api-policy", "AuthorizationPolicy", "default",
"อนุญาตเฉพาะ Frontend เรียก API"),
แนะนำเพิ่มเติม — คอร์สเทรด Forex ที่ iCafeForex
]
Certificate Management และ Monitoring
=== Certificate Management ===
1. Istio CA (Built-in)
Istio จัดการ Certificates อัตโนมัติ
- Root CA: istiod สร้างและจัดการ
- Workload Certificates: ออกให้ทุก Pod อัตโนมัติ
- Auto-rotation: หมุนเวียน Certificate อัตโนมัติ (24 ชม.)
- SPIFFE Identity: spiffe://cluster.local/ns/<ns>/sa/<sa>
2. External CA (cert-manager)
apiVersion: cert-manager.io/v1
kind: Certificate
เนื้อหาเกี่ยวข้อง — บทความที่เกี่ยวข้อง: Nuclei Scanner SaaS Architecture
metadata:
name: istio-ca
namespace: istio-system
spec:
isCA: true
duration: 8760h # 1 year
secretName: istio-ca-secret
issuerRef:
name: vault-issuer
kind: ClusterIssuer
commonName: istio-ca
3. Vault Integration
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: vault-issuer
spec:
vault:
path: pki/sign/istio
server: https://vault.company.com
auth:
kubernetes:
role: cert-manager
mountPath: /v1/auth/kubernetes
4. Monitoring mTLS
Prometheus Queries:
istio_requests_total{connection_security_policy="mutual_tls"}
istio_tcp_connections_opened_total
envoy_cluster_ssl_handshake
5. Grafana Dashboard
Import Istio dashboards:
- Istio Mesh Dashboard (ID: 7639)
- Istio Service Dashboard (ID: 7636)
- Istio Workload Dashboard (ID: 7630)
6. Jaeger Tracing
istioctl dashboard jaeger
เนื้อหาเกี่ยวข้อง — ทำความเข้าใจ Incident.io AR VR Development
7. Security Audit
istioctl analyze --all-namespaces
istioctl proxy-config secret <pod-name> -o json
kubectl get peerauthentication --all-namespaces
kubectl get authorizationpolicy --all-namespaces
cert_management = {
"Istio CA": "Built-in CA, Auto-rotation ทุก 24 ชม.",
"cert-manager": "External CA, Vault, Let's Encrypt",
"SPIFFE": "Identity: spiffe://cluster.local/ns/xxx/sa/yyy",
"Rotation": "อัตโนมัติ ไม่ต้อง Restart Pods",
}
monitoring = {
"Kiali": "Service Mesh Visualization, mTLS Status",
"Prometheus": "Metrics: requests, connections, SSL handshakes",
"Grafana": "Dashboards: Mesh, Service, Workload",
"Jaeger": "Distributed Tracing ระหว่าง Services",
}
for tool, desc in cert_management.items():
for tool, desc in monitoring.items():
Best Practices
- STRICT mTLS: บังคับ mTLS ทั้ง Mesh ไม่ใช้ PERMISSIVE ใน Production
- AuthorizationPolicy: กำหนด Zero Trust ทุก Service ระบุ Callers ชัดเจน
- Certificate Rotation: ตั้ง Auto-rotation สั้น (24 ชม.) ลด Risk
- Namespace Isolation: แยก Namespace ตาม Tenant หรือ Team
- Monitoring: ใช้ Kiali ดู mTLS Status, Prometheus Metrics, Jaeger Tracing
- Audit: รัน istioctl analyze ตรวจสอบ Configuration เป็นประจำ
mTLS คืออะไร
Mutual TLS เข้ารหัสสองทาง Client Server ยืนยันตัวตน Certificate Service-to-Service Communication ป้องกัน Man-in-the-Middle Attack





