Series ngắn về cách sử dụng ArgoCD:
- Getting Started
- Core concepts
- Private Repo
- ArgoCD Architecture
- Work with Helm
- Work with Kustomize
- Resource hooks
- Secret Management with GitOps
- Application Set
- Multi Cluster
- Enterprise features (SSO)
Các công ty thường để Git Repository ở dạng Private. Bài này hướng dẫn cách kết nối ArgoCD tới Git Private Repo.
Chuẩn bị
Tạo một Github Repo ở dạng Private để chứa cấu hình của Microservice Book Info. Để ArgoCD kết nối tới Private Repo, ta sử dụng Repositories. Trên UI của ArgoCD truy cập Settings → Repositories:
Bấm vào + CONNECT REPO
Hai cách phổ biến để tạo kết nối là:
- HTTPS (Username/Password hoặc Access Token)
- SSH Private Key
Ta chọn loại HTTPS và nhập như bên dưới:
Thay vì nhập trực tiếp username và password của tài khoản GitHub, để bảo mật hơn, ta sẽ tạo Access Token. Truy cập đường dẫn https://github.com/settings/tokens. Ở mục Generate new token, chọn Generate new token (classic):
Tick vào mục repo:
Bấm Create và sao chép lại Token được tạo ra.
Quay lại UI của ArgoCD. Điền vào Username là git và Password là Token ta tạo:
Bấm Connect. Nếu CONNECTION STATUS hiện Successful thì kết nối đã được tạo thành công.
Tạo Repositories bằng CLI
Chạy câu lệnh sau:
argocd repo add https://github.com/hoalongnatsu/private-microservice-book-info --username git --password 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
Tạo Repositories bằng Secret
Theo chuẩn GitOps, mọi thứ liên quan đến hạ tầng cần được lưu trữ trên Git, bao gồm cả Repositories. Việc tạo Repositories bằng Secret là phương pháp chuyên nghiệp hơn so với hai cách trên, đặc biệt khi dự án có thể có hàng chục Repositories cho các Private Repo khác nhau. Để tạo Secret dạng Repositories, cần lưu ý hai điểm quan trọng:
- Secret phải nằm trong cùng namespace với ArgoCD
- Labels cần có giá trị
argocd.argoproj.io/secret-type: repository
Dưới đây là cấu trúc tệp YAML để tạo Repositories bằng Secret:
apiVersion: v1
kind: Secret
metadata:
name: private-repo
namespace: argocd
labels:
argocd.argoproj.io/secret-type: repository
stringData:
type: git
url: https://github.com/hoalongnatsu/private-microservice-book-info
password: git
username: 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
Khi làm thực tế, ta không lưu Secret dạng plain text như trên mà cần dùng ExternalSecret. Ví dụ với Secret lưu trên AWS Secrets Manager:
apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
name: private-repo
spec:
secretStoreRef:
name: aws
kind: ClusterSecretStore
target:
name: private-repo
creationPolicy: Owner
template:
type: Opaque
metadata:
labels:
argocd.argoproj.io/secret-type: repository
data:
- secretKey: username
remoteRef:
key: aws/git/application-argo
property: username
- secretKey: password
remoteRef:
key: aws/git/application-argo
property: password
- secretKey: url
remoteRef:
key: aws/git/application-argo
property: repository
Chi tiết tham khảo Secret Management.
Tạo Microservice Book Info với Private Repo
Tạo tệp tin apps.yaml
chứa cấu hình Application cho ứng dụng Book Info:
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: bookinfo-details
namespace: argocd
spec:
project: default
source:
repoURL: 'https://github.com/hoalongnatsu/private-microservice-book-info'
targetRevision: HEAD
path: '01/details'
destination:
server: 'https://kubernetes.default.svc'
namespace: default
syncPolicy:
automated:
prune: true
selfHeal: true
---
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: bookinfo-products
namespace: argocd
spec:
project: default
source:
repoURL: 'https://github.com/hoalongnatsu/private-microservice-book-info'
targetRevision: HEAD
path: '01/products'
destination:
server: 'https://kubernetes.default.svc'
namespace: default
syncPolicy:
automated:
prune: true
selfHeal: true
---
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: bookinfo-ratings
namespace: argocd
spec:
project: default
source:
repoURL: 'https://github.com/hoalongnatsu/private-microservice-book-info'
targetRevision: HEAD
path: '01/ratings'
destination:
server: 'https://kubernetes.default.svc'
namespace: default
syncPolicy:
automated:
prune: true
selfHeal: true
---
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: bookinfo-reviews
namespace: argocd
spec:
project: default
source:
repoURL: 'https://github.com/hoalongnatsu/private-microservice-book-info'
targetRevision: HEAD
path: '01/reviews'
destination:
server: 'https://kubernetes.default.svc'
namespace: default
syncPolicy:
automated:
prune: true
selfHeal: true
Chạy câu lệnh apply:
kubectl apply -f apps.yaml
Kiểm tra ArgoCD tạo Application:
Nếu Status của toàn bộ là Healthy thì ta kết nối ArgoCD tới Private Repo thành công. Bài tiếp theo ta sẽ tìm hiểu về ArgoCD Architecture.
Điểm hẹn ngân hàng số Vikki by HDBank
Loạt bài viết ngắn chia sẻ về kiến trúc hạ tầng của hệ thống ngân hàng trên Cloud (AWS). Đây chỉ là những kiến thức mình học được thông qua sản phẩm NGÂN HÀNG SỐ VIKKI của bên mình, nên kiến trúc có thể phù hợp và không phù hợp với doanh nghiệp của các bạn.
- AWS Account Management
- Provisioning Infrastructure for Multi AWS Accounts
- Networking for Multi AWS Accounts
- Kubernetes for Multi AWS Accounts: Kubernetes Infrastructure for Scale
- Kubernetes for Multi AWS Accounts: Kubernetes Cross Cluster Communication
- Chaos Engineering
- On-call
- Core Banking on Cloud
- Security Consider