יצירת VPC ב-AWS

‫GKE ב-AWS פועל בענן וירטואלי פרטי (VPC) של AWS. בדף הזה מוסבר איך להגדיר VPC חדש לאשכול.

‫GKE on AWS יוצר ומנהל משאבים בתוך ה-VPC שאתם מציינים. בנוסף, צריך ליצור כמה רשתות משנה בתוך ה-VPC:

  • עד שלוש רשתות משנה לצמתים של מישור הבקרה
  • רשת משנה למאגר הצמתים
  • רשתות משנה למאזני עומסים של שירות Kubernetes

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

VPC לדוגמה

כדי להגדיר את ה-VPC שמוצג בהמשך, מבצעים את השלבים הבאים. למקרי שימוש משלכם בסביבת ייצור, אתם יכולים לבחור טווחי כתובות IP שונים, אזורי זמינות, רשתות משנה ורשימות בקרת גישה לרשת שמתאימים לעומסי העבודה שלכם.

הדיאגרמה הבאה מציגה את ה-VPC לדוגמה שיוצרים כשמבצעים את השלבים האלה:

VPC לדוגמה

  • בדוגמה הזו נעשה שימוש בשלושה אזורי זמינות – אזור זמינות 1, אזור זמינות 2 ואזור זמינות 3. לדוגמה, כדי ליצור VPC באזור us-east-1, אפשר להגדיר את הערכים האלה ל-us-east-1a, us-east-1b, us-east-1c.

  • בכל אחד משלושת אזורי הזמינות יש רשת משנה ציבורית אחת ורשת משנה פרטית אחת.

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

  • תת-רשתות ציבוריות מספקות גישה לאינטרנט למכונות בתת-רשתות פרטיות ולנקודות קצה (endpoints) של מאזני עומס ציבוריים.

  • כל רשתות המשנה האלה מתויגות לזיהוי אוטומטי של רשתות משנה. מאזני עומסים פנימיים יוקצו לתת-הרשתות הפרטיות, ומאזני עומסים שפונים לאינטרנט יוקצו לתת-הרשתות הציבוריות.

יצירת רשת ה-VPC

  1. בוחרים קידומת ועורכים את משתנה הדף AMC_PREFIX בפקודה שלמטה כדי להגדיר אותו לקידומת שבחרתם. אחרי שתריצו את פקודות הדוגמה שבהמשך, התחילית הזו תצורף אוטומטית לכל ההפניות ל-VPC ולמשאבים שלו.

  2. יצירת ענן וירטואלי פרטי (VPC) ב-AWS:

    aws --region AWS_REGION ec2 create-vpc \
        --cidr-block 10.0.0.0/16 \
        --tag-specifications 'ResourceType=vpc, Tags=[{Key=Name,Value=AMC_PREFIXVPC}]'
    

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

    • AWS_REGION: השם של אזור נתמך ב-AWS שבו רוצים ליצור את ה-VPC
    • AMC_PREFIX: התחילית של שם ה-VPC שבחרתם עבור ה-VPC והמשאבים שלו
  3. שומרים את מזהה ה-VPC במשתנה סביבה ומפעילים את תמיכת ה-DNS שסופקה על ידי AWS עבור ה-VPC:

    VPC_ID=$(aws ec2 describe-vpcs \
      --filters 'Name=tag:Name,Values=AMC_PREFIXVPC' \
      --query "Vpcs[].VpcId" --output text)
    aws ec2 modify-vpc-attribute --enable-dns-hostnames --vpc-id $VPC_ID
    aws ec2 modify-vpc-attribute --enable-dns-support --vpc-id $VPC_ID
    

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

תת-רשתות של מישור הבקרה

אפשר להגדיר עד שלוש רשתות משנה לשכפול של מישור הבקרה. אם מציינים פחות משלוש רשתות משנה, מערכת GKE on AWS יוצרת שלוש רפליקות של מישור הבקרה ומפיצה אותן בין רשתות המשנה שצוינו.

האשכולות הם פרטיים ב-VPC. אסור לאפשר גישה ישירה לאשכולות מהאינטרנט. כדי ליצור ולנהל אשכולות ב-GKE on AWS, צריך גישה מוגבלת לאינטרנט. בדוגמה הזו נעשה שימוש בשער אינטרנט לגישה יוצאת.

דרישות לגבי תת-רשת

תת-רשתות צריכות

  • יכולת ליצור רזולוציית כתובות DNS
  • יכולת ליצור חיבורי TCP יוצאים ביציאה 443 לכתובות IP שניתן לנתב אליהן
  • צריכה להיות אפשרות להתחבר לנקודות הקצה הבאות:
נקודת קצה (endpoint) מטרה
storage.googleapis.com כדי להוריד מ-Cloud Storage במהלך ההתקנה
*.gcr.io כדי להוריד מ-Container Registry במהלך ההתקנה
gkeconnect.googleapis.com כדי להתחבר לשירות הניהול
oauth2.googleapis.com לאימות אשכול
sts.googleapis.com לאימות אשכול
logging.googleapis.com לשליחת יומנים אל Cloud Logging
monitoring.googleapis.com לשליחת מדדים אל Cloud Monitoring
opsconfigmonitoring.googleapis.com` לשליחת מטא-נתונים של משאבים אל Cloud Monitoring
servicecontrol.googleapis.com ל-Cloud Audit Logging

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

יצירת רשתות משנה פרטיות

יוצרים שלוש תת-רשתות פרטיות באזורי הזמינות המתאימים:

   aws ec2 create-subnet \
     --availability-zone AWS_ZONE_1 \
     --vpc-id $VPC_ID \
     --cidr-block 10.0.1.0/24 \
     --tag-specifications 'ResourceType=subnet, Tags=[{Key=Name,Value=AMC_PREFIXPrivateSubnet1}]'
   aws ec2 create-subnet \
     --availability-zone AWS_ZONE_2 \
     --vpc-id $VPC_ID \
     --cidr-block 10.0.2.0/24 \
     --tag-specifications 'ResourceType=subnet, Tags=[{Key=Name,Value=AMC_PREFIXPrivateSubnet2}]'
   aws ec2 create-subnet \
     --availability-zone AWS_ZONE_3 \
     --vpc-id $VPC_ID \
     --cidr-block 10.0.3.0/24 \
     --tag-specifications 'ResourceType=subnet, Tags=[{Key=Name,Value=AMC_PREFIXPrivateSubnet3}]'

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

יצירת רשתות משנה ציבוריות

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

    aws ec2 create-subnet \
      --availability-zone AWS_ZONE_1 \
      --vpc-id $VPC_ID \
      --cidr-block 10.0.101.0/24 \
      --tag-specifications 'ResourceType=subnet, Tags=[{Key=Name,Value=AMC_PREFIXPublicSubnet1}]'
    aws ec2 create-subnet \
      --availability-zone AWS_ZONE_2 \
      --vpc-id $VPC_ID \
      --cidr-block 10.0.102.0/24 \
      --tag-specifications 'ResourceType=subnet, Tags=[{Key=Name,Value=AMC_PREFIXPublicSubnet2}]'
    aws ec2 create-subnet \
      --availability-zone AWS_ZONE_3 \
      --vpc-id $VPC_ID \
      --cidr-block 10.0.103.0/24 \
      --tag-specifications 'ResourceType=subnet, Tags=[{Key=Name,Value=AMC_PREFIXPublicSubnet3}]'
    

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

    • AWS_ZONE_1
    • AWS_ZONE_2
    • AWS_ZONE_3
  2. מסמנים את רשתות המשנה כציבוריות:

    PUBLIC_SUBNET_ID_1=$(aws ec2 describe-subnets \
      --filters 'Name=tag:Name,Values=AMC_PREFIXPublicSubnet1' \
      --query "Subnets[].SubnetId" --output text)
    PUBLIC_SUBNET_ID_2=$(aws ec2 describe-subnets \
      --filters 'Name=tag:Name,Values=AMC_PREFIXPublicSubnet2' \
      --query "Subnets[].SubnetId" --output text)
    PUBLIC_SUBNET_ID_3=$(aws ec2 describe-subnets \
      --filters 'Name=tag:Name,Values=AMC_PREFIXPublicSubnet3' \
      --query "Subnets[].SubnetId" --output text)
    aws ec2 modify-subnet-attribute \
      --map-public-ip-on-launch \
      --subnet-id $PUBLIC_SUBNET_ID_1
    aws ec2 modify-subnet-attribute \
      --map-public-ip-on-launch \
      --subnet-id $PUBLIC_SUBNET_ID_2
    aws ec2 modify-subnet-attribute \
      --map-public-ip-on-launch \
      --subnet-id $PUBLIC_SUBNET_ID_3
    

יצירת שער לאינטרנט

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

    aws --region AWS_REGION  ec2 create-internet-gateway \
      --tag-specifications 'ResourceType=internet-gateway, Tags=[{Key=Name,Value=AMC_PREFIXInternetGateway}]'
    

    מחליפים את AWS_REGION בשם של אזור AWS שבו נוצר ה-VPC.

  2. מצרפים את שער האינטרנט ל-VPC:

    INTERNET_GW_ID=$(aws ec2 describe-internet-gateways \
      --filters 'Name=tag:Name,Values=AMC_PREFIXInternetGateway' \
      --query "InternetGateways[].InternetGatewayId" --output text)
    aws ec2 attach-internet-gateway \
      --internet-gateway-id $INTERNET_GW_ID \
      --vpc-id $VPC_ID
    

הגדרת טבלאות הניתוב עבור רשתות משנה ציבוריות

  1. יוצרים טבלת ניתוב לכל אחת מרשתות המשנה הציבוריות.

    aws ec2 create-route-table --vpc-id $VPC_ID \
      --tag-specifications 'ResourceType=route-table, Tags=[{Key=Name,Value=AMC_PREFIXPublicRouteTbl1}]'
    aws ec2 create-route-table --vpc-id $VPC_ID \
      --tag-specifications 'ResourceType=route-table, Tags=[{Key=Name,Value=AMC_PREFIXPublicRouteTbl2}]'
    aws ec2 create-route-table --vpc-id $VPC_ID \
      --tag-specifications 'ResourceType=route-table, Tags=[{Key=Name,Value=AMC_PREFIXPublicRouteTbl3}]'
    
  2. משייכים את טבלאות הניתוב הגלויות לכולם לתת-הרשתות הגלויות לכולם:

    PUBLIC_ROUTE_TABLE_ID_1=$(aws ec2 describe-route-tables \
        --filters 'Name=tag:Name,Values=AMC_PREFIXPublicRouteTbl1' \
        --query "RouteTables[].RouteTableId" --output text)
    PUBLIC_ROUTE_TABLE_ID_2=$(aws ec2 describe-route-tables \
        --filters 'Name=tag:Name,Values=AMC_PREFIXPublicRouteTbl2' \
        --query "RouteTables[].RouteTableId" --output text)
    PUBLIC_ROUTE_TABLE_ID_3=$(aws ec2 describe-route-tables \
        --filters 'Name=tag:Name,Values=AMC_PREFIXPublicRouteTbl3' \
        --query "RouteTables[].RouteTableId" --output text)
    aws ec2 associate-route-table \
      --route-table-id $PUBLIC_ROUTE_TABLE_ID_1 \
      --subnet-id $PUBLIC_SUBNET_ID_1
    aws ec2 associate-route-table \
      --route-table-id $PUBLIC_ROUTE_TABLE_ID_2 \
      --subnet-id $PUBLIC_SUBNET_ID_2
    aws ec2 associate-route-table \
      --route-table-id $PUBLIC_ROUTE_TABLE_ID_3 \
      --subnet-id $PUBLIC_SUBNET_ID_3
    
  3. יוצרים מסלולי ברירת מחדל לשער האינטרנט:

    aws ec2 create-route --route-table-id $PUBLIC_ROUTE_TABLE_ID_1 \
      --destination-cidr-block 0.0.0.0/0 --gateway-id $INTERNET_GW_ID
    aws ec2 create-route --route-table-id $PUBLIC_ROUTE_TABLE_ID_2 \
      --destination-cidr-block 0.0.0.0/0 --gateway-id $INTERNET_GW_ID
    aws ec2 create-route --route-table-id $PUBLIC_ROUTE_TABLE_ID_3 \
      --destination-cidr-block 0.0.0.0/0 --gateway-id $INTERNET_GW_ID
    
  4. מקצים כתובת IP גמישה (EIP) לכל שער NAT:

    aws ec2 allocate-address \
      --tag-specifications 'ResourceType=elastic-ip, Tags=[{Key=Name,Value=AMC_PREFIXNatEip1}]'
    aws ec2 allocate-address \
      --tag-specifications 'ResourceType=elastic-ip, Tags=[{Key=Name,Value=AMC_PREFIXNatEip2}]'
    aws ec2 allocate-address \
      --tag-specifications 'ResourceType=elastic-ip, Tags=[{Key=Name,Value=AMC_PREFIXNatEip3}]'
    

יצירת שערי NAT

יוצרים שער NAT בכל אחת משלוש רשתות המשנה הציבוריות:

   NAT_EIP_ALLOCATION_ID_1=$(aws ec2 describe-addresses \
     --filters 'Name=tag:Name,Values=AMC_PREFIXNatEip1' \
     --query "Addresses[].AllocationId" --output text)
   NAT_EIP_ALLOCATION_ID_2=$(aws ec2 describe-addresses \
     --filters 'Name=tag:Name,Values=AMC_PREFIXNatEip2' \
     --query "Addresses[].AllocationId" --output text)
   NAT_EIP_ALLOCATION_ID_3=$(aws ec2 describe-addresses \
     --filters 'Name=tag:Name,Values=AMC_PREFIXNatEip3' \
     --query "Addresses[].AllocationId" --output text)
   aws ec2 create-nat-gateway \
     --allocation-id $NAT_EIP_ALLOCATION_ID_1 \
     --subnet-id $PUBLIC_SUBNET_ID_1 \
     --tag-specifications 'ResourceType=natgateway, Tags=[{Key=Name,Value=AMC_PREFIXNatGateway1}]'
   aws ec2 create-nat-gateway \
     --allocation-id $NAT_EIP_ALLOCATION_ID_2 \
     --subnet-id $PUBLIC_SUBNET_ID_2 \
     --tag-specifications 'ResourceType=natgateway, Tags=[{Key=Name,Value=AMC_PREFIXNatGateway2}]'
   aws ec2 create-nat-gateway \
     --allocation-id $NAT_EIP_ALLOCATION_ID_3 \
     --subnet-id $PUBLIC_SUBNET_ID_3 \
     --tag-specifications 'ResourceType=natgateway, Tags=[{Key=Name,Value=AMC_PREFIXNatGateway3}]'

הגדרת טבלאות הניתוב לרשתות משנה פרטיות

  1. יוצרים טבלת ניתוב לכל תת-רשת פרטית:

    aws ec2 create-route-table --vpc-id $VPC_ID \
      --tag-specifications 'ResourceType=route-table, Tags=[{Key=Name,Value=AMC_PREFIXPrivateRouteTbl1}]'
    aws ec2 create-route-table --vpc-id $VPC_ID \
      --tag-specifications 'ResourceType=route-table, Tags=[{Key=Name,Value=AMC_PREFIXPrivateRouteTbl2}]'
    aws ec2 create-route-table --vpc-id $VPC_ID \
      --tag-specifications 'ResourceType=route-table, Tags=[{Key=Name,Value=AMC_PREFIXPrivateRouteTbl3}]'
    
  2. משייכים את טבלאות הניתוב הפרטיות לתת-הרשתות הפרטיות:

    PRIVATE_SUBNET_ID_1=$(aws ec2 describe-subnets \
      --filters 'Name=tag:Name,Values=AMC_PREFIXPrivateSubnet1' \
      --query "Subnets[].SubnetId" --output text)
    PRIVATE_SUBNET_ID_2=$(aws ec2 describe-subnets \
      --filters 'Name=tag:Name,Values=AMC_PREFIXPrivateSubnet2' \
      --query "Subnets[].SubnetId" --output text)
    PRIVATE_SUBNET_ID_3=$(aws ec2 describe-subnets \
      --filters 'Name=tag:Name,Values=AMC_PREFIXPrivateSubnet3' \
      --query "Subnets[].SubnetId" --output text)
    PRIVATE_ROUTE_TABLE_ID_1=$(aws ec2 describe-route-tables \
      --filters 'Name=tag:Name,Values=AMC_PREFIXPrivateRouteTbl1' \
      --query "RouteTables[].RouteTableId" --output text)
    PRIVATE_ROUTE_TABLE_ID_2=$(aws ec2 describe-route-tables \
      --filters 'Name=tag:Name,Values=AMC_PREFIXPrivateRouteTbl2' \
      --query "RouteTables[].RouteTableId" --output text)
    PRIVATE_ROUTE_TABLE_ID_3=$(aws ec2 describe-route-tables \
      --filters 'Name=tag:Name,Values=AMC_PREFIXPrivateRouteTbl3' \
      --query "RouteTables[].RouteTableId" --output text)
    aws ec2 associate-route-table --route-table-id $PRIVATE_ROUTE_TABLE_ID_1 \
      --subnet-id $PRIVATE_SUBNET_ID_1
    aws ec2 associate-route-table --route-table-id $PRIVATE_ROUTE_TABLE_ID_2 \
      --subnet-id $PRIVATE_SUBNET_ID_2
    aws ec2 associate-route-table --route-table-id $PRIVATE_ROUTE_TABLE_ID_3 \
      --subnet-id $PRIVATE_SUBNET_ID_3
    
  3. יוצרים את נתיבי ברירת המחדל לשערי NAT:

    NAT_GW_ID_1=$(aws ec2 describe-nat-gateways \
     --filter 'Name=tag:Name,Values=AMC_PREFIXNatGateway1' \
     --query "NatGateways[].NatGatewayId" --output text)
    NAT_GW_ID_2=$(aws ec2 describe-nat-gateways \
     --filter 'Name=tag:Name,Values=AMC_PREFIXNatGateway2' \
     --query "NatGateways[].NatGatewayId" --output text)
    NAT_GW_ID_3=$(aws ec2 describe-nat-gateways \
     --filter 'Name=tag:Name,Values=AMC_PREFIXNatGateway3' \
     --query "NatGateways[].NatGatewayId" --output text)
    aws ec2 create-route --route-table-id $PRIVATE_ROUTE_TABLE_ID_1  \
      --destination-cidr-block 0.0.0.0/0 --gateway-id $NAT_GW_ID_1
    aws ec2 create-route --route-table-id $PRIVATE_ROUTE_TABLE_ID_2  \
      --destination-cidr-block 0.0.0.0/0 --gateway-id $NAT_GW_ID_2
    aws ec2 create-route --route-table-id $PRIVATE_ROUTE_TABLE_ID_3 \
      --destination-cidr-block 0.0.0.0/0 --gateway-id $NAT_GW_ID_3
    

תת-רשתות של מאגר צמתים

כל מאגר צמתים ממוקם בתת-רשת אחת. אפשר למקם כמה מאגרי צמתים ברשת משנה. מספר הצמתים ומאגרי הצמתים שאפשר ליצור מוגבל על ידי טווח כתובות ה-IP שזמין בתת-הרשת.

כל תת-רשת של מאגר צמתים חייבת:

  • צריכים לעמוד באותן דרישות של גישה לאינטרנט כמו ברשתות המשנה של מישור הבקרה
  • יש מספיק כתובות IP כדי לכסות את הגודל של מאגר הצמתים
  • האפשרות 'הקצאה אוטומטית של כתובות IP ציבוריות' לא מופעלת

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

רשתות משנה של מאזן עומסים של שירות

אם אתם יוצרים מאזני עומסים ברשת או מאזני עומסים מסוג HTTP, אתם צריכים לתייג את רשתות המשנה של מאזן העומסים כדי לאפשר גילוי אוטומטי.

מתייגים את רשתות המשנה הציבוריות באמצעות kubernetes.io/role/elb:

aws ec2 create-tags \
  --resources $PUBLIC_SUBNET_ID_1 \
  --tags Key=kubernetes.io/role/elb,Value=1
aws ec2 create-tags \
  --resources $PUBLIC_SUBNET_ID_2 \
  --tags Key=kubernetes.io/role/elb,Value=1
aws ec2 create-tags \
  --resources $PUBLIC_SUBNET_ID_3 \
  --tags Key=kubernetes.io/role/elb,Value=1

מתייגים את הרשתות המשנה הפרטיות באמצעות kubernetes.io/role/internal-elb:

aws ec2 create-tags \
  --resources $PRIVATE_SUBNET_ID_1 \
  --tags Key=kubernetes.io/role/internal-elb,Value=1
aws ec2 create-tags \
  --resources $PRIVATE_SUBNET_ID_2 \
  --tags Key=kubernetes.io/role/internal-elb,Value=1
aws ec2 create-tags \
  --resources $PRIVATE_SUBNET_ID_3 \
  --tags Key=kubernetes.io/role/internal-elb,Value=1

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

יצירת מפתחות AWS KMS.