在 Amazon EKS 工作者節點上使用 Kubernetes DaemonSet 安裝 SSM 代理程式 - AWS Prescriptive Guidance

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

在 Amazon EKS 工作者節點上使用 Kubernetes DaemonSet 安裝 SSM 代理程式

由馬罕德拉西達帕(AWS)創建

環境:PoC 或試驗

技能:容器與微服務;DevOps;基礎結構

AWS 服務:Amazon EKS; AWS Systems Manager

Summary

注意:二 ○ 二一一年九月:最新的亞馬遜 EKS 優化 AMI 會自動安裝 SSM 代理程式。如需詳細資訊,請參閲 。版本備註有關 2021 年 6 月的非核心商業信息。

在 Amazon Elastic Kubernetes Service (Amazon EKS) 中,由於安全準則,工作者節點沒有附加安全殼層 (SSH) 金鑰組。此模式顯示如何使用 Kubernetes DaemonSet 程式資源類型在所有工作節點上安裝 AWS 系統管理代理程式 (SSM 代理程式),而不是手動安裝或取代節點的 Amazon 機器映像 (AMI)。DaemonSet 在工作者節點上使用 CronJob 來排程 SSM 代理程式的安裝。您也可以使用此模式在背景工作節點上安裝其他套件。

當您疑難排解叢集中的問題時,依需求安裝 SSM 代理程式可讓您與背景工作節點建立 SSH 工作階段、收集記錄或查看執行個體組態,而不需要 SSH 金鑰配對。

先決條件和限制

先決條件

  • 具有 Amazon Elastic Compute Cloud (Amazon EC2) 工作者節點的現有 Amazon EKS 叢集。

  • 容器執行個體應具有與 SSM 服務通訊所需的權限。AWS Identity and Access Management (IAM) 受管角色AmazonSSMManagedInstanceCore 據庫提供 SSM 代理程式在 EC2 執行個體上執行的必要權限。如需詳細資訊,請參閲 。AWS Systems Manager 文件。

限制

  • 此模式不適用於 AWS Fargate,因為遠方之門平台不支援 DaemonSets。

  • 此模式僅適用於 Linux 為基礎的背景工作節點。

  • 守護系統網繭以特權模式執行。如果 Amazon EKS 叢集具有攔截網繭在特殊權限模式下的 Webhook,則不會安裝 SSM 代理程式。

Architecture

Tools

工具

  • 葛貝— kubectl 是用來與 Amazon EKS 叢集互動的命令列公用程式。此模式使用 kubectl 在 Amazon EKS 叢集上部署守護系統,該系統會在所有工作者節點上安裝 SSM 代理程式。

  • Amazon EKS— Amazon EKS 讓您輕鬆於 AWS 執行 Kubernetes,而無需自行設置、操作和維護您的 Kubernetes 控制窗格。Kubernetes 是一套開放原始碼系統,用於容器化應用程式的自動化部署、擴展與管理。

  • 工作階段管理員— AWS Systems Manager 工作階段管理員可讓您透過以瀏覽器為基礎的互動式單鍵 shell 或透過 AWS 命令列界面 (AWS CLI) 來管理 EC2 執行個體、內部部署執行個體和虛擬機器 (VM)。

Code

使用下列程式碼建立將在 Amazon EKS 叢集上安裝 SSM 代理程式的守護程式組態檔。

cat << EOF > ssm_daemonset.yaml apiVersion: apps/v1 kind: DaemonSet metadata:   labels:     k8s-app: ssm-installer   name: ssm-installer   namespace: kube-system spec:   selector:     matchLabels:       k8s-app: ssm-installer   template:     metadata:       labels:         k8s-app: ssm-installer     spec:       containers:       - name: sleeper         image: busybox         command: ['sh', '-c', 'echo I keep things running! && sleep 3600']       initContainers:       - image: amazonlinux         imagePullPolicy: Always         name: ssm         command: ["/bin/bash"]         args: ["-c","echo '* * * * * root yum install -y https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.rpm & rm -rf /etc/cron.d/ssmstart' > /etc/cron.d/ssmstart"]         securityContext:           allowPrivilegeEscalation: true         volumeMounts:         - mountPath: /etc/cron.d           name: cronfile         terminationMessagePath: /dev/termination-log         terminationMessagePolicy: File       volumes:       - name: cronfile         hostPath:           path: /etc/cron.d           type: Directory       dnsPolicy: ClusterFirst       restartPolicy: Always       schedulerName: default-scheduler       terminationGracePeriodSeconds: 30 EOF

Epics

任務描述所需技能
安裝並設定 kubectl 以存取 EKS 叢集。

如果尚未安裝和設定 kubectl 以存取 Amazon EKS 叢集,請參閱安裝 kubectl《Amazon EKS 文件》中的文件。

DevOps
任務描述所需技能
建立 DaemonSet 組態檔。

請使用程式碼區段,建立名為 ssm_daemonset.yaml 的守護系統設定檔,該設定檔將部署至 Amazon EKS 叢集。由守護星啟動的網繭將有一個主容器和一個初始化容器。主容器將只有睡眠命令,Init 容器將具有命令部分,它創建一個 cron 作業文件以在路徑上安裝 SSM 代理/etc/cron.d/。cron 作業只運行一次,並且在 cron 作業完成後自動刪除它創建的文件。一旦 init 容器完成,主容器將等待 60 分鐘,然後退出。啟動 60 分鐘後,新的網繭會在遺失 SSM 代理程式時安裝,或更新至最新版本。如有需要,可以修改睡眠命令,讓網繭每天重新啟動一次或更頻繁地執行。 

DevOps
在 Amazon EKS 叢集上部署守護程式集。

若要在 Amazon EKS 叢集上部署您在上一個步驟中建立的守護系統組態檔,請使用下列指令:

kubectl apply -f ssm_daemonset.yaml

此命令會先建立 DaemonSet,在工作者節點上執行網繭以安裝 SSM 代理程式。

DevOps

相關資源