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

כל אפליקציות Kf שמציגות תנועת HTTP למשתמשים או לאפליקציות מחוץ לאשכול חייבות להיות משויכות לשם דומיין.

ב-Kf יש שלושה מיקומים שבהם אפשר להגדיר דומיינים. הם מסודרים לפי סדר העדיפות הבא:

  1. אפליקציות
  2. Spaces
  3. config-defaults ConfigMap במרחב השמות kf

config-defaults ConfigMap

‫ConfigMap‏ config-defaults מכיל הגדרות ברמת האשכול ל-Kf, ואדמינים של האשכול יכולים לערוך אותו. הערכים ב-ConfigMap נקראים על ידי בקר המרחבים ומשנים את ההגדרה שלהם. ערכי הדומיין משתקפים בשדה status.networkConfig.domains של המרחב.

כדי לשנות את הדומיין של אשכול Kf, עורכים את config-defaults ConfigMap ב-kf Namespace:

kubectl edit configmap config-defaults -n kf

מוסיפים או מעדכנים את הערך של המפתח spaceClusterDomain באופן הבא:

spaceClusterDomain: my-domain.com

כדי לוודא שההגדרה עודכנה בצורה נכונה, בודקים את ערך הדומיין במרחב:

kf space SPACE_NAME -o "jsonpath={.status.networkConfig.domains[]['domain']}"

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

Getting Space some-space
some-space.my-domain.com

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

דומיינים של מרחבים

המרחבים הם המקום המוסמך להגדרת הדומיין. אתם יכולים להקצות דומיינים ותת-דומיינים לכל מרחב כדי שהמפתחים יוכלו להשתמש בהם. השדה להגדרת הדומיינים הוא spec.networkConfig.domains.

כדי לראות את הדומיינים שהוקצו למרחב, משתמשים ב-kf space:

kf space SPACE_NAME

בפלט, השדה Spec מכיל הגדרה ספציפית של המרחב, והשדה Status משקף את ההגדרה של המרחב עם ברירות מחדל ברמת האשכול שנוספו בסוף:

...
Spec:
  Network Config:
    Domains:
      Domain: my-space.mycompany.com
...
Status:
  Network Config:
    Domains:
      Domain: my-space.mycompany.com
      Domain: my-space.prod.us-east1.kf.mycompany.com

הגדרה באמצעות ה-CLI

ממשק kf CLI תומך במוטציות בדומיינים של Space. כל פקודה מפיקה פלט של השוואה בין ההגדרות הישנות לחדשות.

כדי להוסיף דומיין חדש באמצעות kf configure-space append-domain:

kf configure-space append-domain SPACE_NAME myspace.mycompany.com

הוספה של דומיין או הגדרה של דומיין קיים כברירת מחדל באמצעות kf configure-space set-default-domain:

kf configure-space set-default-domain SPACE_NAME myspace.mycompany.com

ולבסוף, מסירים דומיין:

kf configure-space remove-domain SPACE_NAME myspace.mycompany.com

אפליקציות

אפליקציות יכולות לציין דומיינים כחלק מההגדרה שלהן. המיפוי של המסלולים לאפליקציות במהלך kf push מתבצע לפי הלוגיקה הבאה:

let current_routes  = The set of routes already on the app
let manifest_routes = The set of routes defined by the manifest
let flag_routes     = The set of routes supplied by the --route flag(s)
let no_route        = Whether the manifest has no-route:true or --no-route is set
let random_route    = Whether the manifest has random-route:true or --random-route is set

let new_routes = Union(current_routes, manifest_routes, flag_routes)

if new_routes.IsEmpty() then
  if random_route then
    new_routes.Add(CreateRandomRoute())
  else
    new_routes.Add(CreateDefaultRoute())
  end
end

if no_route then
  new_routes.RemoveAll()
end

return new_routes

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

תבניות לדומיין

‫Kf תומך בהחלפת משתנים בדומיינים. ההחלפה מאפשרת להתאים אישית דומיין יחיד ברמת האשכול לכל מרחב, ולהגיב לשינויים בכתובת ה-IP של הכניסה. ההחלפה מתבצעת במשתנים עם התחביר $(VARIABLE_NAME) שמופיעים בדומיין.

משתנה תיאור
CLUSTER_INGRESS_IP כתובת ה-IPv4 של ה-Ingress של האשכול.
SPACE_NAME שם המרחב.

דוגמאות

הדוגמאות הבאות מראות איך אפשר להשתמש במשתני דומיין כדי לתמוך במגוון של מבנים ארגוניים שונים ודפוסי אשכולות.

  • שימוש בשירות DNS עם תו כללי כמו nip.io:

    $(SPACE_NAME).$(CLUSTER_INGRESS_IP).nip.io
    
  • דומיין לארגון עם DNS שמנוהל באופן מרכזי:

    $(SPACE_NAME).cluster-name.example.com
    
  • דומיין לצוותים שמנהלים את ה-DNS שלהם:

    cluster-name.$(SPACE_NAME).example.com
    
  • דומיין לאשכול עם מעבר גיבוי חם ומפסק זרם חיצוני:

    $(SPACE_NAME)-failover.cluster-name.example.com
    

ההבדלים בין Kf לבין CF

  • ב-Kf Spaces, שם המרחב מופיע לפני הדומיין ברמת האשכול.
  • מערכת Kf לא בודקת אם יש התנגשויות בדומיין במסלולים שצוינו על ידי המשתמש.