ในยุคของ DevOps และ GitOps ที่เกิดขึ้นในปัจจุบัน Argo CD ได้กลายเป็นเครื่องมือหลักสำหรับการจัดการและติดตั้งแอปพลิเคชันใน Kubernetes คลัสเตอร์อย่างอัตโนมัติ อย่างไรก็ตาม เมื่อทำการทำงานกับ Git Repository ที่มีการควบคุมการเข้าถึง (Private Repository) คุณต้องตั้งค่าการตรวจสอบสิทธิ์ (Authentication) ให้ถูกต้อง ปัญหาเรื่องการเชื่อมต่อและตรวจสอบสิทธิ์นี้มักจะเป็นความท้าทายที่สำคัญสำหรับทีม DevOps ที่ใช้ Argo CD
เหตุใดจึงต้องใช้ Private Git Repository กับ Argo CD
การใช้ Private Git Repository มีความสำคัญหลายประการในสภาพแวดล้อม Production:
- ความปลอดภัย (Security): ไม่ต้องเปิดเผยรหัสแอปพลิเคชันและข้อมูลสำคัญต่อสาธารณะ
- การควบคุมการเข้าถึง (Access Control): สามารถกำหนดสิทธิ์เข้าถึงได้อย่างละเอียด
- การปฏิบัติตามกฎเกณฑ์ (Compliance): ปฏิบัติตามข้อกำหนด GDPR, PCI-DSS หรือมาตรฐานด้านความปลอดภัยอื่น ๆ
- ความเป็นส่วนตัวขององค์กร: รักษาความเป็นส่วนตัวของกลยุทธ์และสถาปัตยกรรมของบริษัท
เมื่อใช้งาน Argo CD กับ Private Repository บน Kubernetes โดยเฉพาะบน VPS ที่มีประสิทธิภาพสูง คุณต้องตั้งค่าช่องทางการสื่อสารที่ปลอดภัยระหว่าง Argo CD กับ Git Server
วิธีที่ 1: ตั้งค่า Argo CD กับ SSH Key
ขั้นตอนที่ 1: สร้าง SSH Key Pair
ขั้นแรก เราต้องสร้าง SSH Key สำหรับการเชื่อมต่อไปยัง Git Repository:
ssh-keygen -t rsa -b 4096 -f ~/.ssh/argocd_key -N ""
คำสั่งนี้จะสร้างไฟล์ SSH Key ดังนี้:
argocd_key– Private Key (ใช้โดย Argo CD)argocd_key.pub– Public Key (เพิ่มไปยัง Git Repository)
ขั้นตอนที่ 2: เพิ่ม Public Key ไปยัง Git Repository
สำหรับ GitHub:
- เข้าไป Settings → Deploy keys
- คลิก “Add deploy key”
- วาง Public Key ที่สร้างไว้
- ตั้งชื่อให้กับ Key
- คลิก “Add key”
สำหรับ GitLab:
- ไปที่ Project → Settings → Repository
- ค้นหา “Deploy Keys” section
- คลิก “Add deploy key”
- วาง Public Key
ขั้นตอนที่ 3: สร้าง Kubernetes Secret สำหรับ SSH Key
kubectl create secret generic argocd-ssh-creds \
--from-file=ssh-privatekey=~/.ssh/argocd_key \
-n argocd
ขั้นตอนที่ 4: ลงทะเบียน Repository ใน Argo CD
ผ่าน ArgoCD CLI:
argocd repo add [email protected]:username/private-repo.git \
--ssh-private-key-path ~/.ssh/argocd_key \
--insecure-ignore-host-key
หรือผ่าน YAML Manifest:
apiVersion: v1
kind: Secret
metadata:
name: private-repo-credentials
namespace: argocd
labels:
argocd.argoproj.io/secret-type: repository
type: Opaque
stringData:
type: git
url: [email protected]:username/private-repo.git
sshPrivateKey: |
-----BEGIN RSA PRIVATE KEY-----
[ใส่ content ของ private key ที่นี่]
-----END RSA PRIVATE KEY-----
insecureIgnoreHostKey: "true"
ขั้นตอนที่ 5: สร้าง ArgoCD Application
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: my-app
namespace: argocd
spec:
project: default
source:
repoURL: [email protected]:username/private-repo.git
targetRevision: main
path: k8s/
destination:
server: https://kubernetes.default.svc
namespace: default
syncPolicy:
automated:
prune: true
selfHeal: true
วิธีที่ 2: ตั้งค่า Argo CD กับ HTTPS และ Personal Access Token
ขั้นตอนที่ 1: สร้าง Personal Access Token
สำหรับ GitHub:
- ไปที่ Settings → Developer settings → Personal access tokens
- คลิก “Generate new token”
- เลือก Scope:
repo - คลิก “Generate token”
- คัดลอก Token ที่สร้างขึ้น
ขั้นตอนที่ 2: สร้าง Kubernetes Secret สำหรับ HTTPS
kubectl create secret generic argocd-https-creds \
--from-literal=username=github-username \
--from-literal=password=ghp_your_personal_access_token \
-n argocd
หรือใช้ YAML Manifest:
apiVersion: v1
kind: Secret
metadata:
name: private-repo-https
namespace: argocd
labels:
argocd.argoproj.io/secret-type: repository
type: Opaque
stringData:
type: git
url: https://github.com/username/private-repo.git
username: github-username
password: ghp_your_personal_access_token
ขั้นตอนที่ 3: ลงทะเบียน Repository ใน Argo CD
argocd repo add https://github.com/username/private-repo.git \
--username github-username \
--password ghp_your_personal_access_token
เปรียบเทียบ SSH Key กับ HTTPS
| ลักษณะ | SSH Key | HTTPS + PAT |
|---|---|---|
| ความปลอดภัย | สูง – Public Key Cryptography | สูง – Token จำกัดขอบเขตได้ |
| การตั้งค่า | ต้องสร้าง Key และ Deploy Key | ง่ายกว่า – สร้าง Token |
| Firewall | อาจถูกบล็อก Port 22 | Port 443 – ไม่ค่อยถูกบล็อก |
แนวปฏิบัติด้านความปลอดภัย
1. ใช้ Credentials ที่มีสิทธิ์อย่างจำกัด
ไม่ควรใช้ Personal Access Token ของบัญชีที่มีสิทธิ์สูง ควรสร้างบัญชีสำหรับ Argo CD เท่านั้น
2. เข้ารหัส Secrets ใน etcd
kubectl get secrets -A -o json | grep "k8s.io/config/hash"
3. ควบคุมการเข้าถึง RBAC
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: argocd-repo-secrets-viewer
namespace: argocd
rules:
- apiGroups: [""]
resources: ["secrets"]
verbs: ["get", "list"]
4. เปิดใช้งาน SSH Host Key Verification
ssh-keyscan github.com >> ~/.ssh/known_hosts
5. หมุนเวียน Credentials เป็นระยะ
ตั้งกำหนดเวลาสำหรับการสร้าง Token ใหม่ทุก 90 วัน
การแก้ไขปัญหา Authentication Errors
ปัญหา: “Permission denied (publickey)”
kubectl get secret private-repo-ssh -n argocd -o yaml
ปัญหา: “Failed to authenticate”
curl -u username:ghp_token https://github.com/api/v3/user
ปัญหา: “Host key verification failed”
kubectl exec -it deployment/argocd-repo-server -n argocd -- cat ~/.ssh/known_hosts
การผสมผสาน Argo CD กับ VPS
เมื่อคุณใช้ VPS เพื่อรันคลัสเตอร์ Kubernetes ของคุณ สามารถรวมกับ Argo CD ได้อย่างราบรื่น:
- ประสิทธิภาพสูง: VPS มีประสิทธิภาพและเสถียรภาพสูง เหมาะสำหรับรัน Kubernetes Production
- ความปลอดภัย: มี Network Isolation และ Security Features ที่ดี
- ความยืดหยุ่น: สามารถปรับขนาด (Scale) ได้ตามต้องการ
บทสรุป
การตั้งค่า Argo CD กับ Private Git Repository ต้องการความเอาใจใส่ต่อรายละเอียดด้านความปลอดภัย ไม่ว่าคุณจะเลือก SSH Key หรือ HTTPS ด้วย Personal Access Token สิ่งสำคัญคือเลือกวิธีการที่เหมาะสม ปฏิบัติตามแนวปฏิบัติด้านความปลอดภัย และทดสอบการเชื่อมต่ออย่างทั่วถึง หากต้องการสภาพแวดล้อม Kubernetes ที่ปลอดภัยและเสถียร ลองใช้บริการ VPS ซึ่งรองรับการตั้งค่า Argo CD ได้อย่างเต็มที่

