מפת ה-credentials
שלושה כללים
Section titled “שלושה כללים”- מי שכותב אינו מי שקורא. CI כותב ל-gitops; Argo רק קורא. token דלוף של Argo לא יכול לשנות את המצב הרצוי.
- אותה group אינה הרשאה. חברות ב-group לא נותנת גישה ל-repo; כל identity צריך להיות member בפרויקט.
- שתי שכבות בלתי-תלויות:
role(פר project, ב-Members) ו-scope(פר token, נבחר ביצירה). שניהם חייבים לאפשר.
| # | Actor | צריך | Credential / identity | scope / role | איפה חי (לעולם לא ב-Git) | מה נשבר אם שגוי |
|---|---|---|---|---|---|---|
| 1 | job publish ב-CI | push של images | CI_REGISTRY_USER / CI_REGISTRY_PASSWORD (job token) | אוטומטי, מת עם ה-job | משתנה מוגדר-מראש, לא יוצרים כלום | denied: access forbidden (חסר docker login) |
| 2 | job promote ב-CI | לקרוא trident-ci, לכתוב trident-gitops | TRIDENT_GIT_TOKEN (service account / PAT; access token בתשלום) | write_repository (כולל קריאה) ל-gitops; role Developer על gitops, Reporter על trident-ci | משתנה group CI/CD, Mask, בלי Protect אם ה-job רץ על branch לא מוגן | push נכשל 403; מצב Protect על dev: token ריק |
| 3 | GitLab (include:) | לקרוא את YAML של trident-ci | הגישה של המשתמש שהפעיל | member ב-trident-ci | - | /trident-ci not found (חסר TRIDENT_GROUP) |
| 4 | Argo | לקרוא trident-gitops | identity לקריאה בלבד (deploy token / service account) | read_repository; Reporter | קבצי username/token ב-VM, Secret ב-namespace argocd | repository not found, HTTP Basic: Access denied |
| 5 | Argo | לקרוא trident-templates | identity לקריאה בלבד | read_repository; Reporter | Secret נפרד ב-argocd | ComparisonError, Unknown |
| 6 | kubelet בכל env | למשוך images | deploy token על trident-source | read_registry בלבד | Secret kubernetes.io/dockerconfigjson בכל namespace + imagePullSecrets | ImagePullBackOff |
| 7 | ה-runner | להריץ jobs | registration token glrt- | project runner (group runner אם הכפתור קיים; בתרגול ב-Free חסר); tag נכון | /etc/gitlab-runner/config.toml ב-VM | job תקוע, no runner for tags |
| 8 | Postgres + signal-processor | סיסמת DB | קובץ סיסמה לכל env | - | Secret generic, מפתח postgres_password, מותקן כקובץ בתת-תיקייה (/run/secrets/<APP_DIR>) | Pod ב-CrashLoopBackOff / read-only file system |
| 9 | Grafana | admin | קבצי credentials | - | Secret admin ב-<NS> של observability | Grafana לא עולה |
| 10 | Ingress | TLS | CA + cert לכל host | - | Secret tls בכל namespace | cert שגוי / 404 |
נקודות שנשברות
Section titled “נקודות שנשברות”- Secret הוא per namespace. Pod משתמש רק ב-Secrets של ה-namespace שלו. "עובד ב-dev ולא ב-staging" = חפש מה שונה (ה-namespace).
- שני סוגי Secrets: (A) ש-Argo קורא איתם Git (ב-
argocd); (B) ש-Pods צריכים (pull, סיסמה, TLS), שחייבים להיות קיימים לפני ש-Argo עושה sync. - repo Secret:
urlחייב להיות כתובת ה-repo האמיתית, זהה byte-ב-byte ל-repoURLב-Application. שני repos = שני Secrets, גם אם ה-credential משותף. - kubelet, לא kubectl: מי שמושך את ה-image הוא ה-kubelet של ה-node, עם deploy token.
- ה-registry יושב על
trident-source. ל-gitops לא נדחפים images. - Mask ≠ Protect. Mask מסתיר את הערך בלוגים; Protect מגביל את המשתנה ל-branches מוגנים.
איך מוודאים credential
Section titled “איך מוודאים credential”git ls-remote https://oauth2:$(cat <TOKEN_FILE>)@<GITLAB_HOST>/<GROUP>/<REPO>.git HEADאיך מוודאים: פלט עם <SHA> ו-HEAD = ה-token קורא. HTTP Basic: Access denied = identity לא member או scope חסר.
המשך: הסימפטומים לפי שכבה · Argo operate.