Ungkapkan keajaiban seni bina service mesh dan lihat bagaimana ia meningkatkan sistem teragih anda.
Selami Istio, bintang service mesh, dan pelajari bagaimana ia menyelaraskan kluster Kubernetes anda dengan sempurna.
Aplikasi monolitik telah berkembang menjadi perkhidmatan yang lebih kecil dan bebas. Peralihan ini mendapat populariti besar dengan pengkomputeran cloud-native dan seni bina mikroservis. Alat seperti Docker dan Kubernetes mempercepatkan trend ini.
Mikroservis di platform seperti Kubernetes menawarkan banyak manfaat, tetapi juga memperkenalkan kerumitan. Mengurus komunikasi antara perkhidmatan yang teragih ini memerlukan pertimbangan teliti mengenai penemuan, penghalaan, cubaan semula, dan failover.
Cabaran tambahan termasuk keselamatan dan kebolehlaksanaan.
Membina keupayaan komunikasi dalam setiap perkhidmatan memakan masa, terutamanya apabila landskap perkhidmatan berkembang. Di sinilah service mesh bersinar. Ia mengendalikan semua komunikasi antara perkhidmatan dalam sistem teragih.
Service mesh mencapai ini dengan menggunakan proksi rangkaian. Permintaan antara perkhidmatan disalurkan melalui proksi ini, yang berada di luar perkhidmatan dalam lapisan infrastruktur:
Proksi ini membentuk rangkaian mesh untuk perkhidmatan, hence the name. Service mesh mengawal setiap aspek komunikasi antara perkhidmatan, membolehkannya menangani lapan falasi pengkomputeran teragih.
Lepaskan potensi penuh perkhidmatan anda dengan service mesh! Temui bagaimana alat ajaib ini boleh mengubah landskap aplikasi anda.
Mari kita huraikan keajaiban ini kepada tiga keupayaan teras: sihir trafik, keselamatan tegar, dan kebolehlaksanaan yang jelas seperti kristal.
Service mesh adalah pengawal trafik utama anda, mengarahkan interaksi perkhidmatan dengan ketepatan. Nikmati penghalaan dinamik, penemuan pintar, dan ciri-ciri menakjubkan seperti shadowing trafik dan pemisahan untuk pelepasan canary dan eksperimen A/B yang lancar.
Katakan selamat tinggal kepada sambungan yang tidak boleh dipercayai! Service mesh membungkus perkhidmatan anda dalam selimut keselesaan kebolehpercayaan, menawarkan cubaan semula, had masa, had kadar, dan pemutus litar untuk melindungi aplikasi anda daripada kekacauan.
Lindungi perkhidmatan anda dengan kubu yang tidak dapat ditembusi! Service mesh menyulitkan semua komunikasi dengan MTLS yang kukuh, mengesahkan identiti dengan pengesahan ketat, dan menguatkuasakan peraturan akses untuk perlindungan terbaik.
Temui kuasa super keselamatan tersembunyi! Pisahkan perkhidmatan, jejak setiap pergerakan untuk audit, dan cipta perimeter selamat di sekitar aplikasi anda dengan service mesh.
Navigasi kerumitan sistem teragih anda dengan mudah! Service mesh menyediakan kebolehlaksanaan yang tiada tandingan ke dalam kerja dalaman aplikasi anda melalui pengesanan teragih.
Temui wawasan berharga dengan kekayaan metrik, log, dan data prestasi. Optimumkan perkhidmatan anda dan selesaikan isu seperti seorang profesional dengan service mesh.
Istio, hasil otak service mesh sumber terbuka dari IBM, Google, dan Lyft, meningkatkan aplikasi teragih secara tidak kelihatan dengan pengurusan trafik, keselamatan, dan wawasan prestasi.
Dideploy dengan fleksibel di premis, dalam awan, dalam Kubernetes, atau pada mesin maya, Istio bersinar dengan mikroservis di Kubernetes. Walaupun agnostik platform, ia sangat sesuai untuk persekitaran berkontena.
Pada terasnya, Istio mendepoy proksi Envoy sebagai sidecar di sebelah setiap mikroservis:
Rangkaian proksi ini membentuk pelan data Istio, diselaraskan oleh pelan kawalan:
Pelan kawalan, otak Istio, memperkasakan proksi Envoy dengan penemuan, konfigurasi, dan pengurusan sijil.
Lepaskan potensi Istio dengan pelbagai mikroservis yang saling berkaitan, di mana proksi sidecar menenun infrastruktur service mesh yang kukuh:
Fleksibiliti Istio bersinar melalui integrasi lancar dengan sistem logging, telemetri, dan polisi luaran.
Seni bina Istio adalah duo dinamik: pelan data dan pelan kawalan. Bersama-sama, mereka menyelaraskan keajaiban di sebalik keupayaan Istio. Mari kita selami komponen teras yang menggerakkan platform luar biasa ini.
Bersiaplah untuk meneroka butiran rumit komponen teras Istio.
Pelan data Istio pada dasarnya adalah versi yang dipertingkatkan dari proksi Envoy. Keajaiban sumber terbuka ini mengendalikan kerumitan rangkaian, membebaskan aplikasi untuk fokus pada perniagaan teras mereka. Aplikasi berinteraksi tanpa gangguan, tanpa mengetahui infrastruktur rangkaian yang kompleks.
Pada terasnya, Envoy adalah ahli sihir rangkaian yang beroperasi di lapisan 3 dan 4 model OSI. Ia mengendalikan sambungan dengan cekap menggunakan rangkaian penapis rangkaian yang boleh disesuaikan. Di luar ini, penapis lapisan L7 Envoy memberikannya keupayaan untuk mengendalikan trafik HTTP dengan kemahiran. Dan itu bukan sahaja - ia juga mahir dengan protokol HTTP/2 dan gRPC.
Ramai ciri-ciri hebat Istio sebenarnya adalah kuasa super yang diwarisi daripada keupayaan terbina dalam Envoy:
Potensi sebenar Envoy bersinar apabila dipasangkan dengan Istio. Kebolehluasannya, didorong oleh WebAssembly, adalah perubahan permainan untuk penguatkuasaan polisi tersuai dan telemetri. Selain itu, API sandbox Proxy-Wasm Istio membuka pintu kepada lebih banyak penyesuaian Envoy.
Temui istiod, konduktor orkestrasi pelan kawalan Istio. Maestro ini mengubah peraturan penghalaan aras tinggi dan arahan pengurusan trafik menjadi konfigurasi yang mesra Envoy, menyebarkannya dengan lancar kepada sidecar.
Ingat seni bina awal Istio dengan komponen individu? Baiklah, untuk memudahkan, komponen-komponen ini digabungkan menjadi istiod yang bersatu. Tetapi jangan risau, fungsi teras tetap utuh.
Pada hatinya, istiod menggunakan kod dan API yang sama seperti pendahulunya. Pilot, contohnya, terus menjadi maestro penemuan perkhidmatan, menterjemahkan butiran khusus platform ke dalam bahasa universal yang difahami oleh sidecar. Fleksibiliti ini membolehkan Istio menyelaraskan dengan pelbagai persekitaran seperti Kubernetes dan Mesin Maya.
istiod juga mengambil alih keselamatan, membina pengesahan perkhidmatan-ke-perkhidmatan dan pengesahan pengguna akhir yang kukuh dengan sistem pengurusan identiti dan kredensial terbina dalam. Menguatkuasakan polisi keselamatan terperinci berdasarkan identiti perkhidmatan dengan mudah. Selain itu, istiod berfungsi sebagai Pihak Berkuasa Sijil (CA) yang dipercayai, mengeluarkan sijil untuk memastikan komunikasi antara perkhidmatan menggunakan mutual TLS (MTLS).
Kami telah meneroka ciri-ciri tipikal service mesh dan menganalisis seni bina serta komponen teras Istio. Kini, mari kita bongkar bagaimana Istio menyampaikan ciri-ciri ini menggunakan komponen terasnya.
Kami akan mengulangi kategori ciri yang sama yang telah kami teliti sebelum ini.
API pengurusan trafik Istio menawarkan kawalan terperinci ke atas trafik service mesh. Sesuaikan konfigurasi trafik menggunakan API ini dan definisikan sumber API dengan definisi sumber tersuai Kubernetes (CRD). Sumber API utama untuk penghalaan trafik adalah perkhidmatan maya dan peraturan destinasi:
Perkhidmatan maya menentukan bagaimana permintaan dihalakan ke perkhidmatan dalam mesh Istio. Ia terdiri daripada satu atau lebih peraturan penghalaan yang dinilai secara berurutan. Selepas penghalaan perkhidmatan maya, peraturan destinasi digunakan untuk mengawal trafik ke destinasi, seperti mengumpulkan contoh perkhidmatan mengikut versi.
Asas keselamatan Istio adalah identiti yang kukuh untuk setiap perkhidmatan. Agen Istio di samping setiap proksi Envoy bekerjasama dengan istiod untuk mengautomatikkan pusingan kunci dan sijil:
Istio menyokong dua jenis pengesahan: pengesahan rakan sebaya dan pengesahan permintaan. Pengesahan rakan sebaya memastikan komunikasi perkhidmatan-ke-perkhidmatan dengan solusi mutual TLS Istio. Pengesahan permintaan mengendalikan pengesahan pengguna akhir melalui pengesahan JSON Web Token (JWT) menggunakan penyedia pengesahan tersuai atau penyedia OpenID Connect (OIDC).
Istio menguatkuasakan kawalan akses perkhidmatan dengan menerapkan polisi pengesahan. Polisi ini mengawal trafik masuk dalam proksi Envoy, membolehkan kawalan akses di peringkat mesh, namespace, dan perkhidmatan.
Istio menghasilkan telemetri yang komprehensif, termasuk metrik, jejak teragih, dan log akses, untuk semua komunikasi perkhidmatan dalam mesh. Telemetri ini merangkumi metrik peringkat proksi, berorientasikan perkhidmatan, dan metrik pelan kawalan.
Sebelumnya, Mixer adalah komponen pusat dalam seni bina telemetri Istio. Walau bagaimanapun, Telemetri v2 menggantikan ciri-ciri Mixer dengan plugin proksi Envoy:
Istio mencipta jejak teragih melalui proksi Envoy dan menyokong pelbagai backend pengesanan seperti Zipkin, Jaeger, Lightstep, dan Datadog. Kadar pensampelan penjanaan jejak boleh disesuaikan. Selain itu, Istio menghasilkan log akses untuk trafik perkhidmatan dalam format yang boleh disesuaikan.
Cukup latar belakang, mari kita lihat Istio beraksi! Kami akan memasang Istio pada kluster Kubernetes dan menggunakan aplikasi mikroservis mudah untuk menunjukkan kuasanya.
Istio dipasang dalam pelbagai cara, tetapi memuat turun dan mengekstrak pelepasan terkini untuk OS anda (seperti Windows) adalah yang paling mudah. Pakej yang diekstrak termasuk klien istioctl dalam folder bin. Gunakan istioctl untuk memasang Istio pada kluster Kubernetes anda:
istioctl install --set profile=demo -y
Ini memasang komponen Istio pada kluster Kubernetes lalai menggunakan profil demo. Tukar 'demo' dengan profil khusus vendor lain jika perlu.
Seterusnya, beritahu Istio untuk secara automatik menyuntik proksi sidecar Envoy apabila menyebarkan aplikasi pada kluster Kubernetes ini:
kubectl label namespace default istio-injection=enabled
Kami menggunakan kubectl di sini, mengandaikan anda mempunyai kluster Kubernetes (seperti Minikube) dan CLI Kubernetes kubectl yang disediakan.
Bayangkan aplikasi pesanan dalam talian yang mudah untuk demo ini. Ia terdiri daripada tiga mikroservis yang bekerjasama untuk memenuhi pesanan:
Kami tidak akan menyelami butiran mikroservis, tetapi mereka mudah untuk dibuat dengan Spring Boot dan REST APIs. Pentingnya, cipta imej Docker untuk mikroservis ini untuk disebarkan di Kubernetes.
Menyebarkan beban kerja berkontena pada kluster Kubernetes seperti Minikube adalah mudah. Gunakan sumber Deployment dan Service untuk mendeklarasikan dan mengakses beban kerja. Biasanya, definisikan mereka dalam fail 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 asas untuk perkhidmatan pesanan. Cipta fail YAML serupa untuk perkhidmatan inventori dan perkhidmatan penghantaran.
Sediakan sumber-sumber ini menggunakan kubectl dengan mudah:
kubectl apply -f booking-service.yaml -f inventory-service.yaml -f shipping-service.yaml
Oleh kerana kami telah mengaktifkan suntikan automatik proksi sidecar Envoy untuk namespace lalai, semuanya diuruskan. Atau, suntik secara manual proksi sidecar Envoy menggunakan perintah kube-inject istioctl.
Istio terutamanya mengendalikan trafik mesh. Secara lalai, trafik ke atau dari luar mesh disekat. Istio menggunakan gerbang untuk mengurus trafik mesh masuk dan keluar, memberikan anda kawalan tepat ke atas apa yang masuk atau keluar. Istio menawarkan penyebaran proksi gerbang pra-konfigurasi: istio-ingressgateway dan istio-egressgateway.
Cipta Gerbang dan Perkhidmatan Maya 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 pengawal ingress Istio lalai di sini. Selain itu, kami telah mentakrifkan perkhidmatan maya untuk mengarahkan permintaan ke perkhidmatan tempahan.
Anda juga boleh mentakrifkan gerbang egress untuk trafik mesh keluar.
Kami telah menyebarkan aplikasi mudah pada Kubernetes dengan Istio. Mari kita teroka ciri-ciri kuat Istio dan lihat bagaimana ia boleh meningkatkan aplikasi kita.
Bayangkan menyebarkan pelbagai versi mikroservis seperti perkhidmatan penghantaran. Anda ingin memperkenalkan ciri baru secara beransur-ansur tanpa menjejaskan semua pengguna. Penghalaan permintaan membolehkan anda melakukan ini dengan mengarahkan sebahagian trafik ke versi terbaru.
Gunakan peraturan penghalaan perkhidmatan maya 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
Peraturan penghalaan juga boleh menapis trafik berdasarkan tajuk atau atribut lain. Medan destinasi menentukan perkhidmatan sasaran untuk permintaan yang sepadan.
Cegah kegagalan berantai dengan pemutus litar. Corak ini mengesan ralat dan sementara menghentikan trafik ke perkhidmatan yang gagal, melindungi kesihatan keseluruhan aplikasi anda.
Peraturan Destinasi Istio membolehkan anda mengkonfigurasi tingkah laku pemutusan litar untuk perkhidmatan seperti perkhidmatan inventori.
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 mengehadkan sambungan maksimum, permintaan tertangguh, dan permintaan per sambungan, anda boleh mengurus trafik dengan berkesan dan mencegah beban berlebihan.
Mutual TLS memastikan komunikasi selamat antara perkhidmatan dengan memerlukan kedua-dua pihak untuk mengesahkan identiti. Istio secara automatik mengaktifkan mutual TLS untuk perkhidmatan yang menggunakan proksinya.
Walaupun Istio menguatkuasakan mutual TLS antara perkhidmatan yang diproxied, trafik teks biasa masih boleh mencapai perkhidmatan tanpa proksi. Gunakan polisi Pengesahan Rakan Sebaya untuk menguatkuasakan mutual TLS di seluruh mesh anda.
apiVersion: "security.istio.io/v1beta1"
kind: "PeerAuthentication"
metadata:
name: "default"
namespace: "istio-system"
spec:
mtls:
mode: STRICT
Anda boleh menerapkan mutual TLS di peringkat mesh, namespace, atau perkhidmatan. Polisi khusus perkhidmatan mengatasi tetapan merata namespace.
JSON Web Tokens (JWT) adalah standard untuk menghantar maklumat pengguna secara selamat. Mereka banyak digunakan untuk pengesahan dan autorisasi.
Polisi Autorisasi Istio membolehkan anda mengawal akses ke perkhidmatan seperti perkhidmatan tempahan berdasarkan tuntutan 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]"]
Memerlukan JWT yang sah dengan tuntutan tertentu untuk akses yang dibenarkan. Istio mencipta atribut requestPrincipal dari penerbit dan subjek JWT.
Istio memudahkan pengurusan cabaran biasa dalam seni bina mikroservis teragih. Walau bagaimanapun, kerumitannya boleh menambah beban pada penyebaran. Seperti mana-mana alat, Istio bukanlah penyelesaian ajaib dan memerlukan pertimbangan teliti.
Walaupun service mesh menawarkan kelebihan, pertimbangkan kelemahan ini:
Service mesh menawarkan manfaat, tetapi penilaian teliti terhadap kerumitan aplikasi anda adalah penting. Timbangkan kelebihan berbanding kerumitan tambahan.
Istio adalah service mesh yang popular disokong oleh pemimpin industri, tetapi ia bukan pilihan satu-satunya. Berikut adalah gambaran ringkas mengenai Linkerd dan Consul.
Linkerd adalah service mesh sumber terbuka asli Kubernetes yang semakin popular. Ia adalah projek CNCF yang menginkubasi dan berfungsi serupa dengan Istio, menggunakan proksi TCP. Proksi mikro berbasis Rust Linkerd dikenali sebagai Linkerd-proxy.
Linkerd umumnya lebih mudah daripada Istio kerana fokusnya pada Kubernetes. Walau bagaimanapun, set ciri-cirinya hampir menyerupai Istio, dan seni binanya yang teras adalah serupa. Linkerd terdiri daripada antara muka pengguna, pelan data, dan pelan kawalan.
Consul adalah service mesh sumber terbuka dari HashiCorp yang berintegrasi dengan alat infrastruktur HashiCorp lain. Pelan data Consul menyokong kedua-dua model integrasi proksi dan asli. Ia menawarkan proksi terbina dalam tetapi juga boleh berfungsi dengan Envoy.
Consul beroperasi melebihi Kubernetes, menyokong platform seperti Nomad. Ia menggunakan agen pada setiap nod untuk pemeriksaan kesihatan dan berkomunikasi dengan pelayan Consul untuk penyimpanan data dan replikasi. Walaupun menawarkan ciri-ciri service mesh standard, Consul lebih kompleks untuk dipasang dan diurus.
Tutorial ini telah meneroka asas-asas seni bina service mesh dan keupayaan kuat Istio. Kami telah menyelami struktur teras Istio, komponen, dan aplikasi praktikal. Pada akhir, anda sepatutnya mempunyai pemahaman yang kukuh tentang cara memasang dan menggunakan Istio untuk senario biasa.
Maklum Balas Pelanggan
Ulasan berikut dikumpulkan di laman web kami.
Ada Soalan? Cari Jawapan Di Bawah!
Soalan-soalan yang paling kerap ditanya