برنامه نویسی

ساخت تصاویر کانتینر ایمن در AWS EKS با Kaniko

در دنیای Kubernetes، ساختن تصاویر کانتینر به صورت ایمن و کارآمد یک چالش رایج است. این جایی است که Kaniko وارد می شود. Kaniko ابزاری برای ساخت تصاویر کانتینر از یک Dockerfile، در داخل یک کانتینر یا خوشه Kubernetes، بدون نیاز به دسترسی ریشه است. این پست به بررسی قابلیت‌های Kaniko می‌پردازد و راهنمای راه‌اندازی آن را در یک خوشه AWS Elastic Kubernetes Service (EKS) ارائه می‌کند.

کانیکو چیست؟

Kaniko یک ابزار منبع باز است که توسط Google برای ساخت تصاویر کانتینر از یک Dockerfile، به طور ایمن در یک خوشه Kubernetes توسعه یافته است. برخلاف ساخت‌های Docker سنتی که برای انجام وظایف به دسترسی روت ممتاز نیاز دارند، Kaniko به Docker یا دسترسی ممتاز نیازی ندارد و خطرات امنیتی مرتبط با ساخت تصویر کانتینر را کاهش می‌دهد.

چرا از Kaniko در AWS EKS استفاده کنیم؟

  • امنیت: تصاویر کانتینر را بدون دیمون داکر می سازد و سطح حمله را کاهش می دهد.
  • انعطاف پذیری: به طور یکپارچه با ابزارها و خدمات مختلف CI/CD ادغام می شود.
  • بهره وری: از منابع خوشه Kubernetes برای ساخت تصویر استفاده می کند.

راه اندازی Kaniko در AWS EKS

بیایید راه‌اندازی Kaniko را در یک خوشه AWS EKS برای ساختن و ارسال تصویر کانتینر به Amazon Elastic Container Registry (ECR) طی کنیم.

پیش نیازها

  • یک حساب AWS با دسترسی به EKS و ECR.
  • kubectl برای تعامل با خوشه EKS شما پیکربندی شده است.
  • AWS CLI روی دستگاه شما پیکربندی شده است.
  • داکر روی دستگاه شما نصب شده است.
  • اعتبارنامه برای Amazon ECR پیکربندی شده است.

مرحله 1: یک مخزن ECR ایجاد کنید

ابتدا یک مخزن در آمازون ECR ایجاد کنید که Kaniko تصاویر ساخته شده را در آن فشار دهد.

aws ecr create-repository --repository-name my-kaniko-example
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مرحله 2: مجوزهای IAM را پیکربندی کنید

Kaniko برای ارسال تصاویر به ECR به مجوز نیاز دارد. یک خط مشی IAM ایجاد کنید که مجوزهای لازم را می دهد و آن را به نقش مرتبط با گره های EKS خود متصل کنید.

  • یک خط مشی IAM ایجاد کنید (channel-ecr-policy.json):
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ecr:GetAuthorizationToken",
                "ecr:BatchCheckLayerAvailability",
                "ecr:CompleteLayerUpload",
                "ecr:InitiateLayerUpload",
                "ecr:PutImage",
                "ecr:UploadLayerPart"
            ],
            "Resource": "*"
        }
    ]
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

aws iam create-policy --policy-name KanikoECRPolicy --policy-document file://kaniko-ecr-policy.json
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  • خط مشی را به نقش گره EKS خود وصل کنید.

پس از ایجاد خط مشی IAM که به Kaniko اجازه می دهد تا تصاویر را به Amazon ECR ارسال کند، باید این خط مشی را به نقش IAM مرتبط با گره های EKS خود پیوست کنید. این مرحله برای اعطای مجوزهای مورد نیاز AWS به pod Kaniko ضروری است.

نقش EKS Node IAM خود را پیدا کنید

ابتدا نقش IAM مورد استفاده توسط گره های EKS خود را شناسایی کنید. می توانید این اطلاعات را در کنسول EKS آمازون یا با توصیف گروه گره EKS خود از طریق AWS CLI پیدا کنید:

aws eks describe-nodegroup --cluster-name your-cluster-name --nodegroup-name your-nodegroup-name
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

به دنبال nodeRole در خروجی، که ARN نقش IAM خواهد بود.

خط مشی IAM را به نقش گره EKS وصل کنید

هنگامی که گره EKS خود را IAM ARN دارید، KanikoECRPolicy را به آن وصل کنید. می توانید این کار را از طریق کنسول مدیریت AWS یا AWS CLI انجام دهید.

استفاده از AWS CLI:

aws iam attach-role-policy --role-name YourEKSNodeRoleName --policy-arn arn:aws:iam::your-account-id:policy/KanikoECRPolicy
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

جایگزین کردن YourEKSNodeRoleName با نام نقش IAM گره EKS شما (نه ARN) و your-account-id با شناسه حساب AWS شما.

تأیید پیوست خط مشی

با فهرست کردن خط‌مشی‌های پیوست شده به نقش گره EKS خود، مطمئن شوید که خط‌مشی با موفقیت پیوست شده است:

aws iam list-attached-role-policies --role-name YourEKSNodeRoleName
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

باید ببینی KanikoECRPolicy در لیست سیاست های پیوست شده است.

مرحله 3: خوشه Kubernetes خود را آماده کنید

یک راز Kubernetes برای ذخیره اعتبار ECR خود ایجاد کنید که Kaniko از آن برای احراز هویت استفاده می کند.

kubectl create secret docker-registry regcred \
    --docker-server=<AWS_REGION>.amazonaws.com \
    --docker-username=AWS \
    --docker-password=$(aws ecr get-login-password) \
    --docker-email=<YOUR_EMAIL>
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مرحله 4: Kaniko Pod را مستقر کنید

یک پاد را مستقر کنید که از Kaniko برای ساخت و ارسال تصویر به مخزن ECR شما استفاده می کند. استقرار خود را در یک فایل YAML تعریف کنید (kaniko-pod.yaml):

apiVersion: v1
kind: Pod
metadata:
  name: kaniko
spec:
  containers:
  - name: kaniko
    image: gcr.io/kaniko-project/executor:latest
    args: ["--dockerfile=Dockerfile",
           "--context=git://github.com/<your-repo>.git#refs/heads/master",
           "--destination=<AWS_ACCOUNT_ID>.dkr.ecr.<AWS_REGION>.amazonaws.com/my-kaniko-example:latest"]
    volumeMounts:
      - name: kaniko-secret
        mountPath: /kaniko/.docker
  restartPolicy: Never
  volumes:
    - name: kaniko-secret
      secret:
        secretName: regcred
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مکان‌ها را با جزئیات خاص خود جایگزین کنید. غلاف را مستقر کنید:

kubectl apply -f kaniko-pod.yaml
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مرحله 5: ساخت و فشار تصویر را تأیید کنید

گزارش های غلاف را برای اطمینان از تکمیل موفقیت آمیز فرآیند ساخت و فشار نظارت کنید:

kubectl logs kaniko
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

روش اضافی: اجرای Kaniko در داخل یک Docker Container

برای توسعه محلی یا در خطوط لوله CI/CD که Kubernetes در دسترس نیست، می‌توانید از Docker برای اجرای Kaniko با استفاده از تصویر Executor از GCR استفاده کنید. این رویکرد محیط Kubernetes را شبیه‌سازی می‌کند و به شما امکان می‌دهد بدون نیاز به راه‌اندازی کامل Kubernetes، تصاویر کانتینر را به رجیستری مانند Amazon ECR بسازید و به آن فشار دهید.

مرحله 1: تصویر اجرایی Kaniko را بکشید

ابتدا تصویر Kaniko Executor را از Google Container Registry بکشید:

docker pull gcr.io/kaniko-project/executor:latest
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مرحله 2: زمینه ساخت و فایل Docker را آماده کنید

اطمینان حاصل کنید که Dockerfile شما و هر فایل لازم برای ساخت (زمینه ساخت) در یک دایرکتوری خاص قرار دارند. این دایرکتوری در کانتینر Docker که Kaniko را اجرا می کند، سوار می شود.

مرحله 3: Kaniko را در Docker اجرا کنید

برای ساخت و فشار دادن یک تصویر با استفاده از Kaniko در داخل یک ظرف Docker، از دستور زیر استفاده کنید، مسیرها و متغیرها را برای محیط خود تنظیم کنید:

docker run \
  -v /path/to/your/build/context:/workspace \
  -v /path/to/.docker:/kaniko/.docker \
  gcr.io/kaniko-project/executor:latest \
  --dockerfile /workspace/Dockerfile \
  --context dir:///workspace/ \
  --destination=<AWS_ACCOUNT_ID>.dkr.ecr.<AWS_REGION>.amazonaws.com/my-kaniko-example:latest
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  • /path/to/your/build/context مسیر محلی Dockerfile شما و هر فایلی که نیاز دارد است.
  • /path/to/.docker باید شامل شما باشد config.json با اعتبارنامه ECR
  • تنظیم --destination پرچم گذاری کنید تا به مخزن ECR مورد نظر خود اشاره کنید.

مرحله 4: Docker را با ECR تأیید کنید

اطمینان حاصل کنید که Docker با آمازون ECR احراز هویت شده است تا امکان فشار دادن تصویر ساخته شده را فراهم کند. با استفاده از AWS CLI می توانید Docker را احراز هویت کنید:

aws ecr get-login-password --region <AWS_REGION> | docker login --username AWS --password-stdin <AWS_ACCOUNT_ID>.dkr.ecr.<AWS_REGION>.amazonaws.com
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مرحله 5: تصویر را در ECR تأیید کنید

پس از تکمیل ساخت، مخزن آمازون ECR خود را بررسی کنید تا مطمئن شوید که تصویر با موفقیت ارسال شده است.

ترکیب بهترین های هر دو جهان

اجرای Kaniko در ظرف Docker یک راه حل همه کاره برای ساخت تصاویر کانتینر ارائه می دهد، به خصوص زمانی که Kubernetes بخشی از زنجیره ابزار فوری شما نیست. این روش پلی بین محیط‌های توسعه محلی و فناوری‌های بومی ابری ایجاد می‌کند و امکان انتقال یکپارچه به Kubernetes را در صورت آماده شدن فراهم می‌کند.

نتیجه

Kaniko به عنوان یک ابزار قوی برای ساخت تصاویر کانتینر به صورت ایمن ظاهر می شود، چه در یک خوشه Kubernetes با AWS EKS یا به صورت محلی با استفاده از Docker. توانایی آن برای اجرا بدون Docker Daemon، آن را به انتخاب ایمن‌تر و سازگارتر برای خطوط لوله CI/CD تبدیل می‌کند و به خوبی در جریان‌های کاری توسعه و استقرار مختلف قرار می‌گیرد.

توضیحات تصویر

نوشته های مشابه

همچنین ببینید
بستن
دکمه بازگشت به بالا