Chuỗi bài viết trên Istio Service Mesh

Chúng tôi đang bắt đầu một loạt bài đăng giới thiệu một số trong nhiều khả năng của Istio Service Mesh khi kết hợp với Red Hat OpenShift và Kubernetes.

Chuỗi bài viết trên Istio Service Mesh

Phần một, hôm nay:

  • Hãy cùng giải thích khái niệm về thùng chứa sidecar Kubernetes và hình thành nội dung chính của loạt bài đăng này: "bạn không cần thay đổi bất cứ điều gì trong mã của mình".
  • Hãy giới thiệu điều cơ bản của Istio - quy tắc định tuyến. Tất cả các tính năng khác của Istio đều được xây dựng dựa trên chúng, vì đó là các quy tắc cho phép bạn hướng lưu lượng truy cập đến các vi dịch vụ bằng cách sử dụng các tệp YAML bên ngoài mã dịch vụ. Chúng tôi cũng đang xem xét kế hoạch triển khai Canary Deployment. Phần thưởng năm mới – 10 bài học tương tác trên Istio


Phần hai, sắp ra mắt, sẽ cho bạn biết:

  • Cách Istio triển khai Pool Ejection kết hợp với Circuit Breaker và sẽ minh họa cách Istio cho phép bạn loại bỏ nhóm chết hoặc hoạt động kém khỏi mạch cân bằng.
  • Chúng ta cũng sẽ xem chủ đề Circuit Breaker ở bài đăng đầu tiên để xem Istio có thể được sử dụng như thế nào ở đây. Chúng tôi sẽ chỉ cho bạn cách định tuyến lưu lượng truy cập và xử lý các lỗi mạng bằng cách sử dụng tệp cấu hình YAML và lệnh đầu cuối mà không có những thay đổi nhỏ nhất trong mã dịch vụ.

Một phần ba:

  • Câu chuyện về truy tìm và giám sát đã được tích hợp sẵn hoặc dễ dàng thêm vào Istio. Chúng tôi sẽ hướng dẫn bạn cách sử dụng các công cụ như Prometheus, Jaeger và Grafana kết hợp với khả năng mở rộng quy mô OpenShift để quản lý kiến ​​trúc vi dịch vụ một cách dễ dàng.
  • Chúng tôi chuyển từ việc giám sát và xử lý lỗi sang việc cố ý đưa chúng vào hệ thống. Nói cách khác, chúng tôi học cách thực hiện chèn lỗi mà không thay đổi mã nguồn, điều này rất quan trọng theo quan điểm thử nghiệm - vì nếu bạn tự thay đổi mã cho việc này, sẽ có nguy cơ gây ra các lỗi bổ sung.

Cuối cùng, trong bài đăng cuối cùng trên Istio Service Mesh:

  • Hãy đi đến Mặt tối. Chính xác hơn, chúng ta sẽ học cách sử dụng lược đồ Dark Launch, khi mã được triển khai và thử nghiệm trực tiếp trên dữ liệu sản xuất nhưng không ảnh hưởng đến hoạt động của hệ thống dưới bất kỳ hình thức nào. Đây là lúc khả năng phân chia lưu lượng truy cập của Istio phát huy tác dụng. Và khả năng kiểm tra dữ liệu sản xuất trực tiếp mà không ảnh hưởng đến hoạt động của hệ thống chiến đấu dưới bất kỳ hình thức nào là phương pháp xác minh thuyết phục nhất.
  • Dựa trên Dark Launch, chúng tôi sẽ chỉ cho bạn cách sử dụng mô hình Triển khai Canary để giảm rủi ro và giúp đưa mã mới vào sản xuất dễ dàng hơn. Bản thân Canary Deployment không có gì mới, nhưng Istio cho phép bạn triển khai sơ đồ này chỉ với các tệp YAML đơn giản.
  • Cuối cùng, chúng tôi sẽ hướng dẫn bạn cách sử dụng Istio Egress để cấp quyền truy cập vào dịch vụ cho những người ở ngoài cụm của bạn nhằm sử dụng các khả năng của Istio khi làm việc với Internet.

Vì vậy, chúng ta bắt đầu nào...

Công cụ quản lý và giám sát Istio - mọi thứ bạn cần để sắp xếp các dịch vụ vi mô trong lưới dịch vụ lưới dịch vụ.

Lưới dịch vụ Istio là gì

Lưới dịch vụ thực hiện các chức năng như giám sát lưu lượng, kiểm soát truy cập, khám phá, bảo mật, khả năng chịu lỗi và những thứ hữu ích khác cho một nhóm dịch vụ. Istio cho phép bạn thực hiện tất cả những điều này mà không cần thay đổi một chút nào đối với mã của dịch vụ. Bí mật của phép thuật là gì? Istio gắn proxy riêng của mình vào từng dịch vụ dưới dạng thùng chứa sidecar (sidecar là sidecar xe máy), sau đó tất cả lưu lượng truy cập vào dịch vụ này đều đi qua proxy, được hướng dẫn bởi các chính sách cụ thể, quyết định cách thức, thời điểm và liệu lưu lượng truy cập này nên đạt được dịch vụ nào cả. Istio cũng cho phép triển khai các kỹ thuật DevOps nâng cao như triển khai canary, ngắt mạch, chèn lỗi và nhiều kỹ thuật khác.

Cách Istio hoạt động với container và Kubernetes

Lưới dịch vụ Istio là một triển khai phụ của mọi thứ cần thiết để tạo và quản lý các dịch vụ vi mô: giám sát, truy tìm, ngắt mạch, định tuyến, cân bằng tải, chèn lỗi, thử lại, hết thời gian chờ, phản chiếu, kiểm soát truy cập, giới hạn tốc độ và nhiều hơn thế nữa. Và mặc dù ngày nay có rất nhiều thư viện để triển khai các chức năng này trực tiếp trong mã, nhưng với Istio bạn có thể nhận được tất cả những thứ tương tự mà không cần thay đổi bất kỳ điều gì trong mã của mình.

Theo mô hình sidecar, Istio chạy trong một thùng chứa Linux, nằm trong một Kubernetes-pod với một dịch vụ được kiểm soát, đồng thời chèn và trích xuất chức năng cũng như thông tin theo cấu hình nhất định. Chúng tôi nhấn mạnh rằng đây là cấu hình của riêng bạn và nó nằm ngoài mã của bạn. Do đó, mã trở nên đơn giản và ngắn hơn nhiều.

Điều quan trọng nữa là thành phần vận hành của microservice hóa ra không được kết nối với chính mã, điều đó có nghĩa là hoạt động của chúng có thể được chuyển giao một cách an toàn cho các chuyên gia CNTT. Thật vậy, tại sao nhà phát triển phải chịu trách nhiệm về việc ngắt mạch và chèn lỗi? Phản ứng thì có, nhưng xử lý và tạo ra chúng? Nếu bạn loại bỏ tất cả những điều này khỏi mã, các lập trình viên sẽ có thể tập trung hoàn toàn vào chức năng của ứng dụng. Và bản thân mã sẽ trở nên ngắn hơn và đơn giản hơn.

Lưới dịch vụ

Istio, thực hiện các chức năng quản lý các vi dịch vụ bên ngoài mã của chúng, là khái niệm về Lưới dịch vụ. Nói cách khác, nó là một nhóm phối hợp gồm một hoặc nhiều nhị phân tạo thành một mạng lưới các chức năng mạng.

Cách Istio hoạt động với microservice

Đây là công việc của thùng chứa sidecar khi kết hợp với Kubernetes и sang số nhỏ góc nhìn toàn cảnh: khởi chạy một phiên bản Minishift, tạo một dự án cho Istio (hãy gọi nó là “hệ thống istio”), cài đặt và chạy tất cả các thành phần liên quan đến Istio. Sau đó, khi tạo dự án và nhóm, bạn thêm thông tin cấu hình vào hoạt động triển khai của mình và nhóm của bạn bắt đầu sử dụng Istio. Một sơ đồ đơn giản trông như thế này:

Chuỗi bài viết trên Istio Service Mesh

Bây giờ bạn có thể thay đổi cài đặt Istio theo thứ tự, chẳng hạn như để tổ chức chèn lỗi, hỗ trợ Triển khai Canary hoặc các tính năng khác của Istio - và tất cả những điều này mà không cần chạm vào mã của ứng dụng. Giả sử bạn muốn chuyển hướng tất cả lưu lượng truy cập web từ người dùng của khách hàng lớn nhất của bạn (Foo Corporation) sang phiên bản mới của trang web. Để thực hiện việc này, chỉ cần tạo quy tắc định tuyến Istio sẽ tìm @foocorporation.com trong ID người dùng và chuyển hướng tương ứng. Đối với tất cả người dùng khác, sẽ không có gì thay đổi. Trong thời gian chờ đợi, bạn sẽ bình tĩnh kiểm tra phiên bản mới của trang web. Và lưu ý rằng bạn không cần phải có sự tham gia của các nhà phát triển cho việc này.

Và liệu bạn có phải trả giá đắt cho việc đó không?

Không có gì. Istio khá nhanh và được viết bằng Go và tạo ra rất ít chi phí. Ngoài ra, sự suy giảm năng suất trực tuyến có thể được bù đắp bằng sự gia tăng năng suất của nhà phát triển. Ít nhất về mặt lý thuyết: đừng quên rằng thời gian của các nhà phát triển rất có giá trị. Về chi phí phần mềm, Istio là phần mềm nguồn mở nên bạn có thể tải và sử dụng miễn phí.

Hãy tự mình làm chủ nó

Nhóm Trải nghiệm Nhà phát triển Red Hat đã phát triển một hướng dẫn thực hành chuyên sâu khả năng lãnh đạo của Istio (bằng tiếng Anh). Nó chạy trên Linux, MacOS và Windows và mã có sẵn trong Java và Node.js.

10 bài học tương tác trên Istio

Khối 1 - Dành cho người mới bắt đầu

Giới thiệu về Istio
Phút 30
Hãy làm quen với Service Mesh, tìm hiểu cách cài đặt Istio trong cụm OpenShift Kubernetes.
Để bắt đầu

Triển khai microservices ở Istio
Phút 30
Chúng tôi sử dụng Istio để triển khai ba dịch vụ vi mô với Spring Boot và Vert.x.
Để bắt đầu

Khối 2 – trình độ trung cấp

Giám sát và truy tìm ở Istio
Phút 60
Chúng ta sẽ khám phá các công cụ giám sát tích hợp, số liệu tùy chỉnh và OpenTracing của Istio thông qua Prometheus và Grafana.
Để bắt đầu

Định tuyến đơn giản trong Istio
Phút 60
Tìm hiểu cách quản lý định tuyến trong Istio bằng các quy tắc đơn giản.
Để bắt đầu

Quy tắc định tuyến nâng cao
Phút 60
Chúng ta hãy xem định tuyến thông minh, kiểm soát truy cập, cân bằng tải và giới hạn tốc độ của Istio.
Để bắt đầu

Khối 3 – người dùng nâng cao

Lỗi tiêm ở Istio
Phút 60
Chúng tôi nghiên cứu các tình huống xử lý lỗi trong các ứng dụng phân tán, tạo ra lỗi HTTP và độ trễ mạng, đồng thời tìm hiểu cách sử dụng kỹ thuật hỗn loạn để khôi phục môi trường.
Để bắt đầu

Bộ ngắt mạch ở Istio
Phút 30
Chúng tôi cài đặt Siege cho các địa điểm kiểm tra sức chịu đựng và tìm hiểu cách đảm bảo khả năng chịu lỗi phụ trợ bằng cách sử dụng tính năng phát lại, bộ ngắt mạch và loại bỏ nhóm.
Để bắt đầu

Đi ra và Istio
Phút 10
Chúng tôi sử dụng các tuyến đường Đi ra để tạo quy tắc tương tác giữa các dịch vụ nội bộ với các dịch vụ và API bên ngoài.
Để bắt đầu

Istio và Kiali
Phút 15
Tìm hiểu cách sử dụng Kiali để có cái nhìn tổng quan về lưới dịch vụ cũng như khám phá các luồng dữ liệu và yêu cầu.
Để bắt đầu

TLS lẫn nhau ở Istio
Phút 15
Chúng tôi tạo Istio Gateway và VirtualService, sau đó nghiên cứu chi tiết về TLS (mTLS) chung và các cài đặt của nó.
Để bắt đầu

Khối 3.1 - Tìm hiểu sâu: Lưới dịch vụ Istio cho vi dịch vụ

Chuỗi bài viết trên Istio Service Mesh
Quyển sách nói về cái gì vậy:

  • Lưới dịch vụ là gì?
  • Hệ thống Istio và vai trò của nó trong kiến ​​trúc microservice.
  • Sử dụng Istio để giải quyết các vấn đề sau:
    • Khả năng chịu lỗi;
    • Lộ trình;
    • Kiểm tra hỗn loạn;
    • An ninh;
    • Thu thập dữ liệu từ xa bằng cách sử dụng dấu vết, số liệu và Grafana.

Để tải xuống một cuốn sách

Chuỗi bài viết về service Mesh và Istio

Tự mình thử

Chuỗi bài đăng này không nhằm mục đích cung cấp thông tin chuyên sâu về thế giới của Istio. Chúng tôi chỉ muốn giới thiệu cho bạn khái niệm này và có thể truyền cảm hứng cho bạn để bạn tự mình dùng thử Istio. Việc này hoàn toàn miễn phí và Red Hat cung cấp tất cả các công cụ bạn cần để bắt đầu với OpenShift, Kubernetes, bộ chứa Linux và Istio, bao gồm: Nền tảng container OpenShift dành cho nhà phát triển Red Hat, hướng dẫn của chúng tôi đến Istio và các tài nguyên khác trên của chúng tôi microsite trên Service Mesh. Đừng trì hoãn, hãy bắt đầu ngay hôm nay!

Quy tắc định tuyến của Istio: hướng các yêu cầu dịch vụ tới nơi chúng cần đến

mởShift и Kubernetes làm tốt công việc giải quyết dịch vụ vi mô được định tuyến đến các nhóm được yêu cầu. Đây là một trong những lý do tồn tại của Kubernetes - định tuyến và cân bằng tải. Nhưng nếu bạn cần định tuyến tinh tế và phức tạp hơn thì sao? Ví dụ: sử dụng đồng thời hai phiên bản của một microservice. Quy tắc lộ trình Istio có thể giúp ích như thế nào ở đây?

Quy tắc định tuyến là các quy tắc thực sự xác định việc lựa chọn tuyến đường. Bất kể mức độ phức tạp của hệ thống, nguyên tắc hoạt động chung của các quy tắc này vẫn đơn giản: các yêu cầu được định tuyến dựa trên các tham số và giá trị tiêu đề HTTP nhất định.
Hãy xem xét các ví dụ:

Mặc định Kubernetes: tầm thường "50/50"

Trong ví dụ của chúng tôi, chúng tôi sẽ trình bày cách sử dụng đồng thời hai phiên bản của một microservice trong OpenShift, hãy gọi chúng là v1 và v2. Mỗi phiên bản chạy trong nhóm Kubernetes riêng và theo mặc định, nó chạy định tuyến vòng tròn cân bằng đồng đều. Mỗi nhóm nhận được phần yêu cầu dựa trên số lượng phiên bản microservice của nó, hay nói cách khác là bản sao. Istio cho phép bạn thay đổi số dư này theo cách thủ công.

Giả sử chúng tôi đã triển khai hai phiên bản dịch vụ đề xuất của mình trên OpenShift, khuyến nghị-v1 và khuyến nghị-v2.
Trong bộ lễ phục. Hình 1 cho thấy rằng khi mỗi dịch vụ được thể hiện trong một phiên bản, các yêu cầu sẽ luân phiên đồng đều giữa chúng: 1-2-1-2-... Đây là cách hoạt động định tuyến Kubernetes theo mặc định:

Chuỗi bài viết trên Istio Service Mesh

Phân phối có trọng số giữa các phiên bản

Trong bộ lễ phục. Hình 2 cho thấy điều gì sẽ xảy ra nếu bạn tăng số lượng bản sao dịch vụ v2 từ một lên hai (điều này được thực hiện bằng lệnh oc thang —replicas=2 triển khai/recommendation-v2). Như bạn có thể thấy, các yêu cầu giữa v1 và v2 hiện được chia theo tỷ lệ 1-2: 2-1-2-2-XNUMX-XNUMX-…:

Chuỗi bài viết trên Istio Service Mesh

Bỏ qua phiên bản sử dụng Istio

Istio giúp dễ dàng thay đổi việc phân phối yêu cầu theo cách chúng ta cần. Ví dụ: chỉ gửi tất cả lưu lượng truy cập đến đề xuất-v1 bằng tệp Istio yaml sau:

Chuỗi bài viết trên Istio Service Mesh

Ở đây bạn cần chú ý điều này: các nhóm được chọn theo nhãn. Ví dụ của chúng tôi sử dụng nhãn v1. Tham số “weight: 100” có nghĩa là 100% lưu lượng truy cập sẽ được chuyển đến tất cả các nhóm dịch vụ có nhãn v1.

Phân phối chỉ thị giữa các phiên bản (Canary Deployment)

Tiếp theo, bằng cách sử dụng tham số trọng lượng, bạn có thể hướng lưu lượng truy cập đến cả hai nhóm, bỏ qua số lượng phiên bản vi dịch vụ đang chạy trong mỗi nhóm. Ví dụ: ở đây chúng tôi hướng 90% lưu lượng truy cập đến v1 và 10% đến v2:

Chuỗi bài viết trên Istio Service Mesh

Định tuyến riêng cho người dùng di động

Để kết luận, chúng tôi sẽ chỉ ra cách buộc lưu lượng truy cập của người dùng thiết bị di động được chuyển đến dịch vụ v2 và mọi người khác chuyển sang v1. Để thực hiện việc này, chúng tôi sử dụng biểu thức chính quy để phân tích giá trị tác nhân người dùng trong tiêu đề yêu cầu:

Chuỗi bài viết trên Istio Service Mesh

Bây giờ đến lượt của bạn

Ví dụ về các biểu thức chính quy để phân tích cú pháp tiêu đề sẽ thúc đẩy bạn tìm ra cách sử dụng quy tắc định tuyến Istio của riêng mình. Hơn nữa, khả năng ở đây khá rộng rãi, vì các giá trị tiêu đề có thể được hình thành trong mã nguồn ứng dụng.

Và hãy nhớ rằng Ops chứ không phải Dev

Mọi thứ mà chúng tôi trình bày trong các ví dụ trên đều được thực hiện mà không có những thay đổi nhỏ nhất trong mã nguồn, ngoại trừ những trường hợp cần tạo tiêu đề yêu cầu đặc biệt. Istio sẽ hữu ích cho cả các nhà phát triển, chẳng hạn như những người có thể sử dụng nó ở giai đoạn thử nghiệm và cho các chuyên gia vận hành hệ thống CNTT, những người mà nó sẽ giúp ích rất nhiều trong quá trình sản xuất.

Vì vậy, hãy lặp lại nội dung chính của loạt bài viết này: bạn không cần thay đổi bất cứ điều gì trong mã của mình. Không cần phải xây dựng hình ảnh mới hoặc khởi chạy vùng chứa mới. Tất cả điều này được thực hiện bên ngoài mã.

Sử dụng trí tưởng tượng của bạn

Chỉ cần tưởng tượng khả năng phân tích tiêu đề bằng cách sử dụng biểu thức chính quy. Muốn chuyển hướng khách hàng lớn nhất của bạn sang một phiên bản đặc biệt của vi dịch vụ? Một cách dễ dàng! Cần một phiên bản riêng cho trình duyệt Chrome? Không có gì! Bạn có thể định tuyến lưu lượng truy cập theo hầu hết mọi đặc điểm.

Tự mình thử

Đọc về Istio, Kubernetes và OpenShift là một chuyện, nhưng tại sao bạn không tự mình chạm vào mọi thứ? Đội Chương trình dành cho nhà phát triển Red Hat đã chuẩn bị một hướng dẫn chi tiết (bằng tiếng Anh) sẽ giúp bạn nắm vững những công nghệ này nhanh nhất có thể. Sách hướng dẫn này cũng là nguồn mở 100% nên nó được đăng trên phạm vi công cộng. Tệp hoạt động trên macOS, Linux và Windows và mã nguồn có sẵn trong các phiên bản Java và node.js (sắp có phiên bản bằng các ngôn ngữ khác). Chỉ cần mở kho git tương ứng trong trình duyệt của bạn Bản demo dành cho nhà phát triển Red Hat.

Trong bài đăng tiếp theo: chúng tôi giải quyết vấn đề một cách tốt đẹp

Hôm nay bạn đã thấy các quy tắc định tuyến của Istio có thể làm được gì. Bây giờ hãy tưởng tượng điều tương tự, nhưng chỉ liên quan đến việc xử lý lỗi. Đây chính xác là những gì chúng ta sẽ nói đến trong bài viết tiếp theo.

Nguồn: www.habr.com

Thêm một lời nhận xét