הגדרה של מאגר פרטי של קונטיינרים

בדף הזה מוסבר איך להגדיר שרת רישום קונטיינרים קיים ל-Google Distributed Cloud (תוכנה בלבד) ל-VMware.

הדף הזה מיועד לאדמינים, לארכיטקטים ולמפעילים שמגדירים, מנטרים ומנהלים את התשתית הטכנולוגית. מידע נוסף על תפקידים נפוצים ומשימות לדוגמה שאנחנו מתייחסים אליהם בתוכן זמין במאמר תפקידים נפוצים של משתמשי GKE ומשימות. Google Cloud

סקירה כללית

כברירת מחדל, במהלך יצירה או שדרוג של אשכול, Google Distributed Cloud מושך תמונות מערכת מ-gcr.io/gke-on-prem-release באמצעות חשבון השירות של רכיב הגישה. אופציונלי: אתם יכולים לספק שרת רישום קונטיינרים משלכם, כדי שתמונות המערכת יימשכו משרת הרישום הפרטי שלכם במקום זאת.

‫Google Distributed Cloud לא תומך במאגרי תמונות של קונטיינרים לא מאובטחים. כשמפעילים את שרת רישום המאגרים, צריך לספק אישור ומפתח. האישור יכול להיות חתום על ידי רשות ציבורית שמנפיקה אישורים (CA), או שהוא יכול להיות חתום על עצמו.

יצירת שרת של Container Registry

במאמר הפעלת מאגר נתונים שנגיש מבחוץ במסמכי התיעוד של Docker מוסבר איך ליצור שרת של מאגר נתונים.

הגדרת ה-Registry

כדי להשתמש במאגר פרטי של קונטיינרים, אפשר להשתמש בכלי gkectlלשליטה בשורת הפקודה או ב-Terraform.

gkectl

  1. מוסיפים את הקטע privateRegistry לקובץ התצורה של אשכול הניהול לפני שיוצרים את האשכול.

    כשממלאים את הקטע הזה:

    • כשמריצים את הפקודה gkectl prepare לפני יצירה או שדרוג של אשכול, הפקודה מחלצת את התמונות מקובץ ה-tar שצוין בשדה bundlePath בקובץ התצורה של אשכול האדמין, ומעבירה את התמונות לשרת הרישום הפרטי.

    • במהלך יצירה או שדרוג של אשכול, תמונות המערכת נשלפות משרת הרישום הפרטי שלכם.

  2. אם הרשת שלכם נמצאת מאחורי שרת proxy, צריך למלא את הקטע proxy.

Terraform

  1. פועלים לפי השלבים בכרטיסייה Terraform במאמר יצירת אשכול אדמין כדי למלא את קובץ התצורה של אשכול האדמין.

  1. מוסיפים את השורות הבאות לקובץ התצורה של אשכול הניהול:

    private_registry_config {
      address = "ADDRESS"
      ca_cert = "CA_CERT"
    }
    

    מחליפים את מה שכתוב בשדות הבאים:

    • ADDRESS: כתובת ה-IP או שם הדומיין המוגדר במלואו (FQDN) של המכונה שמריצה את המאגר הפרטי.

    • CA_CERT: נתוני אישור ה-CA של המפתח הציבורי, אבל כל השורות החדשות מוחלפות במחרוזת \n.

    1. מריצים את הפקודה הבאה כדי להחליף את השורות החדשות ב-\n:

      awk 'ORS="\\n" {print}' PUBLIC_KEY_PATH
      

      מחליפים את PUBLIC_KEY_PATH בנתיב של המפתח הציבורי.

    2. מעתיקים את הפלט של הפקודה הקודמת ומדביקים אותו במשתנה CA_CERT של placeholder.

  2. אם הרשת שלכם נמצאת מאחורי שרת proxy, צריך להוסיף את הפרטים הבאים:

    proxy {
      url: "PROXY_SERVER_ADDRESS"
      no_proxy: "BYPASS_LIST"
    }
    

    מחליפים את מה שכתוב בשדות הבאים:

    • PROXY_SERVER_ADDRESS: כתובת ה-HTTP של שרת ה-Proxy. צריך לכלול את מספר היציאה גם אם הוא זהה ליציאת ברירת המחדל של הסכימה.

    • BYPASS_LIST: רשימה מופרדת בפסיקים של כתובות IP, טווחי כתובות IP, שמות מארחים ושמות דומיינים שלא צריכים לעבור דרך שרת ה-proxy.

    דוגמה:

    url: "http://my-proxy.example.local:80"
    no_proxy: "192.0.2.0/24,my-host.example.local,198.51.100.0"
    

    כש-Google Distributed Cloud שולח בקשה לאחת מהכתובות, המארחים או הדומיינים האלה, הבקשה עוקפת את שרת ה-proxy ונשלחת ישירות ליעד.

  1. ממשיכים עם השלבים בכרטיסייה Terraform במאמר יצירת אשכול אדמין כדי לאמת את קובץ התצורה והתוכנית של Terraform, ואז יוצרים את אשכול האתחול.

  2. כשמריצים את הפקודה gkectl register bootstrap, gkectl מבקש להזין את שם המשתמש ואז את הסיסמה של הרישום הפרטי.

במהלך יצירת האשכול, תמונות המערכת נמשכות משרת הרישום הפרטי שלכם.

מגבלות בשימוש באשכולות מתקדמים ובחבילה המלאה

יש שני חבילות של Google Distributed Cloud: מלאה ורגילה. כדי לדעת איזו חבילה מותקנת בתחנת העבודה של האדמין, בודקים את השדה bundlePath בקובץ התצורה של אשכול האדמין. אם שם הקובץ מסתיים ב--full, החבילה המלאה נמצאת בתחנת העבודה של האדמין. אם שם הקובץ לא מסתיים ב--full, חבילת ההתקנה הרגילה נמצאת בתחנת העבודה של האדמין.

אם יצרתם את תחנת העבודה לאדמין באמצעות הפקודה gkeadm, הפקודה יוצרת את מכונת ה-VM של תחנת העבודה לאדמין עם החבילה המלאה, ומגדירה את השדה bundlePath בקובץ ההגדרות של אשכול האדמין.

אם advanced cluster מופעל, יש מגבלות על השימוש בחבילה המלאה עם רישום פרטי, באופן הבא:

  • גרסה 1.31: חבילת התכונות המלאה לא נתמכת ברישום פרטי. כדי להשתמש במרשם פרטי באשכול מתקדם:

    1. מורידים את חבילת הגודל הרגיל לתחנת העבודה של האדמין.
    2. מעדכנים את שם הקובץ בשדה bundlePath בקובץ התצורה של אשכול הניהול.
  • גרסה 1.32: השימוש בחבילה המלאה נתמך, אבל הפקודה gkectl prepare שולפת תמונות מ-gcr.io/gke-on-prem-release במקום מקובץ ה-tar. עם זאת, הפקודה מעבירה את התמונות למאגר הפרטי שלכם, כך שתמונות המערכת נשלפות מהמאגר הפרטי במהלך יצירה או שדרוג של אשכול.

ההבדלים בין אשכולות רגילים לאשכולות מתקדמים

יש כמה הבדלים עיקריים בין אשכול מתקדם לבין אשכול רגיל:

  • כשמשתמשים במאגר פרטי, נראה שהתמונות נמשכות מ-gcr.io, ולא משם המארח של המאגר הפרטי. השינוי הזה צפוי, למרות שהתמונות נמשכות בפועל משרת הרישום הפרטי שלכם.
  • שליפות של תמונות משתמשות בפרטי כניסה מקובץ /etc/containerd/config.toml בכל מכונה שמתחברת למאגר הפרטי, במקום בסוד private-registry-creds בתוך האשכול.
  • עבור כל התמונות gcr.io, האשכול מנסה קודם לשלוף ממאגר פרטי. אם התמונה לא נמצאת במאגר הפרטי, המערכת שולפת אותה מ-gcr.io דרך האינטרנט. כדי למנוע את המעבר הזה, צריך להגדיר את noProxy או להשתמש בכללים של חומת האש כדי לחסום את התעבורה של gcr.io.

כדי לוודא שהתמונות נמשכות מהמקור הנכון, אפשר לעיין במאמר אימות התמונות שנמשכות משרת הרישום.

אימות התמונות שנשלפות משרת הרישום

הדרך שבה בודקים שהתמונות נמשכות משרת הרישום תלויה בהגדרה של אשכול מתקדם.

  • אם לא הפעלתם את האפשרות 'אשכול מתקדם', מריצים את הפקודה הבאה:

    kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get pods \
        --all-namespaces -o jsonpath="{.items[*].spec['initContainers', 'containers'][*].image}"
    

    מחליפים את ADMIN_CLUSTER_KUBECONFIG בנתיב של קובץ ה-kubeconfig של אשכול האדמין.

    הפלט של הפקודה הזו מציג את כל התמונות באשכול. אתם יכולים לוודא שכל התמונות ב-Google Distributed Cloud מגיעות משרת הרישום שלכם.

  • אם האפשרות 'אשכול מתקדם' מופעלת, מבצעים את השלבים הבאים:

    כדי לבדוק אם containerd שולף תמונות מהרישום המקומי, בודקים את התוכן של קובץ בשם config.toml, כמו שמוצג בשלבים הבאים:

    1. מתחברים לצומת ובודקים את התוכן של הקובץ /etc/containerd/config.toml.
    2. בודקים את השדה plugins."io.containerd.grpc.v1.cri".registry.mirrors בקובץ config.toml כדי לראות אם שרת הרישום מופיע בשדה endpoint.

      הקטע הבא הוא קטע מקובץ config.toml לדוגמה.

      version = 2
      root = "/var/lib/containerd"
      state = "/run/containerd"
      ...
      [plugins."io.containerd.grpc.v1.cri".registry]
      [plugins."io.containerd.grpc.v1.cri".registry.configs]
      [plugins."io.containerd.grpc.v1.cri".registry.configs."gcr.io"]
      [plugins."io.containerd.grpc.v1.cri".registry.configs."privateregistry2.io".tls]
      ca_file = '/etc/containerd/certs.d/privateregistry2.io/ca.crt'
      [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
      [plugins."io.containerd.grpc.v1.cri".registry.mirrors."gcr.io"]
      endpoint = ["http://privateregistry.io", "http://privateregistry2.io"]
      ...
      
    3. אם המאגר המשוכפל שלכם מופיע בשדה endpoint, המשמעות היא שהצומת שולף תמונות מהמאגר המשוכפל ולא מ-Artifact Registry.