vService birden fazla portu dinliyorsa porta göre farklı action ya da Kurum Servisi uygulayabilir miyim (Destination Port)?
Kısa cevap
Evet, HTTP ve L7 TCP vService'te. Destination Port koşulu, istemcinin bağlandığı vService portunu Less than, Equals to, Greater than ya da Range operatörüyle bir tam sayıyla karşılaştırır; Range'de iki sınır da dahildir. Koşul bir Conditional Backend Services bloğuna bağlanırsa o porta gelen trafik farklı Kurum Servislerine gider; bir action'ın Conditions alanına bağlanırsa action yalnızca o porta gelen trafikte çalışır. Koşul hem istek hem yanıt aşamasında kullanılır. Yalnızca 80'den 443'e yönlendirme için koşul gerekmez; Frontend satırında Protocol = HTTP → HTTPS seçilir.
Sorun: Tek vService'te Portlar Farklı Hizmet Veriyor
Bir vService'in Frontend listesinde birden fazla port, ayrıca tek satırda bir port aralığı tanımlanabilir. Örneğin 443 portu son kullanıcılara, 8443 portu yönetim arayüzüne hizmet veriyorsa iki porta gelen trafiğin farklı sunuculara gitmesi ya da yönetim portuna ek kısıtlar uygulanması gerekir. Ayrı vService açmadan bu ayrım, isteğin geldiği porta bakan bir koşulla yapılır.
Çözüm: İki Yöntem
İki yöntem aynı Destination Port koşulunu farklı yerde kullanır ve birlikte de uygulanır.
| Durumunuz | Uygun yöntem |
|---|---|
| Her porta gelen trafik farklı Kurum Servislerine gitmeli | Yöntem 1: Conditional Backend Services |
| Kurum Servisi aynı kalmalı; porta göre engelleme, başlık ekleme gibi farklı bir işlem uygulanmalı | Yöntem 2: Action'ın Conditions alanı |
| Yalnızca HTTP'den HTTPS'e yönlendirme | Koşul gerekmez: Frontend satırında Protocol = HTTP → HTTPS |
Yöntem 1: Conditional Backend Services Önerilen
- Nasıl çalışır Destination Port koşulu bir Conditional Backend Services (Content Switching) bloğuna bağlanır; koşula uyan porta gelen istekler bloğun Kurum Servislerine, diğerleri Default Backend Services'e gider.
- Nerede açılırLoad Balancer → Conditions → Destination Port · vService formu → + Conditional backend services
- Gereksinim Portların vService'in Frontend listesinde tanımlı olması; hedef sunucuların Kurum Servisi olarak tanımlı olması
- vService tipi HTTP · L7 TCP
Adım adım yapılandırma
vService'in Frontend listesinde her port için bir satır bulunmalıdır. Eksikse vService Edit ile açılır, (+) ikonuyla satır eklenip Frontend IP seçilir, Port alanına tek bir port ya da port aralığı yazılır ve form kaydedilir.
Load Balancer → Conditions → Add ile koşul formu açılır (nasıl eklenir).
Condition Name girilir (ör. port-yonetim), Criteria = Destination Port seçilir. Destination Port alanı Equals to seçili ve değeri boş açılır; operatör seçilip tam sayı girilir:
| Operatör | Örnek | Eşleşen port |
|---|---|---|
| Equals to | 8443 | Yalnızca 8443 |
| Less than | 1024 | 1024'ten küçük portlar |
| Greater than | 8000 | 8000'den büyük portlar |
| Range | 8000 - 8100 | 8000 ile 8100 arası, iki sınır dahil |
Add butonuna tıklanır.
Load Balancer → Load Balancer vService List adımları izlenir ve vService Edit ile açılır.
Default Backend Services tablosundaki + Conditional backend services butonuna tıklanır.
Bloğun Select Conditions alanında 3. adımdaki koşul, Kurum Servisi seçicisinde bu porta gelen trafiğin gideceği Kurum Servisleri seçilir.
Save butonuna tıklanır.
Doğrulama
HTTP vService'te vService'in Logs & Tracking → HTTP Logs ekranında bir kayda tıklanır; önizlemenin Summary sekmesindeki Connection Info satırı isteğin geldiği vService adresini ve portunu, ardından yanıtlayan Kurum Servisini gösterir. Kayıt için vService'te LOG alanı açık olmalıdır.
:8443'e gelen istek → bloğun Kurum Servisi · :443'e gelen istek → Default Backend ServicesAynı istek iki porta ayrı ayrı gönderilir.
curl -sk https://203.0.113.10:8443/ ; curl -sk https://203.0.113.10/İki yanıt farklı Kurum Servislerinden gelirYöntem 2: Action'ın Conditions Alanı
- Nasıl çalışır Destination Port koşulu bir action'ın Conditions alanında seçilir; action yalnızca koşula uyan porta gelen trafikte çalışır. Koşul hem On Request hem On Response action'larında listelenir.
- Nerede açılırLoad Balancer → Actions · vService formu → Details → Actions
- Gereksinim Yöntem 1'in 2–4. adımlarında oluşturulan Destination Port koşulu
- vService tipi HTTP · L7 TCP (action tipinin desteklediği vService tiplerinde)
Adım adım yapılandırma
Load Balancer → Actions → Add adımları izlenir.
Action Name girilir ve Action Type seçilir; örneğin yönetim portuna yalnızca belirli adreslerden erişim için Block, Kurum Servisine isteğin hangi porttan geldiğini bildirmek için Add HTTP Header. Conditions alanında Destination Port koşulu seçilir; gerekiyorsa başka koşullarla and / or ile birleştirilir (ör. Destination Port and Source IP koşulunun olumsuz hâli).
Add butonuna tıklanır.
Load Balancer → Load Balancer vService List adımları izlenip vService açılır ve formun üstündeki Details butonuna tıklanır.
Actions alanında oluşturulan action seçilir.
Save butonuna tıklanır.
Doğrulama
Block action'ı örneğinde izin verilmeyen bir adresten iki porta istek gönderilir.
curl -skI https://203.0.113.10:8443/ ; curl -skI https://203.0.113.10/8443: action'da seçilen engelleme yanıtı · 443: Kurum Servisinin yanıtıSık Yapılan Hatalar
- 80 → 443 yönlendirmesi için koşul ve action kurmak. vService'in Frontend satırında Protocol = HTTP → HTTPS seçildiğinde o porta gelen istekler HTTPS'e kendiliğinden yönlendirilir; ayrıca koşul gerekmez.
- Operatör listesinde "eşit değil" aramak. Listede Less than, Equals to, Greater than ve Range bulunur. "Bu port değilse" gerekiyorsa koşul seçim listelerinde koşulun olumsuz hâli seçilir (Bir koşulu olumsuz ("şu değilse") olarak kullanabilir miyim?).
- Range sınırlarını hariç sanmak. Range'de iki sınır da aralığa dahildir;
8000-8100hem 8000'i hem 8100'ü kapsar. - Kurum Servisinin portuyla karıştırmak. Destination Port, istemcinin bağlandığı vService portudur; isteğin Kurum Servisine hangi portla iletildiği Kurum Servisinin kendi ayarıdır.
- Koşulu Network vService'te aramak. Destination Port koşulu yalnızca HTTP ve L7 TCP vService'te kullanılır.
Dokümantasyonda nasıl yapılır
İlgili sorular
- Birden fazla IP adresiyle yayınlanan bir vService'te hedef IP'ye göre farklı kural uygulayabilir miyim (Destination IP)?
- Bir koşulu olumsuz ("şu değilse") olarak kullanabilir miyim?
- Conditional Backend Services ile Default Backend Services arasındaki fark nedir?
- Condition ile Action arasındaki fark nedir?
