Proxy katmanları ve ters yönlendirme
Kısa Özet
Proxy katmanı platformun "ön veri yolu'dur: TLS'yi tamamlar, müşterileri onaylar, trafiği dağıtır, zirveleri yumuşatır ve serbest bırakmayı güvenli hale getirir (kanaryalar, mavi-yeşil). Minimum olgunluk kümesi: proxy rollerinin net katmanlaşması, deterministik yönlendirme kuralları, zaman aşımı/geri ödeme kontrolü, önbellek + hız sınırı, uçtan uca gözlemlenebilirlik ve otomasyon.
Proxy taksonomisi
İleri proxy - müşterilerin/hizmetlerin dışarıya giden trafiği (çıkış), filtreler/yansıtma, DLP.
Ters proxy - dış istekleri ve arka uçlara giden yolları kabul eder (ana odağımız).
1. Kenar/CDN/WAF (Anycast, bot filtreleri, önbellek)
2. L7 Giriş/API ağ geçidi (yönlendirme, kimlik doğrulama, politikalar)
3. Doğu-batı, mTLS ve Retras için Servis Katmanı/Mesh (sidecar)
4. Giden entegrasyonlar için çıkış ağ geçidi (PSP, iş ortakları)
Yönlendirme (L4/L7) ve Algoritmalar
L4 (TCP/UDP, passthrough TLS): HTTP'yi anlamadan minimum gecikme.
L7 (HTTP/1. 1, HTTP/2, HTTP/3/gRPC): host/path/header/cookie rules, transformation, WAF, cache.
- Yuvarlak-robin/En az bağlantılar/EWMA - yaygın durumlar.
- Tutarlı karma (çerez/tanımlayıcı ile) - yapışkan oturumlar ve önbellek yeri.
- Header-/Geo-/Latency tabanlı - bölgeye/sağlayıcıya göre hedefleme, hızlı PoP'lar.
- Kanarya/Ağırlıklı - aşamalı sunum (5 - 25 - 50 - %100).
- Gölge/Yansıtma - yanıtları etkilemeden yeni bir hizmete trafiğin bir kopyası.
Sorgu/Yanıt Dönüşümü
URL yeniden yazma/yönlendirme: yolları birleştirme, sürüm oluşturma ('/v1/-/svc/v1/').
Başlıklar: 'X-Forwarded-For/Proto/Host'u normalleştirin,' traceparent'/' x-request-id 'ekleyin, gereksiz filtreleyin.
CORS/CSRF: ağ geçidinde merkezileştirin, her hizmette ayarlar üretmeyin.
Sıkıştırma/Dekompresyon: Brotli/gzip, türe göre kontrol.
Vücut sınırları ve slowloris/oversize başlıklara karşı koruma.
Kimlik Doğrulama ve Güvenlik
TLS 1. 3 + OCSP zımba + dış cephelerde HSTS.
mTLS: yöneticiler, operasyonel API'ler, ortak kanallar.
OAuth2/OIDC: ağ geçidi üzerinden yetkilendirme (token introspection/JWT-verify) - yukarı akıştaki taleplere iletme.
Çapraz servis ve iş ortağı entegrasyonları için API Anahtarları/İmzaları (HMAC).
WAF/bot filtreleri: imzalar + davranış kuralları, greypass/captcha.
CSP/X-Frame-Options/Referrer-Policy - Kenardaki güvenlik başlıkları.
Güvenilirlik: Retras/Zaman Aşımları/TT
Zaman aşımları: L4/L7 bağlanın/okuyun/yazın, tek ilke (örneğin, '500ms bağlayın', API için '3-5'leri okuyun').
Retrays: sadece idempotent ('GET/HEAD'), zaman/miktar sınırı, 'retry-budget'.
Devre kesici: eşzamanlı istekler/hatalar, hızlı arıza ve bozulma ile ilgili kısıtlamalar.
Aykırı algılama - kötü örnekleri havuzdan hariç tutar.
Backoff + jitter: "sürü etkisi" yaratmamak için.
Önbellek ve Trafik Yönetimi
Önbellek L7: statik/yarı dinamik (kataloglar, yapılandırmalar),'s-maxage '+' bayat-while-revalidate '.
Rate-limit/Kota: IP/ASN/cihaz/çerez, dağıtılmış sayaç (Redis/Rate-service) ile.
Yapışkan oturumlar: çerez/tutarlı-karma; Yük devretmeyi ve "yeniden yapıştırmayı" düşünün.
Request collapsing (dedupe): orijini aynı GET'lerden oluşan bir "fırtına'dan korur.
Protokoller ve özellikler
HTTP/2: çoğullama, öncelikler; 'ALPN: h2'yi tutun.
HTTP/3/QUIC: kayıp/titreme direnci; UDP/443 açın, MTU/PMTUD'yi izleyin.
gRPC: sağlık kontrolleri, akış, son tarihler; Proxy'ler 'grpc-status'u desteklemelidir.
WebSocket/SSE: Uzun ömürlü bağlantılar, yetkin boşta kalma süreleri ve sınırları.
Gözlemlenebilirlik ve SLO
Metrikler:- L4/L7: 'p50/p95/p99', ошибки ('4xx/5xx/Grpc-codes'), 'open _ conns', 'CPS/RPS', 'retry _ rate'.
- TLS: sürüm/şifreler, p95 el sıkışma, devam.
- Yönlendirme: route/cluster'a göre paylaşımlar, outlier-ejections.
- Hız limiti/WAF: tetikleyiciler/FP oranı.
- Günlükler: erişim (PII olmadan), yönlendirme nedenleri, izleme başlıkları.
- İzler: 'traceparent'/B3, örnekleme.
- P95 TTFB API ≤ 250-300 ms; Hata l7 ≤ 0. 5%.
- Kanaryaların başarısı (metriklerin bozulması olmadan) lansmanların %99'unu ≥.
- FP oranı WAF ≤ 0. 1%.
Tipik yapılandırmalar
Nginx (ters proxy, HTTP/2, kanarya, sıkıştırma)
nginx map $http_x_canary $upstream_pool {
default "stable";
~^1$ "canary";
}
upstream api_stable { zone zst 64k; server 10. 0. 1. 10:8443; server 10. 0. 1. 11:8443; keepalive 256; }
upstream api_canary { zone zcn 64k; server 10. 0. 2. 10:8443; keepalive 64; }
server {
listen 443 ssl http2 reuseport;
server_name api. example. com;
ssl_protocols TLSv1. 2 TLSv1. 3;
ssl_stapling on; ssl_stapling_verify on;
add_header Strict-Transport-Security "max-age=31536000" always;
basic limits/protection client_max_body_size 10m;
sendfile on; brotli on; gzip on;
location / {
proxy_http_version 1. 1;
proxy_set_header Host $host;
proxy_set_header X-Request-Id $request_id;
proxy_set_header X-Forwarded-Proto https;
proxy_connect_timeout 500ms;
proxy_read_timeout 5s;
proxy_next_upstream error timeout http_502 http_503 http_504;
proxy_next_upstream_tries 1; # Retrays are limited to proxy_pass https://api_$upstream_pool;
}
}
HAProxy (JWT-verify + mTLS to backend + rate-limit)
haproxy frontend fe_https bind:443 ssl crt /etc/haproxy/certs/ alpn h2,http/1. 1 http-request set-header X-Request-Id %[unique-id]
http-request lua. jwt_verify # external verification script JWT stick-table type ip size 1m expire 10m store http_req_rate (10s)
http-request deny if { src_http_req_rate(10s) gt 100 }
default_backend be_api
backend be_api balance roundrobin option httpchk GET /healthz server s1 10. 0. 1. 10:8443 check ssl verify required ca-file /etc/haproxy/ca. pem server s2 10. 0. 1. 11:8443 check ssl verify required ca-file /etc/haproxy/ca. pem
Elçi (JWT + ağırlıklı rotalar + aykırı tespit)
yaml static_resources:
listeners:
- name: https address: { socket_address: { address: 0. 0. 0. 0, port_value: 443 } }
filter_chains:
- filters:
- name: envoy. filters. network. http_connection_manager typed_config:
"@type": type. googleapis. com/envoy. extensions. filters. network. http_connection_manager. v3. HttpConnectionManager stat_prefix: ingress route_config:
virtual_hosts:
- name: api domains: ["api. example. com"]
routes:
- match: { prefix: "/" }
route:
weighted_clusters:
clusters:
- { name: api-stable, weight: 95 }
- { name: api-canary, weight: 5 }
http_filters:
- name: envoy. filters. http. jwt_authn typed_config: { "@type": type. googleapis. com/envoy. extensions. filters. http. jwt_authn. v3. JwtAuthentication }
- name: envoy. filters. http. router clusters:
- name: api-stable connect_timeout: 0. 5s type: STRICT_DNS lb_policy: ROUND_ROBIN outlier_detection: { consecutive_5xx: 3, interval: 2s, base_ejection_time: 30s }
transport_socket:
name: envoy. transport_sockets. tls
- name: api-canary connect_timeout: 0. 5s type: STRICT_DNS lb_policy: ROUND_ROBIN transport_socket:
name: envoy. transport_sockets. tls
Traefik (kural tabanlı rotalar, konsept)
yaml http:
routers:
api:
rule: "Host(`api. example. com`) && PathPrefix(`/v1/`)"
service: api-svc tls: { certResolver: letsencrypt }
services:
api-svc:
loadBalancer:
servers:
- url: "https://10. 0. 1. 10:8443"
- url: "https://10. 0. 1. 11:8443"
Proxy performansı
Bağlantı havuzlama ve arka uçlara keepalive, örnek başına bağlantı sınırı.
Yeniden kullanım, pin CPU/IRQ, yeterli soket tamponları.
TLS: ECDSA + kısa zincirler, %70 ≥ yeniden başlatma, HTTP/2/3 etkin.
"Sıcak" yanıtlar için proxy'de önbellek (304-doğrulama dahil).
Isınma: Zirvelerden önce DNS/TLS/bağlantıların ısıtılması.
DR ve hata toleransı
Bozulmuş düğümlerin otomatik olarak kaldırılması ('outlier-ejection').
Sağlık kontrolleri L4/L7 (HTTP gövde sürümü belirteci).
Fail-open/Fail-closed - ödeme/kritik yollar için bilinçli olarak seçin.
Trafiği yeni bir servise geçirmeden önce gölge modu.
Runbooks: "küme çöküşü", "yönlendirme döngüsü", "bağlantı sızıntıları", "yeniden fırtına".
Uygulama kontrol listesi
- Tabakalaşma: Kenar ^ Giriş/API-GW ^ Mesh/Çıkış, roller ve sorumluluklar.
- Yönlendirme politikaları: ana bilgisayar/yol/başlık/ağırlık, kanarya/mavi-yeşil, gölge.
- Güvenlik: TLS 1. 3, hassas yollar için mTLS, JWT/OAuth2, WAF.
- Zaman aşımları/Retrays/CB: tekdüze değerler, idempotency, yeniden deneme bütçesi.
- Cache/Rate-limit/Request-collapsing uygun olduğunda.
- Gözlemlenebilirlik: metrikler/günlükler/izler, korelasyon tanımlayıcıları.
- SLO: p95/hatalar/kaynaklar; Çevre hatalarına karşı uyarır.
- IaC/GitOps: depo proxy yapılandırmaları, kanarya sürümleri, hızlı geri dönüş.
- Testler: e2e yolları, kaos komut dosyaları, olaylardan önce yük.
Yaygın hatalar
Rol ayrımı olmayan "sihirli'bir vekil biçerdöver - karmaşık RCA ve yüksek patlama yarıçapı.
Idempotent olmayan sorgular için retrays - yinelenen işlemler.
Üstbilgi/URL normalizasyonu yok - önbellek zehirlenmesi ve kötü anahtarlar.
Yük devretme planı olmayan yapışkan oturumlar - bozulmuş bir örneğe yapıştırma.
'Traceparent'/' x-request-id' eksik - sorunları ilişkilendiremez.
Proxy düzeyinde sabit 301/302 - döngüler ve API sürüm kontrolünün kaybı.
iGaming/fintech'e özel
Ödemeler/PSP: mTLS ile özel çıkış ağ geçidi, katı zaman aşımları, idempotent anahtarları, IP/ASN beyaz listeleri.
Zirveler (maçlar/turnuvalar): kanarya/ağırlıklı, botlar için gri rotalar, agresif GET önbelleği, "fırtınaya" karşı köken savunması.
Düzenleme/günlükleme: denetim günlüklerinde politika sürümlerini ve rota nedenlerini düzeltin; PII'yi en aza indirin.
İçerik sağlayıcıları: önbellek yerelliği ve hatta dağıtımı için sağlayıcı anahtarına göre tutarlı karma.
Mini oyun kitapları
1) Kanarya API sürümü
1. 'Api-canary' üzerine %5 ağırlık ekleyin; 2) p95/hata izleme; 3) Payı genişletmek; 4) bozulma sırasında otomatik geri alma.
2) Bozulmuş düğümün acil olarak çıkarılması
1. Outlier-ejection veya manuel 'drenaj'; 2) havuzu kontrol etmek ve önbelleğe vurmak; 3) olay sonrası RCA.
3) İşlev yansıtma
1. Yanıtları etkilemeden gölgeyi etkinleştir; 2) metrikleri/yanıt farkını karşılaştırın; 3) Değiştirmeye karar verin.
4) Retray fırtınası
1. Yeniden deneme bütçesi/zaman sınırlarını azaltın; 2) istek daraltmayı etkinleştir; 3) yerel saplamalar/önbellek; 4) orijini stabilize edin.
Sonuç
İyi tasarlanmış bir proxy katmanı, rol ayrımı, deterministik yönlendirme, güvenilir politikalar (zaman aşımı/geri ödeme/CB), güvenlik (mTLS/JWT/WAF) ve gözlemlenebilirliktir. Yapılandırmaları IaC'ye sabitleyin, kanarya ve gölge kullanın, SLO'yu ölçün - platformunuz en sıcak saatlerde bile ölçeklenebilir, öngörülebilir ve güvenli olacaktır.