建立 Amazon EC2 叢集
在本節中,你將學習如何在 Amazon EC2 中部署 RKE2/K3s Kubernetes 叢集。
首先,你將在 Rancher 中設定你的 EC2 雲端憑證。
然後你將在 Rancher 中建立一 個 EC2 叢集,在配置新叢集時,你將為其定義機器池。每個機器池將具有 etcd、controlplane 或 worker 的 Kubernetes 角色。Rancher 將在新節點上安裝 Kubernetes,並根據機器池定義的 Kubernetes 角色設定每個節點。
前提條件
- AWS EC2 存取金鑰和秘密金鑰,用於建立實例。請參閱 Amazon 文件:建立存取金鑰以了解如何建立存取金鑰和秘密金鑰。
- 已建立 IAM 策略以新增到存取金鑰和秘密金鑰的使用者。請參閱 Amazon 文件:建立 IAM 策略(控制台)以了解如何建立 IAM 策略。請參閱以下三個範例 JSON 策略:
- 範例 IAM 策略
- 具有 PassRole 的範例 IAM 策略(如果你想使用 Kubernetes 雲端提供者或想將 IAM 設定檔傳遞給實例,則需要此策略)
- 允許加密 EBS 磁碟區的範例 IAM 策略
- IAM 策略已新增為權限到使用者。請參閱 Amazon 文件:新增權限到使用者(控制台)以了解如何將其附加到使用者。
- 僅限 IPv4 或僅限 IPv6 或雙堆疊子網路和/或 VPC,其中可以佈建節點並分配 IPv4 和/或 IPv6 位址。請參閱 Amazon 文件:VPC 的 IPv6 支援。
建立 EC2 叢集
建立叢集的步驟因你的 Rancher 版本而異。
1. 建立你的雲端憑證
如果你已經有一組可以使用的雲端憑證,請跳過本節。
- 點擊 ☰ > Cluster Management。
- 點擊 Cloud Credentials。
- 點擊 Create。
- 點擊 Amazon。
- 輸入雲端憑證的名稱。
- 在 Default Region 欄位中,選擇你的叢集節點將位於的 AWS 區域。
- 輸入你的 AWS EC2 Access Key 和 Secret Key。
- 點擊 Create。
結果: 你已建立了將用於在叢集中佈建節點的雲端憑證。
2. 建立你的叢集
- 點擊 ☰ > Cluster Management。
- 在 Clusters 頁面上,點擊 Create。
- 切換開關至 RKE2/K3s。
- 點擊 Amazon EC2。
- 選擇一個 Cloud Credential(如果存在多個)。否則,它會被預選。
- 輸入 Cluster Name。
- 為每個 Kubernetes 角色建立一個機器池。請參閱最佳實踐以獲取有關角色分配和數量的建議。
- 對於每個機器池,定義機器配置。請參閱 EC2 機器配置參考以獲取配置選項的資訊。
- 使用 Cluster Configuration 選擇要安裝的 Kubernetes 版本、要使用的網路提供者,以及是否要啟用專案網路隔離。有關配置叢集的幫助,請參閱 RKE2 和 K3s 叢集配置參考。
- 使用 Member Roles 配置叢集的使用者授權。點擊 Add Member 以新增可以存取叢集的使用者。使用 Role 下拉選單為每個使用者設定權限。
- 點擊 Create。
結果:
你的叢集已建立並被指派為 Provisioning 狀態。Rancher 正在建立你的叢集。
當叢集狀態更新為 Active 後,你就可以存取你的叢集。
Active 叢集被指派兩個專案:
Default,包含default命名空間System,包含cattle-system、ingress-nginx、kube-public和kube-system命名空間
可選的後續步驟
建立叢集後,你可以透過 Rancher UI 存取它。作為最佳實踐,我們建議設定以下替代方式來存取你的叢集:
- 使用 kubectl CLI 存取你的叢集: 按照這些步驟在你的工作站上使用 kubectl 存取叢集。在這種情況下,你將透過 Rancher 伺服器的身份驗證代理進行身份驗證,然後 Rancher 將連接你到下游叢集。此方法讓你無需 Rancher UI 即可管理叢集。
- 使用 kubectl CLI 透過授權叢集端點存取你的叢集: 按照這些步驟直接使用 kubectl 存取你的叢集,無需透過 Rancher 進行身份驗證。我們建議設定這種替代方法來存取你的叢集,以便在你無法連接到 Rancher 的情況下, 仍然可以存取叢集。
IAM 策略
範例 IAM 策略
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"ec2:AuthorizeSecurityGroupIngress",
"ec2:Describe*",
"ec2:ImportKeyPair",
"ec2:CreateKeyPair",
"ec2:CreateSecurityGroup",
"ec2:CreateTags",
"ec2:DeleteKeyPair",
"ec2:ModifyInstanceMetadataOptions"
],
"Resource": "*"
},
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": [
"ec2:RunInstances"
],
"Resource": [
"arn:aws:ec2:REGION::image/ami-*",
"arn:aws:ec2:REGION:AWS_ACCOUNT_ID:instance/*",
"arn:aws:ec2:REGION:AWS_ACCOUNT_ID:placement-group/*",
"arn:aws:ec2:REGION:AWS_ACCOUNT_ID:volume/*",
"arn:aws:ec2:REGION:AWS_ACCOUNT_ID:subnet/*",
"arn:aws:ec2:REGION:AWS_ACCOUNT_ID:key-pair/*",
"arn:aws:ec2:REGION:AWS_ACCOUNT_ID:network-interface/*",
"arn:aws:ec2:REGION:AWS_ACCOUNT_ID:security-group/*"
]
},
{
"Sid": "VisualEditor2",
"Effect": "Allow",
"Action": [
"ec2:RebootInstances",
"ec2:TerminateInstances",
"ec2:StartInstances",
"ec2:StopInstances"
],
"Resource": "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:instance/*"
}
]
}
具有 PassRole 的範例 IAM 策略
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"ec2:AuthorizeSecurityGroupIngress",
"ec2:Describe*",
"ec2:ImportKeyPair",
"ec2:CreateKeyPair",
"ec2:CreateSecurityGroup",
"ec2:CreateTags",
"ec2:DeleteKeyPair",
"ec2:ModifyInstanceMetadataOptions"
],
"Resource": "*"
},
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": [
"iam:PassRole",
"ec2:RunInstances"
],
"Resource": [
"arn:aws:ec2:REGION::image/ami-*",
"arn:aws:ec2:REGION:AWS_ACCOUNT_ID:instance/*",
"arn:aws:ec2:REGION:AWS_ACCOUNT_ID:placement-group/*",
"arn:aws:ec2:REGION:AWS_ACCOUNT_ID:volume/*",
"arn:aws:ec2:REGION:AWS_ACCOUNT_ID:subnet/*",
"arn:aws:ec2:REGION:AWS_ACCOUNT_ID:key-pair/*",
"arn:aws:ec2:REGION:AWS_ACCOUNT_ID:network-interface/*",
"arn:aws:ec2:REGION:AWS_ACCOUNT_ID:security-group/*",
"arn:aws:iam::AWS_ACCOUNT_ID:role/YOUR_ROLE_NAME"
]
},
{
"Sid": "VisualEditor2",
"Effect": "Allow",
"Action": [
"ec2:RebootInstances",
"ec2:TerminateInstances",
"ec2:StartInstances",
"ec2:StopInstances"
],
"Resource": "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:instance/*"
}
]
}
允許加密 EBS 磁碟區的範例 IAM 策略
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"kms:Decrypt",
"kms:GenerateDataKeyWithoutPlaintext",
"kms:Encrypt",
"kms:DescribeKey",
"kms:CreateGrant",
"ec2:DetachVolume",
"ec2:AttachVolume",
"ec2:DeleteSnapshot",
"ec2:DeleteTags",
"ec2:CreateTags",
"ec2:CreateVolume",
"ec2:DeleteVolume",
"ec2:CreateSnapshot"
],
"Resource": [
"arn:aws:ec2:REGION:AWS_ACCOUNT_ID:volume/*",
"arn:aws:ec2:REGION:AWS_ACCOUNT_ID:instance/*",
"arn:aws:ec2:REGION:AWS_ACCOUNT_ID:snapshot/*",
"arn:aws:kms:REGION:AWS_ACCOUNT_ID:key/KMS_KEY_ID"
]
},
{
"Effect": "Allow",
"Action": [
"ec2:DescribeInstances",
"ec2:DescribeTags",
"ec2:DescribeVolumes",
"ec2:DescribeSnapshots"
],
"Resource": "*"
}
]
}