הגדרת שמות דומיינים עם כתובות IP קבועות

במדריך הזה מוסבר איך להשתמש ב-Google Kubernetes Engine ‏ (GKE) כדי לחשוף את אפליקציית האינטרנט שלכם באינטרנט בכתובת IP חיצונית סטטית, ואיך להגדיר שם דומיין שיפנה לאפליקציה.

במדריך הזה אנחנו מניחים שיש לכם שם דומיין רשום, כמו example.com.

מטרות

במדריך הזה מוסבר איך:

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

עלויות

במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:

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

יכול להיות שמשתמשים חדשים ב- Google Cloud זכאים לתקופת ניסיון בחינם.

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

לפני שמתחילים

כדי להפעיל את Kubernetes Engine API:
  1. נכנסים ל דף Kubernetes Engine במסוף Google Cloud .
  2. יוצרים או בוחרים פרויקט.
  3. מחכים עד שממשק ה-API והשירותים הקשורים מופעלים. הפעולה יכולה להימשך כמה דקות.
  4. Verify that billing is enabled for your Google Cloud project.

מתקינים את כלי שורת הפקודה הבאים שמשמשים במדריך הזה:

  • הדגל gcloud משמש ליצירה ולמחיקה של אשכולות Kubernetes Engine. ‫gcloud כלול ב-gcloud CLI.
  • kubectl משמש לניהול Kubernetes, מערכת תזמור האשכולות שמשמשת את Kubernetes Engine. אפשר להתקין את kubectl באמצעות gcloud:
    gcloud components install kubectl

משכפלים את הקוד לדוגמה מ-GitHub:

git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples
cd kubernetes-engine-samples/quickstarts/hello-app/manifests

הגדרת ברירות מחדל לכלי שורת פקודה gcloud

כדי לחסוך זמן בהקלדת מזהה הפרויקט ואפשרויות אזור Compute Engine בכלי gcloud של שורת הפקודה, אפשר להגדיר את ברירות המחדל:
gcloud config set project project-id
gcloud config set compute/zone compute-zone

יצירת אשכול

יצירת אשכול:

gcloud container clusters create-auto domain-test

פריסת אפליקציית האינטרנט

קובץ המניפסט הבא מתאר Deployment (פריסה) שמריצה קובץ אימג' של קונטיינר של אפליקציית אינטרנט לדוגמה:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: helloweb
  labels:
    app: hello
spec:
  selector:
    matchLabels:
      app: hello
      tier: web
  template:
    metadata:
      labels:
        app: hello
        tier: web
    spec:
      containers:
      - name: hello-app
        image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
        ports:
        - containerPort: 8080
        resources:
          requests:
            cpu: 200m

יוצרים את הפריסה:

kubectl apply -f helloweb-deployment.yaml

חשיפת האפליקציה

אפשר לחשוף את האפליקציה ב-GKE באחת מהשיטות הבאות:

מידע נוסף על היתרונות והחסרונות של כל שיטה זמין במאמר הגדרה של מאזן עומסים של אפליקציות (ALB) חיצוני באמצעות Ingress.

שימוש בשירות

כדי לוודא שלאפליקציה שלכם יש כתובת IP חיצונית סטטית, אתם צריכים לשמור כתובת IP סטטית.

אם בוחרים לחשוף את האפליקציה באמצעות Service, צריך ליצור כתובת IP אזורית. כתובות IP גלובליות פועלות רק עם סוג המשאב Ingress, כמו שמוסבר בקטע הבא.

כדי להשתמש בשירות, צריך ליצור כתובת IP סטטית בשם helloweb-ip באזור us-central1:

gcloud

gcloud compute addresses create helloweb-ip --region us-central1

מוצאים את כתובת ה-IP הסטטית שיצרתם:

gcloud compute addresses describe helloweb-ip --region us-central1

הפלט אמור להיראות כך:

...
address: 203.0.113.32
...

Config Connector

הערה: כדי לבצע את השלב הזה, צריך להשתמש ב-Config Connector. פועלים לפי הוראות ההתקנה כדי להתקין את Config Connector באשכול.

apiVersion: compute.cnrm.cloud.google.com/v1beta1
kind: ComputeAddress
metadata:
  name: helloweb-ip
spec:
  location: us-central1

שומרים את קובץ המניפסט בשם compute-address-regional.yaml.

מחילים את המניפסט על האשכול:

  kubectl apply -f compute-address-regional.yaml

מוצאים את כתובת ה-IP הסטטית שיצרתם:

  kubectl get computeaddress helloweb-ip -o jsonpath='{.spec.address}'

במניפסט הבא מתואר Service מסוג LoadBalancer, שיוצר מאזן עומסי רשת חיצוני להעברת סיגנל ללא שינוי כדי לחשוף Pods עם כתובת IP חיצונית.

apiVersion: v1
kind: Service
metadata:
  name: helloweb
  labels:
    app: hello
  annotations:
    networking.gke.io/load-balancer-ip-addresses: "helloweb-ip"
spec:
  selector:
    app: hello
    tier: web
  ports:
  - port: 80
    targetPort: 8080
  type: LoadBalancer

יוצרים את השירות:

kubectl apply -f helloweb-service-static-ip.yaml

צופים בכתובת ה-IP השמורה שמשויכת למאזן העומסים:

kubectl get service

הפלט אמור להיראות כך:

NAME               CLUSTER-IP      EXTERNAL-IP      PORT(S)          AGE
helloweb           10.31.254.176   203.0.113.32     80:30690/TCP     54s

שימוש ב-Ingress

אם בוחרים לחשוף את האפליקציה באמצעות Ingress, צריך לשמור כתובת IP סטטית גלובלית. משתמשים בהערה kubernetes.io/ingress.global-static-ip-name כדי לציין כתובת IP גלובלית.

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

במאמר הגדרה של מאזן עומסים חיצוני של אפליקציות (ALB) עם Ingress מוסבר איך להשתמש ב-Ingress כדי לחשוף את האפליקציות שלכם לאינטרנט.

כדי ליצור כתובת IP סטטית גלובלית בשם helloweb-ip:

gcloud

gcloud compute addresses create helloweb-ip --global

מוצאים את כתובת ה-IP הסטטית שיצרתם:

gcloud compute addresses describe helloweb-ip --global

הפלט אמור להיראות כך:

...
address: 203.0.113.32
...

Config Connector

הערה: כדי לבצע את השלב הזה, צריך להשתמש ב-Config Connector. פועלים לפי הוראות ההתקנה כדי להתקין את Config Connector באשכול.

apiVersion: compute.cnrm.cloud.google.com/v1beta1
kind: ComputeAddress
metadata:
  name: helloweb-ip
spec:
  location: global

שומרים את קובץ המניפסט בשם compute-address-global.yaml.

מחילים את המניפסט על האשכול:

  kubectl apply -f compute-address-global.yaml

קובץ המניפסט הבא מתאר Ingress שחושף אפליקציית אינטרנט בכתובת IP סטטית עם שני משאבים:

  • Service עם type:NodePort
  • Ingress שמוגדר עם שם השירות והערה של כתובת IP קבועה
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: helloweb
  annotations:
    kubernetes.io/ingress.global-static-ip-name: helloweb-ip
  labels:
    app: hello
spec:
  defaultBackend:
    service:
      name: helloweb-backend
      port:
        number: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: helloweb-backend
  labels:
    app: hello
spec:
  type: NodePort
  selector:
    app: hello
    tier: web
  ports:
  - port: 8080
    targetPort: 8080

ההערה kubernetes.io/ingress.global-static-ip-name מציינת את השם של משאב כתובת ה-IP הגלובלית שיוקצה למאזן העומסים.

מחילים את המניפסט על האשכול:

kubectl apply -f helloweb-ingress-static-ip.yaml

צופים בכתובת ה-IP שמשויכת למאזן העומסים:

kubectl get ingress

הפלט אמור להיראות כך:

NAME       HOSTS     ADDRESS          PORTS     AGE
helloweb   *         203.0.113.32     80        4m

הצגת כתובת ה-IP הסטטית השמורה

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

curl http://203.0.113.32/

הפלט אמור להיראות כך:

Hello, world!
Hostname: helloweb-3766687455-8lvqv

הגדרת רשומות של שם הדומיין

כדי שדפדפנים יבצעו שאילתות לגבי שם הדומיין, למשל example.com, או לגבי שם תת-הדומיין, למשל blog.example.com, כדי להפנות לכתובת ה-IP הסטטית שהזמנתם, אתם צריכים לעדכן את רשומות ה-DNS (שרת שמות הדומיין) של שם הדומיין.

צריך ליצור רשומת DNS מסוג A (כתובת) עבור שם הדומיין או שם תת-הדומיין, ולהגדיר את הערך שלה עם כתובת ה-IP השמורה.

רשומות ה-DNS של הדומיין מנוהלות על ידי שרת השמות. שרת השמות יכול להיות ה'רשם' שדרכו רשמתם את הדומיין, שירות DNS כמו Cloud DNS או ספק אחר של צד שלישי.

  • אם שרת השמות שלכם הוא Cloud DNS: פועלים לפי המדריך לתחילת העבודה עם Cloud DNS כדי להגדיר רשומת DNS מסוג A עבור שם הדומיין עם כתובת ה-IP השמורה של האפליקציה.

  • אם שרת השמות שלכם הוא של ספק אחר: כדי להגדיר את שם הדומיין, צריך לעיין במסמכי התיעוד של ספק ה-DNS בנושא הגדרת רשומות A של DNS. אם בחרתם להשתמש ב-Cloud DNS במקום זאת, תוכלו לעיין במאמר מעבר ל-Cloud DNS.

כניסה לשם הדומיין

כדי לוודא שרשומות ה-DNS A של שם הדומיין מופנות לכתובת ה-IP שהזמנתם, נכנסים לשם הדומיין.

כדי להריץ שאילתת DNS לרשומת A של שם הדומיין, מריצים את הפקודה host:

host example.com

הפלט אמור להיראות כך:

example.com has address 203.0.113.32

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

הסרת המשאבים

כדי לא לצבור חיובים לחשבון Google Cloud על המשאבים שבהם השתמשתם במדריך הזה, אתם יכולים למחוק את הפרויקט שמכיל את המשאבים או להשאיר את הפרויקט ולמחוק את המשאבים בנפרד.

  1. מוחקים את השירות ואת Ingress:

    kubectl delete ingress,service -l app=hello
    
  2. משחררים את כתובת ה-IP הסטטית השמורה. אחרי שמאזן העומסים נמחק, כתובת ה-IP השמורה שלא נעשה בה שימוש מחויבת לפי התמחור של כתובות IP שלא נעשה בהן שימוש.

    • אם השתמשתם בשירות:

      gcloud compute addresses delete helloweb-ip --region us-central1
      
    • אם השתמשתם ב-Ingress:

      gcloud compute addresses delete helloweb-ip --global
      
  3. מוחקים את האפליקציה לדוגמה:

    kubectl delete -f helloweb-deployment.yaml
    
  4. מחיקת האשכול:

    gcloud container clusters delete domain-test
    

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