iT邦幫忙

2024 iThome 鐵人賽

DAY 18
0
DevOps

DevOps需要的技能樹...(應該)都點得到!系列 第 18

Day 18: AWS Elastic Kubernetes Service (EKS) 入門

  • 分享至 

  • xImage
  •  

本章節「AWS」概要

Day 17: 使用 AWS EC2 部署 Docker 容器
Day 18: AWS Elastic Kubernetes Service (EKS) 入門
Day 19: 設置 AWS ALB(Application Load Balancer)進行負載均衡
Day 20: AWS Auto Scaling 自動調整實例數量
Day 21: AWS S3 與容器化應用數據存儲
Day 22: 使用 AWS RDS 管理關聯式資料庫
Day 23: 使用 AWS Inspector 進行安全性掃描與合規性檢查

Day18-23都會產生費用,不適用於免費方案,請斟酌練習喔!

認識EKS

Amazon EKS(Elastic Kubernetes Service)是 AWS 提供的托管 Kubernetes 服務,簡化了 Kubernetes 的部署和管理。EKS 提供高可用的控制平面,自動處理 Kubernetes 環境的維護和升級。用戶可以利用 EKS 部署、管理和擴展容器化應用程式,並集成 AWS 服務(如 IAM、VPC 和 CloudWatch)。EKS 提供企業級的安全性和可靠性,支持快速開發和運營雲原生應用。

這裡會接觸到一點AWS IAM(後面其他服務也會有關聯)

認識IAM

AWS IAM(Identity and Access Management)是亞馬遜網路服務提供的身份和存取管理服務。它允許用戶創建和管理 AWS 資源的使用者和權限,控制誰可以訪問 AWS 資源以及他們可以執行的操作。IAM 支持基於角色的訪問控制(RBAC),多因素身份驗證(MFA),以及細粒度的許可政策,確保安全性和合規性。用戶可以通過 IAM 管理用戶、組、角色和策略,保護雲端資源免受未經授權的訪問。

在 AWS IAM 中,將策略(Policy)建立在角色(Role)上和建立在使用者(User)上具有以下不同點:

  1. 用途和適用對象

角色(Role):
角色主要用於為 AWS 服務、應用程式或其他 AWS 資源提供臨時的權限。角色可以被 AWS 服務(如 EC2 實例)、IAM 使用者、或其他 AWS 資源(如 Lambda 函數)假設。
角色的策略通常用於跨帳戶授權、應用程式訪問、臨時訪問、以及更靈活的權限管理。

使用者(User):
使用者是指在 AWS 中具有長期身份的實體,通常代表人員或自動化系統。
使用者的策略用於直接控制該使用者的訪問權限,適合需要持續和穩定權限的情況。

  1. 權限管理

角色(Role):
角色的策略可以設計為臨時權限,並且角色可以被多個實體假設,這樣可以集中管理和更靈活地分配權限。
角色可以被設計為跨帳戶訪問,或允許其他服務(如 AWS Lambda)在執行時使用角色的權限。

使用者(User):
使用者的策略直接與特定的使用者關聯,適合需要長期固定權限的情況。
使用者的權限在 IAM 系統中直接管理,通常不會像角色那樣跨帳戶或跨服務使用。

  1. 安全性和管理

角色(Role):
使用角色可以實現最小權限原則,因為角色的權限可以按需臨時授予,並且角色可以輕鬆地進行審計和管理。
適合用於動態授權和短期使用情境。

使用者(User):
使用者的權限一般較為靜態,適合需要長期、穩定權限的場景。
更容易在具體使用者層級進行權限管理和審計。

總結
將策略建立在角色上適合動態、跨帳戶、服務間的權限管理。
將策略建立在使用者上則適合長期、穩定的個別使用者權限控制。

進階可參考官方說明頁面

前置作業

建立一個IAM使用者,選擇直接連結政策,將EKS相關的都勾上

https://ithelp.ithome.com.tw/upload/images/20240812/20168384xMgGw5Qz8D.jpg

使用者可以產生金鑰(不能再次查詢,須牢記)

https://ithelp.ithome.com.tw/upload/images/20240812/20168384BmtvkdL1oM.jpg

逐步安裝

#獲取aws-cli工具
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
#解壓縮
unzip awscliv2.zip
#配置+安裝
sudo ./aws/install --bin-dir /usr/local/bin --install-dir /usr/local/aws-cli --update
aws configure 

依據提示輸入
region(你的EKS所在區域,例如:ap-southeast-1)
access key(使用者產生)
secret key(使用者產生)

#安裝EKS
curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
sudo mv /tmp/eksctl /usr/local/bin
#安裝kubectl
sudo curl -Lo /usr/local/bin/kubectl https://s3.us-west-2.amazonaws.com/amazon-eks/1.26.4/2023-05-11/bin/linux/amd64/kubectl
#加入執行權限
sudo chmod +x /usr/local/bin/kubectl

建立集群

(選項一)在AWS主控台上也可操作,比較容易

基本上就是一直下一步,選擇IAM服務帳戶、VPC、子網路、K8S組件的版本...等

https://ithelp.ithome.com.tw/upload/images/20240812/20168384vWTeFfUYtJ.jpg

https://ithelp.ithome.com.tw/upload/images/20240812/20168384mzYXbhm8Fg.jpg

(選項二)通過CLI編寫yaml腳本進行操作,比較詳細

sudo nano your-eks-cluster.yaml
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
  name: cluster-in-existing-vpc
  region: ap-southeast-1
  version: "1.26"
vpc:
  subnets:
    private:
      ap-southeast-1a: { id: <你的子網subnet-****> }
      ap-southeast-1b: { id: <你的子網subnet-****> }
nodeGroups:
  - name: ng-1-workers
    labels: { role: workers }
    #機型
    instanceType: t3.xlarge
    #最大及最小數量
    minSize: 2
    maxSize: 5
    #磁碟大小
    volumeSize: 30
    volumeType: gp3
    privateNetworking: true
    ssh:
      publicKey: "<你的金鑰ssh-****>"
    iam:
      withAddonPolicies:
        autoScaler: true
  - name: ng-2-builders
    labels: { role: builders }
    #機型
    instanceType: t3.xlarge
    desiredCapacity: 2
    volumeSize: 30
    privateNetworking: true
    ssh:
      publicKey: "<你的金鑰ssh-****>"
    iam:
      withAddonPolicies:
        imageBuilder: true
        ebs: true
        fsx: true
        efs: true
        awsLoadBalancerController: true
        autoScaler: true
#建立集群
eksctl create cluster -f your-eks-cluster.yaml
#刪除集群
eksctl delete cluster -f your-eks-cluster.yaml

再來建立nodeGroup的腳本

sudo nano your-eks-nodegroup-c6i.yaml
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
  name: your-eks-cluster-vpc
  region: ap-southeast-1
 
nodeGroups:
  #節點群組名稱
  - name: ng-c6i-2xlarge-workers
    labels: { role: workers }
    #機型
    instanceType: c6i.2xlarge
    minSize: 3
    maxSize: 5
    volumeSize: 200
    volumeType: gp3
    privateNetworking: true
    ssh:
      publicKey: "<你的金鑰ssh-****>"
    iam:
      withAddonPolicies:
        awsLoadBalancerController: true
        autoScaler: true
        ebs: true
        fsx: true
        efs: true
#手動建立node group
eksctl create nodegroup --config-file=your-eks-nodegroup-c6i.yaml
 
#刪除node group
$eksctl delete nodegroup --cluster=<clusterName> --name=<nodegroupName>
$eksctl delete nodegroup --cluster your-eks-cluster-vpc --name=ng-c6i-4xlarge-workers

其他操作

查詢有哪些cluster
#eksctl get clusters --region ap-southeast-1
 
#查詢node群組名稱
eksctl get nodegroups --cluster your-eks-cluster
eksctl get nodegroups --cluster your-eks-cluster

上一篇
Day 17: 使用 AWS EC2 部署 Docker 容器
下一篇
Day 19: 設置 AWS ALB(Application Load Balancer)進行負載均衡
系列文
DevOps需要的技能樹...(應該)都點得到!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言