בדף הזה מוסבר למנהלי אשכולות ולמהנדסי אבטחה איך להחליף את רשויות האישורים (CA) ואת מפתחות החתימה של חשבונות השירות שהגדרתם לשליטה במישור הבקרה של GKE.
אתם צריכים להכיר את המושגים הבאים:
תכנון רוטציות של פרטי כניסה
במאמר הזה מוסבר איך להחליף את הרכיבים הבאים של פרטי הכניסה במישור הבקרה:
- רשות אישורי הבסיס של האשכול, רשות אישורי הבסיס של הצבירה, רשות אישורי הבסיס של ה-API של etcd ורשות אישורי הבסיס של ה-peer של etcd.
- מפתחות החתימה והאימות של Kubernetes ServiceAccount.
אתם יכולים גם להחליף את מפתחות ההצפנה בניהול הלקוח שבהם השתמשתם כדי להצפין את דיסקי האתחול של מישור הבקרה, את הדיסקים של etcd ואת הגיבוי הפנימי של etcd שמשמש את Google Cloud להתאוששות מאסון. מידע נוסף זמין במאמר רוטציה של מפתחות הצפנה של etcd ושל דיסק האתחול של מישור הבקרה.
כדאי להחליף את פרטי הכניסה כדי למנוע את פקיעת התוקף של רשות האישורים, לצמצם את הסיכון לפריצה לגרסאות של מפתחות, וכחלק מנוהלי האבטחה של הארגון. כדי לתכנן את תדירות הרוטציה של משאבים ספציפיים של שליטה במישור הבקרה של GKE, כדאי להביא בחשבון את הדברים הבאים:
- כברירת מחדל, התוקף של אישורי GKE שנחתמו על ידי רשויות אישורי הבסיס בשירות Certificate Authority Service (שירות CA) פג שנה אחרי תאריך היצירה.
- למפתחות ב-Cloud Key Management Service (Cloud KMS) אין תאריך תפוגה. כדאי לבצע רוטציה ידנית של מפתחות רק אם יש בארגון דרישות לרוטציית מפתחות. כדי לצמצם את ההפרעות לעומסי העבודה שפועלים, אל תגדירו רוטציית מפתחות אוטומטית למפתחות האלה.
לפני שמתחילים
לפני שמתחילים, חשוב לוודא שביצעתם את המשימות הבאות:
- מפעילים את Google Kubernetes Engine API. הפעלת Google Kubernetes Engine API
- כדי להשתמש ב-Google Cloud CLI למשימה הזו, מתקינים ואז מאתחלים את ה-CLI של gcloud. אם כבר התקנתם את ה-CLI של gcloud, הריצו את הפקודה
gcloud components updateכדי לקבל את הגרסה העדכנית. יכול להיות שבגרסאות קודמות של ה-CLI של gcloud אי אפשר להריץ את הפקודות שבמסמך הזה.
אשכול קיים שמשתמש ברשויות אישורים בניהול עצמי ובמפתחות של חשבון שירות, ופועלת בו גרסה 1.35.2-gke.1842000 או גרסה חדשה יותר של GKE.
מזהים את מזהי הפרויקטים של הפרויקטים הבאים ב- Google Cloud :
- פרויקט המפתח: הפרויקט שמכיל את המשאבים של Cloud KMS ושל שירות CA.
- Cluster project: הפרויקט שמכיל את אשכול GKE.
כדי לבצע את משימות האימות שבמסמך הזה, צריך לוודא שיומני הביקורת הבאים של Data Access מופעלים:
- Cloud Key Management Service (KMS) API:
DATA_READ - Certificate Authority Service:
ADMIN_READ
כדי להפעיל את סוגי היומנים האלה, קראו את המאמר הפעלת יומני הביקורת של גישה לנתונים.
- Cloud Key Management Service (KMS) API:
תפקידים והרשאות נדרשים
כדי לקבל את ההרשאות שדרושות לרוטציה של מפתחות ורשויות אישורים בניהול הלקוח, בקשו מהאדמין להקצות לכם את התפקידים הבאים ב-IAM:
-
ניהול מפתחות או גרסאות של מפתחות: אדמין של Cloud KMS (
roles/cloudkms.admin) בפרויקט המפתחות -
ניהול של רשויות אישורים ברמה הבסיסית (root):
אדמין של שירות CA (
roles/privateca.admin) בפרויקט המפתחות -
הגדרת אשכולות לשימוש בפרטי כניסה חדשים:
אדמין של אשכול Kubernetes Engine (
roles/container.clusterAdmin) בפרויקט של האשכול
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.
מגבלות
המפתחות האסימטריים של Cloud KMS שמשמשים לחתימה ולאימות של חשבונות שירות לא תומכים ברוטציית מפתחות אוטומטית.
החלפת מפתחות החתימה והאימות של חשבון השירות
כשמגדירים את השליטה במישור הבקרה של GKE, מוסיפים לאשכול מפתח חתימה של חשבון שירות ומפתחות אימות של חשבון שירות. GKE משתמש במפתחות האלה כדי לחתום על טוקנים למוכ"ז של חשבונות שירות ב-Kubernetes ולאמת אותם. במהלך הרוטציה, מוסיפים את המפתח החדש לרשימת מפתחות האימות של חשבון השירות, ממתינים עד שהשינויים יתעדכנו ואז מחליפים את מפתח החתימה של חשבון השירות במפתח החדש.
כדי להחליף את המפתחות של חשבונות השירות:
משיגים את שם המשאב המלא של גרסת המפתח המקורית של מפתח החתימה של חשבון השירות:
gcloud container clusters describe CLUSTER_NAME \ --project=CLUSTER_PROJECT_ID \ --location=CONTROL_PLANE_LOCATION \ --format="value(userManagedKeysConfig.serviceAccountSigningKeys)"מחליפים את מה שכתוב בשדות הבאים:
-
CLUSTER_NAME: שם האשכול. -
CONTROL_PLANE_LOCATION: המיקום של האשכול. -
CLUSTER_PROJECT_ID: מזהה הפרויקט של האשכול.
הפלט אמור להיראות כך:
projects/KEY_PROJECT_ID/locations/CONTROL_PLANE_LOCATION/keyRings/KEYRING_NAME/cryptoKeys/SIGNING_KEY_NAME/cryptoKeyVersions/ORIGINAL_SIGNING_KEY_VERSIONבפלט הזה,
SIGNING_KEY_NAMEהוא שם המפתח ו-ORIGINAL_SIGNING_KEY_VERSIONהוא מספר הגרסה של מפתח החתימה המקורי.-
יוצרים גרסת מפתח חדשה למפתח החתימה של חשבון השירות:
gcloud kms keys versions create \ --key=SIGNING_KEY_NAME \ --keyring=KEYRING_NAME \ --location=CONTROL_PLANE_LOCATION \ --project=KEY_PROJECT_IDמחליפים את מה שכתוב בשדות הבאים:
-
SIGNING_KEY_NAME: השם של מפתח החתימה של חשבון השירות. -
KEYRING_NAME: השם של אוסף המפתחות שמכיל את המפתח. -
CONTROL_PLANE_LOCATION: המיקום של אוסף המפתחות ב- Google Cloud . -
KEY_PROJECT_ID: מזהה הפרויקט של הפרויקט עם המפתחות.
-
משיגים את שם המשאב המלא של גרסת המפתח החדשה:
gcloud kms keys versions list \ --key=SIGNING_KEY_NAME \ --keyring=KEYRING_NAME \ --location=CONTROL_PLANE_LOCATION \ --project=KEY_PROJECT_ID \ --filter="STATE=ENABLED" --sort-by=~ \ --format="value(name)" | sed 1qהפלט אמור להיראות כך:
projects/KEY_PROJECT_ID/locations/CONTROL_PLANE_LOCATION/keyRings/KEYRING_NAME/cryptoKeys/SIGNING_KEY_NAME/cryptoKeyVersions/NEW_SIGNING_KEY_VERSIONבפלט הזה,
SIGNING_KEY_NAMEהוא שם המפתח ו-NEW_SIGNING_KEY_VERSIONהוא המספר של גרסת מפתח החתימה החדשה.מוסיפים את גרסת המפתח החדשה לקבוצת מפתחות האימות של חשבון השירות באשכול:
gcloud container clusters update CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION \ --project=CLUSTER_PROJECT_ID \ --service-account-verification-keys=ORIGINAL_KEY_VERSION_PATH,NEW_KEY_VERSION_PATHמחליפים את מה שכתוב בשדות הבאים:
-
ORIGINAL_KEY_VERSION_PATH: שם המשאב המלא של גרסת מפתח החתימה המקורי מהפלט של השלב הראשון בקטע הזה. לדוגמה,projects/example-key-project/locations/us-central1/keyRings/example-keyring/cryptokeys/example-signing-key/cryptoKeyVersions/1. -
NEW_KEY_VERSION_PATH: שם המשאב המלא של הגרסה החדשה של מפתח החתימה, מהפלט של השלב הקודם. לדוגמה,projects/example-key-project/locations/us-central1/keyRings/example-keyring/cryptokeys/example-signing-key/cryptoKeyVersions/2.
אחרי שפעולת העדכון של האשכול מסתיימת, יכול להיות שיעברו עד 10 דקות עד שהנתיב של גרסת המפתח החדשה יופץ לשרת ה-API של Kubernetes ולכל נקודת קצה ל-API של GKE.
-
כדי לוודא שהנתיב של גרסת המפתח החדשה הופץ במלואו:
מקבלים את הרכיב הציבורי של מפתחות החתימה של האשכול מ-GKE API כ-JSON Web Key Set (JWKS):
curl https://container.googleapis.com/v1/projects/CLUSTER_PROJECT_ID/locations/CONTROL_PLANE_LOCATION/clusters/CLUSTER_NAME/jwksהפלט אמור להיראות כך:
{ "keys": [ { "kty": "RSA", "alg": "RS256", "use": "sig", "kid": "KEY1_ID", "n": "KEY1_MODULUS", "e": "KEY1_EXPONENT" }, { "kty": "RSA", "alg": "RS256", "use": "sig", "kid": "KEY2_ID", "n": "KEY2_MODULUS", "e": "KEY2_EXPONENT" } ] }הפלט הזה צריך לכלול שתי רשומות של מפתחות, מה שמצביע על כך ששתי גרסאות המפתחות זמינות ב-GKE API. אם מופיעה רק רשומה אחת של מפתח, צריך להמתין 10 דקות ולנסות שוב את הפקודה.
מתחברים לאשכול כדי להריץ פקודות
kubectl:gcloud container clusters get-credentials CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATIONמקבלים את הרכיב הציבורי של מפתחות החתימה של האשכול משרת ה-API של Kubernetes כ-JWKS:
kubectl get --raw /openid/v1/jwks | jqהפלט אמור להיראות כך:
{ "keys": [ { "kty": "RSA", "alg": "RS256", "use": "sig", "kid": "KEY1_ID", "n": "KEY1_MODULUS", "e": "KEY1_EXPONENT" }, { "kty": "RSA", "alg": "RS256", "use": "sig", "kid": "KEY2_ID", "n": "KEY2_MODULUS", "e": "KEY2_EXPONENT" } ] }הפלט הזה צריך לכלול שתי רשומות של מפתחות, מה שמצביע על כך ששתי הגרסאות של המפתחות זמינות בשרת ה-API של Kubernetes. אם מופיעה רק רשומה אחת של מפתח, צריך להמתין 10 דקות ולנסות שוב את הפקודה.
מעדכנים את האשכול כך שישתמש בגרסת המפתח החדשה כמפתח החתימה של חשבון השירות:
gcloud container clusters update CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION \ --project=CLUSTER_PROJECT_ID \ --service-account-signing-keys=NEW_KEY_VERSION_PATHמוודאים שהטוקנים החדשים של חשבון השירות משתמשים בגרסת המפתח החדשה:
יוצרים ServiceAccount:
kubectl create serviceaccount test-sa-1יוצרים אסימון ל-ServiceAccount:
kubectl create token test-sa-1מחלצים תקציר שנחתם לאחרונה מ-Logging:
export SIGNED_DIGEST=$(gcloud logging read \ 'resource.type="gke_cluster" AND resource.labels.cluster_name="CLUSTER_NAME" AND protoPayload.methodName="google.cloud.gkeauth.v1.Auth.SignServiceAccountJWT" AND protoPayload.metadata.subject="system:serviceaccount:default:test-sa-1"' \ --freshness=1h \ --bucket=_Required \ --location=global \ --view=_AllLogs \ --order=DESC \ --limit=1 \ --format="value(protoPayload.metadata.toBeSignedDigest)")מוודאים שהגרסה החדשה של מפתח החתימה נמצאת בשימוש:
gcloud logging read \ 'resource.type="cloudkms_cryptokeyversion" AND protoPayload.methodName="AsymmetricSign" AND protoPayload.request.digest.sha256="'${SIGNED_DIGEST}'"' \ --freshness=1h \ --bucket=_Default \ --location=global \ --view=_AllLogs \ --order=DESC \ --limit=1 \ --format="value(protoPayload.resourceName)"הפלט הוא נתיב המשאב של גרסת מפתח החתימה החדשה.
מחכים עד שיפוג התוקף של כל טוקן באשכול שמשתמש בגרסה המקורית של מפתח החתימה של חשבון השירות. כברירת מחדל, משך החיים של האסימון הוא שעה אחת, ואפשר להגדיר אותו למשך מקסימלי של 24 שעות. כדי לבדוק את משך החיים שהוגדר לטוקן באשכול, מריצים את הפקודה הבאה:
kubectl get pods -A -o json | jq -r '.items[]?.spec?.volumes[]?.projected?.sources[]?.serviceAccountToken?.expirationSeconds | select(. != null)' | sort -nr | head -n 1מחכים שיעבור משך החיים שהוגדר לטוקן בפלט של השלב הקודם. אחרי פרק הזמן הזה, כל האסימונים המקושרים באשכול ישתמשו בגרסה החדשה של מפתח החתימה של חשבון השירות.
מסירים את גרסת המפתח המקורית מרשימת מפתחות האימות של האשכול:
gcloud container clusters update CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION \ --project=CLUSTER_PROJECT_ID \ --service-account-verification-keys=NEW_KEY_VERSION_PATHאופציונלי: משביתים את גרסת המפתח המקורית. אחרי שמוודאים שגרסת המפתח המקורית לא בשימוש ושהאשכול תקין, משמידים את גרסת המפתח.
אם אתם לא מבצעים רוטציה של המפתחות בתגובה לאירוע קריטי, מומלץ להמתין כמה ימים לפני שמשמידים את גרסת המפתח המקורית. מידע נוסף זמין במאמר השמדה ושחזור של גרסאות מפתחות.
אחרי שתשלימו את השלבים האלה, כל אסימון חדש וקיים של חשבון שירות באשכול ייחתם באמצעות גרסת המפתח החדשה. שרת ה-API דוחה את כל הבקשות שמשתמשות בטוקן למוכ"ז עם גרסת המפתח המקורית, כי גרסת המפתח המקורית לא קיימת בהגדרות האשכול.
רוטציה של רשויות האישורים לשליטה במישור הבקרה של GKE
בקטעים הבאים מוסבר איך להחליף את רשויות האישורים ברמה הבסיסית (root) שבהן משתמש האשכול לשליטה במישור הבקרה של GKE.
יצירת גרסאות חדשות של מפתחות לרשויות האישורים
יוצרים גרסת מפתח חדשה למפתח ה-CA ברמה הבסיסית של האשכול:
gcloud kms keys versions create \ --key=CLUSTER_CA_KEY_NAME \ --keyring=KEYRING_NAME \ --location=CONTROL_PLANE_LOCATION \ --project=KEY_PROJECT_IDמחליפים את מה שכתוב בשדות הבאים:
-
CLUSTER_CA_KEY_NAME: השם של מפתח ה-CA ברמה הבסיסית (root) של האשכול. -
KEYRING_NAME: השם של אוסף המפתחות שמכיל את המפתח. -
CONTROL_PLANE_LOCATION: המיקום של אוסף המפתחות ב- Google Cloud . המיקום הזה זהה למיקום של האשכול. -
KEY_PROJECT_ID: מזהה הפרויקט של הפרויקט עם המפתחות.
-
יוצרים גרסת מפתח חדשה למפתח ה-CA ברמה הבסיסית (root) של הצבירה:
gcloud kms keys versions create \ --key=AGGREGATION_CA_KEY_NAME \ --keyring=KEYRING_NAME \ --location=CONTROL_PLANE_LOCATION \ --project=KEY_PROJECT_IDמחליפים את
AGGREGATION_CA_KEY_NAMEבשם של מפתח ה-CA של שורש הצבירה של האשכול.יוצרים גרסת מפתח חדשה למפתח ה-CA ברמה הבסיסית של ה-API של etcd:
gcloud kms keys versions create \ --key=ETCD_API_CA_KEY_NAME \ --keyring=KEYRING_NAME \ --location=CONTROL_PLANE_LOCATION \ --project=KEY_PROJECT_IDמחליפים את
ETCD_API_CA_KEY_NAMEבשם של מפתח ה-CA ברמה הבסיסית (root) של etcd API באשכול.יוצרים גרסת מפתח חדשה למפתח ה-CA ברמה הבסיסית של עמית ה-etcd:
gcloud kms keys versions create \ --key=ETCD_PEER_CA_KEY_NAME \ --keyring=KEYRING_NAME \ --location=CONTROL_PLANE_LOCATION \ --project=KEY_PROJECT_IDמחליפים את
ETCD_PEER_CA_KEY_NAMEבשם של מפתח ה-CA ברמה הבסיסית (root) של עמית ה-etcd באשכול.
יצירת רשויות אישורים חדשות ברמה הבסיסית (root)
משיגים את השם המלא של המשאב של גרסת מפתח ה-CA ברמה הבסיסית של האשכול החדש:
gcloud kms keys versions list \ --key=CLUSTER_CA_KEY_NAME \ --keyring=KEYRING_NAME \ --location=CONTROL_PLANE_LOCATION \ --project=KEY_PROJECT_ID \ --filter="STATE=ENABLED" --sort-by=~ \ --format="value(name)" | sed 1qהפלט אמור להיראות כך:
projects/KEY_PROJECT_ID/locations/CONTROL_PLANE_LOCATION/keyRings/KEYRING_NAME/cryptoKeys/CLUSTER_CA_KEY_NAME/cryptoKeyVersions/VERSIONבפלט הזה,
VERSIONהוא המספר של גרסת המפתח החדשה.יוצרים רשות אישורים חדשה ברמה הבסיסית (root CA) במאגר רשויות האישורים של האשכול:
gcloud privateca roots create CLUSTER_ROOT_CA_NAME \ --pool=CLUSTER_CA_POOL_NAME \ --location=CONTROL_PLANE_LOCATION \ --kms-key-version=CLUSTER_CA_KEY_PATH \ --subject="CN=cluster-ca, O=ORGANIZATION" \ --project=KEY_PROJECT_IDמחליפים את מה שכתוב בשדות הבאים:
-
CLUSTER_ROOT_CA_NAME: שם ל-CA הבסיסי החדש. -
CLUSTER_CA_POOL_NAME: שם מאגר ה-CA של האשכול. -
CLUSTER_CA_KEY_PATH: שם המשאב המלא של גרסת המפתח החדשה מהפלט של השלב הקודם. -
ORGANIZATION: שם הארגון.
-
משיגים את השם המלא של המשאב של גרסת מפתח ה-CA החדשה ברמה הבסיסית (root) לצבירה:
gcloud kms keys versions list \ --key=AGGREGATION_CA_KEY_NAME \ --keyring=KEYRING_NAME \ --location=CONTROL_PLANE_LOCATION \ --project=KEY_PROJECT_ID \ --filter="STATE=ENABLED" --sort-by=~ \ --format="value(name)" | sed 1qהפלט אמור להיראות כך:
projects/KEY_PROJECT_ID/locations/CONTROL_PLANE_LOCATION/keyRings/KEYRING_NAME/cryptoKeys/AGGREGATION_CA_KEY_NAME/cryptoKeyVersions/VERSIONיוצרים רשות אישורים חדשה ברמה הבסיסית לצבירה במאגר רשויות האישורים לצבירה:
gcloud privateca roots create AGGREGATION_ROOT_CA_NAME \ --pool=AGGREGATION_CA_POOL_NAME \ --location=CONTROL_PLANE_LOCATION \ --kms-key-version=AGGREGATION_CA_KEY_PATH \ --subject="CN=aggregation-ca, O=ORGANIZATION" \ --project=KEY_PROJECT_IDמחליפים את מה שכתוב בשדות הבאים:
-
AGGREGATION_ROOT_CA_NAME: שם לרשות האישורים החדשה של צבירת הבסיס. -
AGGREGATION_CA_POOL_NAME: השם של מאגר רשויות להנפקת אישורים (CA) לצבירה. -
AGGREGATION_CA_KEY_PATH: שם המשאב המלא של גרסת המפתח החדשה מהפלט של השלב הקודם.
-
משיגים את שם המשאב המלא של הגרסה החדשה של מפתח ה-CA ברמה הבסיסית (root) של ה-API של etcd:
gcloud kms keys versions list \ --key=ETCD_API_CA_KEY_NAME \ --keyring=KEYRING_NAME \ --location=CONTROL_PLANE_LOCATION \ --project=KEY_PROJECT_ID \ --filter="STATE=ENABLED" --sort-by=~ \ --format="value(name)" | sed 1qהפלט אמור להיראות כך:
projects/KEY_PROJECT_ID/locations/CONTROL_PLANE_LOCATION/keyRings/KEYRING_NAME/cryptoKeys/ETCD_API_CA_KEY_NAME/cryptoKeyVersions/VERSIONיוצרים רשות אישורים בסיסית חדשה של etcd API במאגר רשויות להנפקת אישורים (CA) של etcd API:
gcloud privateca roots create ETCD_API_ROOT_CA_NAME \ --pool=ETCD_API_CA_POOL_NAME \ --location=CONTROL_PLANE_LOCATION \ --kms-key-version=ETCD_API_CA_KEY_PATH \ --subject="CN=etcd-api-ca, O=ORGANIZATION" \ --project=KEY_PROJECT_IDמחליפים את מה שכתוב בשדות הבאים:
-
ETCD_API_ROOT_CA_NAME: שם לרשות אישורים ברמה הבסיסית (root CA) חדשה של etcd API. -
ETCD_API_CA_POOL_NAME: השם של מאגר ה-CA של etcd API. -
ETCD_API_CA_KEY_PATH: שם המשאב המלא של גרסת המפתח החדשה מהפלט של השלב הקודם.
-
משיגים את השם המלא של המשאב של גרסת מפתח ה-CA ברמה הבסיסית של עמית ה-etcd החדש:
gcloud kms keys versions list \ --key=ETCD_PEER_CA_KEY_NAME \ --keyring=KEYRING_NAME \ --location=CONTROL_PLANE_LOCATION \ --project=KEY_PROJECT_ID \ --filter="STATE=ENABLED" --sort-by=~ \ --format="value(name)" | sed 1qהפלט אמור להיראות כך:
projects/KEY_PROJECT_ID/locations/CONTROL_PLANE_LOCATION/keyRings/KEYRING_NAME/cryptoKeys/ETCD_PEER_CA_KEY_NAME/cryptoKeyVersions/VERSIONיוצרים רשות אישורים חדשה ברמה הבסיסית (root) של עמית etcd במאגר רשויות להנפקת אישורים (CA) של עמית etcd:
gcloud privateca roots create ETCD_PEER_ROOT_CA_NAME \ --pool=ETCD_PEER_CA_POOL_NAME \ --location=CONTROL_PLANE_LOCATION \ --kms-key-version=ETCD_PEER_CA_KEY_PATH \ --subject="CN=etcd-peer-ca, O=ORGANIZATION" \ --project=KEY_PROJECT_IDמחליפים את מה שכתוב בשדות הבאים:
-
ETCD_PEER_ROOT_CA_NAME: שם לרשות אישורי הבסיס החדשה של עמיתי etcd. -
ETCD_PEER_CA_POOL_NAME: השם של מאגר רשויות האישורים (CA) של עמיתי etcd. -
ETCD_PEER_CA_KEY_PATH: שם המשאב המלא של גרסת המפתח החדשה מהפלט של השלב הקודם.
-
לפני שממשיכים, צריך להפיץ את השינויים של רשות האישורים ברמה הבסיסית (root CA) לחבילת האמון של האשכול, לפי ההוראות בקטע הפעלה מחדש של מישור הבקרה והצמתים.
החלפת רשויות האישורים המקוריות ברשויות האישורים החדשות
אחרי שמפעילים מחדש את מישור הבקרה והצמתים, פועלים לפי השלבים הבאים:
מפעילים את ה-CA החדש ברמה הבסיסית (root) של האשכול:
gcloud privateca roots enable CLUSTER_ROOT_CA_NAME \ --pool=CLUSTER_CA_POOL_NAME \ --location=CONTROL_PLANE_LOCATION \ --project=KEY_PROJECT_IDמפעילים את ה-CA החדש ברמה הבסיסית (root) לצבירת נתונים:
gcloud privateca roots enable AGGREGATION_ROOT_CA_NAME \ --pool=AGGREGATION_CA_POOL_NAME \ --location=CONTROL_PLANE_LOCATION \ --project=KEY_PROJECT_IDמפעילים את ה-CA ברמה הבסיסית (root) של ה-API החדש של etcd:
gcloud privateca roots enable ETCD_API_ROOT_CA_NAME \ --pool=ETCD_API_CA_POOL_NAME \ --location=CONTROL_PLANE_LOCATION \ --project=KEY_PROJECT_IDמפעילים את ה-CA החדש של שורש עמית ה-etcd:
gcloud privateca roots enable ETCD_PEER_ROOT_CA_NAME \ --pool=ETCD_PEER_CA_POOL_NAME \ --location=CONTROL_PLANE_LOCATION \ --project=KEY_PROJECT_IDמשביתים את ה-CA ברמה הבסיסית (root) של האשכול המקורי:
gcloud privateca roots disable ORIGINAL_CLUSTER_ROOT_CA \ --pool=CLUSTER_CA_POOL_NAME \ --location=CONTROL_PLANE_LOCATION \ --project=KEY_PROJECT_IDמחליפים את
ORIGINAL_CLUSTER_ROOT_CAבשם של ה-CA המקורי ברמה הבסיסית (root) של האשכול שאתם מחליפים.משביתים את ה-CA המקורי של הרמה הבסיסית (root) לצבירת נתונים:
gcloud privateca roots disable ORIGINAL_AGGREGATION_ROOT_CA \ --pool=AGGREGATION_CA_POOL_NAME \ --location=CONTROL_PLANE_LOCATION \ --project=KEY_PROJECT_IDמחליפים את
ORIGINAL_AGGREGATION_ROOT_CAבשם של ה-CA המקורי של שורש הצבירה שאתם מחליפים.משביתים את ה-CA ברמה הבסיסית (root) של ה-API המקורי של etcd:
gcloud privateca roots disable ORIGINAL_ETCD_API_ROOT_CA \ --pool=ETCD_API_CA_POOL_NAME \ --location=CONTROL_PLANE_LOCATION \ --project=KEY_PROJECT_IDמחליפים את
ORIGINAL_ETCD_API_ROOT_CAבשם של ה-CA המקורי של שורש ה-API של etcd שאתם מחליפים.משביתים את ה-CA ברמה הבסיסית (root) של עמית ה-etcd המקורי:
gcloud privateca roots disable ORIGINAL_ETCD_PEER_ROOT_CA \ --pool=ETCD_PEER_CA_POOL_NAME \ --location=CONTROL_PLANE_LOCATION \ --project=KEY_PROJECT_IDמחליפים את
ORIGINAL_ETCD_PEER_ROOT_CAבשם של ה-CA המקורי של שורש העמית של etcd שאתם מחליפים.בשלב הזה, רשויות האישורים החדשות של הבסיס מנפיקות את כל האישורים החדשים באשכול. כדי להנפיק אישורים חדשים ל-
kubeletבכל צומת, מפעילים מחדש את מישור הבקרה ואת הצמתים. השלב הזה נדרש כי לאישוריkubeletיש תוחלת חיים ארוכה.
אחרי כמה ימים שבהם האשכול נשאר במצב תקין, אפשר למחוק את רשויות ה-CA המקוריות ברמה הבסיסית, כמו שמתואר בקטע הבא.
מחיקת רשויות האישורים המקוריות ברמה הבסיסית (root)
בקטע הזה מוסבר איך למחוק את רשויות השורש המקוריות לאישורים. לפני שמבצעים את השלבים הבאים, צריך לוודא את הפרטים הבאים:
- האשכול נשאר במצב תקין במשך כמה ימים אחרי שהחלפתם את רשויות ה-CA המקוריות ברשויות ה-CA החדשות.
- החלפתם את כל האישורים שהונפקו על ידי רשויות אישורי הבסיס המקוריות באישורים חדשים.
כדי למחוק את רשויות השורש המקוריות לאישורים, משתמשים בפקודה gcloud privateca roots delete, כמו שמתואר בשלבים הבאים. בפקודות האלה, הדגל --ignore-active-certificates מוחק את ה-CA אחרי תקופת חסד, גם אם יש ל-CA אישורים שלא בוטלו או שהתוקף שלהם לא פג.
מוחקים את ה-CA הבסיסי המקורי של האשכול:
gcloud privateca roots delete ORIGINAL_CLUSTER_ROOT_CA \ --pool=CLUSTER_CA_POOL_NAME \ --location=CONTROL_PLANE_LOCATION \ --project=KEY_PROJECT_ID \ --ignore-active-certificatesמחליפים את
ORIGINAL_CLUSTER_ROOT_CAבשם של ה-CA המקורי ברמה הבסיסית (root) של האשכול שאתם מחליפים.מוחקים את ה-CA המקורי של שורש הצבירה:
gcloud privateca roots delete ORIGINAL_AGGREGATION_ROOT_CA \ --pool=AGGREGATION_CA_POOL_NAME \ --location=CONTROL_PLANE_LOCATION \ --project=KEY_PROJECT_ID \ --ignore-active-certificatesמחליפים את
ORIGINAL_AGGREGATION_ROOT_CAבשם של ה-CA המקורי של שורש הצבירה שאתם מחליפים.מוחקים את ה-CA ברמה הבסיסית (root) של ה-API המקורי של etcd:
gcloud privateca roots delete ORIGINAL_ETCD_API_ROOT_CA \ --pool=ETCD_API_CA_POOL_NAME \ --location=CONTROL_PLANE_LOCATION \ --project=KEY_PROJECT_ID \ --ignore-active-certificatesמחליפים את
ORIGINAL_ETCD_API_ROOT_CAבשם של ה-CA המקורי של שורש ה-API של etcd שאתם מחליפים.מוחקים את ה-CA המקורי של שורש עמית ה-etcd:
gcloud privateca roots delete ORIGINAL_ETCD_PEER_ROOT_CA \ --pool=ETCD_PEER_CA_POOL_NAME \ --location=CONTROL_PLANE_LOCATION \ --project=KEY_PROJECT_ID \ --ignore-active-certificatesמחליפים את
ORIGINAL_ETCD_PEER_ROOT_CAבשם של ה-CA המקורי של שורש העמית של etcd שאתם מחליפים.אופציונלי: מפיצים את השינויים ברשויות האישורים ברמה הבסיסית (root CA) לחבילת האמון של האשכול. הוראות מפורטות מופיעות בקטע הפעלה מחדש של מישור הבקרה והצמתים. אם תדלגו על השלב הזה, רשויות ה-CA המקוריות ברמה הבסיסית יוסרו במהלך השדרוג הבא של גרסת מישור הבקרה והצומת.
הפעלה מחדש של מישור הבקרה והצמתים
כשאתם משנים את ההגדרות של רשות האישורים ברמה הבסיסית באשכול, למשל מפעילים או משביתים רשויות אישורים ברמה הבסיסית או מבטלים אישורים, אתם צריכים להפיץ את השינויים האלה לחבילת האמון של האשכול. כדי להפיץ את השינויים בחבילת האמון של האשכול, צריך להפעיל מחדש את מישור הבקרה ובמקרים מסוימים גם את הצמתים.
לשדרג את מישור הבקרה של האשכול לאותה גרסה שכבר נמצאת בשימוש.
מאתרים את גרסת GKE שמישור הבקרה כבר משתמש בה:
gcloud container clusters describe CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION \ --project=CLUSTER_PROJECT_ID \ --format="value(currentMasterVersion)"מחליפים את מה שכתוב בשדות הבאים:
-
CLUSTER_NAME: השם של אשכול GKE. -
CLUSTER_VERSION: גרסת GKE שכבר פועלת באשכול. -
CLUSTER_PROJECT_ID: מזהה הפרויקט של הפרויקט באשכול.
-
שדרוג מישור הבקרה:
gcloud container clusters upgrade CLUSTER_NAME \ --master \ --location=CONTROL_PLANE_LOCATION \ --cluster-version=CLUSTER_VERSION \ --project=CLUSTER_PROJECT_ID
רק לרוטציה של רשות אישורים ברמת האשכול, מפעילים יצירה מחדש של צמתים על ידי שדרוג כל אחד ממאגרי הצמתים לאותה גרסה שכבר נמצאת בשימוש.
מאתרים את גרסת ה-GKE שבה משתמש מאגר הצמתים:
gcloud container node-pools describe NODE_POOL_NAME \ --cluster=CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION \ --project=CLUSTER_PROJECT_ID \ --format="value(version)"מחליפים את
NODE_POOL_NAMEבשם של מאגר הצמתים שרוצים לשדרג.משדרגים את מאגר הצמתים:
gcloud container clusters upgrade CLUSTER_NAME \ --node-pool=NODE_POOL_NAME \ --location=CONTROL_PLANE_LOCATION \ --cluster-version=CLUSTER_VERSION \ --project=CLUSTER_PROJECT_ID
אחרי שמישור הבקרה והצמתים מסיימים את השדרוג, מעדכנים את כל לקוחות ה-API של Kubernetes, כמו kubectl CLI, כדי להשתמש בחבילת האמון המעודכנת. אם אתם יוצרים אישורים באופן ידני באמצעות CertificateSigningRequests של Kubernetes, אתם צריכים להנפיק מחדש את כל האישורים האלה ולספק את האישורים החדשים ללקוחות ה-API.
אם ביצעתם את השלבים שבקטע הזה במהלך רוטציה של רשות אישורים, המשיכו לשלב הבא של הרוטציה, שהוא אחד מהקטעים הבאים במסמך הזה:
- מחליפים את רשויות אישורי הבסיס המקוריות ברשויות אישורי הבסיס החדשות.
- מוחקים את רשויות אישורי הבסיס המקוריות.