CFSDN nhấn mạnh vào giá trị tạo ra nguồn mở và chúng tôi cam kết xây dựng nền tảng chia sẻ tài nguyên để mọi nhân viên CNTT có thể tìm thấy thế giới tuyệt vời của bạn tại đây.
Bài blog CFSDN này nói về cách sử dụng chi tiết của tiện ích mở rộng Wasm Envoy được tác giả sưu tầm và biên soạn. Nếu các bạn quan tâm tới bài viết này thì nhớ like nhé.
giới thiệu
Chúng tôi muốn việc khám phá dịch vụ, định tuyến, xuống cấp bộ ngắt mạch và cân bằng tải của lưới được thực thi trong Envoy trên mặt phẳng dữ liệu. Envoy cũng cung cấp cơ chế Lọc để thực hiện các chức năng này, thường theo các cách sau:
- Biên dịch lại Envoy với bộ lọc tùy chỉnh trong mã C++
- Mở rộng bộ lọc bằng tập lệnh Lua
- Mở rộng Envoy bằng wasm
1. Nguyên lý làm việc của wasm
Loại biên dịch C++ đầu tiên quá đắt để học và khó bảo trì. Loại thứ hai phù hợp để triển khai các hàm đơn giản. Loại thứ ba là hướng phát triển chính Viết các bộ lọc bằng các ngôn ngữ khác, biên dịch và chạy chúng thông qua wasm và nhúng chúng. trong Envoy để chạy. Thực hiện lệnh nhị phân được chuyển với các tính năng sau:
Được tải động vào Envoy để thực thi.
- Mã đặc phái viên dễ bảo trì mà không cần sửa đổi
- Hỗ trợ nhiều ngôn ngữ phát triển hơn như tinygo
- Cách ly cấp quy trình ảnh hưởng đến quy trình Envoy trong hoạt động hộp cát VM
- Sơ đồ lưu lượng đi qua Envoy:
2. quá trình cài đặt wasm
Cài đặt Isito1.9.9.
Phiên bản mới nhất là v0.0.33 và Istio được hỗ trợ là 1.9.X.
- https://github.com/solo-io/wasm/releases/
Gỡ cài đặt phiên bản istio1.10 gốc và cài đặt 1.9.9.
- istioctl x gỡ cài đặt
Đường dẫn cài đặt của istio1.9.9 các bạn vui lòng xem bài viết trước để biết quá trình cài đặt cụ thể.
- https://github.com/istio/istio/releases/download/1.9.9/istio-1.9.9-linux-amd64.tar.gz
Tuyên bố mount wasme
Có các khuyến nghị cài đặt chi tiết bên dưới. Nên sử dụng cách gắn khai báo trong môi trường sản xuất:
- https://docs.solo.io/web-assembly-hub/latest/tutorial_code/wasme_operator/
1. Cài đặt CRD Wasme.
- kubectl áp dụng -f https://github.com/solo-io/wasm/releases/latest/download/wasme.io_v1_crds.yaml
-
- # kubectl áp dụng -f wasme.io_v1_crds.yaml
- customresourcedefinition.apiextensions.k8s.io/filterdeployments.wasme.io đã tạo
2. Cài đặt các thành phần Toán tử.
- kubectl áp dụng -f https://github.com/solo-io/wasm/releases/latest/download/wasme-mặc định.yaml
-
- # kubectl áp dụng -f wasme-mặc định.yaml
- không gian tên/wasme đã được tạo
- serviceaccount/wasme-operator đã được tạo
- serviceaccount/wasme-cache đã được tạo
- configmap/wasme-cache đã được tạo
- clusterrole.rbac.sự cho phép.k8s.io/wasme-operator đã được tạo
- clusterrole.rbac.sự cho phép.k8s.io/wasme-cache đã được tạo
- clusterrolebinding.rbac.sự cho phép.k8s.io/wasme-operator đã được tạo
- clusterrolebinding.rbac.sự cho phép.k8s.io/wasme-cache đã được tạo
- daemonset.apps/wasme-cache đã được tạo
- đã tạo implementation.apps/wasme-operator
3. Xác minh xem cài đặt có thành công hay không.
- # kubectl lấy pod -n wasme
- TÊN TRẠNG THÁI SẴN SÀNG KHỞI ĐỘNG LẠI TUỔI
- wasme-cache-96mnm 1/1 Đang chạy 0 23 giây
- wasme-cache-ktnpb 1/1 Đang chạy 0 23 giây
- wasme-cache-w929m 1/1 Đang chạy 0 23 giây
- wasme-operator-75bbf94974-nb684 1/1 Đang chạy 0 23 giây
Cách lắp hoạt động
Cài đặt dòng lệnh
Tài liệu cài đặt chính thức.
- https://docs.solo.io/web-assembly-hub/latest/tutorial_code/getting_started/
Nếu mạng tốt thì có thể sử dụng lệnh cài đặt nhanh.
- curl -sL https://run.solo.io/wasme/install | sh
Xem những gì được thực hiện từ tập lệnh cài đặt install_cli.sh.
- nếu như [ "$(uname -s)" = "Darwin" ]; sau đó OS=darwin // Mac là darwinelse OS=linuxfi// Đổi tên và cấp quyền thực thi cd "$TRANG CHỦ"mkdir -p ".wasme/thùng"mv "${tmp}/${tên tệp}" ".wasme/bin/wasme"chmod +x ".wasme/bin/wasme"// Thêm vào biến môi trường import PATH=\$HOME/.wasme/bin:\$PATH"
Mac có thể tải xuống wasme-darwin-amd64 và chỉ cần cài đặt nó.
- xuất PATH=$PATH:/Người dùng/yongliang/công việc/software_install/wasme/binsource ~/.bash_profilechmod +x /Users/yongliang/công việc/phần_phẩm_cài_đặt/wasme/bin/wasmewasme
3. Wasm tạo Bộ lọc
Để biết hướng dẫn chính thức, xem:
- https://docs.solo.io/web-assembly-hub/latest/tutorial_code/build_tutorials/building_assemblyscript_filters/
Đầu tiên hãy thử tinygo làm ví dụ để xem hiệu quả.
- wasme init melon-filterSử dụng các phím mũi tên ĐẾN điều hướng: ↓ ↑ → ← ? Bạn muốn ngôn ngữ nào ĐẾN sử dụng vì bộ lọc: cpp rust assemblyscript ▸ tinygo
Sau khi thực hiện:
- wasme init melon-filter✔ tinygo✔ istio:1.7.x, gloo:1.6.x, istio:1.8.x, istio:1.9.x
Cấu trúc thư mục.
- -rw-r
run-config.json được wamse sử dụng để xây dựng các bộ lọc và phải chứa trường rootIds.
- { "kiểu": "proxy_sứ_viên", "abiPhiên bản": ["v0-4689a30309abf31aee9ae36e73d34b1bb182685f", "v0.2.1"], "cấu hình": { "rootId": [ "root_id" ] }}
main.go là mã mẫu được tạo, chủ yếu thêm thông tin vào tiêu đề của phản hồi được trả về và thay đổi thành ""xin chào", "dưa"".
- func (ctx *httpHeaders) OnHttpResponseHeaders(numHeaders số nguyên, endOfStream bool) các loại.Hoạt động { nếu lỗi := proxywasm.SetHttpResponseHeader("Xin chào", "dưa gang"); lỗi != không { proxywasm.LogCriticalf("không thể thiết lập tiêu đề phản hồi: %v", lỗi) } trở lại các loại.Hành độngTiếp tục}
4. Bộ lọc xây dựng wasm
Cấu trúc bộ lọc
Quá trình thi công diễn ra khá lâu nên các bạn vui lòng đợi một lát nhé.
- wasme build tinygo /Users/yongliang/GoLandProjects/melon-filter -t xxx/base/melon-thêm vào-header:v0.1Không thể ĐẾN tìm hình ảnh 'quay.io/solo-io/ee-builder:0.0.33' locals0.0.33: Đang kéo từ solo-io/ee-builderdf27e1f7c31e: Hoàn tất kéo 0a8813a60e2e: Hoàn tất kéo 3c2cba919283: Hoàn tất kéo 26f4837a47c0: Hoàn tất kéo dd7b292cf068: Hoàn tất kéo 4a4d78f042bc: Hoàn tất kéo 9108a736d6a0: Hoàn tất kéo 70ac09daaa76: Hoàn tất kéo 809bdff17a4d: Hoàn tất kéo 31fc029d676e: Hoàn tất kéo 85533903f7c2: Hoàn tất kéo f87e543b124a: Hoàn tất kéo 93d78f561264: Hoàn tất kéo 8ba3d0f61e41: Hoàn tất kéo d511201136be: Hoàn tất kéo Tóm tắt: sha256:94b6ce4624b0c4ed4cfa4f311c8af57083b538949b5c88ce62ef984f9b81ef66Trạng thái: Đã tải xuống hình ảnh mới hơn vì quay.io/solo-io/ee-builder:0.0.33Building với tinygo...go: tải xuống github.com/tetratelabs/proxy-wasm-go-sdk v0.1.1INFO[2146] thêm hình ảnh ĐẾN bộ nhớ đệm... tệp bộ lọc=/tmp/wasme066130090/filter.wasm tag="xxx/base/melon-add-header:v0.1"INFO[2146] hình ảnh được gắn thẻ tóm tắt="sha256:750d63889653e7117fcbc0831f10f0e1d3f7ec0c82fe5787b71d08a783e3393f" hình ảnh="xxx/base/melon-add-header:v0.1"
Quá trình xây dựng đã hoàn tất và hình ảnh được tạo ra.
- danh sách wasmeTAG TÊN KÍCH CỠ SHA CẬP NHẬTxxxx/cơ sở/dưa-thêm vào-header v0.1 247.6 kB 750d6388 15 tháng 11 năm 21 20:23 CST
Lưu ý: Xem hướng dẫn xây dựng chính thức.
- https://docs.solo.io/web-assembly-hub/latest/tutorial_code/build_tutorials/building_assemblyscript_filters/
Đẩy hình ảnh
Image đã xây dựng cần được đẩy đến kho từ xa.
- wasme đẩy xxx/cơ sở/dưa hấu-thêm vào-header:v0.1INFO[0000] Đang đẩy hình ảnh xxxn/base/melon-thêm vào-header:v0.1 INFO[0004] Đã đẩy xxx/base/melon-thêm vào-header:v0.1 INFO[0004] Tóm tắt: sha256:27aecb092318b2f922204ce722a34e5c2866baa168cf2f9f00c303b1982cfa9a
Lưu ý: Xem hướng dẫn đẩy chính thức.
- https://docs.solo.io/web-assembly-hub/latest/tutorial_code/push_tutorials/basic_push/
5. Lọc triển khai hiệu quả
Nó được triển khai thông qua các tài nguyên tùy chỉnh và FilterDeployment của Kubernetes. Sau đây là nội dung của melon-add-header.yaml.
- apiVersion: wasme.io/v1kind: FilterDeploymentmetadata: tên: dưa gang-thêm vào-header namespace: defaultspec: triển khai: istio: kind: Bộ lọc triển khai: hình ảnh: xxx/base/melon-thêm vào-tiêu đề:v0.1
Thực hiện lệnh triển khai.
- kubectl áp dụng -f melon-thêm vào-header.yamlfilterdeployment.wasme.io/melon-thêm vào-tiêu đề đã được tạo
Lưu ý: Xem hướng dẫn chính thức.
- https://docs.solo.io/web-assembly-hub/latest/tutorial_code/wasme_operator/
6. Xác minh xác thực
1. Truy cập dịch vụ lưới Mesh.
2. Kiểm tra xem "hello:melon" đã được thêm vào Tiêu đề phản hồi chưa.
Liên kết gốc: https://mp.weixin.qq.com/s/jeCyu9spkmtt1_cP7dAfw.
Cuối cùng, bài viết giải thích chi tiết về việc sử dụng tiện ích mở rộng Wasm Envoy có ở đây. Nếu bạn muốn biết thêm về giải thích chi tiết về việc sử dụng tiện ích mở rộng Wasm Envoy, vui lòng tìm kiếm bài viết CFSDN hoặc tiếp tục duyệt qua các bài viết liên quan. bạn sẽ hỗ trợ nó trong tương lai blog của tôi! .
Tôi là một lập trình viên xuất sắc, rất giỏi!