Xác thực microservices sử dụng định danh Kubernetes

Bizfly Cloud
1187
10-09-2021
Xác thực microservices sử dụng định danh Kubernetes

Microservice mang lại nhiều lợi ích cho việc phát triển phần mềm. Tuy nhiên xoay quanh đó cũng có rất nhiều vấn đề phức tạp của hệ thống phân tán xảy ra. Và một trong những thắc mắc của nhiều người đó chính là làm thế nào để xác thực microservices sử dụng định danh Kubernetes? Cùng Bizfly Cloud tìm hiểu qua bài chia sẻ dưới đây.

Nếu cơ sở hạ tầng của bạn bao gồm một số ứng dụng tương tác với nhau, lúc này bạn có thể phải đối mặt với vấn đề bảo mật thông tin liên lạc giữa các dịch vụ để ngăn chặn các yêu cầu chưa được xác thực.

Ví dụ có hai ứng dụng:

- API

- Kho dữ liệu

Bạn có thể muốn kho dữ liệu chỉ trả lời các yêu cầu tới API và từ chối các yêu cầu từ bất kỳ nơi nào khác. Tuy nhiên, làm thế nào để lưu trữ dữ liệu quyết định cho phép hoặc từ chối yêu cầu?

Cách tiếp cận phổ biến nhất đó chính là yêu cầu và chuyển mã thông báo nhận dạng cho mọi cuộc gọi trong các dịch vụ. Do đó, thay vì đưa ra yêu cầu trực tiếp đến kho lưu trữ dữ liệu, trước tiên bạn cần phải thông qua dịch vụ Xác thực, lấy mã thông báo và sử dụng mã đó để xác thực yêu cầu của bạn với kho dữ liệu.

Dưới đây là một số tùy chọn khi triển khai cơ chế xác thực này:

- Có thể sử dụng các mã thông báo tĩnh không hết hạn. Trong trường hợp này, không cần chạy một máy chủ xác thực chuyên dụng.

- Có thể thiết lập máy chủ OAuth.

- Có thể triển khai cơ chế xác thực và ủy quyền của mình.

Tất cả các máy chủ xác thực và ủy quyền cần phải làm đólà:

- Xác thực người gọi - Người gọi phải có danh tính hợp lệ và có thể xác minh được.

- Tạo mã thông báo với phạm vi hạn chế, tính hợp lệ và đối tượng mong muốn.

- Xác thực mã thông báo - Giao tiếp dịch vụ với dịch vụ chỉ được phép nếu mã thông báo hợp pháp cho hai dịch vụ liên quan.

Kubernetes như một máy chủ xác thực và ủy quyền

Trong Kubernetes, bạn chỉ định danh tính bằng Tài khoản dịch vụ. Lúc này Người dùng và Nhóm có thể sử dụng các danh tính như một cơ chế để xác thực với API và đưa ra các yêu cầu.

Tiếp theo, Tài khoản dịch vụ được liên kết với Vai trò cấp quyền truy cập vào tài nguyên.

Nếu một Vai trò cấp quyền truy cập để tạo và xóa Nhóm, bạn sẽ không thể sửa đổi Bí mật hoặc tạo Sơ đồ cấu hình - chẳng hạn.

Các bước tạo cụm

Trước tiên để tạo được cụm bạn cần quyền truy cập một cụm Kubernetes với tính năng chiếu Khối lượng tài khoản dịch vụ được bật.

Tính năng chiếu Khối lượng tài khoản dịch vụ yêu cầu máy chủ Kubernetes API đang chạy với các cờ API cụ thể.

Việc hỗ trợ cho các nhà cung cấp Kubernetes được quản lý khác nhau có thể khác nhau. Tuy nhiên, bạn có thể bắt đầu một cụm cục bộ với tính năng chiếu âm lượng được bật trong minikube với:

minikube start \

--extra-config=apiserver.service-account-signing-key-file=/var/lib/minikube/certs/sa.key \

--extra-config=apiserver.service-account-key-file=/var/lib/minikube/certs/sa.pub \

--extra-config=apiserver.service-account-issuer=kubernetes/serviceaccount \

--extra-config=apiserver.service-account-api-audiences=api

Bây giờ bạn sẽ triển khai hai dịch vụ:

- Bạn sẽ gọi các dịch vụ này là dịch vụ API và cửa hàng dữ liệu.

- Chúng được viết bằng ngôn ngữ lập trình Go và giao tiếp qua HTTP.

- Mỗi dịch vụ chạy trong không gian tên của nó và sử dụng danh tính Tài khoản dịch vụ chuyên dụng.

- Kho lưu trữ dữ liệu trả lời yêu cầu thành công chỉ khi người gọi có danh tính hợp lệ, nếu không nó sẽ từ chối yêu cầu với lỗi.

Triển khai API

Dịch vụ API là một ứng dụng web không đầu lắng nghe trên cổng 8080. Và khi bạn thực hiện một yêu cầu đối với nó, thành phần API sẽ:

- Đưa ra một yêu cầu HTTP GET tới Data store với danh tính Tài khoản dịch vụ của nó.

- Chuyển tiếp câu trả lời.

Bạn có thể triển khai ứng dụng và hiển thị nó như một Dịch vụ trong cụm bằng cách thực hiện lệnh:

kubectl apply -f service_accounts/api/deployment.yaml

namespace/api created

serviceaccount/api created

deployment.apps/app created

service/app created

Bạn có thể truy xuất URL của dịch vụ API bằng:

minikube --namespace api service app --url

http://192.168.99.101:31541

Tiếp theo hãy nhập:

curl http://192.168.99.101:31541

Get "http://app.data-store.svc.cluster.local": dial tcp: lookup app.data-store.svc.cluster.local: no such host

Cuối cùng bạn hãy giữ thiết bị đầu cuối mở và thực hiện các bước tiếp theo.

Triển khai kho dữ liệu

Khi khách hàng đưa ra bất kỳ yêu cầu nào kho dữ liệu sẽ:

- Tìm kiếm mã thông báo trong tiêu đề yêu cầu. Nếu không có, nó sẽ trả lời bằng phản hồi lỗi HTTP 401.

- Kiểm tra mã thông báo bằng API Kubernetes để biết tính hợp lệ của nó. Nếu nó không hợp lệ, nó sẽ trả lời bằng phản hồi HTTP 403.

- Khi mã thông báo hợp lệ, nó sẽ trả lời yêu cầu ban đầu.

Bạn có thể tạo kho dữ liệu bằng:

kubectl apply -f service_accounts/data-store/deployment.yaml

namespace/data-store created

serviceaccount/data-store created

clusterrolebinding.rbac.authorization.k8s.io/role-tokenreview-binding created

deployment.apps/app created

service/app created

Bây giờ, hãy sử dụng curl để yêu cầu lại dịch vụ API:

curl http://192.168.99.101:31541

Hello from data store. You have been authenticated

Dịch vụ lưu trữ dữ liệu đã xác minh thành công mã thông báo và trả lời API. tiếp theo API chuyển tiếp yêu cầu cho bạn.

Việc của bạn là hãy truy xuất URL của Data store bằng:

minikube --namespace data-store service app --url

http://192.168.64.28:31690

Hãy sử dụng curl để thực hiện một yêu cầu đối với nó:

curl http://192.168.64.28:31690

X-Client-Id not supplied

Kết luận

Trong bài viết này, bạn đã thấy cách để bảo vệ kho dữ liệu khỏi quyền truy cập chưa được xác thực bằng Kubernetes và Tài khoản dịch vụ. Đây là giải pháp thay thế tốt hơn cho việc sử dụng Mã thông báo tài khoản dịch vụ mặc định.

Hi vọng qua bài viết này các bạn đã có được những thông tin hữu ích về việc xác thực microservices bằng cách sử dụng định danh Kubernetes. Hãy tiếp tục theo dõi Bizfly Cloud để cùng chúng tôi cập nhật những công nghệ mới nhất về điện toán đám mây và điện toán biên đang không ngừng phát triển từng ngày.

Bizfly Cloud là 1 trong top 4 doanh nghiệp đáp ứng đầy đủ toàn bộ tiêu chí, chỉ tiêu kỹ thuật, an toàn thông tin của nền tảng điện toán đám mây của Bộ TT&TT. Bizfly Cloud - Được vận hành bởi công ty Cổ phần VCCorp, đã xây dựng và ứng dụng thành công nền tảng điện toán đám mây bao gồm hơn 15 dịch vụ/giải pháp đáp ứng hầu như toàn bộ các nhu cầu về hạ tầng trong một doanh nghiệp tại Việt Nam.

Bizfly Cloud - Đơn vị HÀNG ĐẦU cung cấp giải pháp hạ tầng IT/Cloud phục vụ Chuyển đổi số cho doanh nghiệp SME tại Việt Nam.

SHARE
Hỗ trợ kỹ thuật
Kinh doanh, CSKH