GKE ב-AWS פועל בענן וירטואלי פרטי (VPC) של AWS. בדף הזה מוסבר איך להגדיר VPC חדש לאשכול.
GKE on AWS יוצר ומנהל משאבים בתוך ה-VPC שאתם מציינים. בנוסף, צריך ליצור כמה רשתות משנה בתוך ה-VPC:
- עד שלוש רשתות משנה לצמתים של מישור הבקרה
- רשת משנה למאגר הצמתים
- רשתות משנה למאזני עומסים של שירות Kubernetes
הדף הזה מיועד למומחי רשת שרוצים להתקין ציוד רשת, להגדיר אותו ולתת לו תמיכה. מידע נוסף על תפקידים נפוצים ומשימות לדוגמה שאנחנו מתייחסים אליהם בתוכן זמין במאמר תפקידים נפוצים של משתמשים ומשימות ב-GKE. Google Cloud
VPC לדוגמה
כדי להגדיר את ה-VPC שמוצג בהמשך, מבצעים את השלבים הבאים. למקרי שימוש משלכם בסביבת ייצור, אתם יכולים לבחור טווחי כתובות IP שונים, אזורי זמינות, רשתות משנה ורשימות בקרת גישה לרשת שמתאימים לעומסי העבודה שלכם.
הדיאגרמה הבאה מציגה את ה-VPC לדוגמה שיוצרים כשמבצעים את השלבים האלה:
בדוגמה הזו נעשה שימוש בשלושה אזורי זמינות – אזור זמינות 1, אזור זמינות 2 ואזור זמינות 3. לדוגמה, כדי ליצור VPC באזור
us-east-1, אפשר להגדיר את הערכים האלה ל-us-east-1a,us-east-1b,us-east-1c.בכל אחד משלושת אזורי הזמינות יש רשת משנה ציבורית אחת ורשת משנה פרטית אחת.
השכפולים של רמת הבקרה ונקודות הקצה של איזון העומסים, וגם מאגרי הצמתים, נוצרים ברשתות המשנה הפרטיות.
תת-רשתות ציבוריות מספקות גישה לאינטרנט למכונות בתת-רשתות פרטיות ולנקודות קצה (endpoints) של מאזני עומס ציבוריים.
כל רשתות המשנה האלה מתויגות לזיהוי אוטומטי של רשתות משנה. מאזני עומסים פנימיים יוקצו לתת-הרשתות הפרטיות, ומאזני עומסים שפונים לאינטרנט יוקצו לתת-הרשתות הציבוריות.
יצירת רשת ה-VPC
בוחרים קידומת ועורכים את משתנה הדף AMC_PREFIX בפקודה שלמטה כדי להגדיר אותו לקידומת שבחרתם. אחרי שתריצו את פקודות הדוגמה שבהמשך, התחילית הזו תצורף אוטומטית לכל ההפניות ל-VPC ולמשאבים שלו.
יצירת ענן וירטואלי פרטי (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 והמשאבים שלו
-
שומרים את מזהה ה-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}]'
מחליפים את מה שכתוב בשדות הבאים:
-
AWS_ZONE_1: אזור זמינות 1 -
AWS_ZONE_2: אזור הזמינות 2 -
AWS_ZONE_3: Availability Zone 3
יצירת רשתות משנה ציבוריות
יוצרים שלוש רשתות משנה ציבוריות. הם ישמשו כדי לספק גישה לאינטרנט יוצא לתת-הרשתות הפרטיות.
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_1AWS_ZONE_2AWS_ZONE_3
מסמנים את רשתות המשנה כציבוריות:
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
יצירת שער לאינטרנט
יוצרים שער לאינטרנט כדי שלרשתות המשנה הציבוריות תהיה גישה לאינטרנט:
aws --region AWS_REGION ec2 create-internet-gateway \ --tag-specifications 'ResourceType=internet-gateway, Tags=[{Key=Name,Value=AMC_PREFIXInternetGateway}]'מחליפים את
AWS_REGIONבשם של אזור AWS שבו נוצר ה-VPC.מצרפים את שער האינטרנט ל-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
הגדרת טבלאות הניתוב עבור רשתות משנה ציבוריות
יוצרים טבלת ניתוב לכל אחת מרשתות המשנה הציבוריות.
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}]'משייכים את טבלאות הניתוב הגלויות לכולם לתת-הרשתות הגלויות לכולם:
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יוצרים מסלולי ברירת מחדל לשער האינטרנט:
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מקצים כתובת 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}]'
הגדרת טבלאות הניתוב לרשתות משנה פרטיות
יוצרים טבלת ניתוב לכל תת-רשת פרטית:
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}]'משייכים את טבלאות הניתוב הפרטיות לתת-הרשתות הפרטיות:
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יוצרים את נתיבי ברירת המחדל לשערי 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