בדף הזה מוסבר איך להגדיר שרת רישום קונטיינרים קיים ל-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
מוסיפים את הקטע
privateRegistryלקובץ התצורה של אשכול הניהול לפני שיוצרים את האשכול.כשממלאים את הקטע הזה:
כשמריצים את הפקודה
gkectl prepareלפני יצירה או שדרוג של אשכול, הפקודה מחלצת את התמונות מקובץ ה-tar שצוין בשדהbundlePathבקובץ התצורה של אשכול האדמין, ומעבירה את התמונות לשרת הרישום הפרטי.במהלך יצירה או שדרוג של אשכול, תמונות המערכת נשלפות משרת הרישום הפרטי שלכם.
אם הרשת שלכם נמצאת מאחורי שרת proxy, צריך למלא את הקטע
proxy.
Terraform
- פועלים לפי השלבים בכרטיסייה Terraform במאמר יצירת אשכול אדמין כדי למלא את קובץ התצורה של אשכול האדמין.
מוסיפים את השורות הבאות לקובץ התצורה של אשכול הניהול:
private_registry_config { address = "ADDRESS" ca_cert = "CA_CERT" }מחליפים את מה שכתוב בשדות הבאים:
ADDRESS: כתובת ה-IP או שם הדומיין המוגדר במלואו (FQDN) של המכונה שמריצה את המאגר הפרטי.
CA_CERT: נתוני אישור ה-CA של המפתח הציבורי, אבל כל השורות החדשות מוחלפות במחרוזת\n.
מריצים את הפקודה הבאה כדי להחליף את השורות החדשות ב-
\n:awk 'ORS="\\n" {print}' PUBLIC_KEY_PATHמחליפים את
PUBLIC_KEY_PATHבנתיב של המפתח הציבורי.מעתיקים את הפלט של הפקודה הקודמת ומדביקים אותו במשתנה
CA_CERTשל placeholder.
אם הרשת שלכם נמצאת מאחורי שרת 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 ונשלחת ישירות ליעד.
ממשיכים עם השלבים בכרטיסייה Terraform במאמר יצירת אשכול אדמין כדי לאמת את קובץ התצורה והתוכנית של Terraform, ואז יוצרים את אשכול האתחול.
כשמריצים את הפקודה
gkectl register bootstrap,gkectlמבקש להזין את שם המשתמש ואז את הסיסמה של הרישום הפרטי.
במהלך יצירת האשכול, תמונות המערכת נמשכות משרת הרישום הפרטי שלכם.
מגבלות בשימוש באשכולות מתקדמים ובחבילה המלאה
יש שני חבילות של Google Distributed Cloud: מלאה ורגילה. כדי לדעת איזו חבילה מותקנת בתחנת העבודה של האדמין, בודקים את השדה bundlePath בקובץ התצורה של אשכול האדמין. אם שם הקובץ מסתיים ב--full, החבילה המלאה נמצאת בתחנת העבודה של האדמין. אם שם הקובץ לא מסתיים ב--full, חבילת ההתקנה הרגילה נמצאת בתחנת העבודה של האדמין.
אם יצרתם את תחנת העבודה לאדמין באמצעות הפקודה gkeadm, הפקודה יוצרת את מכונת ה-VM של תחנת העבודה לאדמין עם החבילה המלאה, ומגדירה את השדה bundlePath בקובץ ההגדרות של אשכול האדמין.
אם advanced cluster מופעל, יש מגבלות על השימוש בחבילה המלאה עם רישום פרטי, באופן הבא:
גרסה 1.31: חבילת התכונות המלאה לא נתמכת ברישום פרטי. כדי להשתמש במרשם פרטי באשכול מתקדם:
- מורידים את חבילת הגודל הרגיל לתחנת העבודה של האדמין.
- מעדכנים את שם הקובץ בשדה
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, כמו שמוצג בשלבים הבאים:- מתחברים לצומת ובודקים את התוכן של הקובץ
/etc/containerd/config.toml. בודקים את השדה
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"] ...אם המאגר המשוכפל שלכם מופיע בשדה
endpoint, המשמעות היא שהצומת שולף תמונות מהמאגר המשוכפל ולא מ-Artifact Registry.
- מתחברים לצומת ובודקים את התוכן של הקובץ