Ters proxy ve yönlendirme
1) Ters proxy rolü
Ters proxy - platformun "ön çizgisi": TLS'yi kabul eder, trafiği yukarı akış arasında dağıtır, güvenlik ve performans politikaları uygular. Amaç minimum gecikme, öngörülebilir yönlendirme ve aşağılayıcı örneklerin/bölgelerin hızlı izolasyonudur.
2) Katmanlar ve protokoller
L4: TCP/UDP proxy (SNI tabanlı TLS geçişi, QUIC). HTTP'yi anlamadan düşük fiyat.
L7: HTTP/1. 1-2-3, gRPC, WebSocket. Zengin yönlendirme (ana bilgisayar, yol, başlıklar, çerezler), dönüşümler ve önbellek.
TLS modeli: çevre üzerinde sonlandır (NGINX/Envoy), içinde - mTLS/mesh. SNI, aynı IP üzerinde sanal ana bilgisayarlara izin verir.
3) Yönlendirme stratejileri (L7)
1. Ana bilgisayar tabanlı: etki alanına göre ('api. marka. com '> cluster' brand-api ').
2. Yol tabanlı:'/v1/payments '-' payments-svc ','/v1/wallets' - 'wallets-svc'.
3. Başlık tabanlı: 'X-Region: eu-central', 'X-Tenant: 42', 'User-Agent'/' Accept'.
4. Çerez tabanlı: A/B testleri, yapışkan oturumlar.
5. Ağırlıklı/Kanarya: Yeni sürüme trafik yüzdesi (%1-5 - %100).
6. Geo/ASN: Ülkeye göre/ASN en yakın POP/bölgeye gönderilir.
7. Tutarlı karma: bir örneğe anahtar (user_id/tenant_id) bağlama - önbellek yerelliği/yapışkanlığı.
8. Gölge/Yansıtma: Yanıtı etkilemeden trafiği "gölge" akışına kopyalayın (regresyon testleri için).
4) Dengeleme ve hata toleransı
Algoritmalar: yuvarlak-robin, en az istek, rastgele, halka-karma (tutarlı).
Sağlık kontrolleri: aktif (HTTP/TCP) + pasif (kodlar/zaman aşımları ile).
Outlier ejection: artan hata/gecikme süresine sahip bir ana bilgisayarı geçici olarak "nakavt" eder.
Yeniden denemeler: sınırlı, per-try timeout ve jitter ile; Güvenli olmayan yöntemleri idempotency olmadan geri çekmeyin.
Bağlantı havuzu: sıcak havuzları yukarı yönde tutun, yüksekleri sınırlayın.
5) Çevre performansı
Önbelleğe alma: tuşa göre (method + host + path + Vary), 'ETag/If-None-Match' koşulları, TTL ve stale-while-revalidate.
Sıkıştırma: Metin yanıtları için brotli/gzip.
HTTP/2/3: çoğullama, başlık sıkıştırma; WAF/IDS uyumluluğunu doğrulayın.
Request coalescing - Aynı önbellek anahtarı için eşzamanlı istekleri daralt.
6) Proxy'de güvenlik
TLS: 1. 2 + (1'den daha iyi. 3), OCSP zımbalama, HSTS.
WAF/bot filtreleri: uygulamaya yönlendirmeden önce.
CORS/CSP/Fetch-Metadata: ilkelere göre.
Header- гигиена: 'X-Forwarded-For/Proto', 'Forwarded', 'traceparent'; Başlık enjeksiyonu ve büyük boy koruma.
Gövde/başlık sınırları: DoS desenleri için erken 413/431.
İş ortağı entegrasyonları ve dahili API'ler için mTLS.
7) Dağıtım şemaları: kanarya/mavi-yeşil/versiyonlar
Ağırlıklı yönlendirme на seviye-7 (%1, %5, %25, %50, %100).
Header-gate: özelliği flag/header (internal/testing) ile etkinleştirin.
Mavi-yeşil: tam DNS/rota anahtarlama, hızlı geri alma.
Gölge: Metriklerin/günlüklerin girişi ile yeni sürümün paralel çalışması.
8) Yapışkan oturumlar ve karma yönlendirme
Çerez yapışkanlığı ('Set-Cookie: SRV = shard-a; Yol =/; HttpOnly ') durumsal yükler için.
Ring-hash/' user _ id/tenant _ id'ile tutarlı - önbellek çapraz engellerini azaltın.
Dikkat: yazma-yükler için "ebedi" yapışkanlık önlemek - sıcak nokta; Kota kiracısı kullanın.
9) Bölgesel ve coğrafi yönlendirme
En yakın POP'u seçmek için Anycast + geo-DNS.
Testler ve hata ayıklama için Header-override (örneğin, 'X-Region').
Yasal olarak gerekli veri lokalizasyonu ile koordine edin (bölgeye/yargı alanına göre rota).
10) Gözlemlenebilirlik ve kontrol
KIRMIZI metrikler: RPS, hata oranı (sınıfa göre), gecikme p95/p99 rota/küme başına.
Outlier/health: Düzenleme/geri alma sayısı, yavaş arama oranı.
Günlükler: yapılandırılmış, PII olmadan; 'trace _ id'/' span _ id' korelasyonu.
İzleme (OTel): yayılma alanları ingress> router> upstream; P99 grafiklerinde örnekler.
11) Yapılandırma örnekleri
11. 1 NGINX: ana bilgisayar/yol/ağırlıklı + кэш
nginx map $http_x_canary $canary { default 0; "1" 1; }
upstream app_v1 { least_conn; server 10. 0. 0. 1:8080 max_fails=3 fail_timeout=10s; }
upstream app_v2 { least_conn; server 10. 0. 0. 2:8080; }
server {
listen 443 ssl http2;
server_name api. example. com;
Кэш proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=apicache:256m max_size=10g inactive=10m use_temp_path=off;
location /v1/ {
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Request-ID $request_id;
proxy_read_timeout 300ms; proxy_connect_timeout 100ms;
Weighted: 5% on v2 if canary = 1, otherwise 0%
set $backend app_v1;
if ($canary) { set $backend app_v2; }
proxy_pass http://$backend;
}
Static with cache location/assets/{
proxy_cache apicache;
proxy_cache_valid 200 10m;
add_header Cache-Control "public, max-age=600";
proxy_pass http://static_cluster;
}
}
11. 2 Elçi: başlık yönlendirme, kanarya, outlier-ejection, yansıtma
yaml static_resources:
clusters:
- name: svc_v1 type: STRICT_DNS lb_policy: LEAST_REQUEST outlier_detection:
consecutive_5xx: 5 interval: 5s base_ejection_time: 30s max_ejection_percent: 50
- name: svc_v2 type: STRICT_DNS lb_policy: LEAST_REQUEST
- name: mirror_svc type: STRICT_DNS
listeners:
- name: https filter_chains:
- filters:
- name: envoy. filters. network. http_connection_manager typed_config:
route_config:
virtual_hosts:
- name: api domains: ["api. example. com"]
routes:
- match:
prefix: "/v1"
headers:
- name: "X-Region"
exact_match: "eu"
route:
cluster: svc_v1 timeout: 350ms retry_policy:
retry_on: connect-failure,reset,5xx num_retries: 1 per_try_timeout: 200ms request_mirror_policies:
- cluster: mirror_svc runtime_key: mirror. enabled
- match: { prefix: "/v1" }
route:
weighted_clusters:
clusters:
- name: svc_v1 weight: 95
- name: svc_v2 weight: 5
11. 3 Traefik: kurallar + ara katman yazılımı
yaml http:
routers:
api:
rule: "Host(`api. example. com`) && PathPrefix(`/v1`)"
service: svc middlewares: [hsts, compress]
middlewares:
hsts:
headers:
stsSeconds: 31536000 stsIncludeSubdomains: true compress:
compress: {}
services:
svc:
weighted:
services:
- name: v1 weight: 95
- name: v2 weight: 5
11. 4 Kubernetes: Kanarya için Ingress + manifesto (NGINX Ingress)
yaml apiVersion: networking. k8s. io/v1 kind: Ingress metadata:
name: api annotations:
nginx. ingress. kubernetes. io/canary: "true"
nginx. ingress. kubernetes. io/canary-weight: "5"
spec:
rules:
- host: api. example. com http:
paths:
- path: /v1 pathType: Prefix backend:
service:
name: svc-v1 port: { number: 8080 }
12) Dönüşümler ve uyumluluk
Başlıkların/yolların normalleştirilmesi, 'Konum' sayımı, 'Önbellek Kontrolü' kontrolü.
Çevirmenler aracılığıyla gRPC ↔ HTTP/JSON (grpc-json-transcoder).
WebSocket/HTTP2 yükseltmeleri - Proxy'nin 'Yükseltme'/' Bağlantı'yı atladığından emin olun.
13) Test ve kaos senaryoları
Yükleme: patlamalar, uzun platolar, "uzun" gövdeler (yavaş POST).
Yukarı akışa gecikme/kayıp enjeksiyonu - yeniden denemeler/zaman aşımı/aykırı denetimi.
Kanarya metrikleri: p95/p99, eski versiyona karşı yeni sürümün hata oranı; SLO tarafından otomatik geri alma.
Gölge: Yanıtların karşılaştırılması (örnekleme) ve yan yana mantık.
14) Antipatterns
Idempotency ve deadline hariç küresel geri çekilmeler - çiftler ve fırtına.
Sıcak parça kontrolü olmayan yapışkan oturumlar - yük eğrilmesi.
Sağlık kontrolleri/outlier-ejection eksikliği - havuzda "çürümüş" örnekler.
Sınırsız başlıklar/gövdeler - en basit DoS.
Şema sürümü olmadan dönüşümleri ve güvenliği karıştırma - beklenmedik regresyonlar.
'Vary' olmayan tek bir global anahtar önbelleği - yanlış yanıtlar.
15) iGaming/Finansın Özellikleri
Bölgesellik: Oyuncu/marka yetki alanına göre yönlendirme; Ödeme bölgelerinin izolasyonu.
Kritik yollar (mevduat/çıkışlar): kısa zaman aşımları, bir tekrarlama, idempotency; Bireysel kümeler.
PSP/KYC: özel yukarı akış havuzları, sıkı yeniden deneme/zaman aşımı politikaları, devre kesici, coğrafi pimler.
AB kanalları: sadece okuma yolu için ödeme/limitlerle güvenli deneyler; yazmak - bayraklar ve küçük yüzdeler aracılığıyla.
16) Prod Hazırlık Kontrol Listesi
- TLS 1. 2+/1. 3, OCSP zımbalama, HSTS; Doğru 'X-Forwarded-'.
- Net yönlendirme kuralları: host/path/header/cookie; belgeler.
- Sağlık kontrolleri, aykırı madde çıkarma, deneme başına zaman aşımı, sınırlı geri alma.
- Ağırlıklı/kanarya + gölge; SLO/uyarı ile otomatik geri alma.
- Önbellek/sıkıştırma/ETag; Gövde/üstbilgi sınırları; Birleştirme isteği.
- 'trace _ id'ile günlükler/izler; KIRMIZI + aykırı/sağlık ölçümleri; Yol/küme başına gösterge panoları.
- WAF/bot filtreleri/CORS; Büyük boy ve yavaş POST koruması.
- Gerektiğinde yapışkan/tutarlı karma; Sıcak parça kontrolü.
- Yapılandırmalar sürümlüdür, geçişler güvenlidir, KMS/Vault'taki sırlar.
17) TL; DR
Çevre üzerindeki TLS'yi sonlandırın ve host/path/header/cookie yoluyla L7'ye yönlendirin. Bültenleri için - ağırlıklı kanarya ve gölge; İstikrar için - sağlık kontrolleri, aykırı madde çıkarma, deneme başına zaman aşımı ile sınırlı yeniden deneme. Önbellek, sıkıştırma ve p95'i geliştirdiği tutarlı karma kullanın. KIRMIZI sinyalleri ve küme durumunu ölçün, WAF ve boyut sınırlarını tutun. Kritik ödeme yolları için - ayrı kümeler, kısa SLA'lar ve retras/idempotency'nin sıkı yönetimi.