Windows Server 2016 Software Define Networking (SLB Dağıtımı) Part IV

03.10.2017 / Emir Bora Turan

Daha önceki makalelerimizde bildiğiniz üzere Network Controller servisinin kurulumunu gerçekleştirmiş ve network sanallaştırmanın çalıştığını gözlemlemiştik. Bu serimiz de ise, Software Define Network kavramının bir parçası olan Software Load Balancing servisinin dağıtımını gerçekleştireceğiz.

Genelde vermiş olduğumuz hizmetler, birden fazla kaynağa ihtiyaç duyar ve bu birden fazla kaynakla hizmet vermemiz gereken durumlar fazlaca karşılaştığımız senaryolar olarak karşımıza çokca çıkmaktadır. Böyle iş sürekliliğini ve gelen yük dağılımını yapabilmek için yazılımsal ya da donanımsal bir cihaza ihtiyaç duyarız. İşte bu noktada bahsettiğimiz yazılımsal bir yük dengeleyicisinin dağıtımını gerçekleştireceğiz.

Burada bilinmesi gereken en önemli husus, Windows Server 2016 ile gelen yük dengeleyicinin değil, Microsoft Azure tarafında kullandığı yük dengeleyici servisinin bire bir aynı hizmeti SCVMM 2016’ya SDNV2 ile kullanılmasına olanak sağlamaktadır. Yani Microsoft Azure tarafında kullanılan yük dengeleyicinin bire bir aynısı SDNV2’nin parçasıdır.

Bu servisin nasıl çalıştığı, nasıl paketlerin taşındığı ile ilgili olan mimari kısımlarını farklı bir makalede ele alacağız.

İlk olarak, SDNV2’nin parçası olan yük dengeleyici servisinin dağıtımını gerçekleştirmeden önce planlamış olduğum bir takım networkler bulunmaktaydı. Şimdi, bu Network kartlarını oluşturacağız.

Öncelikle kullanacağımız ve yazılımsal yük dengeleyici servisimiz için son derece önem arz eden Transit networkünü oluşturacağız.

Networking-Logical Network üzerinde sağ klik diyerek Create Logical Network seçimini yapıyoruz.

Gelen ekranımızda Transit ismini vererek ilerliyoruz.

Ayarlar ekranımızda yukarıdaki ekran görüntüsünde de göreceğiniz üzere One Connected Network, Create a VM network with the same name ve Managed by the network controller kutularını işaretleyerek ilerliyoruz.

Network Site ekranımızda ilk planımızda da belirttiğimiz şekilde 10.10.10.0/24 subnet tanımını yaparak ilerliyoruz.

Özet ekranımızda bulunan Finish ile Networkümüzü oluşturmuş oluyoruz.

Oluşturmuş olduğumuz Transit networkümüz için IP havuzumuzu oluşturarak devam edeceğiz.

Transit_IPPool isimlendirmizi yapıyor ve next ile ilerliyoruz.

Gelen Network Site ekranımızda herhangi bir değişikliğe ihtiyaç duymuyor ve ilerliyoruz.

IP dağıtım aralığını tanımladığımız bu ekranımızda 10.10.10.10-10.10.10.250 aralığını veriyoruz. Bu tanımımızıda gerçekleştirdikten sonra bir sonraki adımımıza geçiyoruz.

Gateway tanımımızı 10.10.10.1 olarak tanımladık. Next ile ilerliyoruz.

DNS olarak mevcut iç ortamda kullandığım DNS adresinin tanımını yaparak ilerliyoruz.

WINS ekranımızda daha önceki tanımlamalarımızda yaptığımız gibi herhangi bir değer girmeden ilerliyor ve özet ekranımızda bulunan Finish butonu ile Transit network tanımlamalarımızı bitirmiş oluyoruz.

Oluşturmuş olduğumuz Transit isimli networkümüzü de daha önce oluşturmuş olduğumuz SDNPortProfile altında tanımalamalarımızı gerçekleştireceğiz. Bunun için:

Oluşturmuş olduğumuz SDNPortProfile özelliklerine girdiğimizde göreceğimiz Network Configuration altında Transit Networkümüzün seçimini yaparak bu adımımızıda tamamlamış olacağız.

Şimdi diğer network kartlarımızı tanımlayarak devam edeceğiz.

Private VIP Network tanımı için 20.20.20.0/24 Subnetini kullanacağımızı zaten belirlemiştik.

PrivateVIP isimlendirmemizi yaparak ilerliyoruz.

Ayarlar ekranımızda yukarıdaki ekran görüntüsünde de göreceğiniz üzere One Connected Network, Create a VM network with the same name ve Managed by the network controller kutularını işaretleyerek ilerliyoruz.

Network site ekranımızda 20.20.20.0/24 Subnetini tanımlıyor ve ilerliyoruz.

Gelen ekranımızı Finish diyerek sonlandırıyoruz.

PrivateVIP networkümüz için şimdi IP havuzunu oluşturacağız.

PrivateVIP_IPPool isimlendirmemizi yapıyor ve bu ekranımızı geçiyoruz.

Network Site ekranımızda herhangi bir değişiklik yapmadan next ile ilerliyoruz.

IP dağıtım aralığını tanımlıyoruz. Burada 20.20.20.5-20.20.20.250 arasını kullanacağımı belirttik ve tanımımızı ona göre gerçekleştirdik. Burada en önemli ayrıntı yük dengeleyici servisi için kullanacağımız IP havuzunun rezerve yapmamız gerektiğidir. Şayet, burada rezerve yapmaz isek ilerleyen bölümlerde dağıtımını gerçekleştireceğimiz yük dengeleyici servislerinde bu IP bloğunu göremeyiz. Bu nedenle rezerve kısmı önem arz etmektedir.

Gateway tanımı olarak 20.20.20.1 tanımını gerçekleştirdikten sonra next ile ilerliyoruz.

DNS ekranımızda da daha önceki network kartlarında da kullanmış olduğumum 192.168.50.2 IP adresini tanımlıyor ve ilerliyoruz.

PrivateVIP networkü için IP havuzu ve IP dağıtım konfigürasyonlarını tamamladık. Finish diyerek bu networke ait tanımlamaları sonlandırmış oluyoruz.

Şimdi sıra bir diğer networkümüze geldi. PublicVIP networkümüzü oluşturacağız.

Gelen ilk ekranımızda isimlendirmemizi PublicVIP diyerek ilerliyoruz.

Ayarlar ekranımızda yukarıdaki ekran görüntüsünde de göreceğiniz üzere One Connected Network, Create a VM network with the same name ,Managed by the network controller ve Public IP Address Network alanlarını seçerek ilerliyoruz.

Network site tanımlamalarımızıda gerçekleştirdikten sonra ilerliyoruz.

Gelen özet ekranımızda bulunan finish butonu ile PublicVIP logical network kartımızı oluşturuyoruz.

Oluşturmuş olduğumu bu network için sıra geldi IP havuzunu tanımlamaya. Bunun için:

İsimlendirmemizi PublicVIP_IPPool vererek ilerliyoruz.

Network Site ekranımızda herhangi bir değişiklik yapmadan next ile ilerliyoruz.

IP dağıtım aralığını tanımlıyoruz. Burada 41.40.40.5-41.40.40.250 arasını kullanacağımı belirttik ve tanımımızı ona göre gerçekleştirdik. Burada en önemli ayrıntı yine bu networkümüzü de yük dengeleyici için kullanacağımız IP havuzunu rezerve yapmamız gerektiğidir. Şayet, burada rezerve yapmaz isek ilerleyen bölümlerde dağıtımını gerçekleştireceğimiz yük dengeleyici servislerinde bu IP bloğunu da göremeyiz. Bu nedenle rezerve kısmı burada da önem arz etmektedir.

Gateway tanımımızıda gerçekleştiriyor ve next ile ilerliyoruz.

DNS tanımlamamızı yaptıktan sonra son adıma geçiyoruz.

Network tanımlamalarımızı bu servis içinde tamamlamak için finish diyoruz ve servis dağıtımı için gerekli adımlara geçiyoruz.

Şimdiye kadar yazılımsal yük dengeleyici servisinin dağıtımı için ihtiyacımız olan network kartlarını oluşturduk. Artık ilgili serivs templatemizi import ederek dağıtıma başlayabiliriz.

SDNV2 SLB Dağıtımı :

Library/Templates/Service Templates sekmesine geçtikten sonra Import Template seçimini yapıyoruz.

SDNV2 kurulum ve dağıtım işlemlerine başlamadan önce Github üzerinden indirmiş olduğumuz dosya içerisinde ve belirtilen dizinde olan servis template mizi import ediyoruz.

Gelen ekranımızda ilgili referanslarımızı library altından göstererek ilerliyoruz.

Gelen ekranımızda Import diyerek templatemizi import işlemini gerçekleştiriyoruz.

SLBMuxServiceTemplate dosyamız bizlerin import ettiği service template’imizdir. Bu servisimizi seçtikten sonra yukarıda ki barda görülen Configure Deployment diyerek ilgili düzenlemeleri gerçekleştireceğiz.

İsimlendirmemizi yaptıktan ve ilgili network kartlarımızı tanımladıktan sonra onaylıyoruz.

Yukarıdaki ekran görüntüsünde de göreceğimiz üzere ilgili alanları tanımladıktan sonra Refresh Preview diyerek doğrulamaları gerçekleştiriyoruz.

Görüldüğüz üzere herhangi bir problem olmadığını teyitini uygulamamızda bizlere gösterdi. Artık Deploy Service diyerek dağıtım işlemine başlıyoruz.

Dağıtım işlemi başarılı olduğunda, yukarıdaki ekran görüntüsünde de göreceğimiz üzere SDN Host grubu altında Software Load Balancer servisini göreceğiz.

Servislerin başarılı bir şekilde dağıtımının tamamlandığını gördükten sonra network servisi olarak daha önce dağıtımını yaptığımız NC isimli servis üzerinde gerekli Load Balancer yapılandırmasını gerçekleştireceğiz.

Fabric tabı ile network services altında göreceğimiz ve daha önce servis olarak oluşturduğumuz NCS isimli servisimize sağ klik yapıyoruz. Ardında Services sekmesine geliyoruz. Burada Load Balancer rolünü için hangi servisi kullanacağımızın seçimini yapıyoruz. Bu seçim sonrasında SLB Manager VIP IP adresini ve bu servis için kullanılacak IP havuzlarımı belirliyoruz.

Daha sonra dağıtımını gerçekleştirdiğimiz yazılımsal yük dengeleyici servisimiz için hizmet verecek olan üç node’lu servis sunucularımızın konfigürasyon işlemlerini tamamlayacağız. Burada ASN ve BGP gibi kavramlara değinmeyeceğiz. Burada 64628 ve 64623 kavramlarını öncelikle Autonoum Systemler için belirlenmiş olan Private ASN’lerden dolayı ve daha öncesinde incelemiş olduğum Microsoft tarafındaki labaratuvar sunucularında tanımlanmış olan bu ASN değerlerinden dolayı bu şekilde tanımladım. Production bir ortam olsa idi o zaman BGP ve ASN değerlerini hem bölgelerime hem de servis sağlayıcılarıma göre tanımlıyor olacaktım.

Yukarıda da görüldüğü şekilde ilgili ASN ve BGP tanımlamaları mı gerçekleştiriyoruz ve bu tanımlamalarımızı her bir node için aynı şekilde yapıyor ve onaylıyoruz.

Şimdi ilgili servis tanımlamalarımı gerekleştirdikten sonra yazılımsal yük dengeleyici servisimizi hem test edeceğiz hem de bunun için bir template oluşturacağız.

Template oluşturmaya başlamak için yine Fabric altında bulunan Networking sekmesine geçiyoruz ve VIP Template oluşturmaya başlıyoruz.

VIP Template üzerinde sağ klik diyoruz ve yeni bir template oluşturmaya başlıyoruz. WEB-80 ismini, karşılanacak olan Virtual IP Port adresimizi ve arka tarafta bu porta hizmet verecek ilgili Backend port tanımını yaparak ilerliyoruz.

Gelen ekranımızda template type olarak Microsoft ve Microsoft Network Controller seçimlerini yapıyor ve ilerliyoruz.

Protokol ekranımızda protocol olarak custom ve sim olarak TCP protokünü tanımlıyor ve next ile ilerliyoruz.

Gelen ekranımızda herhangi bir değişiklik yapmadan ilerliyoruz.

Burada load balancing metodumuzu belirleyeceğiz. Yapımıza en uygun ya da ne şekilde hizmet vermemizi istiyor isek ona görer seçimlerimizi yapıyoruz. Ben burada Round Robin seçimin yaptım. Gerçek bir ortam olsa idi sanırım round robin metodunu kullanmazdık. Çünkü bu metod, sunucumuz hizmet vermiyor bile olsa isteği gönderiyor olacaktık. Bu sebepten dolayı tercih edilen bir yöntem olmayabilirdi. Yine de uygulamalara ve uygulamaların desteklediği metodları tercih etmekte fayda vardır.

Health monitoring üzerinde de herhangi bir değişiklik ya da konfigürasyon yapmıyoruz ve ilerliyoruz.

Özet ekranımıza ulaştık ve artık template tanımını bitiriyoruz.

Şimdi ise Remote Access Server rolümüzün kurulu olduğu sunucumuz üzerinde gerekli konfigürasyonları gerçekleştireceğiz. Bunun için aşağıda belirlediğimiz konfigürasyonlarını düzgün bir şekilde yapmış ve connected olduğunu görmemiz gerekmektedir.

Add-BgpRouter -BgpIdentifier 10.10.10.1 -LocalASN 64623

add-bgppeer -Name MUXVM001 -LocalIPAddress 10.10.10.1 -PeerIPAddress 10.10.10.42 -LocalASN 64623 -PeerASN 64628 -OperationMode Mixed -PeeringMode Automatic

add-bgppeer -Name MUXVM002 -LocalIPAddress 10.10.10.1 -PeerIPAddress 10.10.10.41 -LocalASN 64623 -PeerASN 64628 -OperationMode Mixed -PeeringMode Automatic

add-bgppeer -Name MUXVM003 -LocalIPAddress 10.10.10.1 -PeerIPAddress 10.10.10.40 -LocalASN 64623 -PeerASN 64628 -OperationMode Mixed -PeeringMode Automatic

Yukarıda gördüğümüz komut setleri sonrasında RRAS sunucumuz üzerinde ilgili kontrolleri gerçekleştiriyorum. Bu kontrollerde bağlantılarım connected olduğunu gözlemleyeceğiz.

Görüldüğü üzere bağlantılarımın başarılı olduğunu ve şu anda herhangi bir problem olmadığını gözlemledik.

Şimdi ise artık oluşturmuş olduğumuz SLB VIP templatemizi kullanarak mevcut ve network sanallaştırması için kullanmış olduğumuz iki adet sunucumuza bu SLB templatemizi atayacağız ve kontrollerimizi gerçekleştireceğiz.

param(

[Parameter(Mandatory=$false)]

# Name of the Network Controller Network Service

# This value should be the name you gave the Network Controller service

# when you on-boarded the Network Controller to VMM

$LBServiceName = “NCS”, — Network Controller için oluşturmuş olduğumuz servis adı

[Parameter(Mandatory=$false)]

# Name of the VM instances to which you want to assign the VIP

$VipMemberVMNames = @(“Red Machine01”, “Blue Machine”),– Test için kullandığımız sunucularımız.

[Parameter(Mandatory=$false)]

# VIP address you want to assign from the VIP pool.

# Pick any VIP that falls within your VIP IP Pool range.

$VipAddress = “41.40.40.10”,–Public IP Adresi tanımı. Bu IP adres aralığında ve tanımlamalarımızda belirlediğimiz havuz içerisinden herhangi bir IP adresi verebiliriz.

[Parameter(Mandatory=$false)]

# Name of the VIP VM Network

$VipNetworkName = “PublicVIP”, — Public networkü için oluşturduğumuz Logical Network ismi

[Parameter(Mandatory=$false)]

# The name of the VIP template you created via the VMM Console.

$VipTemplateName = “WEB-80”,–VIP Template için vermiş olduğumuz isim

[Parameter(Mandatory=$false)]

# Arbitrary but good to match the VIP you’re using.

$VipName = “TenantVIPWebTest”– İsimlendirme

)

Import-Module virtualmachinemanager

$lb = Get-scLoadBalancer | where { $_.Service.Name -eq $LBServiceName};

$vipNetwork = get-scvmnetwork -Name $VipNetworkName;

$vipMemberNics = @();

foreach ($vmName in $VipMemberVMNames)

{

$vm = get-scvirtualmachine -Name $vmName;

# if ($vm.VirtualNetworkAdapters[0].VMNetwork.ID -ne $vipNetwork.ID)

# {

# $vm.VirtualNetworkAdapters[0] | set-scvirtualnetworkadapter -VMNetwork $vipNetwork;

# }

$vipMemberNics += $vm.VirtualNetworkAdapters[0];

}

$existingVip = get-scloadbalancervip -Name $VipName

if ($existingVip -ne $null)

{

# foreach ($mem in $existingVip.VipMembers)

# {

# $mem | remove-scloadbalancervipmember;

# }

$existingVip | remove-scloadbalancervip;

}

$vipt = get-scloadbalancerviptemplate -Name $VipTemplateName;

$vip = New-SCLoadBalancerVIP -Name $VipName -LoadBalancer $lb -IPAddress $VipAddress -LoadBalancerVIPTemplate $vipt -FrontEndVMNetwork $vipNetwork -BackEndVirtualNetworkAdapters $vipMemberNics;

Write-Output “Created VIP ” $vip;

$vip = get-scloadbalancervip -Name $VipName;

Write-Output “VIP with members ” $vip;

Yukarıda bulunan script aynı zamanda Github içerisinde indirmiş olduğumuz dosya içerisinde mevcuttur. Sadece ilgili alanların düzenlenmesi yeterlidir.

Yukarıdaki komut setini çalıştırdıktan sonra ilgili test işlemlerimizi gerçekleştireceğiz. Script içerisinde kullanmış olduğumuz 41.40.40.10 numaralı Public IP adresini kullanarak yine, daha önce oluşturmuş olduğumuz ve network sanallaştırmada kullandığımız iki adet sunucumuzu kullanacağız.

Evet gördüğümüz üzere http://41.40.40.10 isteği gönderdiğimizde, iki sunucumuzda cevap vermektedir. Böylelikle Software Load Balancer servisimizinde sorunsuz bir şekilde hizmet verdiğini gözlemledik ve bu kurulum ve konfigürasyonumuzuda tamamlamış olduk.

Yazan: Yenal TIRPANCI (Eczacıbaşı Bilişim)