Ngày 16 tháng 12 năm 2020 - Công nghệ thông tin
Bài viết này sử dụng hệ điều hành macOS 11.1, với Kubernetes (v1.19.3) tích hợp sẵn trong Docker Desktop 3.0.1 làm môi trường triển khai.
1. Tải xuống và cài đặt Istio
Truy cập trang phát hành Istio để tải phiên bản mới nhất tương thích với hệ điều hành của bạn là istio-1.8.1-osx.tar.gz
. Sau khi giải nén vào thư mục /usr/local/istio-1.8.1
, bạn sẽ thấy các thư mục con như bin
và samples
. Trong đó, thư mục bin
chứa công cụ lệnh istioctl
, còn thư mục samples
bao gồm các cấu hình mẫu ứng dụng đi kèm Istio.
$ cd /usr/local/istio-1.8.1
$ tree
.
├── bin
│ └── istioctl
├── samples
│ ├── README.md
│ ├── addons
│ ├── bookinfo
...
Để có thể sử dụng lệnh istioctl
ở mọi nơi, thêm đường dẫn /usr/local/istio-1.8.1/bin
vào biến môi trường PATH
bằng cách chỉnh sửa tệp /etc/profile
.
$ export PATH=/usr/local/istio-1.8.1/bin:$PATH
Do mục đích chính của việc cài đặt Istio là để trình diễn ví dụ, chúng ta chọn profile demo
. Lệnh cài đặt như sau:
$ istioctl install --set profile=demo -y
...
✔ Istio core đã được cài đặt
✔ Istiod đã được cài đặt
✔ Cổng ra ngoài (Egress Gateways) đã được cài đặt
✔ Cổng vào (Ingress Gateways) đã được cài đặt
✔ Quá trình cài đặt hoàn tất
Sau khoảng một phút, các thành phần chính như Istiod, Ingress Gateway và Egress Gateway đều đã được cài đặt xong. Bạn có thể kiểm tra rằng các thành phần này đã được đưa vào không gian tên istio-system
.
$ kubectl get deployments -n istio-system
NAME READY UP-TO-DATE AVAILABLE TUỔI
istio-egressgateway 1/1 1 1 14h
istio-ingressgateway 1/1 1 1 14h
istiod 1/1 1 1 14h
2. Triển khai ứng dụng mẫu Bookinfo
Trước khi triển khai ứng dụng mẫu, hãy tạo một không gian tên riêng biệt dùng cho mục đích trình diễn là istio-demo
và gắn nhãn nó để kích hoạt tự động tiêm proxy Istio.
$ kubectl create namespace istio-demo
$ kubectl label namespace istio-demo istio-injection=enabled
Tiếp theo, hãy tìm hiểu sơ lược về các thành phần của ứng dụng Bookinfo mà chúng ta sắp triển khai.
$ cd /usr/local/istio-1.8.1
$ tree -L 1 samples/bookinfo/src
.
├── productpage // Điểm nhập của ứng dụng Bookinfo, kết hợp cả frontend và backend, thực hiện bằng JavaScript + Python
├── details // Dịch vụ backend chi tiết sách, thực hiện bằng Ruby
├── reviews // Dịch vụ backend đánh giá sách, thực hiện bằng Java với Liberty
└── ratings // Dịch vụ backend xếp hạng đánh giá sách, viết bằng Node.js, sử dụng MySQL hoặc MongoDB làm cơ sở dữ liệu
Bây giờ, sử dụng cấu hình sẵn có trong thư mục samples
để triển khai ứng dụng Bookinfo:
$ cd /usr/local/istio-1.8.1
$ kubectl apply -n istio-demo -f samples/bookinfo/platform/kube/bookinfo.yaml
...
deployment.apps/reviews-v1 created
deployment.apps/reviews-v2 created
deployment.apps/reviews-v3 created
...
Bạn có thể nhận thấy rằng thành phần reviews
đã được triển khai với ba phiên bản khác nhau, trong khi các thành phần khác chỉ có một phiên bản duy nhất.
3. Truy cập ứng dụng mẫu Bookinfo
Kiểm tra trạng thái của các deployment và pod, chúng ta thấy rằng các thành phần của Bookinfo đã được triển khai thành công:
$ kubectl get deployments -n istio-demo
NAME READY UP-TO-DATE AVAILABLE TUỔI
details-v1 1/1 1 1 7m6s
productpage-v1 1/1 1 1 7m4s
ratings-v1 1/1 1 1 7m6s
reviews-v1 1/1 1 1 7m5s
reviews-v2 1/1 1 1 7m5s
reviews-v3 1/1 1 1 7m5s
$ kubectl get pods -n istio-demo
NAME READY TRẠNG THÁI KHỞI ĐỘNG LẠI TUỔI
details-v1-79c697d759-c8h6k 2/2 Đang chạy 0 7m12s
productpage-v1-65576bb7bf-5ln54 2/2 Đang chạy 0 7m11s
ratings-v1-7d99676f7f-2k75j 2/2 Đang chạy 0 7m12s
reviews-v1-987d495c-njj9f 2/2 Đang chạy 0 7m12s
reviews-v2-6c5bf657cf-c6x46 2/2 Đang chạy 0 7m12s
reviews-v3-5f7b9f4f77-mpt9z 2/2 Đang chạy 0 7m12s
Thử truy cập trang chủ của ứng dụng Bookinfo từ container ratings.
Sử dụng lệnh kubectl describe pod
, bạn có thể thấy rằng pod ratings ngoài container ratings ban đầu còn có hai Sidecar: istio-init
và istio-proxy
.
$ kubectl describe pod/ratings-v1-7d99676f7f-2k75j -n istio-demo
...
Tạo container istio-init
...
Tạo container ratings
...
Tạo container istio-proxy
Vì vậy, khi thực thi lệnh, cần chỉ định container là ratings. Sử dụng lệnh curl để gửi yêu cầu đến trang productpage và kiểm tra tiêu đề trang.
$ kubectl exec ratings-v1-7d99676f7f-2k75j -c ratings -n istio-demo -- curl -s productpage:9080/productpage | grep -o "<title>.*</title>"
<title>Ứng dụng cửa hàng sách đơn giản</title>
Để truy cập ứng dụng từ bên ngoài cluster, cần cấu hình Ingress Gateway của Istio để chuyển hướng lưu lượng đến productpage. Thực hiện cấu hình bằng cách áp dụng file cấu hình sẵn có trong thư mục samples
.
$ kubectl apply -n istio-demo -f samples/bookinfo/networking/bookinfo-gateway.yaml
Kiểm tra địa chỉ IP và cổng của dịch vụ Ingress Gateway.
$ kubectl get service istio-ingressgateway -n istio-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) TUỔI
istio-ingressgateway LoadBalancer 10.108.227.8 localhost ...80:32008/TCP,443:30895/TCP... 15h
Với môi trường triển khai cục bộ Docker Desktop K8s, địa chỉ IP bên ngoài chính là localhost.
4. Cài đặt bảng điều khiển Istio
Dưới đây là cách cài đặt một số plugin của Istio để khám phá các tính năng cơ bản.
$ cd /usr/local/istio-1.8.1
$ kubectl apply -f samples/addons
...
deployment.apps/kiali created
deployment.apps/prometheus created
deployment.apps/jaeger created
...
a) Xem bảng B88bet Win điều khiển Kiali
Nhập lệnh sau để mở bảng điều khiển Kiali.
$ istioctl dashboard kiali
Xem biểu đồ topo của ứng dụng trong không gian tên istio-demo
.
b) Xem bảng điều khiển Jaeger
Nhập lệnh sau để mở bảng điều khiển Jaeger.
$ istioctl dashboard jaeger
Chọn dịch vụ productpage.istio-demo
từ menu thả xuống Service bên trái và click vào một trace bất kỳ từ danh sách Trace để xem chi tiết chuỗi gọi hàm.
5. Gỡ cài đặt Istio
Kết thúc quá trình khám phá Istio, tiến f8bet5.com hành gỡ cài đặt theo các bước sau:
- Gỡ cài đặt các addon
$ cd /usr/local/istio-1.8.1
$ kubectl delete -f samples/addons
- Gỡ cài đặt Bookinfo
$ cd /usr/local/istio-1.8.1
$ kubectl delete -n istio-demo -f samples/bookinfo/platform/kube/bookinfo.yaml
$ kubectl delete -n istio-demo -f samples/bookinfo/networking/bookinfo-gateway.yaml
- Gỡ cài đặt Istio
$ istioctl manifest generate --set profile=demo | kubectl delete --ignore-not-found=true -f -
- Xóa không gian tên
istio-system
$ kubectl delete namespace istio-system
- Hủy kích hoạt tự động tiêm proxy cho
istio-demo
$ kubectl label namespace istio-demo istio-injection-
- Xóa không gian tên
istio-demo
$ kubectl delete namespace istio-demo
[1] Bắt đầu với Istio
#Mạng dịch vụ #Istio