Ungkap keajaiban arsitektur service mesh dan lihat bagaimana ia meningkatkan sistem terdistribusi Anda.
Menyelam lebih dalam ke Istio, superstar service mesh, dan pelajari bagaimana ia mengatur cluster Kubernetes Anda dengan sempurna.
Aplikasi monolitik telah berkembang menjadi layanan yang lebih kecil dan independen. Perubahan ini menjadi sangat populer dengan komputasi cloud-native dan arsitektur microservices. Alat seperti Docker dan Kubernetes mempercepat tren ini.
Microservices di platform seperti Kubernetes menawarkan banyak manfaat, tetapi juga memperkenalkan kompleksitas. Mengelola komunikasi antar layanan terdistribusi ini memerlukan pertimbangan cermat mengenai discovery, routing, retries, dan failover.
Tantangan tambahan termasuk keamanan dan observabilitas.
Membangun kemampuan komunikasi di setiap layanan memakan waktu, terutama saat lanskap layanan berkembang. Di sinilah service mesh bersinar. Ia menangani semua komunikasi service-to-service dalam sistem terdistribusi.
Service mesh mencapai ini dengan menggunakan proxy jaringan. Permintaan antar layanan diarahkan melalui proxy ini, yang berada di luar layanan dalam lapisan infrastruktur:
Proxy ini membentuk jaringan mesh untuk layanan, hence the name. Service mesh mengendalikan setiap aspek komunikasi service-to-service, memungkinkan untuk mengatasi delapan falasi komputasi terdistribusi.
Lepaskan potensi penuh layanan Anda dengan service mesh! Temukan bagaimana alat ajaib ini dapat mengubah lanskap aplikasi Anda.
Mari kita uraikan keajaiban ini menjadi tiga kemampuan inti: manajemen lalu lintas yang ajaib, keamanan yang kokoh, dan visibilitas yang jernih.
Service mesh adalah polisi lalu lintas utama Anda, mengarahkan interaksi layanan dengan presisi. Nikmati routing dinamis, discovery pintar, dan fitur-fitur luar biasa seperti traffic shadowing dan splitting untuk rilis canary dan eksperimen A/B testing yang mulus.
Ucapkan selamat tinggal pada koneksi yang tidak dapat diandalkan! Service mesh membungkus layanan Anda dalam selimut keandalan, menawarkan retries, timeouts, rate limiting, dan circuit breakers untuk melindungi aplikasi Anda dari kekacauan.
Lindungi layanan Anda dengan benteng yang tak tertembus! Service mesh mengenkripsi semua komunikasi dengan MTLS yang kuat, memverifikasi identitas dengan otentikasi yang ketat, dan menegakkan aturan akses untuk perlindungan maksimal.
Temukan superpower keamanan tersembunyi! Isolasikan layanan, lacak setiap gerakan untuk auditing, dan ciptakan perimeter aman di sekitar aplikasi Anda dengan service mesh.
Navigasi kompleksitas sistem terdistribusi Anda dengan mudah! Service mesh menyediakan visibilitas yang tiada tandingannya ke dalam kerja internal aplikasi Anda melalui distributed tracing.
Ungkap wawasan berharga dengan berbagai metrik, log, dan data performa. Optimalkan layanan Anda dan selesaikan masalah seperti seorang profesional dengan service mesh.
Istio, layanan mesh open-source yang lahir dari kolaborasi IBM, Google, dan Lyft, secara tidak terlihat meningkatkan aplikasi terdistribusi dengan manajemen lalu lintas, keamanan, dan wawasan performa.
Dideploy secara fleksibel di on-premise, di cloud, dalam Kubernetes, atau di mesin virtual, Istio bersinar dengan microservices di Kubernetes. Meskipun agnostik terhadap platform, ia cocok secara alami untuk lingkungan containerized.
Pada inti, Istio mendepoy proxy Envoy sebagai sidecar di samping setiap microservice:
Jaringan proxy ini membentuk data plane Istio, yang diorkestrasi oleh control plane:
Control plane, otak Istio, memberi Envoy proxy kemampuan discovery, konfigurasi, dan manajemen sertifikat.
Lepaskan potensi Istio dengan berbagai microservices yang saling terhubung, di mana proxy sidecar menenun infrastruktur service mesh yang kuat:
Fleksibilitas Istio bersinar melalui integrasi mulus dengan sistem logging eksternal, telemetry, dan kebijakan.
Arsitektur Istio adalah duo dinamis: data plane dan control plane. Bersama-sama, mereka mengorkestrasi keajaiban di balik kemampuan Istio. Mari kita selami komponen inti yang menggerakkan platform luar biasa ini.
Bersiaplah untuk mengeksplorasi detail rumit dari komponen inti Istio.
Data plane Istio pada dasarnya adalah versi yang diperkuat dari proxy Envoy. Keajaiban open-source ini menangani kompleksitas jaringan, membebaskan aplikasi untuk fokus pada bisnis inti mereka. Aplikasi berinteraksi tanpa hambatan, tidak menyadari infrastruktur jaringan yang kompleks.
Pada intinya, Envoy adalah penyihir jaringan yang beroperasi di lapisan 3 dan 4 model OSI. Ia dengan lihai mengelola koneksi menggunakan rantai filter jaringan yang dapat disesuaikan. Selain itu, filter lapisan L7 Envoy memberinya kemampuan untuk menangani lalu lintas HTTP dengan cermat. Dan itu belum semuanya - ia juga ahli dengan protokol HTTP/2 dan gRPC.
Banyak fitur unggulan Istio sebenarnya adalah superpower yang diwarisi dari kemampuan bawaan Envoy:
Potensi sejati Envoy bersinar saat dipasangkan dengan Istio. Ekstensibilitasnya, didukung oleh WebAssembly, adalah game-changer untuk penegakan kebijakan kustom dan telemetry. Selain itu, Proxy-Wasm sandbox API Istio membuka pintu untuk lebih banyak kustomisasi Envoy.
Kenalkan istiod, konduktor orkestra control plane Istio. Maestro ini mengubah aturan routing tingkat tinggi dan direktif manajemen lalu lintas menjadi konfigurasi yang ramah Envoy, mendistribusikannya secara mulus ke sidecars.
Ingat arsitektur awal Istio dengan komponen individualnya? Nah, untuk menyederhanakan semuanya, komponen-komponen ini digabungkan menjadi istiod yang terintegrasi. Namun jangan khawatir, fungsionalitas inti tetap utuh.
Di intinya, istiod memanfaatkan kode dan API yang sama seperti pendahulunya. Pilot, misalnya, tetap menjadi maestro discovery layanan, menerjemahkan detail spesifik platform ke dalam bahasa universal yang dipahami oleh sidecars. Fleksibilitas ini memungkinkan Istio berharmonisasi dengan lingkungan beragam seperti Kubernetes dan Mesin Virtual.
istiod juga mengambil alih keamanan, membangun otentikasi layanan-ke-layanan dan pengguna akhir yang kuat dengan sistem manajemen identitas dan kredensial bawaan. Tegakkan kebijakan keamanan granular berdasarkan identitas layanan dengan mudah. Selain itu, istiod berfungsi sebagai Certificate Authority (CA) terpercaya, menerbitkan sertifikat untuk mengamankan komunikasi antar layanan menggunakan mutual TLS (MTLS).
Kami telah mengeksplorasi fitur umum dari service mesh dan membedah arsitektur serta komponen inti Istio. Sekarang, mari kita ungkap bagaimana Istio menyampaikan fitur-fitur ini menggunakan komponen intinya.
Kita akan mengunjungi kembali kategori fitur yang sama yang telah kita eksplorasi sebelumnya.
API manajemen lalu lintas Istio menawarkan kontrol rinci atas lalu lintas service mesh. Sesuaikan konfigurasi lalu lintas menggunakan API ini dan definisikan sumber daya API dengan definisi sumber daya kustom Kubernetes (CRD). Sumber daya API utama untuk routing lalu lintas adalah virtual services dan destination rules:
Virtual service menentukan bagaimana permintaan diarahkan ke layanan dalam mesh Istio. Ini terdiri dari satu atau lebih aturan routing yang dievaluasi secara berurutan. Setelah routing virtual service, destination rules diterapkan untuk mengendalikan lalu lintas ke tujuan, seperti mengelompokkan instance layanan berdasarkan versi.
Fondasi keamanan Istio adalah identitas kuat untuk setiap layanan. Agen Istio di samping setiap proxy Envoy berkolaborasi dengan istiod untuk mengotomatisasi rotasi kunci dan sertifikat:
Istio mendukung dua jenis otentikasi: otentikasi peer dan otentikasi permintaan. Otentikasi peer mengamankan komunikasi service-to-service dengan solusi mutual TLS Istio. Otentikasi permintaan menangani otentikasi pengguna akhir melalui validasi JSON Web Token (JWT) menggunakan penyedia otentikasi kustom atau penyedia OpenID Connect (OIDC).
Istio menegakkan kontrol akses layanan dengan menerapkan kebijakan otorisasi. Kebijakan ini mengatur lalu lintas masuk di proxy Envoy, memungkinkan kontrol akses di tingkat mesh, namespace, dan layanan.
Istio menghasilkan telemetry yang komprehensif, termasuk metrik, jejak terdistribusi, dan log akses, untuk semua komunikasi layanan dalam mesh. Telemetry ini mencakup metrik tingkat proxy, layanan, dan control plane.
Sebelumnya, Mixer adalah komponen pusat dalam arsitektur telemetry Istio. Namun, Telemetry v2 menggantikan fitur Mixer dengan plugin proxy Envoy:
Istio membuat jejak terdistribusi melalui proxy Envoy dan mendukung berbagai backend tracing seperti Zipkin, Jaeger, Lightstep, dan Datadog. Tingkat sampling pembuatan jejak dapat dikonfigurasi. Selain itu, Istio menghasilkan log akses untuk lalu lintas layanan dalam format yang dapat disesuaikan.
Cukup latar belakang, mari kita lihat Istio beraksi! Kami akan menginstal Istio pada cluster Kubernetes dan menggunakan aplikasi microservices sederhana untuk menunjukkan kekuatannya.
Istio dapat diinstal dengan berbagai cara, tetapi mengunduh dan mengekstrak rilis terbaru untuk OS Anda (seperti Windows) adalah yang paling mudah. Paket yang diekstrak mencakup klien istioctl di folder bin. Gunakan istioctl untuk menginstal Istio pada cluster Kubernetes Anda:
istioctl install --set profile=demo -y
Ini menginstal komponen Istio pada cluster Kubernetes default menggunakan profil demo. Ganti 'demo' dengan profil vendor lain jika diperlukan.
Selanjutnya, beri tahu Istio untuk secara otomatis menyuntikkan proxy sidecar Envoy saat mendeploy aplikasi di cluster Kubernetes ini:
kubectl label namespace default istio-injection=enabled
Kami menggunakan kubectl di sini, dengan asumsi Anda memiliki cluster Kubernetes (seperti Minikube) dan CLI Kubernetes kubectl yang sudah diatur.
Bayangkan aplikasi pemesanan online sederhana untuk demo ini. Ia terdiri dari tiga microservices yang bekerja sama untuk memenuhi pesanan:
Kami tidak akan membahas detail microservice, tetapi mereka mudah dibuat dengan Spring Boot dan REST APIs. Pentingnya, buat gambar Docker untuk microservices ini untuk di-deploy di Kubernetes.
Mendeploy beban kerja containerized di cluster Kubernetes seperti Minikube adalah sederhana. Gunakan sumber daya Deployment dan Service untuk mendefinisikan dan mengakses beban kerja. Biasanya, definisikan mereka dalam file YAML:
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
Ini adalah definisi Deployment dan Service dasar untuk order-service. Buat file YAML serupa untuk inventory-service dan shipping-service.
Deploy sumber daya ini menggunakan kubectl dengan mudah:
kubectl apply -f booking-service.yaml -f inventory-service.yaml -f shipping-service.yaml
Karena kami mengaktifkan auto-injection proxy sidecar Envoy untuk namespace default, semuanya ditangani. Atau, suntikkan secara manual proxy sidecar Envoy menggunakan perintah kube-inject dari istioctl.
Istio terutama menangani lalu lintas mesh. Secara default, lalu lintas ke atau dari luar mesh diblokir. Istio menggunakan gateway untuk mengelola lalu lintas masuk dan keluar mesh, memberi Anda kontrol yang tepat atas apa yang masuk atau keluar. Istio menawarkan deployment proxy gateway yang telah dikonfigurasi sebelumnya: istio-ingressgateway dan istio-egressgateway.
Buat Gateway dan Virtual Service untuk aplikasi Anda:
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
Kami menggunakan controller ingress Istio default di sini. Selain itu, kami telah mendefinisikan virtual service untuk mengarahkan permintaan ke booking-service.
Anda juga dapat mendefinisikan egress gateway untuk lalu lintas mesh keluar.
Kami telah mendeploy aplikasi sederhana di Kubernetes dengan Istio. Mari kita jelajahi fitur-fitur kuat Istio dan lihat bagaimana mereka dapat meningkatkan aplikasi kami.
Bayangkan mendeploy beberapa versi microservice seperti shipping-service. Anda ingin memperkenalkan fitur baru secara bertahap tanpa mempengaruhi semua pengguna. Routing permintaan memungkinkan Anda melakukan ini dengan mengarahkan sebagian lalu lintas ke versi terbaru.
Gunakan aturan routing virtual service untuk mencapai ini.
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
Aturan routing juga dapat menyaring lalu lintas berdasarkan header atau atribut lainnya. Field destination menentukan layanan target untuk permintaan yang cocok.
Cegah kegagalan berantai dengan circuit breakers. Pola ini mendeteksi kesalahan dan sementara menghentikan lalu lintas ke layanan yang gagal, melindungi kesehatan keseluruhan aplikasi Anda.
DestinationRule Istio memungkinkan Anda mengonfigurasi perilaku circuit breaking untuk layanan seperti inventory-service.
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
Dengan membatasi maksimum koneksi, permintaan tertunda, dan permintaan per koneksi, Anda dapat secara efektif mengelola lalu lintas dan mencegah kelebihan beban.
Mutual TLS memastikan komunikasi yang aman antar layanan dengan mengharuskan kedua pihak untuk otentikasi. Istio secara otomatis mengaktifkan mutual TLS untuk layanan yang menggunakan proxy-nya.
Meskipun Istio menegakkan mutual TLS antara layanan yang diproksi, lalu lintas teks biasa masih dapat mencapai layanan tanpa proxy. Gunakan kebijakan PeerAuthentication untuk menegakkan mutual TLS di seluruh mesh Anda.
apiVersion: "security.istio.io/v1beta1"
kind: "PeerAuthentication"
metadata:
name: "default"
namespace: "istio-system"
spec:
mtls:
mode: STRICT
Anda dapat menerapkan mutual TLS di tingkat mesh, namespace, atau layanan. Kebijakan spesifik layanan akan menimpa pengaturan tingkat namespace.
JSON Web Tokens (JWT) adalah standar untuk mentransmisikan informasi pengguna secara aman. Mereka banyak digunakan untuk otentikasi dan otorisasi.
AuthorizationPolicy Istio memungkinkan Anda mengontrol akses ke layanan seperti booking-service berdasarkan klaim JWT.
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]"]
Mewajibkan JWT yang valid dengan klaim tertentu untuk akses yang diotorisasi. Istio membuat atribut requestPrincipal dari klaim issuer dan subject dalam JWT.
Istio menyederhanakan pengelolaan tantangan umum dalam arsitektur microservice terdistribusi. Namun, kompleksitasnya dapat menambah beban pada deployment. Seperti alat lainnya, Istio bukanlah solusi ajaib dan memerlukan pertimbangan yang cermat.
Meskipun service mesh menawarkan keuntungan, pertimbangkan kekurangan berikut:
Service mesh menawarkan manfaat, tetapi evaluasi cermat terhadap kompleksitas aplikasi Anda sangat penting. Timbang keuntungan melawan kompleksitas tambahan.
Istio adalah service mesh populer yang didukung oleh pemimpin industri, tetapi bukan satu-satunya pilihan. Berikut adalah gambaran singkat tentang Linkerd dan Consul.
Linkerd adalah service mesh open-source yang native Kubernetes dan semakin populer. Ini adalah proyek inkubasi CNCF dan bekerja serupa dengan Istio, menggunakan proxy TCP. Proxy mikro berbasis Rust Linkerd disebut Linkerd-proxy.
Linkerd umumnya lebih sederhana daripada Istio karena fokusnya pada Kubernetes. Namun, set fitur-fiturnya mirip dengan Istio, dan arsitektur intinya serupa. Linkerd terdiri dari antarmuka pengguna, data plane, dan control plane.
Consul adalah service mesh open-source dari HashiCorp yang terintegrasi dengan alat infrastruktur HashiCorp lainnya. Data plane Consul mendukung model integrasi proxy dan native. Ia menawarkan proxy bawaan tetapi juga dapat bekerja dengan Envoy.
Consul beroperasi di luar Kubernetes, mendukung platform seperti Nomad. Ia menggunakan agen di setiap node untuk health checks dan berkomunikasi dengan server Consul untuk penyimpanan data dan replikasi. Meskipun menawarkan fitur service mesh standar, Consul lebih kompleks untuk di-deploy dan dikelola.
Tutorial ini telah mengeksplorasi dasar-dasar arsitektur service mesh dan kemampuan kuat Istio. Kami telah membedah struktur inti Istio, komponennya, dan aplikasi praktisnya. Pada akhirnya, Anda harus memiliki pemahaman yang solid tentang cara menginstal dan memanfaatkan Istio untuk skenario umum.
Umpan Balik Pelanggan
Ulasan berikut dikumpulkan di situs web kami.
Punya Pertanyaan? Temukan Jawabannya Di Bawah!
Pertanyaan Kami yang Paling Sering Ditanyakan