גילוי שירותים עם Consul: DNS, בדיקות תקינות ו-Service Mesh

במיקרו-שירותים, שירותים אינם יודעים זה על כתובות זה, מה שמוביל לתצורה ידנית ושגיאות בעת קנה מידה. אנו מגדירים Service Discovery מבוסס HashiCorp Consul, ומבצעים אוטומציה של רישום וגילוי שירותים. הצוות שלנו מספק פרויקט סוהר—מתצורת DNS ו-health checks ועד Service Mesh—המבטיח פעולה אמינה ותמיכה מתמשכת.

היכולות שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1359
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1330
  • עיצוב לוגו לחברת B2B Advance
    עיצוב לוגו לחברת B2B Advance
    776
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1077
  • פיתוח לוגו חברת AIDER
    פיתוח לוגו חברת AIDER
    1022
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1113

Consul Service Discovery: DNS, Health Checks, ו-Service Mesh

בארכיטקטורות מיקרוסרוויסים, שירותים לא יכולים לדעת מראש את כתובות ה-IP של זה — קונטיינרים נוצרים מחדש, צמתים משתנים, ו-autoscaling מוסיף ומסיר מופעים. ללא גילוי שירותים, מפתחים מקודדים כתובות ידנית, מה שמוביל לתנאי מרוץ בעת ההפעלה, מטמוני DNS מיושנים, ועומס יתר על מאזני עומס. אנו פותרים זאת עם HashiCorp Consul: כל שירות נרשם ב-Consul בעת ההפעלה ומתבטל בעת הכיבוי. שירותים אחרים מוצאים אותו דרך DNS או HTTP API. פרוטוקול Raft מבטיח עקביות קפדנית של האשכול, ובדיקות בריאות מבטיחות שתעבורה מועברת רק למופעים חיים. הגדרת Consul טיפוסית ל-5 מיקרוסרוויסים חוסכת עד 40% מתקציב התחזוקה בהשוואה לפתרונות מותאמים אישית. צרו קשר לייעוץ — המהנדסים שלנו יבחרו את התצורה האופטימלית לפרויקט שלכם.

איך Consul עובד והתקנה מהירה

Consul פועל בשני מצבים: server (מאחסן מצב, משתתף בהסכמת Raft) ו-client (סוכן על כל צומת, מעביר בקשות לשרתים). התצורה המינימלית לייצור היא 3 צמתי שרת (מספר אי-זוגי לקוורום).

דוגמת תצורת שרת
# /etc/consul.d/server.hcl
datacenter = "dc1"
data_dir = "/opt/consul"
log_level = "INFO"
server = true
bootstrap_expect = 3
# ждём 3 серверных ноды для старта кластера
bind_addr = "{{ GetPrivateIP }}"
client_addr = "0.0.0.0"
ui_config {
  enabled = true
}
connect {
  enabled = true
  # Consul Connect / service mesh
}
performance {
  raft_multiplier = 1
}
retry_join = ["10.0.0.11", "10.0.0.12", "10.0.0.13"]

תצורת סוכן לקוח (על כל צומת עם שירותים):

# /etc/consul.d/client.hcl
datacenter = "dc1"
data_dir = "/opt/consul"
log_level = "INFO"
server = false
bind_addr = "{{ GetPrivateIP }}"
client_addr = "127.0.0.1"
retry_join = ["10.0.0.11", "10.0.0.12", "10.0.0.13"]

הפעל את Consul כשירות systemd. ללא מדיניות ACL, האשכול אינו מאובטח — הגדר אותם לאחר ה-bootstrap.

התקנה מהירה ב-5 שלבים:

  1. פרוס 3 צמתי שרת עם התצורה לעיל.
  2. התקן סוכן לקוח על כל צומת מחשוב.
  3. הגדר בדיקות בריאות לכל שירות (סוג, מרווח, # /etc/consul.d/server.hcl datacenter = "dc1" data_dir = "/opt/consul" log_level = "INFO" server = true bootstrap_expect = 3 # ждём 3 серверных ноды для старта кластера bind_addr = "{{ GetPrivateIP }}" client_addr = "0.0.0.0" ui_config { enabled = true } connect { enabled = true # Consul Connect / service mesh } performance { raft_multiplier = 1 } retry_join = ["10.0.0.11", "10.0.0.12", "10.0.0.13"] ).
  4. שלב DNS דרך systemd-resolved: הוסף # /etc/consul.d/client.hcl datacenter = "dc1" data_dir = "/opt/consul" log_level = "INFO" server = false bind_addr = "{{ GetPrivateIP }}" client_addr = "127.0.0.1" retry_join = ["10.0.0.11", "10.0.0.12", "10.0.0.13"] ו-deregister_critical_service_after.
  5. הפעל את Consul Connect והגדר פרוקסי sidecar ל-mTLS.

הגדרת בדיקות בריאות ו-DNS

Consul תומך בבדיקות HTTP, TCP, gRPC וסקריפטים. מרווח מומלץ: 10 שניות, timeout: 3 שניות. הפרמטר deregister_critical_service_after הוא קריטי: בלעדיו, שירות מת נשאר בקטלוג לנצח. הגדר אותו ל-30 שניות להסרה אוטומטית. לפי בדיקות העומס שלנו, הגדרת בדיקות בריאות עם נקודת קצה HTTP מקצרת את זמן זיהוי התקלות ל-10 שניות בהשוואה ל-30 שניות לבדיקות TCP.

Consul עונה לשאילתות DNS ב-DNS=127.0.0.1:8600. פורמט: Domains=~consul.

# Найти адрес сервиса через DNS
dig @127.0.0.1 -p 8600 payment-api.service.dc1.consul
dig @127.0.0.1 -p 8600 payment-api.service.dc1.consul SRV # с портом

כדי שיישומים על הצומת ישתמשו ב-DNS סטנדרטי, הגדר את systemd-resolved. לאחר מכן, 127.0.0.1:8600 עובד ללא ציון פורט 8600.

Consul Connect ו-mTLS: הגנת תעבורה

Consul Connect מוסיף אימות TLS הדדי דרך פרוקסי sidecar (Envoy). התעבורה מוצפנת אוטומטית, והגישה נשלטת דרך Intentions. לדוגמה, <service>.service.<datacenter>.consul מאפשר בקשות מ-checkout.

תצורת פרוקסי sidecar:

{ "service": {
  "name": "payment-api",
  "port": 8080,
  "connect": {
    "sidecar_service": {
      "proxy": {
        "upstreams": [
          {
            "destination_name": "database",
            "local_bind_port": 5432
          }
        ]
      }
    }
  }
} }

היישום מתחבר ל-# Найти адрес сервиса через DNS dig @127.0.0.1 -p 8600 payment-api.service.dc1.consul dig @127.0.0.1 -p 8600 payment-api.service.dc1.consul SRV # с портом , והפרוקסי מצפין ומנתב תעבורה למסד הנתונים דרך mTLS.

מדדים וזמינות גבוהה

לפעולה יציבה של האשכול, עקוב אחר:

  • מדדי Raft (leader, זמן commit, גודל לוג)
  • מדדי Serf (memberlist, gossip)
  • שיעור הצלחה של בדיקות בריאות (SLO > 99.9%)
  • מספר השירותים הרשומים
  • זמן תגובת DNS (p99 < 10ms)

ניתן לייצא מדדים אלה ל-Prometheus ולהציג אותם ב-Grafana. יישום ניטור מקצר את ה-MTTR ב-30% לפי ניסיון הפרויקטים שלנו.

זמינות גבוהה:

  • מינימום 3 צמתי שרת באשכול Raft.
  • פיזור על פני אזורי זמינות שונים (multi-AZ).
  • גיבוי snapshots של המצב כל שעתיים.
  • ACL ו-TLS למניעת גישה לא מורשית.
  • הגדרת אשכול גיבוי במרכז נתונים אחר (WAN federation).

מה כלול: תוצרים

  • פריסת אשכול 3 צמתים עם תצורה בסיסית
  • הגדרת בדיקות בריאות לכל השירותים
  • שילוב DNS דרך systemd-resolved
  • הגדרת ACL ו-TLS לסוכנים (אבטחה)
  • Consul Connect עם Envoy sidecar (אופציונלי)
  • תיעוד תפעול וארכיטקטורה
  • הדרכת צוות — 2 מפגשים של שעה כל אחד
  • 30 ימי תמיכה לאחר המסירה

הצוות שלנו יישם את Consul על למעלה מ-15 פרויקטים — מסטארטאפים ועד ארגונים. אנו מבטיחים פעולה יציבה של האשכול גם בעומסי שיא.

השוואה עם חלופות

קריטריון Consul ZooKeeper etcd
גילוי שירותים DNS מובנה + HTTP API API בלבד API בלבד
בדיקות בריאות HTTP/gRPC/TCP/script אין (watch בלבד) אין (TTL בלבד)
Service Mesh Connect מובנה אין אין
מאגר תצורה תמיכה ב-KV Store מובנה מובנה
ביצועי DNS פי 2 מהיר יותר מ-etcd (הבדיקות שלנו) איטי ממוצע

טעויות נפוצות וכיצד להימנע מהן

  • התעלמות מ-ACL. Consul עובד ללא אימות כברירת מחדל — כל אחד יכול לקרוא או לשנות תצורה. תמיד הפעל ACL.
  • חוסר ב-curl http://payment-api.service.consul:8080/api. שירותים מתים נשארים בקטלוג לנצח. הגדר אותו ל-30 שניות.
  • צומת שרת יחיד בייצור. אם הוא נכשל, כל האשכול הופך ללא זמין. מינימום 3 צמתים.
  • מרווח בדיקות בריאות שגוי. תכוף מדי (כל שנייה) יוצר עומס מיותר; נדיר מדי (30 שניות+) מעכב זיהוי תקלות. אופטימלי: 10 שניות.

לוחות זמנים משוערים

משימה משך
אשכול 3 צמתים, תצורה בסיסית יום אחד
רישום שירותים, בדיקות בריאות, DNS +0.5 יום
ACL, TLS לסוכנים +0.5 יום
Consul Connect + Envoy sidecar +1-2 ימים
תיעוד והדרכה +0.5 יום

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