כאן מוסבר איך ליצור מופע של Config Controller שמגיע עם Config Connector, Policy Controller ו-סנכרון תצורות שכבר מותקנים בו. בשלב הבא, נסביר איך להשתמש במכונה על ידי ביצוע המשימות הבאות:
- משתמשים ב-Config Connector כדי ליצור ולנהל משאב Google Cloud .
- יוצרים אילוץ Policy Controller כדי לאכוף מדיניות ולזהות הפרת מדיניות לפני הפריסה.
- מגדירים את GitOps על ידי הגדרת סנכרון תצורות לסנכרון ממאגר לדוגמה שמכיל משאב Google Cloud .
לפני שמתחילים
- נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
-
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init -
יוצרים או בוחרים Google Cloud פרויקט.
תפקידים שנדרשים כדי לבחור או ליצור פרויקט
- Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
-
יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (יצירת פרויקטים) (
roles/resourcemanager.projectCreator), שכולל את ההרשאהresourcemanager.projects.create. איך מקצים תפקידים
-
יוצרים Google Cloud פרויקט:
gcloud projects create PROJECT_ID
מחליפים את
PROJECT_IDבשם של פרויקט Google Cloud שיוצרים. -
בוחרים את הפרויקט שיצרתם: Google Cloud
gcloud config set project PROJECT_ID
מחליפים את
PROJECT_IDבשם הפרויקט ב- Google Cloud .
-
אם משתמשים בפרויקט קיים, מוודאים שיש את ההרשאות הנדרשות כדי להשלים את ההדרכה. אם משתמשים בפרויקט חדש, לא צריך לוודא כי כבר יש את ההרשאות הנדרשות.
מפעילים את ממשקי ה-API של KRM, GKE, מנהל המשאבים ו-Service Usage:
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (
roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאהserviceusage.services.enable. איך מקצים תפקידיםgcloud services enable krmapihosting.googleapis.com
container.googleapis.com cloudresourcemanager.googleapis.com serviceusage.googleapis.com -
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init -
יוצרים או בוחרים Google Cloud פרויקט.
תפקידים שנדרשים כדי לבחור או ליצור פרויקט
- Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
-
יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (יצירת פרויקטים) (
roles/resourcemanager.projectCreator), שכולל את ההרשאהresourcemanager.projects.create. איך מקצים תפקידים
-
יוצרים Google Cloud פרויקט:
gcloud projects create PROJECT_ID
מחליפים את
PROJECT_IDבשם של פרויקט Google Cloud שיוצרים. -
בוחרים את הפרויקט שיצרתם: Google Cloud
gcloud config set project PROJECT_ID
מחליפים את
PROJECT_IDבשם הפרויקט ב- Google Cloud .
-
אם משתמשים בפרויקט קיים, מוודאים שיש את ההרשאות הנדרשות כדי להשלים את ההדרכה. אם משתמשים בפרויקט חדש, לא צריך לוודא כי כבר יש את ההרשאות הנדרשות.
מפעילים את ממשקי ה-API של KRM, GKE, מנהל המשאבים ו-Service Usage:
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (
roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאהserviceusage.services.enable. איך מקצים תפקידיםgcloud services enable krmapihosting.googleapis.com
container.googleapis.com cloudresourcemanager.googleapis.com serviceusage.googleapis.com
התפקידים הנדרשים
כדי לקבל את ההרשאות שדרושות לניהול משאבי הדוגמה באמצעות Config Controller שמופיעים במדריך הזה, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים בפרויקט:
- צפייה באשכול Kubernetes Engine (
roles/container.clusterViewer) - אדמין ברשת Compute (
roles/compute.networkAdmin)
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.
יצירת מכונה של Config Controller
בטרמינל, יוצרים מופע של Autopilot Config Controller:
gcloud anthos config controller create cc-example \ --location=us-central1 \ --full-managementהפעולה הזו יכולה להימשך עד 15 דקות.
הפלט שיתקבל:
Created instance [cc-example]. Fetching cluster endpoint and auth data. kubeconfig entry generated for krmapihost-cc-example.כדי לוודא שהמופע נוצר, צופים ברשימת המופעים של Config Controller:
gcloud anthos config controller list --location=us-central1הפלט שיתקבל:
NAME LOCATION STATE cc-example us-central1 RUNNING
מתן ההרשאה הנדרשת ל-Config Controller
בקטע הזה נותנים ל-Config Controller הרשאה לנהל משאבים: Google Cloud
מגדירים משתנה סביבה לכתובת האימייל בחשבון השירות:
export SA_EMAIL="$(kubectl get ConfigConnectorContext -n config-control \ -o jsonpath='{.items[0].spec.googleServiceAccount}' 2> /dev/null)"יוצרים את קשירת המדיניות:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member "serviceAccount:${SA_EMAIL}" \ --role "roles/owner" \ --project PROJECT_IDמחליפים את
PROJECT_IDבמזהה הפרויקט.הפלט אמור להיראות כך:
Updated IAM policy for project [PROJECT_ID]. auditConfigs: - auditLogConfigs: - logType: ADMIN_READ - logType: DATA_READ - logType: DATA_WRITE service: gkehub.googleapis.com # Remainder of output omitted
שימוש במופע Config Controller
בסעיפים הבאים נסביר איך אפשר להשתמש במופע של Config Controller.
יצירת Google Cloud משאב באמצעות Config Connector
באמצעות מופע Config Controller, תוכלו להשתמש ב-Config Connector כדי לנהל הרבה Google Cloud שירותים ומשאבים באמצעות כלי Kubernetes וממשקי API. בקטע הזה משתמשים ב-Config Controller כדי ליצור משאב PubSubTopic.
כדי ליצור נושא Pub/Sub באמצעות Config Connector, מבצעים את השלבים הבאים:
משתמשים ב-Config Connector כדי להפעיל את Pub/Sub API:
באמצעות כלי לעריכת טקסט שבוחרים, יוצרים קובץ בשם
enable-pubsub.yamlומעתיקים אליו את קוד ה-YAML הבא:# enable-pubsub.yaml apiVersion: serviceusage.cnrm.cloud.google.com/v1beta1 kind: Service metadata: name: pubsub.googleapis.com namespace: config-control spec: projectRef: external: projects/PROJECT_IDמחליפים את
PROJECT_IDבמזהה הפרויקט.כדי להפעיל את Pub/Sub API, צריך להחיל את המניפסט על האשכול:
kubectl apply -f enable-pubsub.yamlיכול להיות שיחלפו כמה דקות עד שה-API יופעל.
משתמשים ב-Config Connector כדי ליצור נושא Pub/Sub:
יוצרים קובץ בשם
pubsub-topic.yamlומעתיקים אליו את קוד ה-YAML הבא:# pubsub-topic.yaml apiVersion: pubsub.cnrm.cloud.google.com/v1beta1 kind: PubSubTopic metadata: annotations: cnrm.cloud.google.com/project-id: PROJECT_ID labels: label-one: "value-one" name: example-topic namespace: config-controlיוצרים את הנושא ב-Pub/Sub:
kubectl apply -f pubsub-topic.yaml
כדי לוודא ש-Config Controller יצר את המשאב ב- Google Cloud, אפשר להציג את רשימת הנושאים ב-Pub/Sub:
gcloud pubsub topics listהפלט אמור להיראות כך:
--- name: projects/PROJECT_ID/topics/start-instance-event --- labels: label-one: value-one managed-by-cnrm: 'true' name: projects/PROJECT_ID/topics/example-topic
אכיפת מדיניות באמצעות Policy Controller
בעזרת מופע Config Controller אפשר להשתמש ב-Policy Controller ובאילוצים של Policy Controller. כחלק מההתקנה של Policy Controller, Config Controller מתקין אוטומטית את ספריית תבניות האילוצים. אתם יכולים להשתמש בתבניות בספרייה הזו כדי לאכוף מגוון של אמצעי בקרה נפוצים בנושאי אבטחה ותאימות במופעים של Config Controller.
בקטע הזה יוצרים אילוץ באמצעות תבנית האילוצים GCPStorageLocationConstraintV1. התבנית הזו מאפשרת להגביל את המיקום שבו אפשר ליצור קטגוריות של Cloud Storage. האילוץ שיוצרים באמצעות התבנית הזו מגביל את המיקום ל-us-central1. כדאי להשתמש במגבלה הזו כדי לוודא שהמאגדים נוצרים באזור שמציע את המחיר והביצועים הכי טובים.
כדי ליצור את האילוץ:
יוצרים קובץ בשם
bucket-constraint.yamlומעתיקים אליו את קוד ה-YAML הבא:# bucket-constraint.yaml apiVersion: constraints.gatekeeper.sh/v1beta1 kind: GCPStorageLocationConstraintV1 metadata: name: storage-only-in-us-central1 spec: match: kinds: - apiGroups: - storage.cnrm.cloud.google.com kinds: - StorageBucket parameters: locations: - us-central1יוצרים את האילוץ:
kubectl apply -f bucket-constraint.yamlהפלט שיתקבל:
gcpstoragelocationconstraintv1.constraints.gatekeeper.sh/storage-only-in-us-central1 created`כדי להוכיח שהאילוץ פועל, מנסים להשתמש ב-Config Connector כדי ליצור משאב StorageBucket ב-
asia-southeast1:יוצרים קובץ בשם
asia-storage-bucket.yamlומעתיקים אליו את קוד ה-YAML הבא:# asia-storage-bucket.yaml apiVersion: storage.cnrm.cloud.google.com/v1beta1 kind: StorageBucket metadata: name: bucket-in-disallowed-location namespace: config-control spec: location: asia-southeast1מנסים ליצור את הקטגוריה של Cloud Storage:
kubectl apply -f asia-storage-bucket.yamlהפלט שיתקבל:
Error from server (Forbidden): error when creating "STDIN": admission webhook "validation.gatekeeper.sh" denied the request: [storage-only-in-us-central1] Cloud Storage bucket <bucket-in-disallowed-location> uses a disallowed location <asia-southeast1>, allowed locations are ["us-central1"]
הגדרה של GitOps באמצעות סנכרון תצורות
סנכרון תצורות הוא שירות GitOps שמאפשר לסנכרן את מופע Config Controller עם הגדרות, מדיניות וGoogle Cloud משאבים שמאוחסנים במאגר Git, בתמונה של OCI או במאגר Helm. מכיוון ש-סנכרון תצורות מבצע באופן רציף התאמה בין המצב של Config Controller לבין ההגדרות במקור, הוא יכול לעזור לכם לוודא שההגדרות של המכונות עקביות.
בקטע הזה, מסנכרנים את מופע Config Controller עם מאגר ציבורי ב-GitHub. מאגר המידע הזה מכיל עוד משאב PubSubTopic. על ידי סנכרון המופע שלכם מהמאגר הזה,
המשאב נוצר באופן אוטומטי ומיושם במופע שלכם. אפשר ליצור את המשאבים באמצעות סנכרון תצורות (במקום להחיל את המשאב ישירות) אם רוצים להשתמש בתהליך עבודה של GitOps.
כדי לסנכרן מ-GitHub, צריך להגדיר Cloud NAT. הסיבה לכך היא שמופע Config Controller מגובה על ידי אשכול GKE פרטי, ולצמתים של אשכול פרטי אין גישה לאינטרנט יוצא:
יוצרים נתב Cloud NAT. צריך את הנתב הזה כדי להגדיר את שער ה-NAT.
gcloud compute routers create cc-nat-router \ --network default \ --region us-central1הפלט אמור להיראות כך:
Creating router [cc-nat-router]...done. NAME REGION NETWORK cc-nat-router us-central1 defaultמגדירים שער NAT בנתב שיצרתם בשלב הקודם:
gcloud compute routers nats create cc-nat-config \ --router-region us-central1 \ --router cc-nat-router \ --nat-all-subnet-ip-ranges \ --auto-allocate-nat-external-ipsהפלט שיתקבל:
Creating NAT [cc-nat-config] in router [cc-nat-router]...done.
כדי להגדיר את מופע Config Controller לסנכרון ממאגר לדוגמה, יוצרים קובץ בשם
cc-rootsync.yamlומעתיקים אליו את ה-YAML הבא:# cc-rootsync.yaml apiVersion: configsync.gke.io/v1beta1 kind: RootSync metadata: name: root-sync namespace: config-management-system spec: sourceFormat: unstructured git: repo: https://github.com/GoogleCloudPlatform/anthos-config-management-samples branch: main dir: config-controller-quickstart auth: noneמחילים את ההגדרה:
kubectl apply -f cc-rootsync.yamlאחרי שהמופע מסתנכרן מהמאגר, סנכרון תצורות יוצר את הנושא ב-Pub/Sub ומחיל אותו על מופע Config Controller.
מוודאים ש-Config Sync מסנכרן את מאגר ה-Git עם מופע Config Controller:
nomos status --contexts gke_PROJECT_ID_us-central1_krmapihost-cc-exampleהפלט אמור להיראות כך:
*gke_PROJECT_ID_us-central1_krmapihost-cc-example -------------------- <root>:root-sync https://github.com/GoogleCloudPlatform/anthos-config-management-samples/config-controller-quickstart@main SYNCED @ 2023-01-10 18:31:02 +0000 UTC 715b4295d3eac07b057cce2543275c1ee104cad8 Managed resources: NAMESPACE NAME STATUS SOURCEHASH config-control pubsubtopic.pubsub.cnrm.cloud.google.com/pubsub-topic-sample-sync Current 715b429 config-control service.serviceusage.cnrm.cloud.google.com/pubsub.googleapis.com Current 715b429אם הפלט הזה לא מופיע, צריך לחכות כמה דקות ולנסות שוב.
מוודאים ש-Config Controller יצר את המשאב:
gcloud pubsub topics listהפלט אמור להיראות כך:
name: projects/PROJECT_ID/topics/start-instance-event --- labels: managed-by-cnrm: 'true' name: projects/PROJECT_ID/topics/sample-topic --- labels: managed-by-cnrm: 'true' name: projects/PROJECT_ID/topics/pubsub-topic-sample-sync --- labels: label-one: value-one managed-by-cnrm: 'true' name: projects/PROJECT_ID/topics/example-topicבפלט הזה אפשר לראות את Pub/Sub שיצרתם בקטע יצירת מופע של Config Controller ואת זה שיצרתם על ידי סנכרון המופע עם מאגר GitHub.
הסרת המשאבים
כדי להימנע מחיובים בחשבון Google Cloud על המשאבים שבהם השתמשתם במדריך הזה, אתם יכולים למחוק את הפרויקט שמכיל את המשאבים או להשאיר את הפרויקט ולמחוק את המשאבים בנפרד.
מחיקת הפרויקט
כדי למחוק Google Cloud פרויקט:
gcloud projects delete PROJECT_ID
מחיקת המשאבים הבודדים
מחיקת משאב Config Connector
PubSubTopic:kubectl delete -f pubsub-topic.yamlמוחקים את האילוץ של Policy Controller:
kubectl delete -f bucket-constraint.yamlמחיקת נתב NAT:
gcloud compute routers delete cc-nat-router \ --project=PROJECT_ID \ --region=us-central1כשמתבקשים, מקישים על
y.מוחקים את משאב Pub/Sub שנוצר על ידי סנכרון תצורות:
kubectl delete PubSubTopic pubsub-topic-sample-sync -n config-controlמחיקת משאב RootSync:
kubectl delete rootsync root-sync -n config-management-systemבאמצעות כלי לעריכת טקסט שאתם מעדיפים, מוחקים את כל קובצי ה-YAML שיצרתם:
enable-pubsub.yamlpubsub-topic.yamlbucket-constraint.yamlasia-storage-bucket.yamlcc-rootsync.yaml
מוחקים את מופע Config Controller:
gcloud anthos config controller delete --location=us-central1 cc-exampleכשמתבקשים, מקישים על
y.