Birden fazla IP adresiyle yayınlanan bir vService'te hedef IP'ye göre farklı kural uygulayabilir miyim (Destination IP)?
Kısa cevap
Evet, HTTP ve L7 TCP vService'te. Destination IP koşulu, istemcinin bağlandığı vService adresini koşulda yazılan tek bir IPv4 ya da IPv6 adresiyle birebir karşılaştırır; CIDR kabul etmez, bu yüzden her adres için ayrı koşul tanımlanır. Koşul bir Conditional Backend Services bloğuna bağlanırsa o adrese gelen trafik farklı Kurum Servislerine gider; bir action'ın Conditions alanına bağlanırsa (ör. Block, Add HTTP Header) yalnızca o adrese gelen trafiğe uygulanır. Adres bir blokla karşılaştırılacaksa Dynamic Condition'da Destination IP address değişkeni IP/cidr match ile kullanılır. Network vService'te bu koşul kullanılmaz.
Sorun: Aynı vService Farklı Amaçlı Adreslerden Yayınlanıyor
Bir vService'in Frontend listesinde birden fazla IP adresi bulunabilir: örneğin internete açık 203.0.113.10 ve iç ağ için 192.0.2.10. İki adres aynı uygulamayı yayınlasa da genellikle farklı davranış istenir: iç adrese gelen istekler ayrı sunuculara gitmeli, dış adrese gelen isteklere daha sıkı kurallar uygulanmalıdır. Ayrı vService açmadan bu ayrım, isteğin hangi adrese geldiğine bakan bir koşulla yapılır.
Çözüm: Üç Yöntem
Yöntem 1 ve Yöntem 2 aynı Destination IP koşulunu farklı yerde kullanır ve birlikte de uygulanır; Yöntem 3, tek adres yerine bir adres bloğu gerektiğinde koşulun yerine geçer.
| Durumunuz | Uygun yöntem |
|---|---|
| Her adrese gelen trafik farklı Kurum Servislerine gitmeli | Yöntem 1: Conditional Backend Services |
| Kurum Servisi aynı kalmalı; adrese göre engelleme, başlık ekleme gibi farklı bir işlem uygulanmalı | Yöntem 2: Action'ın Conditions alanı |
| Hedef adres tek bir IP değil, bir ağ bloğuyla karşılaştırılmalı | Yöntem 3: Dynamic Condition (IP/cidr match) |
Yöntem 1: Conditional Backend Services Önerilen
- Nasıl çalışır Destination IP koşulu bir Conditional Backend Services (Content Switching) bloğuna bağlanır; o adrese gelen istekler bloğun Kurum Servislerine, diğerleri Default Backend Services'e gider.
- Nerede açılırLoad Balancer → Conditions → Destination IP · vService formu → + Conditional backend services
- Gereksinim Adreslerin 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 adres için bir satır bulunmalıdır. Eksikse vService Edit ile açılır, (+) ikonuyla satır eklenip Frontend IP ve Port seçilir ve form kaydedilir. Adres Frontend IP listesinde yoksa önce bir arayüze eklenir (Add IP Address; cluster kurulumunda VIP).
Load Balancer → Conditions → Add ile koşul formu açılır (nasıl eklenir).
Condition Name girilir (ör. vip-ic-ag), Criteria = Destination IP seçilir ve Destination IP alanına tek bir adres yazılır (ör. 192.0.2.10). Alan IPv4 ya da IPv6 adres alır, CIDR kabul etmez.
Add butonuna tıklanır. Başka bir adres için de koşul gerekiyorsa Add & Repeat ile pencereden çıkılmadan ikinci koşul tanımlanı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 adrese gelen trafiğin gideceği Kurum Servisleri seçilir. Diğer adrese gelen trafik için ayrı bir blok gerekmez; o trafik Default Backend Services'e gider.
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ı istemciyi, isteğin geldiği vService adresini ve yanıtlayan Kurum Servisini gösterir. Kayıt için vService'te LOG alanı açık olmalıdır.
192.0.2.10'a gelen istek → bloğun Kurum Servisi · 203.0.113.10'a gelen istek → Default Backend ServicesAynı istek iki adrese ayrı ayrı gönderilir.
curl -s http://192.0.2.10/ ; curl -s http://203.0.113.10/İki yanıt farklı Kurum Servislerinden gelirYöntem 2: Action'ın Conditions Alanı
- Nasıl çalışır Destination IP koşulu bir action'ın Conditions alanında seçilir; action yalnızca o adrese 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 IP 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 dış adrese gelen /admin isteklerini engellemek için Block, iç adrese gelen isteklere bir başlık eklemek için Add HTTP Header. Conditions alanında Destination IP koşulu seçilir; birden fazla koşul and / or ile birleştirilir (ör. Destination IP and Path).
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 aynı yol iki adrese istenir.
curl -sI http://203.0.113.10/admin ; curl -sI http://192.0.2.10/adminDış adres: action'da seçilen engelleme yanıtı · iç adres: Kurum Servisinin yanıtıYöntem 3: Dynamic Condition (IP/cidr match)
- Nasıl çalışırQuery Key alanındaki Destination IP address değişkeni, yani isteğin geldiği vService adresi, bir IP/CIDR bloğuyla karşılaştırılır. Böylece tek koşul, bloktaki bütün adresleri kapsar.
- Nerede açılırLoad Balancer → Conditions → Dynamic Condition
- Gereksinim Yok
- vService tipi HTTP · L7 TCP
Adım adım yapılandırma
Load Balancer → Conditions → Add ile koşul formu açılır.
Condition Name girilir, Criteria = Dynamic Condition seçilir. Condition Level = On Request seçilir (Conditional Backend Services bloklarında yalnızca istek aşamasındaki koşullar listelenir); Condition Protocol vService tipine göre HTTP ya da TCP seçilir. İki alan da kayıttan sonra değiştirilemez. Query Key alanında fx ile Destination IP address değişkeni seçilir; Operator = IP/cidr match seçilip IP/cidr to compare alanına ağ adresi ve CIDR (ör. 192.0.2.0 / 24) girilir.
Add butonuna tıklanır.
Koşul, Yöntem 1'in 5–8. adımlarıyla bir Conditional Backend Services bloğuna ya da Yöntem 2'deki gibi bir action'ın Conditions alanına bağlanır.
Doğrulama
Bloktaki bir adrese ve bloğun dışındaki bir adrese aynı istek gönderilir; sonuç Yöntem 1'deki gibi Connection Info satırında da okunur.
curl -s http://192.0.2.10/ ; curl -s http://203.0.113.10/192.0.2.0/24 içindeki adres koşula uyar; 203.0.113.10 uymazSık Yapılan Hatalar
- Destination IP alanına CIDR ya da birden fazla adres yazmak. Alan tek bir adres kabul eder ve birebir karşılaştırır. Birkaç adres için her adrese ayrı koşul tanımlanıp or ile birleştirilir; ağ bloğu için Yöntem 3 kullanılır.
- Hedef adresi istemci adresiyle karıştırmak. Destination IP istemcinin değil, istemcinin bağlandığı vService adresinin koşuludur; istemcinin adresine göre ayrım için Source IP koşulu kullanılır (Yalnızca iç ağdan (belirli IP'lerden) gelen kullanıcıları test sunucusuna yönlendirebilir miyim?).
- Koşulu Network vService'te aramak. Destination IP koşulu yalnızca HTTP ve L7 TCP vService'te kullanılır.
- Aynı adrese iki blok koymak. Conditional Backend Services blokları yukarıdan aşağıya değerlendirilir ve ilk eşleşen blok uygulanır; aynı adresi kapsayan ikinci blok hiç çalışmaz (Conditional Backend Services bloklarının değerlendirme sırasını nasıl değiştiririm?).
- Alan adına göre ayrımı adresle yapmaya çalışmak. Birden fazla alan adı aynı adresi paylaşıyorsa ayrım adresle yapılamaz; Host Header'ına göre yönlendirme yapabilir miyim? sorusundaki yöntem kullanılır.
Dokümantasyonda nasıl yapılır
