צוריק צו מיקראָסערוויסעס מיט Istio. טייל 1

צוריק צו מיקראָסערוויסעס מיט Istio. טייל 1

נאטיץ. טראַנסל.: סערוויס מעשעס האָבן באשטימט ווערן אַ באַטייַטיק לייזונג אין מאָדערן ינפראַסטראַקטשער פֿאַר אַפּלאַקיישאַנז נאָך מיקראָסערוויס אַרקאַטעקטשער. כאָטש Istio קען זיין אויף די ליפן פון פילע DevOps ענדזשאַנירז, עס איז אַ פערלי נייַ פּראָדוקט וואָס, כאָטש פולשטענדיק אין טערמינען פון די קייפּאַבילאַטיז עס גיט, קען דאַרפן אַ באַטייטיק סומע פון ​​​​צייט צו באַקומען באַקאַנט מיט. דער דייַטש ינזשעניר רינאָר מאַלאָקו, וואָס איז פאַראַנטוואָרטלעך פֿאַר וואָלקן קאַמפּיוטינג פֿאַר גרויס קלייאַנץ אין די טעלעקאָממוניקאַטיאָן פירמע אָראַנדזש נעטוואָרקס, האט געשריבן אַ ווונדערלעך סעריע פון ​​מאַטעריאַלס וואָס לאָזן איר צו געשווינד און טיף ונטערטוקנ זיך אין יסטיאָ. ער הייבט זיין געשיכטע מיט וואָס יסטיאָ קענען טאָן אין אַלגעמיין און ווי איר קענען געשווינד זען עס מיט דיין אייגענע אויגן.

יסטיאָ - אַן עפֿן מקור פּרויעקט דעוועלאָפּעד אין מיטאַרבעט מיט טימז פון Google, IBM און Lyft. עס סאַלווז קאַמפּלעקסיטיז וואָס שטייען אין מיקראָסערוויס-באזירט אַפּלאַקיישאַנז, אַזאַ ווי:

  • פאַרקער מאַנאַגעמענט: טיימאַוץ, ריטריעס, מאַסע באַלאַנסינג;
  • זיכערקייַט: סוף באַניצער אָטענטאַקיישאַן און דערלויבעניש;
  • אָבסערוואַביליטי: טרייסינג, מאָניטאָרינג, לאָגינג.

אַלע פון ​​​​די קענען זיין סאַלווד אויף די אַפּלאַקיישאַן מדרגה, אָבער נאָך דיין באַדינונגס וועט ניט מער זיין "מיקראָ". אַלע די עקסטרע מי צו סאָלווע די פּראָבלעמס איז אַ וויסט פון פירמע רעסורסן וואָס קען זיין געוויינט גלייַך פֿאַר געשעפט ווערט. זאל ס קוק בייַ אַ בייַשפּיל:

פּראָיעקט מאַנאַגער: ווי לאַנג עס נעמט צו לייגן אַ באַמערקונגען שטריך?
דעוועלאָפּער: צוויי ספּרינץ.

MP: וואָס? .. עס איז נאָר CRUD!
R: טאן CRUD איז דער גרינג טייל, אָבער מיר נאָך דאַרפֿן צו אָטענטאַקייט און אָטערייז יוזערז און באַדינונגס. זינט די נעץ איז אַנרילייאַבאַל, איר וועט דאַרפֿן צו ינסטרומענט ריפּיטיד ריקוועס, ווי געזונט ווי קרייַז צוימען מוסטער אין קלייאַנץ. אויך, צו מאַכן זיכער אַז די גאנצע סיסטעם טוט נישט קראַך, איר דאַרפֿן טיימאַוץ און באַלקכעדז (פֿאַר מער דעטאַילס וועגן ביידע דערמאנט פּאַטערנז, זען שפּעטער אין דעם אַרטיקל - בעערעך טראַנסל.), און אין סדר צו דעטעקט פּראָבלעמס, מאָניטאָרינג, טרייסינג, […]

MP: אָה, לאָזן אונדז נאָר אַרייַנלייגן דעם שטריך אין די פּראָדוקט דינסט.

איך טראַכטן דער געדאַנק איז קלאָר: די סומע פון ​​סטעפּס און מי פארלאנגט צו לייגן איין דינסט איז ריזיק. אין דעם אַרטיקל, מיר וועלן קוקן אין ווי Istio רימוווז אַלע די קאַמפּלעקסיטי דערמאנט אויבן (וואָס איז נישט בדעה צו זיין געשעפט לאָגיק) פון סערוויסעס.

צוריק צו מיקראָסערוויסעס מיט Istio. טייל 1

טאָן: דער אַרטיקל אַסומז אַז איר האָבן ארבעטן וויסן פון Kubernetes. אַנדערש, איך רעקאָמענדירן לייענען מיין הקדמה צו Kubernetes און בלויז נאָך וואָס פאָרזעצן לייענען דעם מאַטעריאַל.

אידעע

אין א וועלט אן איסטיאו מאכט איין סערוויס דירעקטע פארלאנגען צו אן אנדערן, און אין פאל פון א דורכפאל דארף די סערוויס עס אליינס באהאנדלען: מאכן א נייע פרואוו, צושטעלן א צייט-אויס, עפענען א קרייז צוימען אאז"ו ו.

צוריק צו מיקראָסערוויסעס מיט Istio. טייל 1
נעץ פאַרקער אין Kubernetes

Istio אָפפערס אַ ספּעשאַלייזד לייזונג, גאָר אפגעשיידט פון סערוויסעס און פאַנגקשאַנינג דורך ינטערפירינג מיט נעץ קאָמוניקאַציע. און אַזוי עס ימפּלאַמאַנץ:

  • שולד טאָלעראַנץ: באַזירט אויף די סטאַטוס קאָד אין דער ענטפער, עס פארשטייט צי די בקשה איז דורכגעקאָכט און שייַעך-עקסאַקיוטינג עס.
  • קאַנאַרי ראָלאָווץ: רידערעקץ בלויז אַ פאַרפעסטיקט פּראָצענט פון ריקוועס צו די נייַע ווערסיע פון ​​​​די סערוויס.
  • מאָניטאָרינג און מעטריקס: ווי לאַנג האט עס נעמען פֿאַר די דינסט צו ריספּאַנד?
  • טרייסינג און אָבסערוואַציע: מוסיף ספּעציעל כעדערז צו יעדער בקשה און טראַסעס זיי אַריבער די קנויל.
  • זיכערקייַט: ריטריווז JWT טאָקען, אָטענטאַקייץ און אָטערייזיז ניצערס.

דאָס זענען בלויז אַ ביסל פון די פּאַסאַבילאַטיז (טאַקע נאָר אַ ביסל!) צו ינטריג איר. איצט לאָזן ס ונטערטוקנ זיך אין די טעכניש דעטאַילס!

יסטיאָ אַרקאַטעקטשער

Istio ינטערסעפּט אַלע נעץ פאַרקער און אַפּלייז אַ סכום פון כּללים צו עס, ינסערטינג אַ קלוג פּראַקסי אין די פאָרעם פון אַ סיידקאַר קאַנטיינער אין יעדער פּאָד. פּראַקסיז וואָס אַקטאַווייט אַלע קייפּאַבילאַטיז פאָרעם אַ דאַטאַ פלאַך, און זיי קענען זיין דינאַמיקאַללי קאַנפיגיערד ניצן קאָנטראָל פּליין.

דאַטאַ פלאַך

פּראַקסיז ינסערטאַד אין פּאָדס לאָזן Istio לייכט טרעפן די באדערפענישן וואָס מיר דאַרפֿן. פֿאַר בייַשפּיל, לאָמיר קאָנטראָלירן די פאַנגקשאַנז פון ריטריי און קרייַז צוימען.

צוריק צו מיקראָסערוויסעס מיט Istio. טייל 1
ווי רעטריעס און קרייַז ברייקינג זענען ימפּלאַמענאַד אין Envoy

סאַמערייז:

  1. ענוווי (מיר רעדן וועגן אַ פּראַקסי ליגן אין אַ סיידקאַר קאַנטיינער, וואָס איז פונאנדערגעטיילט ווי באַזונדער פּראָדוקט - בעערעך. איבערזעצן) סענדז אַ בקשה צו דער ערשטער בייַשפּיל פון דינסט ב און פיילז.
  2. Envoy Sidecar פרובירט ווידער (פרובירט ווידער). (1)
  3. די בקשה פיילז און איז אומגעקערט צו די פּראַקסי וואָס האָט גערופֿן עס.
  4. דאָס עפֿנט קרייַז ברעאַקער און רופט די ווייַטער דינסט פֿאַר סאַבסאַקוואַנט ריקוועס. (2)

דאָס מיינט אַז איר טאָן ניט האָבן צו נוצן אן אנדער ריטריי ביבליאָטעק, איר טאָן ניט האָבן צו מאַכן דיין אייגענע ימפּלאַמענטיישאַן פון קרייַז ברעאַקינג און סערוויס ופדעקונג אין פּראָגראַממינג שפּראַך X, Y אָדער Z. אַלע דעם און פיל מער איז בנימצא אויס פון די קעסטל אין יסטיאָ און טוט נישט דאַרפן קיין ענדערונגען אין די קאָד.

גרויס! איצט איר ווילט צו גיין אויף אַ נעסיע מיט יסטיאָ, אָבער איר נאָך האָבן עטלעכע ספקות, אָופּאַנד פראגעס. אויב דאָס איז אַ וניווערסאַל לייזונג פֿאַר אַלע מאל אין לעבן, איר האָט אַ נאַטירלעך חשד: נאָך אַלע, אַלע אַזאַ סאַלושאַנז אין פאַקט זענען ומפּאַסיק פֿאַר קיין פאַל.

און לעסאָף איר פרעגן: "איז עס קוסטאָמיזאַבלע?"

איצט איר זענט גרייט פֿאַר די ים נעסיע, לאָזן אונדז באַקומען באַקאַנט מיט די קאָנטראָל פלאַך.

קאָנטראָל פּליין

עס באשטייט פון דרייַ קאַמפּאָונאַנץ: פּילאָט, מיקסער и ציטאַדעל, וואָס אַרבעט צוזאַמען צו קאַנפיגיער ענוויס צו מאַרשרוט פאַרקער, דורכפירן פּאַלאַסיז און קלייַבן טעלעמעטרי דאַטן. סכעמאַטיש אַלץ קוקט ווי דאָס:

צוריק צו מיקראָסערוויסעס מיט Istio. טייל 1
ינטעראַקשאַן פון קאָנטראָל פּלאַנע מיט דאַטאַ פלאַך

ענוואָיס (ד"ה דאַטן פלאַך) זענען קאַנפיגיערד ניצן Kubernetes CRD (קאַסטאַם ריסאָרס דעפינישאַנז) דיפיינד דורך Istio און ספּאַסיפיקלי בדעה פֿאַר דעם צוועק. וואָס דאָס מיינט צו איר איז אַז זיי ויסקומען צו זיין נאָר אן אנדער מיטל אין Kubernetes מיט אַ באַקאַנט סינטאַקס. אַמאָל באשאפן, דעם מיטל וועט זיין פּיקט אַרויף דורך די קאָנטראָל פלאַך און געווענדט צו די ענוואָיס.

שייכות פון סערוויסעס צו Istio

מיר האָבן דיסקרייבד די שייכות פון Istio צו סערוויסעס, אָבער נישט די פאַרקערט: ווי טאָן די סערוויסעס פאַרבינדן צו Istio?

צו זיין ערלעך, סערוויסעס זענען ווי אַווער פון יסטיאָ ס בייַזייַן ווי פיש זענען פון וואַסער ווען זיי פרעגן זיך, "וואָס איז וואַסער סייַ ווי סייַ?"

צוריק צו מיקראָסערוויסעס מיט Istio. טייל 1
געמעל וויקטאָריאַ דימיטראַקאָפּאָולאָס: — װי אזוי געפעלט איר דאס װאםער ? - וואָס איז וואַסער סייַ ווי סייַ?

אזוי, איר קענען נעמען אַ ארבעטן קנויל און נאָך דיפּלויינג די Istio קאַמפּאָונאַנץ, די סערוויסעס ליגן אין עס וועט פאָרזעצן צו אַרבעטן, און נאָך רימוווינג די קאַמפּאָונאַנץ, אַלץ וועט זיין גוט ווידער. עס איז קלאָר אַז אין דעם פאַל איר וועט פאַרלירן די קייפּאַבילאַטיז צוגעשטעלט דורך Istio.

גענוג טעאָריע - לאָמיר שטעלן דעם וויסן אין פיר!

יסטיאָ אין פיר

Istio ריקווייערז אַ קובערנעטעס קנויל מיט לפּחות 4 ווקפּוס און 8 גיגאבייט פון באַראַן בנימצא. צו געשווינד שטעלן אַ קנויל און נאָכגיין די אינסטרוקציעס פון דעם אַרטיקל, איך רעקאָמענדירן ניצן Google Cloud Platform, וואָס אָפפערס נייַע ניצערס פריי $300.

נאָך קריייטינג אַ קנויל און קאַנפיגיער אַקסעס צו Kubernetes דורך די קאַנסאָול נוצן, איר קענען ינסטאַלירן Istio דורך די העלם פּעקל פאַרוואַלטער.

העלם ינסטאַלירונג

ינסטאַלירן די העלם קליענט אויף דיין קאָמפּיוטער, ווי דיסקרייבד אין באַאַמטער דאַקיומענטיישאַן. מיר וועלן נוצן דעם צו דזשענערייט טעמפּלאַטעס פֿאַר ינסטאָלינג Istio אין דער ווייַטער אָפּטיילונג.

ינסטאַלירן Istio

אראפקאפיע Istio רעסורסן פֿון לעצט מעלדונג (דער אָריגינעל מחבר ס לינק צו ווערסיע 1.0.5 איז פארענדערט צו די איצטיקע, ד"ה 1.0.6 - בעערעך איבערזעצונג), עקסטראַקט די אינהאַלט אין איין וועגווייַזער, וואָס איך וועל איצט רופן [istio-resources].

צו לייכט ידענטיפיצירן יסטיאָ רעסורסן, שאַפֿן אַ נאַמעספּאַסע אין די K8s קנויל istio-system:

$ kubectl create namespace istio-system

פאַרענדיקן די ינסטאַלירונג דורך גיין צו די וועגווייַזער [istio-resources] און לויפן די באַפֿעל:

$ helm template install/kubernetes/helm/istio 
  --set global.mtls.enabled=false 
  --set tracing.enabled=true 
  --set kiali.enabled=true 
  --set grafana.enabled=true 
  --namespace istio-system > istio.yaml

דער באַפֿעל וועט אַרויספירן די שליסל קאַמפּאָונאַנץ פון Istio צו אַ טעקע istio.yaml. מיר מאָדיפיצירן די נאָרמאַל מוסטער צו פּאַסן זיך, ספּעציפיצירן די פאלגענדע פּאַראַמעטערס:

  • global.mtls.enabled אינסטאַלירן אין false (ד"ה mTLS אָטענטאַקיישאַן איז פאַרקריפּלט - אַפּפּראָקס.)צו פאַרפּאָשעטערן אונדזער דייטינג פּראָצעס;
  • tracing.enabled כולל בעטן טרייסינג ניצן Jaeger;
  • kiali.enabled ינסטאָלז Kiali אין אַ קנויל צו וויזשוואַלייז באַדינונגס און פאַרקער;
  • grafana.enabled ינסטאָלז Grafana צו וויזשוואַלייז געזאמלט מעטריקס.

לאָמיר נוצן די דזשענערייטאַד רעסורסן מיט די באַפֿעל:

$ kubectl apply -f istio.yaml

די ינסטאַלירונג פון Istio אויף דעם קנויל איז גאַנץ! וואַרטן ביז אַלע פּאָדס זענען אין די נאָמען פּלאַץ istio-system וועט קענען Running אָדער Completedדורך לויפן די באַפֿעל אונטן:

$ kubectl get pods -n istio-system

איצט מיר זענען גרייט צו פאָרזעצן אין דער ווייַטער אָפּטיילונג, ווו מיר וועלן באַקומען די אַפּלאַקיישאַן אַרויף און פליסנדיק.

אַרקאַטעקטשער פון די סענטימענט אַנאַליסיס אַפּלאַקיישאַן

לאָמיר נוצן דעם ביישפּיל פון די סענטימענט אַנאַליסיס מיקראָסערוויס אַפּלאַקיישאַן געניצט אין די שוין דערמאנט הקדמה אַרטיקל צו Kubernetes. עס איז קאָמפּליצירט גענוג צו ווייַזן די קייפּאַבילאַטיז פון Istio אין פיר.

די אַפּלאַקיישאַן באשטייט פון פיר מיקראָ באַדינונגס:

  1. דינסט סאַ-פראָנטענד, וואָס סערוועס די פראָנטענד פון אַ Reactjs אַפּלאַקיישאַן;
  2. דינסט SA-WebApp, וואָס סערוועס סענטימענט אַנאַליסיס קוויריז;
  3. דינסט סאַ-לאָגיק, וואס פירט זיך סענטימענט אַנאַליסיס;
  4. דינסט SA-פיעדבאַקק, וואָס נעמט באַמערקונגען פון ניצערס וועגן די אַקיעראַסי פון די אַנאַליסיס.

צוריק צו מיקראָסערוויסעס מיט Istio. טייל 1

אין דעם דיאַגראַמע, אין אַדישאַן צו באַדינונגס, מיר אויך זען די ינגרעסס קאָנטראָללער, וואָס אין Kubernetes רוץ ינקאַמינג ריקוועס צו די צונעמען באַדינונגס. Istio ניצט אַ ענלעך באַגריף אין זיין Ingress Gateway, מער דעטאַילס פון וואָס וועט נאָכפאָלגן.

פליסנדיק אַ אַפּלאַקיישאַן מיט אַ פּראַקסי פֿון Istio

פֿאַר ווייַטער אַפּעריישאַנז דערמאנט אין דעם אַרטיקל, קלאָון דיין ריפּאַזאַטאָרי יסטיאָ-מאַסטערי. עס כּולל די אַפּלאַקיישאַן און מאַניפעסץ פֿאַר Kubernetes און Istio.

ינסערטינג סיידקאַרס

ינסערשאַן קענען זיין געטאן אויטאָמאַטיש אָדער מאַניואַלי. צו אויטאָמאַטיש אַרייַנלייגן סיידקאַר קאַנטיינערז, איר וועט דאַרפֿן צו שטעלן אַ פירמע צו די נאַמעספּאַסע istio-injection=enabled, וואָס איז געטאן מיט די פאלגענדע באַפֿעל:

$ kubectl label namespace default istio-injection=enabled
namespace/default labeled

איצט יעדער פּאָד וואָס וועט זיין דיפּלויד אין די פעליקייַט נאַמעספּאַסע (default) וועט באַקומען זיין סיידקאַר קאַנטיינער. צו באַשטעטיקן דעם, לאָזן אונדז צעוויקלען די פּראָבע אַפּלאַקיישאַן דורך גיין צו די וואָרצל וועגווייַזער פון די ריפּאַזאַטאָרי [istio-mastery] און לויפן די פאלגענדע באַפֿעל:

$ kubectl apply -f resource-manifests/kube
persistentvolumeclaim/sqlite-pvc created
deployment.extensions/sa-feedback created
service/sa-feedback created
deployment.extensions/sa-frontend created
service/sa-frontend created
deployment.extensions/sa-logic created
service/sa-logic created
deployment.extensions/sa-web-app created
service/sa-web-app created

נאָך דיפּלויד די סערוויסעס, לאָמיר קאָנטראָלירן אַז די פּאָדס האָבן צוויי קאַנטיינערז (מיט די סערוויס זיך און זיין סיידקאַר) דורך לויפן די באַפֿעל kubectl get pods און מאַכן זיכער אַז אונטער די זייַל READY ווערט ספּעסיפיעד 2/2, סימבאַלייזינג אַז ביידע קאַנטיינערז לויפן:

$ kubectl get pods
NAME                           READY     STATUS    RESTARTS   AGE
sa-feedback-55f5dc4d9c-c9wfv   2/2       Running   0          12m
sa-frontend-558f8986-hhkj9     2/2       Running   0          12m
sa-logic-568498cb4d-2sjwj      2/2       Running   0          12m
sa-logic-568498cb4d-p4f8c      2/2       Running   0          12m
sa-web-app-599cf47c7c-s7cvd    2/2       Running   0          12m

וויסואַללי עס קוקט ווי דאָס:

צוריק צו מיקראָסערוויסעס מיט Istio. טייל 1
אַנוווי פּראַקסי אין איינער פון די פּאָדס

איצט אַז די אַפּלאַקיישאַן איז אַרויף און פליסנדיק, מיר דאַרפֿן צו לאָזן ינקאַמינג פאַרקער צו קומען אין די אַפּלאַקיישאַן.

Ingress Gateway

דער בעסטער פיר צו דערגרייכן דעם (לאָזן פאַרקער אין דעם קנויל) איז דורך Ingress Gateway אין Istio, וואָס איז ליגן בייַ די "ברעג" פון דעם קנויל און אַלאַוז איר צו געבן Istio פֿעיִקייטן אַזאַ ווי רוטינג, מאַסע באַלאַנסינג, זיכערהייט און מאָניטאָרינג פֿאַר ינקאַמינג פאַרקער.

די Ingress Gateway קאָמפּאָנענט און די סערוויס וואָס פאָרווערדז עס ויסווייניק זענען אינסטאַלירן אין דעם קנויל בעשאַס די Istio ינסטאַלירונג. צו געפֿינען די פונדרויסנדיק IP אַדרעס פון די סערוויס, לויפן:

$ kubectl get svc -n istio-system -l istio=ingressgateway
NAME                   TYPE           CLUSTER-IP     EXTERNAL-IP
istio-ingressgateway   LoadBalancer   10.0.132.127   13.93.30.120

מיר וועלן פאָרזעצן צו אַקסעס די אַפּלאַקיישאַן ניצן דעם IP (איך וועל אָפּשיקן צו עס ווי EXTERNAL-IP), אַזוי פֿאַר קאַנוויניאַנס מיר וועלן שרייַבן די ווערט אין אַ בייַטעוודיק:

$ EXTERNAL_IP=$(kubectl get svc -n istio-system 
  -l app=istio-ingressgateway 
  -o jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}')

אויב איר פּרובירן צו אַקסעס דעם IP דורך אַ בלעטערער איצט, איר וועט באַקומען אַ סערוויס אַנאַוויילאַבאַל טעות ווייַל דורך פעליקייַט יסטיאָ בלאַקס אַלע ינקאַמינג פאַרקער, גייטוויי איז נאָך נישט דיפיינד.

גייטוויי מיטל

Gateway איז אַ CRD (Custom Resource Definition) אין Kubernetes, דיפיינד נאָך ינסטאָלינג Istio אין דעם קנויל און געבן די פיייקייט צו ספּעציפיצירן די פּאָרץ, פּראָטאָקאָל און מחנות פֿאַר וואָס מיר ווילן צו לאָזן ינקאַמינג פאַרקער.

אין אונדזער פאַל, מיר ווילן צו לאָזן הטטפּ פאַרקער אויף פּאָרט 80 פֿאַר אַלע מחנות. די אַרבעט איז ימפּלאַמענאַד דורך די פאלגענדע דעפֿיניציע (http-gateway.yaml):

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: http-gateway
spec:
  selector:
    istio: ingressgateway
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
- "*"

די קאַנפיגיעריישאַן דאַרף קיין דערקלערונג אַחוץ פֿאַר די סעלעקטאָר istio: ingressgateway. מיט דעם סעלעקטאָר מיר קענען ספּעציפיצירן וואָס Ingress Gateway צו צולייגן די קאַנפיגיעריישאַן. אין אונדזער פאַל, דאָס איז די ינגרעסס גאַטעווייַ קאָנטראָללער, וואָס איז אינסטאַלירן דורך פעליקייַט אין Istio.

די קאַנפיגיעריישאַן איז געווענדט דורך רופן די פאלגענדע באַפֿעל:

$ kubectl apply -f resource-manifests/istio/http-gateway.yaml gateway.networking.istio.io/http-gateway created

די גייטוויי איצט אַלאַוז אַקסעס צו פּאָרט 80, אָבער האט קיין געדאַנק ווו צו מאַרשרוט ריקוועס. פֿאַר דעם איר וועט דאַרפֿן ווירטואַל באַדינונגס.

VirtualService מיטל

די VirtualService דערציילט די Ingress Gateway ווי צו מאַרשרוט ריקוועס וואָס זענען ערלויבט אין דעם קנויל.

ריקוועס צו אונדזער אַפּלאַקיישאַן וואָס קומען דורך http-gateway מוזן זיין געשיקט צו די sa-frontend, sa-web-app און sa-feedback באַדינונגס:

צוריק צו מיקראָסערוויסעס מיט Istio. טייל 1
רוץ וואָס דאַרפֿן צו זיין קאַנפיגיערד מיט VirtualServices

לאָמיר קוקן אין די ריקוועס וואָס זאָל זיין געשיקט צו SA-Frontend:

  • פּינטלעך גלייַכן צוזאמען דעם וועג / זאָל זיין געשיקט צו SA-Frontend צו באַקומען index.html;
  • פּרעפיקסעד פּאַטס /static/* מוזן זיין געשיקט צו SA-Frontend צו באַקומען סטאַטיק טעקעס געניצט אין די פראָנטענד, אַזאַ ווי CSS און דזשאַוואַסקריפּט;
  • פּאַטס מאַטשט דורך רעגולער אויסדרוק '^.*.(ico|png|jpg)$', מוזן זיין געשיקט צו סאַ-פראָנטענד, ווייַל דאס זענען די בילדער געוויזן אויף דעם בלאַט.

די ימפּלאַמענטיישאַן איז אַטשיווד דורך די פאלגענדע קאַנפיגיעריישאַן (sa-virtualservice-external.yaml):

kind: VirtualService
metadata:
  name: sa-external-services
spec:
  hosts:
  - "*"
  gateways:
  - http-gateway                      # 1
  http:
  - match:
    - uri:
        exact: /
    - uri:
        exact: /callback
    - uri:
        prefix: /static
    - uri:
        regex: '^.*.(ico|png|jpg)

Важные моменты:

  1. Этот VirtualService относится к запросам, приходящим через http-gateway;
  2. В destination определяется сервис, куда отправляются запросы.
Примечание: Конфигурация выше хранится в файле sa-virtualservice-external.yaml, который также содержит настройки для маршрутизации в SA-WebApp и SA-Feedback, но был сокращён здесь в статье для лаконичности. Применим VirtualService вызовом:
$ kubectl apply -f resource-manifests/istio/sa-virtualservice-external.yaml
virtualservice.networking.istio.io/sa-external-services created

Примечание: Когда мы применяем ресурсы Istio, Kubernetes API Server создаёт событие, которое получает Istio Control Plane, и уже после этого новая конфигурация применяется к прокси-серверам Envoy каждого pod'а. А контроллер Ingress Gateway представляется очередным Envoy, сконфигурированным в Control Plane. Всё это на схеме выглядит так:

Назад к микросервисам вместе с Istio. Часть 1
Конфигурация Istio-IngressGateway для маршрутизации запросов

Приложение Sentiment Analysis стало доступным по http://{EXTERNAL-IP}/. Не переживайте, если вы получаете статус Not Found: иногда требуется чуть больше времени для того, чтобы конфигурация вступила в силу и кэши Envoy обновились.

Перед тем, как продолжить, поработайте немного с приложением, чтобы сгенерировать трафик (его наличие необходимо для наглядности в последующих действиях — прим. перев.).

Kiali : наблюдаемость

Чтобы попасть в административный интерфейс Kiali, выполните следующую команду:

$ kubectl port-forward 
    $(kubectl get pod -n istio-system -l app=kiali 
    -o jsonpath='{.items[0].metadata.name}') 
    -n istio-system 20001

… и откройте http://localhost:20001/, залогинившись под admin/admin. Здесь вы найдете множество полезных возможностей, например, для проверки конфигурации компонентов Istio, визуализации сервисов по информации, собранной при перехвате сетевых запросов, получения ответов на вопросы «Кто к кому обращается?», «У какой версии сервиса возникают сбои?» и т.п. В общем, изучите возможности Kiali перед тем, как двигаться дальше — к визуализации метрик с Grafana.

Назад к микросервисам вместе с Istio. Часть 1

Grafana: визуализация метрик

Собранные в Istio метрики попадают в Prometheus и визуализируются с Grafana. Чтобы попасть в административный интерфейс Grafana, выполните команду ниже, после чего откройте http://localhost:3000/:

$ kubectl -n istio-system port-forward 
    $(kubectl -n istio-system get pod -l app=grafana 
    -o jsonpath={.items[0].metadata.name}) 3000

Кликнув на меню Home слева сверху и выбрав Istio Service Dashboard в левом верхнем углу, начните с сервиса sa-web-app, чтобы посмотреть на собранные метрики:

Назад к микросервисам вместе с Istio. Часть 1

Здесь нас ждёт пустое и совершенно скучное представление — руководство никогда такое не одобрит. Давайте же создадим небольшую нагрузку следующей командой:

$ while true; do 
    curl -i http://$EXTERNAL_IP/sentiment 
    -H "Content-type: application/json" 
    -d '{"sentence": "I love yogobella"}'; 
    sleep .8; done

Вот теперь у нас гораздо более симпатичные графики, а в дополнение к ним — замечательные инструменты Prometheus для мониторинга и Grafana для визуализации метрик, что позволят нам узнать о производительности, состоянии здоровья, улучшениях/деградации в работе сервисов на протяжении времени.

Наконец, посмотрим на трассировку запросов в сервисах.

Jaeger : трассировка

Трассировка нам потребуется, потому что чем больше у нас сервисов, тем сложнее добраться до причины сбоя. Посмотрим на простой случай из картинки ниже:

Назад к микросервисам вместе с Istio. Часть 1
Типовой пример случайного неудачного запроса

Запрос приходит, падает — в чём же причина? Первый сервис? Или второй? Исключения есть в обоих — давайте посмотрим на логи каждого. Как часто вы ловили себя за таким занятием? Наша работа больше похожа на детективов программного обеспечения, а не разработчиков…

Это широко распространённая проблема в микросервисах и решается она распределёнными системами трассировки, в которых сервисы передают друг другу уникальный заголовок, после чего эта информация перенаправляется в систему трассировки, где она сопоставляется с данными запроса. Вот иллюстрация:

Назад к микросервисам вместе с Istio. Часть 1
Для идентификации запроса используется TraceId

В Istio используется Jaeger Tracer, который реализует независимый от вендоров фреймворк OpenTracing API. Получить доступ к пользовательского интерфейсу Jaeger можно следующей командой:

$ kubectl port-forward -n istio-system 
    $(kubectl get pod -n istio-system -l app=jaeger 
    -o jsonpath='{.items[0].metadata.name}') 16686

Теперь зайдите на http://localhost:16686/ и выберите сервис sa-web-app. Если сервис не показан в выпадающем меню — проявите/сгенерируйте активность на странице и обновите интерфейс. После этого нажмите на кнопку Find Traces, которая покажет самые последние трейсы — выберите любой — покажется детализированная информация по всем трейсам:

Назад к микросервисам вместе с Istio. Часть 1

Этот трейс показывает:

  1. Запрос приходит в istio-ingressgateway (это первое взаимодействие с одним из сервисов, и для запроса генерируется Trace ID), после чего шлюз направляет запрос в сервис sa-web-app.
  2. В сервисе sa-web-app запрос подхватывается Envoy sidecar'ом, создаётся «ребёнок» в span'е (поэтому мы видим его в трейсах) и перенаправляется в контейнер sa-web-app. (Span — логическая единица работы в Jaeger, имеющая название, время начало операции и её продолжительность. Span'ы могут быть вложенными и упорядоченными. Ориентированный ациклический граф из span'ов образует trace. — прим. перев.)
  3. Здесь запрос обрабатывается методом sentimentAnalysis. Эти трейсы уже сгенерированы приложением, т.е. для них потребовались изменения в коде.
  4. С этого момента инициируется POST-запрос в sa-logic. Trace ID должен быть проброшен из sa-web-app.

Примечание: На 4 шаге приложение должно увидеть заголовки, сгенерированные Istio, и передать их в последующие запросы, как показано на изображении ниже:

Назад к микросервисам вместе с Istio. Часть 1
(A) За проброс заголовков отвечает Istio; (B) За заголовки отвечают сервисы

Istio делает основную работу, т.к. генерирует заголовки для входящих запросов, создаёт новые span'ы в каждом sidecare'е и пробрасывает их. Однако без работы с заголовками внутри сервисов полный путь трассировки запроса будет утерян.

Необходимо учитывать (пробрасывать) следующие заголовки:

x-request-id
x-b3-traceid
x-b3-spanid
x-b3-parentspanid
x-b3-sampled
x-b3-flags
x-ot-span-context

Это несложная задача, однако для упрощения её реализации уже существует множество библиотек — например, в сервисе sa-web-app клиент RestTemplate пробрасывает эти заголовки, если просто добавить библиотеки Jaeger и OpenTracing в его зависимости.

Заметьте, что приложение Sentiment Analysis демонстрирует реализации на Flask, Spring и ASP.NET Core.

Теперь, когда стало ясно, что мы получаем из коробки (или почти «из коробки»), рассмотрим вопросы тонко настраиваемой маршрутизации, управления сетевым трафиком, безопасности и т.п.!

Прим. перев.: об этом читайте в следующей части материалов по Istio от Rinor Maloku, переводы которых последуют в нашем блоге в ближайшее время. UPDATE (14 марта): Вторая часть уже опубликована.

P.S. от переводчика

Читайте также в нашем блоге:

Источник: habr.com

route:
- destination:
host: sa-frontend # 2
port:
number: 80

וויכטיק פונקטן:

  1. דעם VirtualService רעפערס צו ריקוועס וואָס קומען דורך http-gateway;
  2. В destination די דינסט צו וואָס ריקוועס זענען געשיקט איז באשלאסן.

טאָן: די קאַנפיגיעריישאַן אויבן איז סטאָרד אין אַ טעקע sa-virtualservice-external.yaml, וואָס אויך כּולל סעטטינגס פֿאַר רוטינג אין SA-WebApp און SA-Feedback, אָבער איז פאַרקירצט דאָ אין דעם אַרטיקל פֿאַר קורץ.

לאָמיר צולייגן VirtualService דורך רופן:


טאָן: ווען מיר פאַרנוצן Istio רעסורסן, די Kubernetes API סערווירער קריייץ אַ געשעעניש וואָס איז באקומען דורך די Istio קאָנטראָל פּלאַנע, און נאָך דעם, די נייַע קאַנפיגיעריישאַן איז געווענדט צו די ענוווי פּראַקסיז פון יעדער פּאָד. און די ינגרעסס גאַטעווייַ קאָנטראָללער איז אן אנדער ענוווי קאַנפיגיערד אין די קאָנטראָל פלאַך. אַלע דעם קוקט ווי דאָס אין די דיאַגראַמע:

צוריק צו מיקראָסערוויסעס מיט Istio. טייל 1
Istio-IngressGateway קאַנפיגיעריישאַן פֿאַר בעטן רוטינג

סענטימענט אַנאַליסיס אַפּלאַקיישאַן איז איצט בנימצא אויף http://{EXTERNAL-IP}/. צי ניט זאָרג אויב איר באַקומען ניט געפֿונען סטאַטוס: מאל עס נעמט אַ ביסל מער פֿאַר די קאַנפיגיעריישאַן צו נעמען ווירקונג און ענוווי קאַטשעס צו דערהייַנטיקן.

איידער פּראַסידינג, שפּיל מיט די אַפּ אַ ביסל צו דזשענערייט פאַרקער. (זייַן בייַזייַן איז נייטיק פֿאַר קלעריטי אין סאַבסאַקוואַנט אַקשאַנז - בעערעך איבערזעצונג.).

קיאַלי: אָבסערוואַביליטי

צו באַקומען צו די Kiali אַדמיניסטראַטיווע צובינד, לויפן די פאלגענדע באַפֿעל:


... און עפענען http://localhost:20001/, לאָגינג אין ווי אַדמין / אַדמין. דאָ איר וועט געפֿינען פילע נוציק פֿעיִקייטן, למשל, צו קאָנטראָלירן די קאַנפיגיעריישאַן פון Istio קאַמפּאָונאַנץ, וויזשוואַלייז באַדינונגס ניצן אינפֿאָרמאַציע געזאמלט פֿון ינטערסעפּטינג נעץ ריקוועס, באַקומען ענטפֿערס צו די פֿראגן "ווער איז קאָנטאַקט מיט וועמען?", "וואָס ווערסיע פון ​​​​די סערוויס איז יקספּיריאַנסט. דורכפאַל?” און אזוי ווייטער. אין אַלגעמיין, ויספאָרשן די קייפּאַבילאַטיז פון Kiali איידער איר מאַך אויף צו וויזשוואַלייזינג מעטריקס מיט Grafana.

צוריק צו מיקראָסערוויסעס מיט Istio. טייל 1

גראַפאַנאַ: מעטריק וויזשוואַלאַזיישאַן

מעטריקס געזאמלט אין Istio גיין אין פּראָמעטהעוס און זענען וויזשוואַלייזד מיט Grafana. צו באַקומען צו די Grafana אַדמיניסטראַטיווע צובינד, לויפן די באַפֿעל אונטן און עפענען http://localhost:3000/:


קליקינג אויף די מעניו היים שפּיץ לינקס און סאַלעקטינג Istio סערוויס דאַשבאָרד אין די שפּיץ לינקס ווינקל, אָנהייב מיט דינסט סאַ-וועב-אַפּצו קוקן אין די געזאמלט מעטריקס:

צוריק צו מיקראָסערוויסעס מיט Istio. טייל 1

וואָס אַווייץ אונדז דאָ איז אַ ליידיק און גאָר נודנע פאָרשטעלונג - די פאַרוואַלטונג וועט קיינמאָל אַפּרווו פון דעם. לאָמיר מאַכן אַ קליין מאַסע מיט די פאלגענדע באַפֿעל:


איצט מיר האָבן פיל בעסער גראַפס, און אין אַדישאַן צו זיי, ווונדערלעך פּראָמעטהעוס מכשירים פֿאַר מאָניטאָרינג און גראַפאַנאַ פֿאַר וויזשוואַלייזינג מעטריקס וואָס לאָזן אונדז צו לערנען וועגן פאָרשטעלונג, געזונט, ימפּרווומאַנץ / דערנידעריקונג אין באַדינונגס איבער צייט.

צום סוף, לאָמיר קוקן אין טרייסינג ריקוועס אין סערוויסעס.

Jaeger: טרייסינג

מיר וועלן דאַרפֿן טרייסינג ווייַל די מער באַדינונגס מיר האָבן, די מער שווער עס איז צו באַקומען צו די גרונט פון די דורכפאַל. זאל ס קוק אין אַ פּשוט פאַל פון די בילד אונטן:

צוריק צו מיקראָסערוויסעס מיט Istio. טייל 1
טיפּיש בייַשפּיל פון אַ טראַפ - דורכפאַל בעטן

די בקשה קומט, פאלט - וואס איז די סיבה? ערשטער דינסט? אדער די צווייטע? עס זענען אויסנעמען אין ביידע - לאָמיר קוקן אין די לאָגס פון יעדער. ווי אָפט האָבן איר געכאפט זיך טאן דעם? אונדזער אַרבעט איז מער ווי ווייכווארג דיטעקטיווז ווי דעוועלאָפּערס ...

דאָס איז אַ פּראָסט פּראָבלעם אין מיקראָסערוויסעס און איז סאַלווד דורך פונאנדערגעטיילט טרייסינג סיסטעמען, אין וואָס סערוויסעס פאָרן אַ יינציק כעדער צו יעדער אנדערער, ​​נאָך וואָס די אינפֿאָרמאַציע איז פאָרווערדיד צו די טרייסינג סיסטעם, ווו עס איז קאַמפּערד מיט די בעטן דאַטן. דאָ ס אַ אילוסטראַציע:

צוריק צו מיקראָסערוויסעס מיט Istio. טייל 1
TraceId איז געניצט צו ידענטיפיצירן די בקשה

Istio ניצט Jaeger Tracer, וואָס ימפּלאַמאַנץ די פאַרקויפער-פרייַ אָפּענטראַסינג אַפּי פריימווערק. איר קענט אַקסעס די Jaeger באַניצער צובינד מיט די פאלגענדע באַפֿעל:


איצט גיין צו http://localhost:16686/ און אויסקלייַבן אַ דינסט סאַ-וועב-אַפּ. אויב די סערוויס איז נישט געוויזן אין די פאַל-אַראָפּ מעניו, ווייַזן / דזשענערייט טעטיקייט אויף דעם בלאַט און דערהייַנטיקן די צובינד. נאָך דעם, דריקט אויף די קנעפּל געפֿינען טראַסעס, וואָס וועט ווייַזן די לעצטע טראַסעס - סעלעקטירן קיין - דיטיילד אינפֿאָרמאַציע אויף אַלע טראַסעס וועט דערשייַנען:

צוריק צו מיקראָסערוויסעס מיט Istio. טייל 1

דעם שפּור ווייזט:

  1. די בקשה קומט אריין istio-ingressgateway (דאָס איז דער ערשטער ינטעראַקשאַן מיט איינער פון די סערוויסעס, און אַ Trace ID איז דזשענערייטאַד פֿאַר די בעטן), נאָך וואָס די גייטוויי סענדז די בקשה צו די סערוויס סאַ-וועב-אַפּ.
  2. אין דינסט סאַ-וועב-אַפּ די בקשה איז פּיקט אַרויף דורך די ענוווי סיידקאַר, אַ "קינד" איז באשאפן אין די שפּאַן (אַז ס וואָס מיר זען עס אין די טראַסעס) און רידערעקטיד צו דעם קאַנטיינער סאַ-וועב-אַפּ. (שפּאַן - אַ לאַדזשיקאַל אַפּאַראַט פון אַרבעט אין Jaeger, וואָס האט אַ נאָמען, אָנהייב צייט פון די אָפּעראַציע און די געדויער. ספּאַנס קענען זיין נעסטעד און אָרדערד. א דירעקטעד אַסיקליק גראַפיק פון ספּאַנס פארמען אַ שפּור. — בעערעך. איבערזעצן)
  3. דאָ די בקשה איז פּראַסעסט דורך דעם אופֿן סענטימענט אַנאַליסיס. די טראַסעס זענען שוין דזשענערייטאַד דורך די אַפּלאַקיישאַן, י.ע. זיי פארלאנגט קאָד ענדערונגען.
  4. פֿון דעם מאָמענט אויף, אַ POST בעטן איז ינישיייטיד אין סאַ-לאָגיק. Trace ID מוזן זיין פאָרווערדיד פֿון סאַ-וועב-אַפּ.
  5. ...

טאָן: אין שריט 4, די אַפּלאַקיישאַן זאָל זען די כעדערז דזשענערייטאַד דורך Istio און פאָרן זיי צו סאַבסאַקוואַנט ריקוועס ווי געוויזן אין די בילד אונטן:

צוריק צו מיקראָסערוויסעס מיט Istio. טייל 1
(א) Istio איז פאַראַנטוואָרטלעך פֿאַר פאָרווערדינג כעדערז; (ב) סערוויסעס זענען פאַראַנטוואָרטלעך פֿאַר כעדערז

Istio טוט רובֿ פון די אַרבעט ווייַל ... דזשענערייץ כעדערז פֿאַר ינקאַמינג ריקוועס, קריייץ נייַע ספּאַנס אין יעדער סיידקאַרע און פאָרווערדז זיי. אָבער, אָן ארבעטן מיט כעדערז ין סערוויסעס, די פול בעטן שפּור וועג וועט זיין פאַרפאַלן.

די פאלגענדע כעדערז מוזן זיין גענומען אין חשבון:


דאָס איז נישט אַ שווער אַרבעט, אָבער צו פאַרפּאָשעטערן זייַן ימפּלאַמענטיישאַן עס איז שוין פילע לייברעריז - פֿאַר בייַשפּיל, אין די סאַ-וועב-אַפּ דינסט, דער RestTemplate קליענט פאָרווערדז די כעדערז אויב איר פשוט לייגן די Jaeger און OpenTracing לייברעריז צו זיינע אַדיקשאַנז.

באַמערקונג אַז די סענטימענט אַנאַליסיס אַפּלאַקיישאַן דעמאַנסטרייץ ימפּלאַמאַנץ אין פלאַסק, ספּרינג און ASP.NET קאָר.

איצט אַז עס איז קלאָר וואָס מיר באַקומען אויס פון די קעסטל (אָדער כּמעט אויס פון די קעסטל), לאָמיר קוקן אין פייַן-טונד רוטינג, נעץ פאַרקער פאַרוואַלטונג, זיכערהייט, אאז"ו ו!

נאטיץ. טראַנסל.: לייענען וועגן דעם אין דער ווייַטער טייל פון מאַטעריאַלס אויף Istio פֿון Rinor Maloku, איבערזעצונגען פון וואָס וועט נאָכפאָלגן אויף אונדזער בלאָג אין דעם לעבן צוקונפֿט. דערהייַנטיקן (14טן מערץ): די רגע טייל איז שוין ארויס.

פּס פון איבערזעצער

לייענען אויך אויף אונדזער בלאָג:

מקור: www.habr.com