gRPC servislerimi TR7 arkasına koyabilir miyim?
Kısa cevap
Evet. gRPC HTTP/2 üzerinde çalıştığı için bağlantının iki tarafında da HTTP/2 olmalıdır: HTTP vService'te frontend Protocol olarak HTTP/2 seçilip sertifika bağlanır, Kurum Servisinde ise SSL Service açılıp ALPN alanında HTTP 2.0 Enabled seçilir; gRPC sunucusu şifresiz HTTP/2 (h2c) dinliyorsa SSL Service kapalı bırakılıp Cleartext HTTP/2 (h2c) işaretlenir. TR7'nin Kurum Servisine açtığı bağlantı varsayılan olarak HTTP/1.1 olduğu için bu iki ayardan biri yapılmadan gRPC çağrıları çalışmaz. TLS'in gRPC sunucusunda sonlanması isteniyorsa L7 TCP vService ile passthrough da kullanılabilir.
Sorun: gRPC Neden Varsayılan Ayarlarla Çalışmaz?
gRPC, istek ve yanıtları HTTP/2 akışları (stream) üzerinden taşır ve HTTP/1.1'e düşemez. TR7'de istemci tarafı HTTP/2 frontend satırında açılır; ama TR7'nin Kurum Servisine açtığı bağlantı varsayılan olarak HTTP/1.1'dir. Kurum Servisi tarafında HTTP/2, TLS üzerinden ALPN ile ya da şifresiz bağlantıda Cleartext HTTP/2 (h2c) ayarıyla açılır.
Çözüm: İki Yöntem
| Durumunuz | Uygun yöntem |
|---|---|
| TR7 isteği görsün: HTTP Logs, WAF, path'e göre yönlendirme kullanılsın | Yöntem 1: HTTP vService |
| TLS ve HTTP/2 anlaşması uçtan uca gRPC sunucusunda kalsın | Yöntem 2: L7 TCP passthrough |
Yöntem 1: HTTP vService Önerilen
- Nasıl çalışır TR7 istemciyle HTTP/2 üzerinden konuşur, isteği Kurum Servisine TLS üzerinde HTTP/2 ile ya da şifresiz HTTP/2 (h2c) ile iletir.
- Nerede açılır vService → Frontend → Protocol → HTTP/2; Kurum Servisi → SSL Service → ALPN → HTTP 2.0 Enabled ya da şifresiz sunucuda Kurum Servisi → Cleartext HTTP/2 (h2c)
- Gereksinim TR7'ye yüklenmiş sertifika; gRPC sunucusunun TLS üzerinden HTTP/2 ya da şifresiz HTTP/2 (h2c) sunması
- vService tipi HTTP
- Kurum Servisi tarafı TLS yolunda gRPC sunucusu TLS ile (bir sertifikayla) dinletilir; TR7 bu sertifikayı varsayılan olarak doğrulamaz (Certificate Verification ile doğrulama açılabilir).
Adım adım yapılandırma
Load Balancer → Backend Services ekranında gRPC sunucusunun Kurum Servisi seçilir ve Edit butonuna tıklanır. Kurum Servisi yoksa Add ile ekleme formu açılır (Kurum Servisi nasıl eklenir; hangi bilgiler zorunludur?).
Yeni Kurum Servisi için Backend Service Name ve Address (sunucunun IP'si ve TLS portu, ör. 192.0.2.30:443; h2c dinleyen sunucuda şifresiz port) girilir. Mevcut kayıtta Address'teki portun sunucunun dinlediği port olduğu kontrol edilir.
SSL Service açılır; TR7 Kurum Servisine TLS ile bağlanır. gRPC sunucusu şifresiz HTTP/2 (h2c) dinliyorsa SSL Service kapalı bırakılır, Cleartext HTTP/2 (h2c) işaretlenir ve 4. adım atlanır; sağlık denetimi HTTP ise Health Checks profilindeki HTTP Version alanında HTTP/2 seçilir.
ALPN alanında HTTP 2.0 Enabled seçilir.
Formun altındaki Edit (yeni kayıtta Add) butonuna tıklanır.
İstemcilerin bağlanacağı alan adının sertifikası TR7'de yoksa Certificates & PKI → SSL/TLS Certificates → Add adımları izlenir (nasıl eklenir).
Certificate Name girilir. Ayrı PEM dosyaları için Type = Manual seçilip Certificate Content ve Key Content alanlarına sertifika ve özel anahtar yapıştırılır; PFX dosyası için PFX seçilip PFX File alanından dosya seçilir ve Password alanına dosyanın parolası girilir. Ayrıntı: Sertifikamı TR7'ye nasıl yüklerim; hangi formatlar destekleniyor?
Formun altındaki Add butonuna tıklanır.
Load Balancer → Load Balancer vService List ekranında HTTP tipindeki vService seçilir ve Edit butonuna tıklanır; yeni vService için Add ile form açılır, Name girilir ve Type HTTP kalır.
443 portlu satırın Protocol alanında Encrypted (HTTPS) grubundan HTTP/2 seçilir ve Certificate alanında sertifika seçilir.
Default Backend Services tablosunda gRPC Kurum Servisi seçilir.
Uzun süren (streaming) çağrılar varsa Details → Timeout kutusu işaretlenir ve Client Timeout ile Server Timeout değerleri (varsayılan 90 saniye) en uzun akış sessizliğinden büyük olan bir Timeouts profili seçilir. Profil yoksa önce Load Balancer → Profiles → Timeouts → Add ile oluşturulur (nasıl eklenir). Başka vService'lerin kullandığı bir profili düzenlemek onları da etkiler (Uzun süren işlemlerde (rapor, dosya yükleme) istek neden yarıda kesiliyor; hangi timeout'u artırmalıyım?).
Save butonuna tıklanır. Cluster kurulumunda değişiklik varsayılan auto-sync ile eş cihaza da aktarılır; Manual Sync Mode açıksa Synchronize ile elle gönderilir.
Doğrulama
grpcurl api.example.com:443 listSunucudaki servislerin listesilist komutu sunucuda reflection açık olmasını gerektirir; kapalıysa grpcurl -d '{}' api.example.com:443 paket.Servis/Metot ile bir metot çağrılır.vService'in HTTP Logs ekranında gRPC çağrısı incelenir.
POST HTTP/2.0 https://api.example.com/paket.Servis/MetotYöntem 2: L7 TCP Passthrough
- Nasıl çalışır TR7 TLS'i açmaz; şifreli akış olduğu gibi gRPC sunucusuna gider, HTTP/2 anlaşması doğrudan istemci ile sunucu arasında yapılır.
- Nerede açılır vService → Type: L7 TCP → Frontend → Protocol: TCP
- Gereksinim Sertifikanın gRPC sunucusunda olması; Kurum Servisinde SSL Service'in kapalı olması
- vService tipi L7 TCP
- Kurum Servisi tarafı gRPC sunucusu TLS'i ve HTTP/2 anlaşmasını kendisi yapar; sunucuda değişiklik gerekmez.
Adım adım yapılandırma
Load Balancer → Backend Services ekranında gRPC sunucusunun Kurum Servisi seçilir ve Edit butonuna tıklanır; yoksa Add ile ekleme formu açılır.
Address sunucunun TLS portudur (ör. 192.0.2.30:443; yeni kayıtta Backend Service Name de girilir) ve SSL service kapalı kalır. SSL service açık olursa TR7 sunucuya kendi TLS oturumunu açar ve istemcinin şifreli akışı ikinci bir TLS katmanına girer.
Formun altındaki Edit (yeni kayıtta Add) butonuna tıklanır.
Load Balancer → Load Balancer vService List → Add adımları izlenir; Name girilir ve Type olarak L7 TCP seçilir.
Frontend satırında IP seçilir, port 443 yapılır ve Protocol olarak Unencrypted grubundaki TCP seçilir. TCP + TLS seçilmez: bu seçenekte TR7 TLS'i sonlandırır ve istemciye ALPN'de yalnızca HTTP/1.1 sunar; gRPC istemcisi bağlanamaz. IP listede yoksa önce Network → Interfaces → Actions → Add IP ile eklenir (Frontend IP'sini neden elle yazamıyorum; listede olmayan bir IP'yi (ör. IPv6) vService'te kullanmak için ne yapmalıyım?).
Default Backend Services tablosunda gRPC Kurum Servisi seçilir.
Save butonuna tıklanır. Cluster kurulumunda değişiklik varsayılan auto-sync ile eş cihaza da aktarılır.
Doğrulama
grpcurl api.example.com:443 listSunucudaki servislerin listesiSık Yapılan Hatalar
- Kurum Servisinde ALPN'i açmamak (Yöntem 1). ALPN alanında HTTP 2.0 Enabled seçilmezse TR7 Kurum Servisine HTTP/1.1 ile bağlanır; gRPC çağrıları başarısız olur.
- Şifresiz HTTP/2 (h2c) dinleyen gRPC sunucusunda SSL Service'i açmak (Yöntem 1). TLS olmayan sunucu için SSL Service kapalı bırakılıp Cleartext HTTP/2 (h2c) işaretlenir; bu ayar yapılmazsa TR7 sunucuya HTTP/1.1 ile bağlanır.
- Passthrough'ta SSL service'i açık bırakmak (Yöntem 2). SSL Service açıkken istemcinin TLS oturumu sunucuya ikinci bir TLS katmanının içinde ulaşır ve bağlantı kurulamaz.
- Keep Header Names action'ını kullanmak. Bu action bağlı vService'te HTTP/2 kapatılır ve gRPC çalışmaz.
- gRPC'ye özel health check aramak. Health check türleri arasında gRPC yoktur; Kurum Servisine bağlantıyı denetleyen TCP ya da TLS el sıkışmasını da denetleyen TCPS türünde bir health check atanır.
Dokümantasyonda nasıl yapılır
