שימוש ב-proxy עם GKE ב-AWS

בנושא הזה מוסבר איך לנתב תנועה משירות הניהול של GKE ב-AWS ומ-Connect דרך שרת proxy של HTTP/HTTPS.

‫GKE ב-AWS דורש גישה לאינטרנט מהסיבות הבאות:

  • שירות הניהול רושם את אשכולות המשתמשים ב-Connect.
  • באשכולות המשתמשים פועל סוכן Connect.
  • כל הצמתים של אשכולות המשתמשים ושירות הניהול מורידים תמונות מ-Container Registry.

אפשר להפנות את התנועה הזו דרך שרת proxy של HTTP או HTTPS. החל מ-GKE ב-AWS 1.8, אפשר להגדיר הגדרות לשרת proxy נפרדות לשירות הניהול ולכל אחד מהאשכולות. מידע נוסף על שינוי הגדרות לשרת proxy מופיע במאמר שינוי הגדרות ה-proxy של אשכול.

מגדירים את הגדרות לשרת proxy בקובץ JSON שמקושר ל-anthos-gke.yaml.

דרישות מוקדמות

לפני שמגדירים את GKE ב-AWS לשימוש ב-Proxy, צריך להפעיל את נקודות הקצה של AWS VPC, להגדיר קבוצת אבטחה ל-Proxy ולאפשר חיבורים יוצאים לשירותים מסוימים. Google Cloud

כדי להשתמש בשרת proxy מסוג HTTP, אשכולות המשתמשים צריכים להריץ Kubernetes מגרסה 1.17 ואילך.

הפעלת נקודות קצה של VPC

לפני שמגדירים שרת proxy, צריך ליצור נקודות קצה של VPC להתקנה של GKE ב-AWS. נקודות קצה של VPC מאפשרות למשאבים בתת-רשתות פרטיות לגשת לשירותי AWS ללא גישה לאינטרנט הציבורי.

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

שירות סוג נקודת הקצה קבוצות אבטחה
Auto Scaling ממשק ניהול, מישור בקרה, מאגרי צמתים
EC2 ממשק ניהול, מישור בקרה, מאגרי צמתים
איזון עומסים ממשק ניהול, מישור בקרה, מאגרי צמתים
שירות ניהול מפתחות (KMS) ממשק ניהול, מישור בקרה, מאגרי צמתים
S3 שער ניהול, מישור בקרה, מאגרי צמתים
שירות אסימוני אבטחה (STS) ממשק ניהול, מישור בקרה, מאגרי צמתים

אפשר ליצור נקודות קצה מתוך מסוף VPC של AWS. האפשרויות שאתם מגדירים כשאתם יוצרים נקודות קצה של VPC תלויות בהגדרת ה-VPC שלכם.

הגדרה של קבוצת אבטחה

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

סוג פרוטוקול מנמל לניוד כתובת
תעבורת נתונים יוצאת (egress) TCP יציאת שרת Proxy יציאת שרת Proxy קבוצת אבטחה של שרת Proxy

התרת חיבורים יוצאים לשירותים של Google Cloud

כדי ש-GKE ב-AWS יוכל להתחבר לשירותים, שרת ה-proxy צריך לאפשר תעבורה לדומיינים הבאים: Google Cloud

  • gkeconnect.googleapis.com
  • gkehub.googleapis.com
  • oauth2.googleapis.com
  • storage.googleapis.com
  • www.googleapis.com
  • gcr.io
  • k8s.gcr.io
  • EC2-REGION.ec2.archive.ubuntu.com

מחליפים את EC2-REGION באזור AWS EC2 שבו פועלת ההתקנה של GKE on AWS. לדוגמה, us-west-1.ec2.archive.ubuntu.com/.

אם אתם משתמשים ב-Cloud Service Mesh עם Prometheus ו-Kiali, אתם צריכים לאפשר גישה יוצאת מהדומיינים הבאים:

  • docker.io
  • quay.io

יצירת קובץ JSON של הגדרות ה-proxy

קובץ ה-JSON של הגדרות ה-proxy מכיל אובייקט אחד עם שלושה צמדי מפתח/ערך, ושמות המפתחות הם httpProxy, httpsProxy ו-noProxy. שמות המשתמש והסיסמאות מוצפנים באמצעות מפתח AWS KMS לפני שהם מוחלים על השרת.

{
  "httpProxy": "HTTP_PROXY",
  "httpsProxy": "HTTPS_PROXY",
  "noProxy": "NO_PROXY"
}

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

  • HTTP_PROXY עם כתובת שרת ה-proxy לניתוב בקשות HTTP דרך השרת.
  • HTTPS_PROXY עם שרת ה-proxy כדי לנתב דרכו בקשות HTTPS.
  • NO_PROXY עם רשימה אופציונלית של כתובות IP, טווחי CIDR ודומיינים שבהם לא נעשה שימוש ב-proxy.

מידע נוסף זמין במאמר הפניה להגדרות. לדוגמה, בהגדרה הבאה נעשה שימוש ב-Proxy בכתובת 10.0.0.254, ומוחרגים מספר אתרים.

{
  "httpProxy": "http://user:password@10.0.0.254:80",
  "httpsProxy": "http://user:password@10.0.0.254:443",
  "noProxy": "localhost,127.0.0.1,169.254.169.254,10.0.0.0/16,example.com"
}

הוספת ה-proxy לקובץ anthos-gke.yaml

כדי להגדיר את AWSManagementService:

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

    cd anthos-aws

  2. פותחים את anthos-gke.yaml בכלי לעריכת טקסט. מוסיפים ערך ל-spec.proxy כמו בדוגמה הבאה.

    apiVersion: multicloud.cluster.gke.io/v1
    kind: AWSManagementService
    metadata:
      name: management
    spec:
      version: aws-1.14.1-gke.0
      proxy: PROXY_JSON_FILE
      securityGroupIDs:
      - SECURITY_GROUP_ID
      ...
    

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

    • PROXY_JSON_FILE בנתיב היחסי של קובץ ה-JSON של שרת ה-proxy.
    • SECURITY_GROUP_ID עם המזהה של קבוצת אבטחה עם גישה לשרת ה-proxy.

    שומרים את הקובץ.

  3. מריצים את הפקודה anthos-gke aws management init כדי ליצור קובץ anthos-gke.status.yaml עם הגדרות נוספות. הפקודה init גם מאמתת את האובייקט AWSManagementService בקובץ anthos-gke.yaml.

    anthos-gke aws management init
    
  4. מריצים את הפקודה anthos-gke aws management apply כדי לעדכן את שירות הניהול ב-AWS.

    anthos-gke aws management apply
    
  5. אחר כך יוצרים אשכול משתמשים. כוללים את קבוצת האבטחה של ה-proxy ב-AWSCluster וב-AWSNodePool, ב-spec.controlPlane.securityGroupIDs וב-spec.securityGroupIDs, בהתאמה. לאחר מכן יש ל-cluster גישה לשרת ה-proxy.

הסבר על ההגדרות

שדה תיאור דוגמה חובה
httpProxy כתובת URL של שרת proxy. הערך צריך לכלול שם מארח או כתובת IP, ואפשר להוסיף לו יציאה, שם משתמש וסיסמה. "http://user:password@10.184.37.42:80" כן
httpsProxy כתובת URL של שרת proxy לתעבורת נתונים מוצפנת מסוג HTTPS. כתובת ה-URL httpProxy תשמש אם לא צוינה כתובת URL של httpsProxy. "http://user:password@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" לא

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

מידע נוסף על השלמת התקנה של GKE ב-AWS זמין במאמרים הבאים:

למידע על שינוי הגדרות ה-proxy באשכול: