פריסת עומסי עבודה של קונטיינרים

בדף הזה מתואר תהליך ההעלאה של קובץ אימג' של קונטיינר אל Harbor, ופריסת קובץ האימג' הזה במופע של GDC Sandbox.

הכנה

  1. פועלים לפי ההוראות במאמר חיבור למכונה כדי להתחבר למכונה עם גישה לשורת הפקודה של Linux. אפשר להתחבר לשער באמצעות Remote Desktop, או להריץ את הפקודה sshuttle במחשב Linux.

  2. צריך לבקש מאדמין ה-IAM בארגון להקצות לכם את התפקידים הבאים ברמת הפרויקט:

    • אדמין של סודות (secret-admin): נדרש כדי להפעיל במסוף GDC.
    • אדמין במרחב שמות (namepspace-admin): נדרש לפריסת עומסי עבודה של קונטיינרים בפרויקט.
    • אדמין PNP גלובלי (global-project-networkpolicy-admin): נדרש כדי ליצור ולנהל מדיניות רשת של פרויקטים באזורים שונים.
    • תפקיד הצפייה בפרויקט (project-viewer): נדרש כדי לגשת למסוף GDC ול-CLI של Distributed Cloud.
    • ‫Harbor Instance Viewer (harbor-instance-viewer): נדרש כדי להציג ולבחור מופע של Harbor.
    • יצירת פרויקטים ב-Harbor‏ (harbor-project-creator): נדרשת כדי לגשת לפרויקט ב-Harbor ולנהל אותו.
  3. מגדירים משתני סביבה שישמשו בהוראות הבאות:

    export TENANT_PROJECT=TENANT_PROJECT # Intended deployment project for the container workflow.
    export HARBOR_INSTANCE_NAME=HARBOR_INSTANCE_NAME # Harbor Container Registry instance name.
    export HARBOR_PROJECT=HARBOR_PROJECT # Container registry project name for your images.
    export AO_USER=AO_USER # Your user name in the instance, e.g.: fop-my-user@example.com.
    export INSTANCE_URL=${HARBOR_INSTANCE_NAME}-${TENANT_PROJECT}.org-1.zone1.google.gdch.test.
    export DOCKER_CONFIG_PATH=DOCKER_CONFIG_PATH # Path to docker config file e.g.: /root/.docker/config.json.
    
  4. כדי ליצור מופע של מאגר Harbor, פועלים לפי ההוראות במאמר יצירת מופע של מאגר Harbor. לחלופין, אפשר להשתמש במופע Harbor של ארגז החול שנוצר מראש: מופע Harbor שמוגדר כברירת מחדל, user-project, כבר פרוס בארגז החול של GDC, user-haas-instance, ואפשר להשתמש בו לפיתוח.

    export HARBOR_INSTANCE_NAME=user-haas-instance
    export TENANT_PROJECT=user-project
    export INSTANCE_URL=${HARBOR_INSTANCE_NAME}-${TENANT_PROJECT}.org-1.zone1.google.gdch.test
    

העלאת תמונה ל-Harbor

  1. יוצרים פרויקט ב-Harbor לפי ההוראות במאמר יצירת פרויקט ב-Harbor.

    דוגמה:

    gdcloud harbor harbor-projects create HARBOR_PROJECT  \
    --project=TENANT_PROJECT \
    --instance=HARBOR_INSTANCE_NAME
    
  2. נכנסים ל-Docker. מתחילים בכניסה ל-Docker או ל-Helm באמצעות סודות של CLI.

  3. מורידים או יוצרים את קובץ האימג' של הקונטיינר ופועלים לפי ההוראות של Google Distributed Cloud במודל Air-gapped כדי לדחוף קובץ אימג' ולדחוף אותו ל-Harbor.

    לדוגמה, הנה תהליך עבודה לשליפה מ-Gitlab ולדחיפה אל Harbor:

    1. נכנסים ומושכים ממאגר הקונטיינרים של Gitlab.

      export GITLAB_ID=GITLAB_ID
      export GITLAB_PROJECT_NAME=GITLAB_PROJECT_NAME
      export GITLAB_IMAGE_PATH=registry.gitlab.com/GITLAB_ID/GITLAB_PROJECT_NAME
      docker login registry.gitlab.com
      docker pull ${GITLAB_IMAGE_PATH}
      
    2. מעבירים את תמונת Gitlab אל Harbor:

      export TAG=demo-image
      docker tag ${TAG} ${GITLAB_IMAGE_PATH}
      docker push ${INSTANCE_URL}/${HARBOR_PROJECT}/${TAG}
      

פריסת אפליקציית קונטיינר

כדי ליצור סוד ולפרוס את האפליקציה, ממשיכים אל יצירת סוד למשיכת תמונות ב-Kubernetes.

יצירת מדיניות רשת

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

    kubectl --kubeconfig GLOBAL_API_KUBECONFIG -n TENANT_PROJECT \
    create -f - <<EOF
    apiVersion: networking.gdc.goog/v1
    kind: ProjectNetworkPolicy
    metadata:
      annotations:
      name: allow-all
    spec:
      ingress:
      - from:
        - ipBlock:
            cidr: 0.0.0.0/0
      podSelector: {}
      policyTypes:
      - Ingress
    EOF
    

התחברות לאפליקציה

  1. מייצאים את כתובת ה-IP של השירות:

    export IP=`kubectl --kubeconfig=${KUBECONFIG} get service ${SERVICE_NAME} \
          -n TENANT_PROJECT -o jsonpath='{.status.loadBalancer.ingress[*].ip}'`
    
  2. כדי להתחבר מהמכונה המקומית באמצעות sshuttle, מריצים את הפקודה הבאה כדי ליצור מנהרת SSH. אם יש לכם סשן קיים של sshuttle שיצרתם כשחיברתם את המופע, אתם צריכים לסיים את הסשן הזה לפני שתריצו את הפקודה הבאה:

      sshuttle -r zone1-org-1-data@GDC_SANDBOX_INSTANCE_NAME --no-latency-control \
      --ssh-cmd 'gcloud compute ssh --project PROJECT_NAME --zone ZONE --tunnel-through-iap' \
      10.200.0.0/16 --dns
    
  3. בודקים את השירות על ידי שליחת בקשת HTTP ‏http://${IP}`‎:

      curl http://${IP}