iT邦幫忙

2023 iThome 鐵人賽

DAY 17
1
DevOps

第一次參賽就學 Kubernetes系列 第 17

[Day 17] 在 AWS 部署 Kubernetes 叢集 (一)

  • 分享至 

  • xImage
  •  

在前半個月寫了許多 k8s 的觀念後,覺得可以先寫一點如何在 AWS 建立 k8s 叢集的內容。

採 2 種模式去實作查看差異:

  1. 使用 kops 在 AWS 上部署叢集
  2. 使用 AWS Elastic Kubernetes Service(AWS EKS) 部署叢集

前置作業

為了能在 AWS 上建立叢集,需要先做一點前置的安裝作業:

(一) 建立 AWS 帳號
(二) 安裝 AWS CLI
(三) 設定 AWS CLI
(四) 安裝 kubectl
(五) 安裝 kops
(六) 安裝 Terraform

(一) 建立 AWS 帳號

現在建立 AWS 帳號直接就有 12 個月的免費優惠方案,不過這些免費資源有一些限制。例如:AWS 提供每月可使用 750 小時的 AWS EC2 運算資源,不過有限制使用地區以及執行個體,執行個體如 Linux 只提供 t2.micro 或 t3.micro 免費使用。

建立帳號申請除了填寫基本資料外,也會需要使用到信用卡。

(二) 安裝 AWS CLI

AWS CLI 是 Amazon 提供的一個命令列工具,可直接透過這個工具與 AWS 上的服務互動。

以下是使用 macOS 進行下載與安裝

curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg"
sudo installer -pkg AWSCLIV2.pkg -target /

檢視是否安裝完成。

which aws
/usr/local/bin/aws

aws --version
aws-cli/2.13.21 Python/3.11.5 Darwin/20.2.0 exe/x86_64 prompt/off

接下來設定 AWS CLI,因 AWS 因安全性需要驗證 AWS CLI 的身份,需要設定一個存取憑證。

(三) 設定 AWS CLI

為了要在後續設定 AWS CLI 可以連 AWS,需要身分的驗證,驗證有很多方式可以參考官方文件

我這邊會示範以「Workforce identity (AWS IAM Identity Center (successor to AWS Single Sign-On) users)」方式進行設定。

這個設定會需要啟用 AWS IAM Identity Center,並新增一個新的 IAM user、並指派權限給該使用者。

IAM Identity Center 設定

  1. 以 Root 登入 AWS
  2. 啟用 IAM Identity Center
    • 搜尋欄輸入「IAM Identity Center」
    • 將其「啟用」
  3. 使用預設目錄(Identity Center 目錄)、建立 IAM 身分中心的使用者
    • 新增「使用者」:輸入使用者名稱 aws-vii、密碼選擇「傳送電子郵件給此使用者,其中包含密碼設定指示」
    • 登入使用者信箱 → 按下「接受邀請」→ 設定新密碼 → 提交
  4. 建立系統管理權限、PowerUserAccess 權限
    • 在 AWS 以 Permission set 為權限的集合,建立具有系統管理權限 AdministratorAccess 的集合、PowerUserAccess 權限的集合
    • 建立一許可集 → 選取「預先定義的許可集合」、「AdministratorAccess」→ 下一步 → 建立
    • 建立另一許可集 → 選取「預先定義的許可集合」、「PowerUserAccess 」→ 下一步 → 建立
  5. 設定 AWS 帳戶對於 IAM Identity Center 管理使用者的存取權
    • 多帳戶許可 - AWS 帳戶 → 勾選管理帳戶(只有一個) → 指派使用者或群組 → 使用者 - 勾選於步驟 3 建立的使用者 → 下一步 → 勾選 AdministratorAccess、PowerUserAccess 許可集(於步驟 4 建立) → 下一步 → 提交
  6. 使用 IAM 身分中心管理使用者登入
    • 選擇儀表板 → 打開其他瀏覽器 → 輸入「AWS 存取入口網站 URL」→ 輸入「使用者名稱、密碼(於步驟 3 設定)」→ 登入
    • 可以看到 AWS 底下有 2 種權限集,這樣的用意是可以選擇 PowerUserAccess 執行開發任務,而不是以最大權限 AdministratorAccess 執行

設定 AWS CLI 以驗證 AWS IAM Identity Center 以取得憑證

AWS 要求所有傳入的請求都經過加密簽署,使用 AWS CLI 執行命令時會需要一個憑證。

這邊會透過 config 檔案配置 SSO 主要有兩種方法:

  • SSO token provider configuration (建議),AWS 開發套件或工具會自動擷取更新的身分驗證 token。
  • Legacy non-refreshable configuration

這邊使用第一種官方建議的方式。

前置條件

  1. 安裝 AWS CLI。
  2. 有辦法存取 IAM Identity Center 中的 SSO 身分驗證。

1 跟 2 在之前的步驟有先完成,接下來以精靈來建立設定檔。

使用 aws configure sso 精靈建立設定檔

將 IAM Identity Center 設定檔和 sso-session 設定至 AWS CLI

  1. 執行 aws configure sso 命令,並提供 IAM Identity Center 啟動 URL 以及託管 Identity Center 目錄的 AWS 區域。

    這邊的 SSO region 與預設的 CLI region 參數不同,可以是不同的區域。

    $ aws configure sso
    SSO session name (Recommended): my-sso
    SSO start URL [None]: https://my-sso-portal.awsapps.com/start
    SSO region [None]: us-east-1
    SSO registration scopes [None]: sso:account:access
    
  2. AWS CLI 會嘗試開啟您的預設瀏覽器,並開始 IAM Identity Center 帳戶的登入程序。

  3. AWS CLI 會顯示可供您使用的 AWS 帳戶。如果您僅獲授權使用某個帳戶,AWS CLI 會自動為您選取該帳戶並略過提示。

    只有在多個 AWS 帳戶會出現,所以這個步驟會省略沒出現。

  4. AWS CLI 會確認您的帳戶選擇,並顯示所選帳戶中可供您使用的 IAM 角色。如果選取的帳戶只列出一個角色,AWS CLI 會自動為您選取該角色並略過提示。

    這邊有 2 個選擇,請選擇「PowerUserAccess」。

  5. 指定「預設輸出格式」、要傳送命令到哪個「預設 AWS 區域」,以及「為設定檔命名」。

    client Region 指的是將在哪個地區建立 AWS 物件,切忌不同地區建立的物件是相互隔離的。

    CLI default client Region [None]: us-east-1
    CLI default output format [None]: json
    CLI profile name [PowerUserAccess-123456789011]: my-profile
    
  6. 最後一則訊息說明完成的設定檔組態。

  7. 這會建立 sso-session 區段以及 ~/.aws/config 中的具名設定檔

    cat ~/.aws/config
    

之後就可以使用此 sso-session 和設定檔來取得更新的憑證。並使用 aws sso login 命令來請求和擷取執行命令所需的憑證。

取得憑證登入 AWS,會再驗證一次。

aws sso login --profile my-profile

驗證完如出現以下訊息代表成功登入。

SSO authorization page has automatically been opened in your default browser. 
Follow the instructions in the browser to complete this authorization request.
Successfully logged into Start URL: https://my-sso-portal.awsapps.com/start

需要登出的話。

aws sso logout

(四) 安裝 kubectl

在前幾篇就有先在本機上安裝 kubectl,還沒安裝可以參考網站

(五) 安裝 kops

kops 主要是讓我們可以在 AWS 上建立 k8s 叢集,除了 AWS 外也適用於 GCE 或 Azure 等雲端服務。

安裝 kops 的前會需要先安裝 kubectl。

macOS 可使用 Homebrew 安裝。

brew update && brew install kops

查看一下是否有安裝成功,kops 預設的自動安裝路徑在 /usr/local/bin/kops

kops version
Client version: 1.28.0

(六) 安裝 Terraform

Terraform 這套工具可以有效管理雲端的基礎架構(Infra),不需要再登入到 AWS 的 Web 介面手動建立機器、VPC 以及調整各項資源的設定。

只需要寫好腳本並下命令執行,Terraform 就會按照腳本快速完成 AWS 雲端的基礎建設,也就是由腳本來管理雲端上的資源。

Homebrew 安裝

我是 macOS 使用 Homebrew 進行安裝

brew tap hashicorp/tap
brew install hashicorp/tap/terraform

確認是否安裝完成。

terraform version
Terraform v1.6.6
on darwin_amd64

指令 terraform 字比較多,可以用 tf 當作 alias。

vi ~/.zshrc

# 加入以下
alias tf='terraform'

# 啟用
source ~/.zshrc

之後指令只需要打 tf 就行了~


參考來源

  1. Learn Devops Kubernetes deployment by kops and terraform
  2. AWS - 驗證與存取憑證
  3. AWS - 具有 AWS IAM Identity Center (successor to AWS Single Sign-On) 自動身分驗證重新整理的權杖提供者
  4. AWS - 使用 IAM Identity Center 設定檔

上一篇
[Day 16] 範例:部署 Java 程式到 Kubernetes
下一篇
[Day 18] 在 AWS 部署 Kubernetes 叢集 (二) - 使用 kops 在 AWS 上部署叢集 (建立叢集)
系列文
第一次參賽就學 Kubernetes30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言