שימוש ב-Public NAT עם GKE
בדף הזה מוסבר איך להגדיר דוגמה של NAT ציבורי באמצעות Google Kubernetes Engine (GKE). לפני שמגדירים NAT ציבורי, כדאי לקרוא את המאמר סקירה כללית על NAT ציבורי.
דרישות מוקדמות
לפני שמגדירים Public NAT, צריך לבצע את הפעולות הבאות.
קבלת הרשאות IAM
ההרשאה roles/compute.networkAdmin מאפשרת ליצור שער NAT ב-Cloud Router, להזמין ולהקצות כתובות IP של NAT, ולציין רשתות משנה (subnets) שהתעבורה שלהן צריכה להשתמש בתרגום כתובות רשת (NAT) דרך שער ה-NAT.
הגדרה Google Cloud
לפני שמתחילים, צריך להגדיר את הפריטים הבאים ב- Google Cloud.
- נכנסים לחשבון Google Cloud . אנחנו ממליצים למשתמשים חדשים ב- Google Cloud ליצור חשבון כדי שיוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init -
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init
הגדרת הדוגמה של GKE
אפשר להשתמש בדוגמה הזו אם רוצים לראות הגדרה פשוטה של NAT ציבורי שפועלת עם GKE.
שלב 1: יצירת רשת VPC ורשת משנה
אם כבר יש לכם רשת ותת-רשת, אתם יכולים לדלג על השלב הזה.
המסוף
נכנסים לדף VPC networks במסוף Google Cloud .
לוחצים על יצירת רשת VPC.
מזינים שם של
custom-network1.בקטע Subnets (רשתות משנה), מגדירים את Subnet creation mode (מצב יצירת רשת משנה) לערך Custom (מותאם אישית).
בקטע New subnet (תת-רשת חדשה), מזינים Name (שם) של
subnet-us-east-192.בשדה Region, בוחרים באפשרות us-east4.
מזינים טווח כתובות IP של
192.168.1.0/24.לוחצים על Done ואז על Create.
gcloud
יוצרים רשת חדשה של ענן וירטואלי פרטי (VPC) במצב מותאם אישית בפרויקט:
gcloud compute networks create custom-network1 \ --subnet-mode customפלט:
NAME MODE IPV4_RANGE GATEWAY_IPV4 custom-network1 custom
מציינים את קידומת רשת המשנה לאזור הראשון. בדוגמה הזו, אנחנו מקצים את הערך
192.168.1.0/24לאזורus-east4.gcloud compute networks subnets create subnet-us-east-192 \ --network custom-network1 \ --region us-east4 \ --range 192.168.1.0/24
פלט:
NAME REGION NETWORK RANGE subnet-us-east-192 us-east4 custom-network1 192.168.1.0/24
Terraform
אתם יכולים להשתמש במודול Terraform כדי ליצור רשת ותת-רשת מותאמות אישית של ענן וירטואלי פרטי (VPC).
שלב 2: יצירת אשכול פרטי
המסוף
נכנסים לדף Kubernetes clusters במסוף Google Cloud .
לוחצים על יצירת אשכול.
בשדה Name (שם), מזינים
nat-test-cluster.מגדירים את סוג המיקום לאזורי.
מגדירים את Zone לערך us-east4-c.
בחלונית הניווט, לוחצים על Networking (רשת).
בוחרים באפשרות אשכול פרטי.
מבטלים את הסימון של התיבה מישור הבקרה של בקרת הגישה באמצעות כתובת ה-IP החיצונית שלו.
מזינים טווח כתובות IP של מישור הבקרה של
172.16.0.0/28.מגדירים את Network (רשת) לערך
custom-network1.כדי ליצור את האשכול ולהפעיל אותו, לוחצים על Create.
gcloud
gcloud container clusters create "nat-test-cluster" \
--zone "us-east4-c" \
--cluster-version "latest" \
--machine-type "e2-medium" \
--disk-type "pd-standard" \
--disk-size "100" \
--scopes "https://www.googleapis.com/auth/compute","https://www.googleapis.com/auth/devstorage.read_only","https://www.googleapis.com/auth/logging.write","https://www.googleapis.com/auth/monitoring","https://www.googleapis.com/auth/servicecontrol","https://www.googleapis.com/auth/service.management.readonly","https://www.googleapis.com/auth/trace.append" \
--num-nodes "3" \
--enable-private-nodes \
--enable-private-endpoint \
--master-ipv4-cidr "172.16.0.0/28" \
--enable-ip-alias \
--network "projects/PROJECT_ID/global/networks/custom-network1" \
--subnetwork "projects/PROJECT_ID/regions/us-east4/subnetworks/subnet-us-east-192" \
--max-nodes-per-pool "110" \
--enable-master-authorized-networks \
--addons HorizontalPodAutoscaling,HttpLoadBalancing \
--enable-autoupgrade \
--enable-autorepair
Terraform
אתם יכולים להשתמש במשאב של Terraform כדי ליצור אשכול פרטי.
שלב 3: יוצרים כלל של חומת אש שמאפשר חיבורי SSH
המסוף
במסוף Google Cloud , עוברים לדף מדיניות חומת אש.
לוחצים על יצירת כלל חומת אש.
מזינים שם של
allow-ssh.מציינים רשת של
custom-network1.מגדירים את Direction of traffic (כיוון התנועה) ל-Ingress (תנועה נכנסת).
מגדירים את הפעולה בהתאמה לאישור.
מגדירים את היעדים לכל המופעים ברשת.
מגדירים את Source filter (מסנן מקור) לערך IPv4 ranges (טווחים של כתובות IPv4).
מגדירים את Source IP ranges (טווחים של כתובות IP של המקור) לערך
35.235.240.0/20.מגדירים את הפרוטוקולים והיציאות לפרוטוקולים ויציאות שצוינו.
מסמנים את התיבה tcp ומזינים את היציאה
22.לוחצים על יצירה.
gcloud
gcloud compute firewall-rules create allow-ssh \
--network custom-network1 \
--source-ranges 35.235.240.0/20 \
--allow tcp:22Terraform
אתם יכולים להשתמש במשאב של Terraform כדי ליצור כלל בחומת האש.
שלב 4: יוצרים הרשאות SSH ל-IAP לאחד מהצמתים
בשלב מאוחר יותר, משתמשים ב-IAP כדי להתחבר לצומת.
המסוף
נכנסים לדף שרת proxy לאימות זהויות (IAP) במסוף Google Cloud .
לוחצים על הכרטיסייה SSH and TCP resources.
מסמנים את התיבה לצד הצומת הראשון ברשימה בקטע All Tunnel Resources > us-east4-c. השם שלו יהיה דומה ל-
gke-nat-test-cluster-default-pool-b50db58d-075t.רושמים את שם הצומת. בהמשך תשתמשו בו כדי לבדוק את הקישוריות.
בחלונית השמאלית, לוחצים על Add principal.
כדי לתת למשתמשים, לקבוצות או לחשבונות שירות גישה למשאבים, מציינים את כתובות האימייל שלהם בשדה New principals.
אם אתם רק בודקים את התכונה הזו, אתם יכולים להזין את כתובת האימייל שלכם.
כדי לתת לחשבונות המשתמשים גישה למשאבים באמצעות התכונה "העברת TCP" של Cloud IAP, ברשימה הנפתחת Role בוחרים באפשרות Cloud IAP > IAP-secured Tunnel User.
לוחצים על Save.
gcloud
בשלב הזה, צריך לפעול לפי ההוראות למסוף.
שלב 5: מתחברים לצומת ומאשרים שאין לו גישה לאינטרנט
המסוף
נכנסים לדף VM instances במסוף Google Cloud .
מוצאים את הצומת שעבורו יצרתם הרשאות SSH לרכישות מתוך האפליקציה. בעמודה Connect, לוחצים על החץ לתפריט נפתח SSH ובוחרים באפשרות Open in browser window.
אם זו הפעם הראשונה שאתם מתחברים למכונה,Google Cloud ייצור בשבילכם את מפתחות ה-SSH.
בשורת הפקודה של הצומת, מאתרים את מזהה התהליך של מאגר
kube-dns:pgrep '^kube-dns$'
ניגשים למאגר:
sudo nsenter --target PROCESS_ID --net /bin/bash
מ-
kube-dns, מנסים להתחבר לאינטרנט:curl example.com
לא אמורה להתקבל תוצאה. אם כן, יכול להיות שלא יצרתם את האשכול כאשכול פרטי, או שיש בעיה אחרת. כדי לפתור את הבעיה, קראו את המאמר למכונות וירטואליות יש גישה לאינטרנט באופן לא צפוי בלי Public NAT.
כדי לסיים את הפקודה, יכול להיות שתצטרכו להזין
Ctrl+C.
gcloud
מאתרים את השם של אחד מהצמתים באשכול:
gcloud compute instances list
שם של צומת נראה בערך כך:
gke-nat-test-cluster-default-pool-1a4cbd06-3m8v. שימו לב לשם הצומת והשתמשו בו בכל מקום שבו מופיעNODE_NAMEבפקודות הבאות.מתחברים לצומת:
gcloud compute ssh NODE_NAME \ --zone us-east4-c \ --tunnel-through-iapבשורת הפקודה של הצומת, מאתרים את מזהה התהליך של מאגר
kube-dns:pgrep '^kube-dns$'
ניגשים למאגר:
sudo nsenter --target PROCESS_ID --net /bin/bash
מ-
kube-dns, מנסים להתחבר לאינטרנט:curl example.com
לא אמורה להתקבל תוצאה.כדי לסיים את הפקודה, יכול להיות שתצטרכו להזין את
Ctrl+C.
שלב 6: יצירת הגדרת NAT באמצעות Cloud Router
צריך ליצור את Cloud Router באותו אזור שבו נמצאות המכונות הווירטואליות שמשתמשות ב-Public NAT. Public NAT משמש רק להצבת פרטי NAT במכונות הווירטואליות. הוא לא משמש כחלק משער NAT בפועל.
ההגדרה הזו מאפשרת לכל המכונות באזור להשתמש ב-Public NAT לכל טווחי ה-IP הראשיים והמשניים. המערכת גם מקצה באופן אוטומטי את כתובות ה-IP החיצוניות לשער ה-NAT. אפשרויות נוספות מפורטות במאמרי העזרה בנושא Google Cloud CLI.
המסוף
נכנסים לדף Cloud NAT במסוף Google Cloud .
לוחצים על שנתחיל? או על יצירת שער NAT.
מזינים את
nat-configבשדה Gateway name.מגדירים את רשת ה-VPC ל-
custom-network1.מגדירים את Region לערך us-east4.
בקטע Cloud Router, בוחרים באפשרות יצירת נתב חדש.
- מזינים שם של
nat-router. - לוחצים על יצירה.
- מזינים שם של
לוחצים על יצירה.
gcloud
יוצרים Cloud Router:
gcloud compute routers create nat-router \ --network custom-network1 \ --region us-east4מוסיפים הגדרה לנתב:
gcloud compute routers nats create nat-config \ --router-region us-east4 \ --router nat-router \ --nat-all-subnet-ip-ranges \ --auto-allocate-nat-external-ips
Terraform
אתם יכולים להשתמש במשאב של Terraform כדי ליצור Cloud Router.
אתם יכולים להשתמש במודול של Terraform כדי ליצור הגדרת NAT.
שלב 7: מנסים להתחבר שוב לאינטרנט
יכול להיות שיחלפו עד שלוש דקות עד שהגדרת ה-NAT תופץ, לכן צריך להמתין לפחות דקה לפני שמנסים לגשת שוב לאינטרנט.
אם אתם לא מחוברים ל-kube-dns, אתם צריכים להתחבר מחדש באמצעות השלבים שמפורטים בשלב 5. אחרי שמתחברים, מריצים מחדש את הפקודה curl:
curl example.com
הפלט אמור להיראות כך:
<html>
<head>
<title>Example Domain</title>
...
...
...
</head>
<body>
<div>
<h1>Example Domain</h1>
<p>This domain is established to be used for illustrative examples in documents. You can use this
domain in examples without prior coordination or asking for permission.</p>
<p><a href="http://www.iana.org/domains/example">More information...</a></p>
</div>
</body>
</html>