Hizmet ağı mimarisinin büyüsünü keşfedin ve dağıtık sistemlerinizi nasıl güçlendirdiğini görün.
Hizmet ağı süperstarı Istio'ya derinlemesine inin ve Kubernetes kümenizi nasıl mükemmel bir şekilde yönettiğini öğrenin.
Yekpare uygulamalar, daha küçük, bağımsız hizmetlere dönüştü. Bu değişim, bulut tabanlı bilgi işlem ve mikro hizmetler mimarisiyle büyük popülerlik kazandı. Docker ve Kubernetes gibi araçlar bu eğilimi hızlandırdı.
Kubernetes gibi platformlardaki mikro hizmetler çok sayıda avantaj sunarken, karmaşıklıkları da beraberinde getirir. Bu dağıtık hizmetler arasındaki iletişimi yönetmek, keşif, yönlendirme, yeniden denemeler ve yük devretme konularının dikkatlice değerlendirilmesini gerektirir.
Ek zorluklar arasında güvenlik ve gözlemlenebilirlik yer almaktadır.
Her hizmete iletişim yetenekleri oluşturmak, özellikle hizmet ortamı genişledikçe zaman alıcıdır. İşte hizmet ağının parladığı yer burasıdır. Dağıtık bir sistem içindeki tüm hizmetten hizmete iletişimi ele alır.
Hizmet ağı bunu, ağ proxy'leri kullanarak başarır. Hizmetler arasındaki istekler, altyapı katmanında hizmetlerin dışında bulunan bu proxy'lerden yönlendirilir:
Bu proxy'ler, hizmetler için bir ağ ağı oluşturur, dolayısıyla adı da buradan gelir. Hizmet ağı, hizmetten hizmete iletişimin her alanını kontrol ederek dağıtık hesaplamanın sekiz yanılgısını ele almasını sağlar.
Bir hizmet ağıyla hizmetlerinizin tüm potansiyelini ortaya çıkarın! Bu büyülü aracın uygulama ortamınızı nasıl dönüştürebileceğini keşfedin.
Büyüyü üç temel yeteneğe ayıralım: trafik büyücülüğü, sağlam güvenlik ve kristal berraklığında görünürlük.
Bir hizmet ağı, hizmet etkileşimlerini hassasiyetle yönlendiren nihai trafik polisinizdir. Sorunsuz geçiş sürümleri ve A/B testi deneyleri için dinamik yönlendirmenin, akıllı keşfin ve trafik gölgelendirme ve bölme gibi akıllara durgunluk veren özelliklerin keyfini çıkarın.
Güvenilmez bağlantılara elveda deyin! Bir hizmet ağı, hizmetlerinizi rahat bir güvenilirlik battaniyesine sararak, uygulamalarınızı kaostan korumak için yeniden denemeler, zaman aşımı süreleri, oran sınırlama ve devre kesiciler sunar.
Hizmetlerinizi aşılmaz bir kaleyle koruyun! Bir hizmet ağı, tüm iletişimleri güçlü MTLS ile şifreler, katı kimlik doğrulama ile kimlikleri doğrular ve üstün koruma için erişim kurallarını zorunlu kılar.
Gizli güvenlik süper güçlerini keşfedin! Hizmetleri izole edin, denetim için her hareketi izleyin ve bir hizmet ağıyla uygulamanızın etrafında güvenli bir çevre oluşturun.
Dağıtık sisteminizin karmaşıklığını kolaylıkla aşın! Bir hizmet ağı, dağıtık izleme yoluyla uygulamanızın iç işleyişine benzersiz bir görünürlük sağlar.
Bir hizmet ağı ile bir dizi ölçüm, günlük ve performans verisiyle değerli bilgiler keşfedin. Hizmetlerinizi optimize edin ve sorunları bir profesyonel gibi giderin.
IBM, Google ve Lyft'in açık kaynaklı bir hizmet ağı ürünü olan Istio, dağıtık uygulamaları trafik yönetimi, güvenlik ve performans bilgileriyle görünmez bir şekilde geliştirir.
Şirket içinde, bulutta, Kubernetes içinde veya sanal makinelerde esnek bir şekilde dağıtılan Istio, Kubernetes'teki mikro hizmetlerle parlar. Platformdan bağımsız olmasına rağmen, kapsayıcılı ortamlar için doğal bir uyum sağlar.
Özünde, Istio, her mikro hizmetin yanında yan araçlar olarak Envoy proxy'leri dağıtır:
Bu proxy ağı, kontrol düzlemi tarafından yönetilen Istio'nun veri düzlemini oluşturur:
Istio'nun beyni olan kontrol düzlemi, Envoy proxy'lerine keşif, yapılandırma ve sertifika yönetimi ile güç verir.
Yan araç proxy'lerinin güçlü bir hizmet ağı altyapısı ördüğü çok sayıda birbirine bağlı mikro hizmetle Istio'nun potansiyelini ortaya çıkarın:
Istio'nun uyarlanabilirliği, harici günlük kaydı, telemetri ve politika sistemleriyle sorunsuz entegrasyon yoluyla parlar.
Istio'nun mimarisi dinamik bir ikilidir: veri düzlemi ve kontrol düzlemi. Birlikte, Istio'nun yeteneklerinin arkasındaki sihni yönetiyorlar. Bu istisnai platformu destekleyen temel bileşenleri inceleyelim.
Istio'nun temel bileşenlerinin karmaşık ayrıntılarını keşfetmeye hazır olun.
Istio'nun veri düzlemi, esasen Envoy proxy'sinin güçlendirilmiş bir sürümüdür. Bu açık kaynaklı harika araç, ağ karmaşıklıklarını ele alarak uygulamaların temel işlerine odaklanmasını sağlar. Uygulamalar, karmaşık ağ altyapısından habersiz, sorunsuz bir şekilde etkileşim kurar.
Özünde Envoy, OSI modelinin 3. ve 4. katmanlarında çalışan bir ağ sihirbazıdır. Uyarlanabilir ağ filtreleri zinciri kullanarak bağlantıları ustaca yönetir. Bunun ötesinde, Envoy'un L7 katman filtresi, HTTP trafiğini ustalıkla ele almasını sağlar. Ve he bu kadar değil - HTTP/2 ve gRPC protokolleri ile doğal bir uyum sağlar.
Istio'nun göze çarpan özelliklerinin çoğu aslında Envoy'un yerleşik yeteneklerinden miras alınan süper güçlerdir:
Envoy'un gerçek potansiyeli Istio ile eşleştirildiğinde ortaya çıkar. WebAssembly tarafından desteklenen genişletilebilirliği, özel politika zorlama ve telemetri için ezber bozan bir özelliktir. Ayrıca, Istio'nun Proxy-Wasm korumalı alanı API'si, daha da fazla Envoy özelleştirmesine kapı açar.
istiod ile tanışın, Istio'nun kontrol düzlemi orkestrasının şefi. Bu maestro, üst düzey yönlendirme kurallarını ve trafik yönetimi direktiflerini Envoy dostu yapılandırmalara dönüştürür ve bunları yan araçlara sorunsuz bir şekilde dağıtır.
Istio'nun bireysel bileşenleriyle önceki mimarisini hatırlıyor musunuz? Şey, işleri basitleştirmek için bu bileşenler birleştirilmiş istiod'da birleştirildi. Ama korkmayın, temel işlevler bozulmadan kaldı.
Özünde, istiod, önceki sürümleriyle aynı kodu ve API'leri kullanır. Örneğin Pilot, platform özelinde ayrıntıları yan araçlar tarafından anlaşılan evrensel bir dile çevirerek hizmet keşfinin maestrosu olmaya devam ediyor. Bu esneklik, Istio'nun Kubernetes ve Sanal Makineler gibi farklı ortamlarla uyum sağlamasına olanak tanır.
istiod ayrıca, yerleşik kimlik ve kimlik bilgisi yönetim sistemiyle güçlü hizmetten hizmete ve son kullanıcı kimlik doğrulaması oluşturarak güvenliğin de sorumluluğunu üstlenir. Hizmet kimliğine göre ayrıntılı güvenlik politikalarını kolaylıkla uygulayın. Dahası, istiod, hizmetler arasında çift yönlü TLS (MTLS) kullanarak güvenli iletişimi sağlamak için sertifika veren güvenilir bir Sertifika Yetkilisi (CA) olarak işlev görür.
Bir hizmet ağının tipik özelliklerini keşfettik ve Istio'nun mimarisini ve temel bileşenlerini inceledik. Şimdi, Istio'nun bu özellikleri temel bileşenlerini kullanarak nasıl sunduğunu ortaya çıkaralım.
Daha önce keşfettiğimiz özellik kategorilerini yeniden ele alacağız.
Istio'nun trafik yönetimi API'si, hizmet ağı trafiği üzerinde ayrıntılı kontrol sağlar. Bu API'leri kullanarak trafik yapılandırmalarını özelleştirin ve Kubernetes özel kaynak tanımlarıyla (CRD'ler) API kaynakları tanımlayın. Trafik yönlendirmesi için temel API kaynakları sanal hizmetler ve hedef kurallarıdır:
Bir sanal hizmet, isteklerin Istio ağı içindeki bir hizmete nasıl yönlendirileceğini belirler. Sırayla değerlendirilen bir veya daha fazla yönlendirme kuralından oluşur. Sanal hizmet yönlendirmesinden sonra, hizmet örneklerini sürüme göre gruplandırmak gibi bir hedefe giden trafiği kontrol etmek için hedef kuralları uygulanır.
Istio'nun güvenlik temeli, her hizmet için güçlü kimliklerdir. Her Envoy proxy'sinin yanındaki Istio aracıları, istiod ile işbirliği yaparak anahtar ve sertifika rotasyonunu otomatikleştirir:
Istio iki kimlik doğrulama türünü destekler: eşler arası kimlik doğrulama ve istek kimlik doğrulama. Eşler arası kimlik doğrulama, Istio'nun çift yönlü TLS çözümüyle hizmetten hizmete iletişimi güvence altına alır. İstek kimlik doğrulama, özel bir kimlik doğrulama sağlayıcısı veya Açık Kimlik Bağlantısı (OIDC) sağlayıcısı kullanılarak JSON Web Belirteci (JWT) doğrulaması yoluyla son kullanıcı kimlik doğrulamasını ele alır.
Istio, yetkilendirme politikaları uygulayarak hizmet erişim kontrolünü zorunlu kılar. Bu politikalar, Envoy proxy'sindeki gelen trafiği düzenleyerek ağ, ad alanı ve hizmet düzeylerinde erişim kontrolüne olanak tanır.
Istio, ağ içindeki tüm hizmet iletişimi için ölçümler, dağıtık izlemeler ve erişim günlükleri dahil olmak üzere kapsamlı telemetri oluşturur. Bu telemetri, proxy düzeyinde, hizmete yönelik ve kontrol düzlemi ölçümlerini kapsar.
Önceden Mixer, Istio'nun telemetri mimarisindeki merkezi bileşendi. Bununla birlikte, Telemetri v2, Mixer'ın özelliklerini Envoy proxy eklentileriyle değiştirir:
Istio, Envoy proxy'leri aracılığıyla dağıtık izlemeler oluşturur ve Zipkin, Jaeger, Lightstep ve Datadog gibi çeşitli izleme arka uçlarını destekler. İzleme oluşturma örnekleme oranı yapılandırılabilir. Ek olarak, Istio, özelleştirilebilir biçimlerdeki hizmet trafiği için erişim günlükleri oluşturur.
Yeterince arka plan, Istio'yu çalışırken görelim! Kubernetes kümesine Istio kuracağız ve gücünü sergilemek için basit bir mikro hizmetler uygulaması kullanacağız.
Istio çeşitli şekillerde yüklenir, ancak işletim sisteminiz (Windows gibi) için en son sürümü indirip çıkarmak en kolayıdır. Çıkarılan paket, bin klasöründe istioctl istemcisini içerir. Kubernetes kümenize Istio'yu yüklemek için istioctl'yi kullanın:
istioctl install --set profile=demo -y
Bu, demo profilini kullanarak varsayılan Kubernetes kümesine Istio bileşenlerini yükler. Gerekirse 'demo'yu satıcıya özel başka bir profille değiştirin.
Ardından, bu Kubernetes kümesine uygulama dağıtırken Istio'ya Envoy yan araç proxy'lerini otomatik olarak enjekte etmesini söyleyin:
kubectl label namespace default istio-injection=enabled
Burada kubectl'yi kullanıyoruz, bir Kubernetes kümeniz (Minikube gibi) ve Kubernetes CLI kubectl'nin kurulu olduğunu varsayıyoruz.
Bu demo için basit bir çevrimiçi sipariş uygulaması hayal edin. Siparişleri yerine getirmek için birlikte çalışan üç mikro hizmetten oluşur:
Mikro hizmet ayrıntılarına girmeyeceğiz, ancak Spring Boot ve REST API'leri ile oluşturulmaları kolaydır. Önemli olan, Kubernetes'e dağıtmak için bu mikro hizmetler için Docker görüntüleri oluşturmaktır.
Kapsayıcılı iş yüklerini Minikube gibi Kubernetes kümelerine dağıtmak basittir. İş yükünü bildirmek ve erişmek için Dağıtım ve Hizmet kaynaklarını kullanın. Bunları genellikle bir YAML dosyasında tanımlayın:
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: order-service
namespace: default
spec:
replicas: 1
template:
metadata:
labels:
app: order-service
version: v1
spec:
containers:
- name: order-service
image: kchandrakant/order-service:v1
resources:
requests:
cpu: 0.1
memory: 200
---
apiVersion: v1
kind: Service
metadata:
name: order-service
spec:
ports:
- port: 80
targetPort: 80
protocol: TCP
name: http
selector:
app: order-service
Bu, sipariş hizmeti için temel bir Dağıtım ve Hizmet tanımıdır. Envanter hizmeti ve kargo hizmeti için benzer YAML dosyaları oluşturun.
Bu kaynakları kubectl kullanarak kolayca dağıtın:
kubectl apply -f booking-service.yaml -f inventory-service.yaml -f shipping-service.yaml
Varsayılan ad alanı için Envoy yan araç proxy'lerinin otomatik enjeksiyonunu etkinleştirdiğimizden, her şey hallediliyor. Veya istioctl'nin kube-inject komutunu kullanarak Envoy yan araç proxy'lerini manuel olarak enjekte edin.
Istio öncelikle ağ trafiğini ele alır. Varsayılan olarak, ağ dışından veya ağ dışına giden trafik engellenir. Istio, gelen ve giden ağ trafiğini yönetmek için ağ geçitlerini kullanır ve size neyin girip neyin çıktığı üzerinde hassas bir kontrol sağlar. Istio, önceden yapılandırılmış ağ geçidi proxy dağıtımları sunar: istio-ingressgateway ve istio-egressgateway.
Uygulamanız için bir Ağ Geçidi ve Sanal Hizmet oluşturun:
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: booking-gateway
spec:
selector:
istio: ingressgateway
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- "*"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: booking
spec:
hosts:
- "*"
gateways:
- booking-gateway
http:
- match:
- uri:
prefix: /api/v1/booking
route:
- destination:
host: booking-service
port:
number: 8080
Burada varsayılan Istio giriş denetleyicisini kullanıyoruz. Ayrıca, istekleri rezervasyon hizmetine yönlendirmek için bir sanal hizmet tanımladık.
Ayrıca giden ağ trafiği için bir çıkış ağ geçidi tanımlayabilirsiniz.
Kubernetes'te Istio ile basit bir uygulama dağıttık. Şimdi, Istio'nun güçlü özelliklerini keşfedelim ve bunların uygulamamızı nasıl geliştirebileceğini görelim.
Kargo hizmeti gibi bir mikro hizmetin birden çok sürümünü dağıttığınızı hayal edin. Tüm kullanıcıları etkilemeden yeni özellikleri kademeli olarak kullanıma sunmak istiyorsunuz. İstek yönlendirmesi, trafiğin bir bölümünü en son sürüme yönlendirerek bunu yapmanızı sağlar.
Bunu başarmak için sanal hizmet yönlendirme kurallarını kullanın.
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: shipping-service
spec:
hosts:
- shipping-service
http:
- route:
- destination:
host: shipping-service
subset: v1
weight: 90
- destination:
host: shipping-service
subset: v2
weight: 10
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: shipping-service
spec:
host: shipping-service
subsets:
- name: v1
labels:
version: v1
- name: v2
labels:
version: v2
Yönlendirme kuralları ayrıca trafiği başlıklara veya diğer özelliklere göre de filtreleyebilir. Hedef alanı, eşleşen istekler için hedef hizmeti belirtir.
Devre kesicilerle zincirleme hatalardan kaçının. Bu model, hataları algılar ve başarısız hizmetlere giden trafiği geçici olarak durdurarak uygulamanızın genel sağlığını korur.
Istio'nun DestinationRule'u, envanter hizmeti gibi hizmetler için devre kesme davranışını yapılandırmanıza olanak tanır.
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: inventory-service
spec:
host: inventory-service
trafficPolicy:
connectionPool:
tcp:
maxConnections: 1
http:
http1MaxPendingRequests: 1
maxRequestsPerConnection: 1
outlierDetection:
consecutive5xxErrors: 1
interval: 1s
baseEjectionTime: 3m
maxEjectionPercent: 100
Maksimum bağlantıları, bekleyen istekleri ve bağlantı başına istekleri sınırlayarak trafiği etkin bir şekilde yönetebilir ve aşırı yüklenmeyi önleyebilirsiniz.
Karşılıklı TLS, her iki tarafın da kimlik doğrulaması gerektirerek hizmetler arasında güvenli iletişimi sağlar. Istio, proxy'lerini kullanarak hizmetler için karşılıklı TLS'yi otomatik olarak etkinleştirir.
Istio, proxy'lenmiş hizmetler arasında karşılıklı TLS'yi zorunlu kılsa da, proxy'siz hizmetlere hala düz metin trafiği ulaşabilir. Karşılıklı TLS'yi tüm ağ genelinde zorunlu kılmak için PeerAuthentication politikalarını kullanın.
apiVersion: "security.istio.io/v1beta1"
kind: "PeerAuthentication"
metadata:
name: "default"
namespace: "istio-system"
spec:
mtls:
mode: STRICT
Karşılıklı TLS'yi ağ, ad alanı veya hizmet düzeyinde uygulayabilirsiniz. Hizmete özel politikalar, ad alanı çapındaki ayarların önüne geçer.
JSON Web Belirteçleri (JWT), kullanıcı bilgilerini güvenli bir şekilde iletmek için bir standarttır. Kimlik doğrulama ve yetkilendirme için yaygın olarak kullanılırlar.
Istio'nun AuthorizationPolicy'si, JWT iddialarına dayalı olarak rezervasyon hizmeti gibi hizmetlere erişimi kontrol etmenizi sağlar.
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
name: require-jwt
namespace: default
spec:
selector:
matchLabels:
app: booking-service
action: ALLOW
rules:
- from:
- source:
requestPrincipals: ["[email protected]/[email protected]"]
Yetkili erişim için belirli iddialara sahip geçerli JWT'ler isteyin. Istio, JWT'nin issuer ve subject iddialarından bir requestPrincipal özelliği oluşturur.
Istio, dağıtık mikro hizmet mimarilerindeki yaygın zorlukları yönetmeyi kolaylaştırır. Ancak, karmaşıklığı dağıtımlara ek yük getirebilir. Her araç gibi, Istio sihirli bir çözüm değildir ve dikkatli değerlendirme gerektirir.
Hizmet ağları avantajlar sunsa da, bu dezavantajları dikkate alın:
Hizmet ağları faydalar sunar, ancak uygulamanızın karmaşıklığını dikkatlice değerlendirmeniz önemlidir. Avantajları ek karmaşıklığa karşı tartın.
Istio, sektör liderleri tarafından desteklenen popüler bir hizmet ağıdır, ancak tek seçenek değildir. İşte Linkerd ve Consul'un kısa bir özeti.
Linkerd Kubernetes'e özgü, açık kaynaklı bir hizmet ağıdır ve giderek popülerlik kazanmaktadır. CNCF inkübasyon projesidir ve TCP proxy'leri kullanarak Istio'ya benzer şekilde çalışır. Linkerd'nin Rust tabanlı mikro proxy'sine Linkerd-proxy adı verilir.
Linkerd, Kubernetes odaklı olduğu için genel olarak Istio'dan daha basittir. Ancak, özellik seti Istio'ya yakındır ve temel mimarisi benzerdir. Linkerd, bir kullanıcı arayüzü, veri düzlemi ve kontrol düzleminden oluşur.
Consul HashiCorp'tan gelen açık kaynaklı bir hizmet ağıdır ve diğer HashiCorp altyapı araçlarıyla entegre olur. Consul'un veri düzlemi, hem proxy hem de yerel entegrasyon modellerini destekler. Yerleşik bir proxy sunar, ancak Envoy ile de çalışabilir.
Consul, Kubernetes'in ötesinde Nomad gibi platformları destekler. Her düğümde ajanlar kullanarak sağlık kontrolleri yapar ve veri depolama ve çoğaltma için Consul sunucuları ile iletişim kurar. Standart hizmet ağı özellikleri sunarken, Consul'u dağıtmak ve yönetmek daha karmaşıktır.
Bu eğitimde, hizmet ağı mimarisinin temelleri ve Istio'nun güçlü yetenekleri ele alındı. Istio'nun temel yapısını, bileşenlerini ve pratik uygulamalarını inceledik. Sonunda, yaygın senaryolar için Istio'yu nasıl kuracağınızı ve kullanacağınızı sağlam bir şekilde kavramış olmalısınız.
Müşteri Geri Bildirimleri
Aşağıdaki yorumlar web sitemizde toplandı.
Sorularınız mı var? Cevapları Aşağıda Bulun!
En Sık Sorulan Sorular