ตั้งค่า Argo CD กับ Private Git Repository ผ่าน SSH Key และ HTTPS

ในยุคของ 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:

  1. เข้าไป Settings → Deploy keys
  2. คลิก “Add deploy key”
  3. วาง Public Key ที่สร้างไว้
  4. ตั้งชื่อให้กับ Key
  5. คลิก “Add key”

สำหรับ GitLab:

  1. ไปที่ Project → Settings → Repository
  2. ค้นหา “Deploy Keys” section
  3. คลิก “Add deploy key”
  4. วาง 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:

  1. ไปที่ Settings → Developer settings → Personal access tokens
  2. คลิก “Generate new token”
  3. เลือก Scope: repo
  4. คลิก “Generate token”
  5. คัดลอก 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 ได้อย่างเต็มที่