MTP là công ty chuyên sản xuất và phân phối trà xanh. Công ty có số lượng khách hàng rất lớn trải rộng trên toàn thế giới. Họ đã build một trang web thương mại điện tử giống như tiki để khách hàng có thể lựa chọn sản phẩm và order dễ dàng.
Trang web được build trên nền tảng microservice hàng ngày các bản update được commit lên github build và deploy liên tục qua process CI/CD. Trước đây hệ thống mới chỉ có phần CI (sử dụng Jenkins), việc deploy được thực hiện bằng manual. Sau nhiều nghiên cứu, thử nghiệm, phần CD đã được apply sử dụng công cụ Spinnaker Jenkins jobs sẽ thực hiện build các microservices được viết bằng Java thành docker image rồi upload lên ECR
Bài viết này tập trung vào phần CD (Spinnaker)
Provisioning Spinnaker
Spinnaker là công cụ như thế nào, độc giả có thể tìm hiểu ở bài viết Vọc banh xác với Spinnaker
Spinnaker sử dụng kiến trúc microservices với nhiều services khác nhau
Các kĩ sư của MTP provision spinnaker này lên EKS Service K8S của AWS
Trước tiên 1 EKS cluster sẽ được launch bằng IaC (terraform) bao gồm VPC , EKS cluster, Node Group, S3 bucket…
Source code viết bằng terraform, khi cần provision cluster chỉ cần chạy terraform init/plan/apply là K8S được launch lên trong 1 nốt nhạc
Do được launch trong 1 EKS cluster, nên kĩ sư MTP build 1 Ingress Controller, một dạng load balancing của K8s
Nginx Ingress Controller là một ứng dụng chạy trong một cluster và sử dụng cấu hình LoadBalancer HTTP theo tài nguyên Ingress. Loadbalancer này có thể là chạy bằng phần mềm trong cluster, Loadbalancer phần cứng hoặc là Loadbalancer dịch vụ cloud bên ngoài
Ingress Controller này được deploy sử dụng công cụ Helm, ingress controller được define dưới dạng helm-chart
Sau khi deploy thành công
kubectl get svc -n ingress
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEingress-nginx-ingress LoadBalancer 162.20.82.39 a59b780dsd2142ff9fdf22cfdf3626-165433227.us-east-2.elb.amazonaws.com 80:32357/TCP,443:30180/TCP 23d
Tạo một record DNS CNAME trên route53 để point vào LB trên để user có thể truy cập vào spinnaker qua domain kiểu như traxanh-spinnaker.mtp.com
helm repo add stable https://kubernetes-charts.storage.googleapis.com/
helm install spinnaker stable/spinnaker [-f values.yaml]
Tương tự, kĩ sư MTP deploy spinnaker lên EKS cluster trên bằng công cụ helm chart
Sau khi deploy thành công, các service của Spinnaker được deploy dưới dạng k8s pod running như ở dưới
Khi được launch lên, mặc định các spinnaker services sử dụng self-signed SSL để communication với nhau. Do đó để đảm bảo bảo mật cần phải enable SSL và configure các service này sử dụng cert SSL riêng
Để config spinnaker, kĩ sư MTP sử dụng công cụ Halyard,
Access vào halyard spinnaker, toàn bộ thông tin configuration của spinnaker được lưu ở thư mục .hal
enable SSL các file yaml nằm trong thư mục này
ssl:
enabled: trueenabledProtocols:- TLSv1.2
– TLSv1.2
KeyStore và truststore
keyStore: /pkcs12/keystore.p12
keyStorePassword: xxxxkeyStoreType: PKCS12trustStore: /etc/ssl/certs/java/cacerts
keyStore được generate từ key và cert của công ty
Tiếp theo cần configure để Spinnaker có thể làm việc được với Jenkins, muốn biết các kĩ sư MTP làm thế nào đón đọc phần sau
0 Nhận xét