במאמר הזה מוסבר איך להשתמש ב-GKE ב-AWS עם מאגר פרטי של קובצי אימג' של קונטיינרים, כמו Container Registry (GCR).
לפני שמתחילים
לפני שמתחילים להשתמש ב-GKE on AWS, חשוב לוודא שביצעתם את המשימות הבאות:
- ממלאים את הדרישות המוקדמות.
- מתקינים שירות ניהול.
- יוצרים אשכול משתמשים.
- בספריית
anthos-aws, משתמשים ב-anthos-gkeכדי להחליף הקשר לאשכול המשתמשים. מחליפים את CLUSTER_NAME בשם אשכול המשתמש.cd anthos-aws env HTTPS_PROXY=http://localhost:8118 \ anthos-gke aws clusters get-credentials CLUSTER_NAME
- יצירה של קובץ אימג' של Docker והעברה שלו בדחיפה ל-Container Registry. בדוגמאות שבמאמר הזה נעשה שימוש בקונטיינר
hello-app, שנבנה באמצעות השלבים שמפורטים במאמר פריסת אפליקציה בקונטיינר במסמכי GKE on Google Cloud .
מאגרי תמונות פרטיים של קונטיינרים
מאגר קונטיינרים מאחסן ומפיץ תמונות של קונטיינרים. ההתקנה של GKE ב-AWS יכולה לגשת לתמונות ציבוריות כברירת מחדל.
בדיקה אם יש תמונות ב-Container Registry
כדי להשלים את שאר השלבים, צריך קובץ אימג' של קונטיינר. כדי לקבל את השם של קובץ האימג' בקונטיינר, פועלים לפי השלבים הבאים:
מגדירים את כלי שורת הפקודה של Docker כדי לבצע אימות ל-Container Registry באמצעות Google Cloud CLI:
gcloud auth configure-dockerGoogle Cloud CLI רושם כלי עזר לפרטי כניסה לכל מאגרי Docker שנתמכים על ידי Google.
מוודאים ש-Container Registry כולל תמונה עם
docker images.docker imagesDocker מתחבר ל-Container Registry ומחזיר את קובצי האימג' שזמינים במאגר שלכם ב-Container Registry. לדוגמה, בתגובה שלמטה מוצג קובץ אימג' של קונטיינר בשם
hello-appבמאגר project-id.REPOSITORY TAG IMAGE ID CREATED SIZE gcr.io/project-id/hello-app v1 732f02cea7cb 12 minutes ago 11.5MB
אם אין לכם קובץ אימג' של קונטיינר מוכן, צרו אותו לפי השלבים במאמר פריסת אפליקציה בקונטיינרים.
יצירת חשבון שירות
אשכולות המשתמשים עוברים אימות באמצעות חשבון שירות של ניהול זהויות והרשאות גישה (IAM).
כדי ליצור חשבון שירות חדש:
יוצרים חשבון שירות של IAM באמצעות Google Cloud CLI.
gcloud iam service-accounts create account-nameמחליפים את account-name בשם של חשבון השירות החדש Google Cloud.
מעניקים לחשבון השירות גישה ל-Container Registry.
gcloud projects add-iam-policy-binding project-id \ --member serviceAccount:account-name@project-id.iam.gserviceaccount.com \ --role roles/storage.objectViewerמחליפים את מה שכתוב בשדות הבאים:
- project-id עם הפרויקט Google Cloud
- account-name עם שם חשבון השירות שלכם Google Cloud
מורידים את המפתח של חשבון השירות.
gcloud iam service-accounts keys create key.json \ --iam-account account-name@project-id.iam.gserviceaccount.comמחליפים את מה שכתוב בשדות הבאים:
- project-id עם הפרויקט Google Cloud
- account-name עם שם חשבון השירות שלכם Google Cloud
עכשיו אפשר להגדיר את אשכול המשתמשים כדי להתחבר אל Container Registry.
הגדרה של סוד ב-Kubernetes
כדי לספק את המפתח לאימות ב-Container Registry, שומרים את המפתח של חשבון השירות כסוד ב-Kubernetes באופן הבא:
משתמשים ב-
kubectlכדי ליצור את הסוד.env HTTPS_PROXY=http://localhost:8118 \ kubectl create secret docker-registry gcr-secret \ --docker-server=gcr.io \ --docker-username=_json_key \ --docker-email=account-name@project-id.iam.gserviceaccount.com \ --docker-password="$(cat key.json)"מחליפים את מה שכתוב בשדות הבאים:
- project-id עם הפרויקט Google Cloud
- account-name עם שם חשבון השירות שלכם Google Cloud
מוחקים את העותק המקומי של המפתח של חשבון השירות.
rm key.json
עכשיו אפשר להפנות אל הסוד הזה בעומסי העבודה.
יצירת עומס עבודה עם תמונה פרטית
כדי להשתמש בתמונה ממאגר פרטי של קונטיינרים עם עומס עבודה, צריך להגדיר את השדה spec.imagePullSecrets לשם הסוד. השדה הזה נמצא במיקומים שונים ב-Pods וב-Deployments.
יצירת Pod
כדי ליצור Pod שיכול לגשת למאגר התמונות של הקונטיינרים, מגדירים את השדה spec.imagePullSecrets לשם הסוד.
יוצרים Pod שמציין את
spec.imagePullSecrets.apiVersion: v1 kind: Pod metadata: name: pod-name spec: containers: - name: container-name image: gcr.io/project-id/hello-app:v1 imagePullSecrets: - name: secret-nameמחליפים את מה שכתוב בשדות הבאים:
- pod-name בשם ה-Pod
- container-name בשם הקונטיינר בתוך ה-Pod
- project-id עם הפרויקט Google Cloud
- secret-name בשם הסוד של הרישום
לדוגמה, כדי למשוך את התמונה
hello-app, מעתיקים את קובץ ה-YAML הבא לקובץ בשםhello-pod.yaml.apiVersion: v1 kind: Pod metadata: name: hello-pod spec: containers: - name: hello-container image: gcr.io/project-id/hello-app:v1 imagePullSecrets: - name: gcr-secretמחילים את ההגדרה על האשכול באמצעות הפקודה
kubectl.env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f hello-pod.yamlמוודאים שה-pod פועל באמצעות הפקודה
kubectl get.env HTTPS_PROXY=http://localhost:8118 \ kubectl get pod/hello-podהתשובה כוללת פוד אחד עם סטטוס
Running.NAME READY STATUS RESTARTS AGE hello-pod 1/1 Running 0 15sיצירת פריסה
כדי להשתמש במאגר פרטי בפריסה, מציינים את
imagePullSecretבתוך התבנית.לדוגמה, כדי ליצור פריסה של תמונת
hello-app, יוצרים קובץ בשםhello-deployment.yamlעם התוכן הבא:apiVersion: apps/v1 kind: Deployment metadata: name: hello-app-deployment spec: selector: matchLabels: app: products department: sales replicas: 3 template: metadata: labels: app: products department: sales spec: containers: - name: hello image: "gcr.io/project-id/hello-app:v1" env: - name: "PORT" value: "50001" imagePullSecrets: - name: gcr-secretמחילים את ההגדרה על האשכול באמצעות הפקודה
kubectl.env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f hello-deployment.yamlמוודאים שהפריסה פועלת עם
kubectl pods.env HTTPS_PROXY=http://localhost:8118 \ kubectl get pods --selector=app=productsהפלט מכיל שלושה פודים של
Running.NAME READY STATUS RESTARTS AGE hello-app-deployment-67d9c6d98c-b69f2 1/1 Running 0 14m hello-app-deployment-67d9c6d98c-d6k5c 1/1 Running 0 14m hello-app-deployment-67d9c6d98c-p2md5 1/1 Running 0 14m