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

پیشنهاد ویژه
[button color="primary" size="big" link="https://nabfollower.com/buy-real-follower/" icon="" target="true" follow="false"]خرید فالوور واقعی[/button][button color="primary" size="big" link="https://nabfollower.com/buy-instagram-like/" icon="" target="true" follow="false"]خرید لایک اینستاگرام[/button][button color="primary" size="big" link="https://nabfollower.com/buy-instagram-views/" icon="" target="true" follow="false"]خرید ویو اینستاگرام[/button][button color="primary" size="big" link="https://nabfollower.com/" icon="" target="true" follow="false"]خرید فالوور اینستاگرام[/button]
در دنیای 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 تبدیل میکند و به خوبی در جریانهای کاری توسعه و استقرار مختلف قرار میگیرد.