שילוב עם תשתית קיימת

במאמר הזה נסביר איך להגדיר ענן וירטואלי פרטי (VPC) קיים ב-AWS עם תת-רשתות ציבוריות ופרטיות, ולהריץ את anthos-gke כדי להשלים את ההתקנה של שירות ניהול.

לפני שמתחילים

כדי לבצע את השלבים הבאים, תצטרכו:

  • הרשאות AWS IAM כפי שמתואר בדרישות.

  • ענן וירטואלי פרטי קיים ב-AWS עם:

    מידע נוסף על הגדרת AWS VPC זמין במאמר בנושא VPC עם תת-רשתות ציבוריות ופרטיות.

  • מזהי רשתות המשנה הציבוריות והפרטיות של ה-VPC הקיים. לדוגמה, subnet-1234567890abcdefg.

  • בגרסאות אשכול 1.20 ומטה, נדרשת קבוצת אבטחה של AWS שמאפשרת כניסה של SSH (יציאה 22) מקבוצות האבטחה או מטווח כתובות ה-IP שבהן תנהלו את ההתקנה של GKE ב-AWS.

  • בגרסאות של אשכולות 1.21 ומעלה, קבוצת אבטחה של AWS שמאפשרת חיבורים של Konnectivity (יציאה 8132) יוצאים מטווח כתובות ה-IP של ה-VPC שבו נמצאים מאגרי הצמתים של GKE ב-AWS.

יצירת סביבת העבודה

  1. יוצרים קובץ בשם anthos-gke.yaml בכלי לעריכת טקסט. מדביקים את התוכן הבא בקובץ.

     apiVersion: multicloud.cluster.gke.io/v1
     kind: AWSManagementService
     metadata:
       name: management
     spec:
       version: aws-1.14.1-gke.0
       region: AWS_REGION
       authentication:
         awsIAM:
           adminIdentityARNs:
           - ADMIN_AWS_IAM_ARN
       kmsKeyARN: KMS_KEY_ARN
       databaseEncryption:
         kmsKeyARN: DATABASE_KMS_KEY_ARN
       securityGroupIDs:
       - SECURITY_GROUP_IDS
       googleCloud:
         projectID: GCP_PROJECT_ID
         serviceAccountKeys:
           managementService: MANAGEMENT_KEY_PATH
           connectAgent: HUB_KEY_PATH
           node: NODE_KEY_PATH
       existingVPC:
         subnetID: VPC_SUBNET_ID
         allowedSSHSecurityGroupIDs:
         - SSH_SECURITY_GROUP
       # Optional fields
       rootVolume:
         sizeGiB: ROOT_VOLUME_SIZE
         volumeType: ROOT_VOLUME_TYPE
         iops: ROOT_VOLUME_IOPS
         kmsKeyARN: ROOT_VOLUME_KEY
       bastionHost:
         subnetID: BASTION_HOST_SUBNET_ID
         allowedSSHCIDRBlocks:
         - SSH_CIDR_BLOCK
         rootVolume: # Optional
           kmsKeyARN: BASTION_VOLUME_KEY
       proxy: PROXY_JSON_FILE
    

    מחליפים את הערכים הבאים:

    • AWS_REGION עם האזור ב-AWS שבו רוצים להריץ את האשכול.
    • ADMIN_AWS_IAM_ARN עם שם משאב Amazon של מפתח AWS IAM של האדמין.
    • KMS_KEY_ARN עם שם משאב Amazon של מפתח AWS KMS שמאבטח את הנתונים של שירות הניהול כששירות הניהול נוצר.
    • DATABASE_KMS_KEY_ARN עם שם משאב Amazon של מפתח AWS KMS שמאבטח את מסדי הנתונים של etcd.
    • SECURITY_GROUP_IDS עם מזהים נוספים של קבוצות אבטחה שמורשים לגשת למכונות הווירטואליות של שירות הניהול.
    • GCP_PROJECT_ID עם Google Cloud הפרויקט שמארח את סביבת GKE ב-AWS.
    • MANAGEMENT_KEY_PATH עם המיקום של Google Cloudמפתח חשבון השירות לניהול.
    • HUB_KEY_PATH עם המיקום של Google Cloud Connect מפתח חשבון השירות.
    • NODE_KEY_PATH עם המיקום של מפתח חשבון השירות של הצומת GKE ב-AWS.
    • VPC_SUBNET_ID במזהה רשת המשנה שבה פועל שירות הניהול.
    • SSH_SECURITY_GROUP עם רשימת מזהי קבוצות האבטחה שמורשות גישת SSH במופעים של שירות הניהול.

    אופציונלי: אם רוצים להצפין את אמצעי האחסון של שירות הניהול, מחליפים את הערכים הבאים:

    • ROOT_VOLUME_SIZE עם גודל עוצמת הקול בגיגה-בייט עבור שירות הניהול. לדוגמה, 10.
    • ROOT_VOLUME_TYPE עם סוג הנפח EBS. לדוגמה, gp3.
    • ROOT_VOLUME_IOPS עם הנפח של פעולות הקלט/פלט שהוקצו לכל שנייה (IOPS) עבור אמצעי האחסון. ההגדרה תקפה רק אם volumeType הוא GP3. מידע נוסף זמין במאמר בנושא כרכים של SSD לשימוש כללי (gp3).
    • ROOT_VOLUME_KEY עם שם משאב Amazon של מפתח AWS KMS שמצפין את נפחי הבסיס של מופע שירות הניהול. מידע נוסף מופיע במאמר בנושא שימוש במפתח CMK בניהול הלקוח להצפנת אמצעי אחסון.

    אופציונלי: אם רוצים ליצור יעד מבוצר (bastion host) כדי לגשת לסביבת GKE ב-AWS באמצעות מנהרת SSH, מחליפים את הערכים הבאים:

    • BASTION_HOST_SUBNET_ID במזהה רשת המשנה שבה פועל שרת הבסטיון. מוודאים ש-VPC_SUBNET_ID מאפשר חיבורים נכנסים מ-BASTION_HOST_SUBNET_ID.
    • SSH_CIDR_BLOCK עם בלוק ה-CIDR שממנו מארח ה-bastion מאפשר חיבור SSH נכנס. לדוגמה: 203.0.113.0/24. אם רוצים לאפשר SSH מכל כתובת IP, משתמשים ב-0.0.0.0/0.
    • BASTION_VOLUME_KEY עם שם משאב Amazon של מפתח AWS KMS שמאבטח את נפח הבסיס של ה-bastion.

    אופציונלי: אם רוצים תעבורה ישירה דרך פרוקסי HTTP, מחליפים את הערך הבא:

  2. מריצים את הפקודה anthos-gke aws management init כדי ליצור קובצי תצורה:

    anthos-gke aws management init
    
  3. מריצים את הפקודה anthos-gke aws management apply כדי ליצור את האשכול.

    anthos-gke aws management apply
    

    יכול להיות שיחלפו עד עשר דקות עד שהפקודה anthos-gke aws management apply תושלם. כשהתהליך של anthos-gke יסתיים, שירות הניהול יפעל ב-AWS.

תיוג של רשתות המשנה בשם האשכול

אם אתם משתמשים בתתי-רשתות קיימות של AWS עם GKE ב-AWS ורוצים ליצור מאזני עומסים, אתם צריכים לתייג את ה-VPC ואת תתי-הרשתות בשם של שירות הניהול שלכם. אם יצרתם את ה-VPC באמצעות anthos-gke או שכבר תייגתם את תת-הרשתות, אתם יכולים לדלג על השלב הזה.

כדי לתייג את רשתות המשנה:

  1. עוברים לספרייה עם ההגדרה של GKE ב-AWS. יצרתם את הספרייה הזו כשהתקנתם את שירות הניהול.

    cd anthos-aws

  2. מייצאים את מזהה האשכול בתור משתנה הסביבה $CLUSTER-ID. בוחרים את הגרסה של Terraform ומריצים את הפקודות הבאות:

    ‫Terraform 0.12, ‏ 0.13

    export CLUSTER_ID=$(terraform output cluster_id)
    

    ‫Terraform 0.14.3 ואילך

    export CLUSTER_ID=$(terraform output -raw cluster_id)
    
  3. מייצאים את מזהה ה-VPC ב-AWS כמשתנה הסביבה $VPC_ID. בוחרים את הגרסה של Terraform ומריצים את הפקודות הבאות:

    ‫Terraform 0.12, ‏ 0.13

    export VPC_ID=$(terraform output vpc_id)
    

    ‫Terraform 0.14.3 ואילך

    export VPC_ID=$(terraform output -raw vpc_id)
    
  4. אפשר לקבל את המזהים של תת-הרשתות הפרטיות באמצעות כלי ה-CLI‏ aws.

      aws ec2 describe-subnets \
          --filters "Name=vpc-id,Values=$VPC_ID" "Name=tag:Name,Values=*private*" \
          --query "Subnets[*].SubnetId" \
          --output text
    
  5. מתייגים את רשתות המשנה באמצעות מזהה האשכול. מריצים את הפקודה הבאה לכל אחת מרשתות המשנה.

      aws ec2 create-tags \
          --resources SUBNET_IDS \
          --tags Key=gke:multicloud:cluster-id,Value=$CLUSTER_ID
    

    מחליפים את SUBNET_IDS ברשימה של מזהי רשתות המשנה, מופרדים ברווחים. לדוגמה, subnet-012345678abcdef subnet-abcdef123456789 subnet-123456789abcdef.

מתבצעת התחברות לשירות הניהול

בקטע הזה, אתם יוצרים קישור לשירות הניהול שלכם. אפשר להשתמש ביעד מבוצר (bastion host) כדי להעביר את הפקודות בטנלינג. אם יש לכם חיבור ישיר ל-AWS VPC, דלגו אל יצירת פרטי כניסה וחיבור.

התחברות ליעד מבוצר (bastion host)

אם אתם משתמשים ביעד מבוצר (bastion host) כדי להגדיר את מנהרת ה-SSH, קודם צריך להגדיר את המארח ב-anthos-gke.yaml. לאחר מכן, יוצרים סקריפט כדי לפתוח את המנהרה, כך:

  1. משתמשים ב-terraform כדי ליצור סקריפט שפותח מנהרת SSH למארח bastion.

    terraform output bastion_tunnel > bastion-tunnel.sh
    chmod 755 bastion-tunnel.sh
    

    ‫Terraform יוצר סקריפט bastion-tunnel.sh שמשתמש במפתח ה-SSH של שרת הבסטיון (~/.ssh/anthos-gke).

  2. כדי לפתוח את המנהרה, מריצים את הסקריפט bastion-tunnel.sh. המנהרה מעבירה את הנתונים מ-localhost:8118 ליעד המבוצר (bastion host).

    כדי לפתוח מנהרה ליעד המבוצר (bastion host), מריצים את הפקודה הבאה:

    ./bastion-tunnel.sh -N
    

    ההודעות ממנהרת ה-SSH מופיעות בחלון הזה. כשמוכנים לסגור את החיבור, מפסיקים את התהליך באמצעות Control+C או סוגרים את החלון.

  3. עוברים לספרייה עם ההגדרה של GKE ב-AWS.

    cd anthos-aws

יצירת פרטי כניסה וחיבור

במסמכי התיעוד של GKE ב-AWS מניחים שאתם משתמשים במנהרת SSH ביציאה localhost 8118 כדי לגשת לאשכול. אם אתם משתמשים בסוג אחר של חיבור ל-VPC, כמו חיבור ישיר, VPN או שיטה אחרת, אתם יכולים להסיר את השורה env HTTP_PROXY=http://localhost:8118 מהפקודות.

  1. יצירת kubeconfig לאימות. משתמשים ב-anthos-gke כדי לצרף פרטי כניסה להגדרה שמאוחסנת ב-~/.kube/config.

    anthos-gke aws management get-credentials
    
  2. מוודאים שאפשר להתחבר לשירות הניהול באמצעות kubectl.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl cluster-info
    

    kubectl מדפיס את הסטטוס של האשכול.

המאמרים הבאים