במאמר הזה מוסבר איך לנתב תנועה מ-GKE ב-AWS דרך שרת proxy של HTTP/HTTPS. כשיוצרים אשכול, מציינים את הגדרת ה-proxy.
סקירה כללית
GKE ב-AWS יכול לנתב תעבורת אינטרנט יוצאת דרך שרת proxy מהסיבות הבאות:
- כדי לרשום אשכולות ב- Google Cloud באמצעות Connect
- כדי להריץ את Connect Agent
- כדי להוריד תמונות מ-Container Registry
מגבלות
- בשדות
httpProxyו-httpsProxyאין תמיכה בכתובות URL שמתחילות ב-https://. חובה להשתמש ב-http://. בקשות ליציאה 443 משתמשות ב-HTTPS. - חובה להגדיר ערכים לפרמטרים
httpProxy,httpsProxyו-noProxy. - יכול להיות שתצטרכו להוסיף עוד דומיינים, כתובות IP או CIDR לשדה
noProxy. מומלץ להוסיף את טווח כתובות ה-IP של ה-VPC. החל מגרסה 1.22 של Google Kubernetes Engine, GKE ב-AWS מוסיף באופן אוטומטי את ה-CIDR של כתובת ה-Pod ואת ה-CIDR של כתובת השירות.
דרישות מוקדמות
בקטע הזה מתוארות הדרישות המוקדמות שצריך להחיל לפני שמשתמשים בשרת proxy.
הפעלת נקודות קצה של VPC
לפני שמגדירים שרת proxy, צריך ליצור נקודות קצה של VPC להתקנה של GKE ב-AWS.
נקודות קצה של VPC מאפשרות למשאבים ברשתות משנה פרטיות לגשת לשירותי AWS ללא גישה לאינטרנט הציבורי.
בטבלה הבאה מפורטים שירותי AWS ש-GKE ב-AWS דורש נקודות קצה של VPC בשבילם, יחד עם סוג נקודת הקצה וקבוצות האבטחה שדורשות גישה לנקודת הקצה.
| שירות | סוג נקודת הקצה | קבוצות אבטחה |
|---|---|---|
| Auto Scaling | ממשק | מישור הבקרה, מאגרי צמתים |
| EC2 | ממשק | מישור הבקרה, מאגרי צמתים |
| EFS | ממשק | מישור הבקרה |
| איזון עומסים | ממשק | מישור הבקרה, מאגרי צמתים |
| שירות ניהול מפתחות (KMS) | ממשק | מישור הבקרה, מאגרי צמתים |
| S3 | שער | מישור הבקרה, מאגרי צמתים |
| Secrets Manager | ממשק | מישור הבקרה, מאגרי צמתים |
| שירות אסימוני אבטחה (STS) | ממשק | מישור הבקרה, מאגרי צמתים |
אפשר ליצור נקודות קצה מתוך מסוף VPC של AWS. האפשרויות שאתם מגדירים כשאתם יוצרים נקודות קצה של VPC תלויות בהגדרת ה-VPC שלכם.
הגדרה של קבוצת אבטחה
GKE ב-AWS צריך להיות מסוגל להתחבר לשרת הפרוקסי כדי להוריד רכיבי תוכנה. יוצרים או מאתרים קבוצת אבטחה ב-AWS שמאפשרת חיבורים יוצאים לשרת הפרוקסי. קבוצת האבטחה צריכה לאפשר גישה יוצאת ממישור הבקרה ומקבוצות האבטחה של מאגר הצמתים לכתובת ולפורט של ה-proxy. שומרים את המזהה של קבוצת האבטחה הזו – למשל, sg-12345678.
| סוג | פרוטוקול | מנמל | לניוד | כתובת |
|---|---|---|---|---|
| תעבורת נתונים יוצאת (egress) | TCP | יציאת שרת Proxy | יציאת שרת Proxy | קבוצת אבטחה של שרת Proxy |
רשימת היתרים לשרתי Proxy
כדי ש-GKE ב-AWS יוכל להתחבר לשירותי Google Cloud, שרת ה-proxy צריך לאפשר תעבורה לדומיינים הבאים.
.gcr.io
cloudresourcemanager.googleapis.com
container.googleapis.com
gkeconnect.googleapis.com
gkehub.googleapis.com
oauth2.googleapis.com
securetoken.googleapis.com
storage.googleapis.com
sts.googleapis.com
www.googleapis.com
servicecontrol.googleapis.com
logging.googleapis.com
monitoring.googleapis.com
opsconfigmonitoring.googleapis.com
GCP_LOCATION-gkemulticloud.googleapis.com
מחליפים את GCP_LOCATION באזור שבו נמצא אשכול GKE ב-AWS. Google Cloud מציינים us-west1 או אזור נתמך אחר.
עדכון תפקידים ב-AWS IAM
כדי ש-GKE on AWS יוכל לקרוא את הגדרות ה-proxy מ-AWS Secrets Manager, צריך להוסיף את secretsmanager:GetSecretValue לתפקיד מישור הבקרה ולתפקיד מאגר הצמתים של האשכול.
כדי להוסיף את ההרשאה הזו, צריך להוסיף אותה למדיניות של מישור הבקרה ולמדיניות של מאגר הצמתים. מידע נוסף זמין במאמר בנושא עריכת מדיניות IAM.
יצירת קובץ תצורה של שרת Proxy
הגדרת ה-proxy מאוחסנת בסוד של AWS Secrets Manager כמחרוזת JSON.
אפשר להעביר את ההגדרה הזו לכלי aws של שורת הפקודה כקובץ. בקטע הזה מוסבר איך ליצור את הקובץ הזה.
בטבלה הבאה מתואר התוכן של הקובץ הזה.
| שדה | תיאור | דוגמאות | חובה |
|---|---|---|---|
httpProxy |
כתובת URL של שרת proxy. הערך צריך לכלול שם מארח או כתובת IP, ואפשר להוסיף לו יציאה, שם משתמש וסיסמה. | "http://user:password@10.184.37.42:80""10.184.37.42" |
כן |
httpsProxy |
כתובת URL של שרת proxy לתעבורת נתונים מוצפנת מסוג HTTPS. כתובת ה-URL של httpProxy תשמש אם הערך של httpsProxy ריק. | "http://10.101.16.31:80"
|
כן |
noProxy |
רשימה מופרדת בפסיקים של כתובות URL שיוחרגו מהעברת נתונים דרך שרת Proxy. כל ערך יכול להיות: כתובת IP, טווח CIDR, שם דומיין או הכוכבית (*). דומיינים שמוגדרים עם נקודה מובילה (לדוגמה, .google.com) מציינים שנדרש תת-דומיין. כוכבית אחת * גורמת להתעלמות מכל הגדרות ה-proxy. | "1.2.3.4,10.0.0.0/16,example.com,.site.com" |
כן |
כדי ליצור את קובץ התצורה, יוצרים קובץ JSON שמכיל ערכים למפתחות
httpProxy,noProxyולמפתחות האופציונלייםhttpsProxy.{ "httpProxy": "AUTHENTICATION_URL", "httpsProxy": "AUTHENTICATION_URL", "noProxy": "NO_PROXY_ADDRESSES" }מחליפים את מה שכתוב בשדות הבאים:
-
AUTHENTICATION_URL: כתובת URL מקודדת שמכילה את שם המשתמש והסיסמה של ה-Proxy -
NO_PROXY_ADDRESSES: רשימה מופרדת בפסיקים של בלוקים של CIDR וכתובות URL – לדוגמה10.0.0.0/16,http://example.com
שומרים את הקובץ לשימוש בקטע הבא.
-
יוצרים סוד עם נתוני ה-JSON האלה כסוד ב-AWS Secrets Manager באמצעות כלי שורת הפקודה
aws.aws secretsmanager create-secret \ --name SECRET_NAME \ --secret-string file://PROXY_CONFIGURATION_FILEמחליפים את מה שכתוב בשדות הבאים:
-
SECRET_NAME: השם של הסוד החדש -
PROXY_CONFIGURATION_FILE: הנתיב לקובץ התצורה של השרת הפרוקסי.
הפלט כולל את שם משאב Amazon (ARN) ואת התוכן של הסוד. עכשיו אפשר להפנות לסוד הזה כשיוצרים אשכול.
-
יצירת אשכול שמשתמש בשרת proxy
כדי להגדיר את GKE ב-AWS כך שישתמש בשרת proxy מסוג HTTP לקישוריות יוצאת, מבצעים את השלבים הבאים:
פועלים לפי השלבים במאמר בנושא יצירת אשכול ומעבירים את הדגלים proxy-secret-arn ו-proxy-secret-version-id.
gcloud container aws clusters create CLUSTER_NAME \
--proxy-secret-arn=PROXY_SECRET_ARN \
--proxy-secret-version-id=PROXY_SECRET_VERSION \
מחליפים את מה שכתוב בשדות הבאים:
-
CLUSTER_NAME: השם של האשכול -
PROXY_SECRET_ARN: ה-ARN של הסוד שמכיל את הגדרות לשרת proxy, לדוגמהarn:aws::secretsmanager:us-east-2:111122223333:secret:example/ExampleSecret-jiObOV -
PROXY_SECRET_VERSION: מזהה הגרסה של הסוד, לדוגמהEXAMPLE1-90ab-cdef-fedc-ba987EXAMPLE
עדכון הגדרת שרת ה-proxy
אפשר לעדכן את הגדרת ה-proxy עבור מישור בקרה של אשכול או מאגר צמתים. כדי לעדכן את ה-ARN של תצורת ה-proxy, קודם צריך לעדכן את תפקיד ה-IAM של AWS במישור הבקרה או במאגר הצמתים.
עדכון תפקידים ב-AWS IAM
לפני שמשנים את ה-ARN שבו מאוחסנת הגדרת ה-proxy, צריך לוודא שלתפקיד של מישור הבקרה ושל מאגר הצמתים באשכול יש גישת קריאה ל-ARN של הסוד. אם הצהרת ה-IAM עם ההרשאה secretsmanager:GetSecretValue מוגבלת ל-ARN ספציפי של משאב, צריך להוסיף את ה-ARN החדש של הסוד לרשימה הזו לפני עדכון תצורת ה-proxy.
עדכון ההגדרה של שרת ה-proxy באשכול
כדי לעדכן את הגדרות ה-proxy של האשכול, משתמשים ב-Google Cloud CLI.
gcloud container aws clusters update CLUSTER_NAME \
--location GOOGLE_CLOUD_LOCATION \
--proxy-secret-arn=PROXY_SECRET_ARN \
--proxy-secret-version-id=PROXY_SECRET_VERSION
מחליפים את מה שכתוב בשדות הבאים:
-
CLUSTER_NAME: השם של האשכול -
GOOGLE_CLOUD_LOCATION: האזור Google Cloud הנתמך שמנהל את האשכול PROXY_SECRET_ARN: ה-ARN של הסוד שמכיל את הגדרות לשרת proxy-
PROXY_SECRET_VERSION: מזהה הגרסה של הסוד, לדוגמהEXAMPLE1-90ab-cdef-fedc-ba987EXAMPLE
עדכון ההגדרה של שרת ה-proxy של מאגר הצמתים
כדי לעדכן את הגדרות ה-proxy של מאגר הצמתים, משתמשים ב-Google Cloud CLI.
gcloud container aws node-pools update NODE_POOL_NAME
--cluster CLUSTER_NAME \
--location GOOGLE_CLOUD_LOCATION \
--proxy-secret-arn=PROXY_SECRET_ARN \
--proxy-secret-version-id=PROXY_SECRET_VERSION
מחליפים את מה שכתוב בשדות הבאים:
-
NODE_POOL_NAME: השם של מאגר הצמתים -
CLUSTER_NAME: השם של האשכול -
GOOGLE_CLOUD_LOCATION: האזור Google Cloud הנתמך שמנהל את האשכול PROXY_SECRET_ARN: ה-ARN של הסוד שמכיל את הגדרות לשרת proxy-
PROXY_SECRET_VERSION: מזהה הגרסה של הסוד, לדוגמהEXAMPLE1-90ab-cdef-fedc-ba987EXAMPLE
הסרת הגדרת ה-Proxy
אפשר להסיר את הגדרת ה-proxy ממישור הבקרה של האשכול או ממאגרי הצמתים. הפעולות האלה לא תלויות זו בזו. הסרת ההגדרה ממישור הבקרה לא מסירה אותה ממאגרי הצמתים של האשכול.
הסרת הגדרות של פרוקסי במישור הבקרה
כדי להסיר את הגדרות ה-proxy של מישור הבקרה של האשכול, משתמשים ב-Google Cloud CLI.
gcloud container aws clusters update CLUSTER_NAME \
--location GOOGLE_CLOUD_LOCATION \
--clear-proxy-config
מחליפים את מה שכתוב בשדות הבאים:
-
CLUSTER_NAME: השם של האשכול -
GOOGLE_CLOUD_LOCATION: האזור הנתמך Google Cloud שמנהל את האשכול. לדוגמה,us-west1
הסרת הגדרת פרוקסי של מאגר צמתים
כדי להסיר את הגדרת ה-proxy ממאגר צמתים, משתמשים ב-Google Cloud CLI.
gcloud container aws node-pools update NODE_POOL_NAME
--cluster CLUSTER_NAME \
--location GOOGLE_CLOUD_LOCATION \
--clear-proxy-config
מחליפים את מה שכתוב בשדות הבאים:
-
NODE_POOL_NAME: השם של מאגר הצמתים -
CLUSTER_NAME: השם של האשכול -
GOOGLE_CLOUD_LOCATION: האזור הנתמך Google Cloud שמנהל את האשכול. לדוגמה,us-west1
המאמרים הבאים
- קראו מידע נוסף על איך יוצרים אשכול.