עדכון הגדרות של דחיסת EnvoyFilter
כמה שדות ברמה העליונה בממשק ה-API של המסנן envoy.extensions.filters.http.compressor.v3.Compressor יצאו משימוש ב-Envoy (ראו את הגדרת המקור).
ההגדרות האלה הועברו לבלוקים ייעודיים של response_direction_config.common_config ו-request_direction_config.common_config.
במדריך הזה מפורטים ההקשר והשלבים שנדרשים לעדכון המשאבים שלכם ב-EnvoyFilter לפורמט נתמך. המעבר לפורמט המודרני הזה מבטיח שהתצורות שלכם יישארו תואמות לעדכונים הבאים, ייהנו מבהירות מבנית משופרת ויתאימו לשיטות המומלצות של מודרניזציה של Cloud Service Mesh.
הסבר על הצורך במודרניזציה
המסנן Envoy Compressor מספק דחיסה ופריסה של גופי HTTP תוך כדי תנועה, ועוזר לצמצם את השימוש ברוחב הפס ולשפר את ביצועי האפליקציה.
כדי להשתמש ב-Cloud Service Mesh עם מישור הבקרה TRAFFIC_DIRECTOR (ראו בדיקת ההטמעה של מישור הבקרה), צריך להשתמש בגרסה הנתמכת של EnvoyFilter API. פריסות מדור קודם
שמשתמשות בשדות ברמה העליונה שהוצאו משימוש (למשל content_length, content_type,
disable_on_etag_header, remove_accept_encoding_header או runtime_enabled) ימשיכו לפעול, אבל מומלץ לעדכן אותן באופן מיידי כדי להבטיח את מהימנותן.
כשמשתמשים בשדות האלה שהוצאו משימוש, האימותים מופצים בהדרגה בערוצי ההפצה (Rapid, אחר כך Regular, אחר כך Stable). האימותים במישור הבקרה חלים בהתאם למועד הפריסות:
| סוג הפריסה | התנהגות האימות |
|---|---|
| פריסות מדור קודם (פריסות שבוצעו לפני הפעלת האימותים) | מישור הבקרה מגדיר סטטוס של אזהרה במשאב המותאם אישית (CR) EnvoyFilter עם הטקסט: found usage of unsupported fields: [...]. ההגדרה עדיין תחול לצורך תאימות לאחור, אבל כדי להבטיח שהתמיכה תימשך, צריך להעביר את ההגדרות לשדות הנתמכים. |
| פריסות נתמכות (נפרסו אחרי שהופעל אימות) | מישור הבקרה חוסם באופן מוחלט את השימוש בשדות שלא נתמכים. החלת ההגדרה גורמת לשגיאה במשאב EnvoyFilter עם ההודעה: found usage of unsupported fields: [...], וההגדרה שלא נתמכת תידחה. |
עדכון ההגדרות פותר את האזהרות והשגיאות האלה בסטטוס המשאב, ומוודא שההגדרות עומדות בדרישות האימות.
זיהוי הגדרות שהוצאו משימוש
צריך לעדכן את ההגדרה של EnvoyFilter אם מגדירים אחד מהשדות הבאים ישירות מתחת לבלוק typed_config:
min_content_lengthcontent_lengthcontent_typedisable_on_etag_headerremove_accept_encoding_header
אפשר להציג רשימה של EnvoyFilter באמצעות:
kubectl get envoyfilters --all-namespaces -o yaml
בודקים את הפלט של תיקון EnvoyFilters envoy.filters.http.compressor.
פורמטים של הגדרות
בקטעים הבאים מופיעות דוגמאות להגדרות של מסנן Compressor Envoy במשאב EnvoyFilter, גם כאלה שיצאו משימוש וגם כאלה שעברו מודרניזציה.
דוגמה להגדרה שהוצאה משימוש
אם קטע התיקון של EnvoyFilter נראה כמו הקטע הבא, הוא משתמש בפורמט שיצא משימוש:
apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
name: compressor-filter-update
namespace: istio-system
spec:
configPatches:
- applyTo: HTTP_FILTER
match:
context: GATEWAY
listener:
filterChain:
filter:
name: envoy.filters.network.http_connection_manager
subFilter:
name: envoy.filters.http.router
patch:
operation: INSERT_BEFORE
value:
name: envoy.filters.http.compressor
typed_config:
'@type': type.googleapis.com/envoy.extensions.filters.http.compressor.v3.Compressor
# These top-level fields are DEPRECATED
min_content_length: 1024
content_type:
- "application/javascript"
- "application/json"
disable_on_etag_header: true
remove_accept_encoding_header: true
compressor_library:
name: gzip
typed_config:
'@type': type.googleapis.com/envoy.extensions.compression.gzip.compressor.v3.Gzip
דוגמה להגדרה מודרנית
צריך להעביר את השדות שהוצאו משימוש לאובייקט response_direction_config (או request_direction_config אם רלוונטי):
apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
name: compressor-filter-update
namespace: istio-system
spec:
configPatches:
- applyTo: HTTP_FILTER
match:
context: GATEWAY
listener:
filterChain:
filter:
name: envoy.filters.network.http_connection_manager
subFilter:
name: envoy.filters.http.router
patch:
operation: INSERT_BEFORE
value:
name: envoy.filters.http.compressor
typed_config:
'@type': type.googleapis.com/envoy.extensions.filters.http.compressor.v3.Compressor
compressor_library:
name: gzip
typed_config:
'@type': type.googleapis.com/envoy.extensions.compression.gzip.compressor.v3.Gzip
response_direction_config:
disable_on_etag_header: true # MOVED
remove_accept_encoding_header: true # MOVED
common_config:
min_content_length: 1024 # MOVED
content_type: # MOVED
- "application/javascript"
- "application/json"
enabled:
default_value: true
runtime_key: "compressor.enabled"
שדות נתמכים ונתיבי העברה
רשימה מלאה של השדות הנתמכים מופיעה במדריך Data plane extensibility using EnvoyFilter. בטבלה הבאה מפורט המיפוי להעברת השדות הכי נפוצים שהוצאו משימוש.
| נתיב שדה שיצא משימוש | נתיב שדה מודרני | הערות |
|---|---|---|
typed_config.min_content_length |
typed_config.response_direction_config.common_config.min_content_lengthאו typed_config.request_direction_config.common_config.min_content_length |
היא מגדירה את הגודל המינימלי של התגובה או הבקשה בהתאמה, כדי להפעיל דחיסה. |
typed_config.content_length |
typed_config.response_direction_config.common_config.min_content_lengthאו typed_config.request_direction_config.common_config.min_content_length |
כתובת חלופית קודמת של min_content_length. משנים את השם ל-min_content_length בנתיב החדש. |
typed_config.content_type |
typed_config.response_direction_config.common_config.content_typeאו typed_config.request_direction_config.common_config.content_type |
מערך של סוגי תוכן לדחיסה. |
typed_config.disable_on_etag_header |
typed_config.response_direction_config.disable_on_etag_header |
הדחיסה מושבתת אם התשובה מכילה כותרת ETag. |
typed_config.remove_accept_encoding_header |
typed_config.response_direction_config.remove_accept_encoding_header |
מסיר את הכותרת Accept-Encoding מהבקשות לפני השליחה לשרת במעלה הזרם. |
תוכנית העברה
מומלץ לעדכן את ההגדרות של EnvoyFilter בהתאם לשיטות המומלצות לפריסה ולבדיקה של הארגון. כדאי לבצע את השלבים הכלליים הבאים במהלך ההעברה:
- זיהוי: מאתרים את כל המשאבים מסוג
EnvoyFilterבאמצעות המסנן Compressor עם שדות שהוצאו משימוש, כפי שמתואר במאמר זיהוי הגדרות שהוצאו משימוש. - לבדוק: משנים את קובץ ה-YAML של משאבי
EnvoyFilterובודקים את השינויים בסביבת טרום-ייצור. מוודאים שהדחיסה פעילה עבור סוגי התוכן והגדלים הצפויים. - מעקב ואימות:
- בודקים את
EnvoyFilterסטטוס המשאבfound usage of unsupported fields: [...]כדי לוודא שהאזהרות או השגיאות כבר לא מופיעות. - מעקב אחרי מדדים מרכזיים: שימוש במעבד, חביון וצריכת רוחב פס.
- בודקים את הכותרות של התגובות (למשל,
Content-Encoding: gzip) ומוודאים שהדחיסה פועלת.
- בודקים את
- פריסה: החלת ההגדרות הנתמכות של
EnvoyFilterעל עומסי עבודה בסביבת הייצור.
היתרונות של מודרניזציה
- הבהרת סטטוס המשאב: הסרת
found usage of unsupported fields: [...]אזהרות ושגיאות מסטטוס המשאב של הכלי לדחיסת תמונותEnvoyFilter. - תקנון: בהתאם לשיטות המומלצות הנוכחיות להגדרת Envoy ול
TRAFFIC_DIRECTORאימותים. - תאימות עתידית: מוודא שההגדרות שלכם פועלות בצורה חלקה עם גרסאות עתידיות של Envoy ו-Cloud Service Mesh.
פתרון בעיות ותמיכה
אם נתקלים בבעיות, כדאי לבדוק את הדברים הבאים:
- כדאי לבדוק שוב את תחביר ה-YAML ואת מיקום השדות.
- בודקים את היומנים של שרת ה-proxy של Envoy כדי לראות הודעות שגיאה מפורטות:
kubectl logs -l app=your-app -c istio-proxy -n your-namespace. - במקרה הצורך, אפשר לבצע Rollback להגדרות הקודמות של
EnvoyFilter. - לקבלת עזרה נוספת, אפשר לפנות לתמיכה של Google Cloud .