組態kubectl與AWS EKS叢集的連線,首先需要更新kubeconfig檔案,確保kubectl能夠正確存取叢集。接著,透過kubectl get svc驗證連線是否成功,並使用kubectl get pods和kubectl get nodes指令分別檢視Pod和節點資訊,掌握叢集的運作狀態。佈署應用程式到EKS叢集,可以使用kubectl create deployment指令,指定應用程式名稱和映像檔。佈署完成後,透過kubectl get deployment和kubectl get pods指令確認佈署狀態和Pod資訊。檢視Pod日誌可以使用kubectl logs指令,方便排查應用程式問題。此外,設定IAM使用者和許可權對於EKS叢集的安全性至關重要,需要根據不同角色的需求組態相應的許可權。

組態kubectl以與AWS EKS協同運作

在成功建立Amazon Elastic Kubernetes Service(EKS)叢集後,我們需要組態kubectl命令列工具,使其能夠與EKS叢集進行通訊。kubectl是Kubernetes的命令列介面,用於對Kubernetes叢集執行各種操作。

更新kubeconfig檔案

kubectl使用一個名為.kube/config的檔案來儲存叢集的組態資訊,包括API伺服器的端點、認證引數等。AWS CLI提供了一個便捷的方式來更新這個組態檔案。我們可以使用aws eks update-kubeconfig命令來完成這一步驟,如清單14-5所示。

清單14-5:透過AWS CLI更新kubeconfig檔案

aws configure
aws sts get-caller-identity
aws eks update-kubeconfig --region us-east-2 --name myeks01
kubectl version

在執行上述命令之前,我們需要確保AWS CLI的組態是有效的。首先,我們執行aws configure來組態AWS CLI的引數,包括存取金鑰ID、秘密存取金鑰、預設區網域名稱等。接著,執行aws sts get-caller-identity來驗證當前AWS CLI的身份資訊。

shiva-eks@wks01:~$ aws configure
AWS Access Key ID [None]: <SNIP>
AWS Secret Access Key [None]: <SNIP>
Default region name [None]: us-east-2
Default output format [None]:
shiva-eks@wks01:~$
shiva-eks@wks01:~$ aws sts get-caller-identity
{
    "UserId": "AIDAQAFVWO7Y2NBGEQR6K",
    "Account": "000381057009",
    "Arn": "arn:aws:iam::000381057009:user/shiva"
}
shiva-eks@wks01:~$
shiva-eks@wks01:~$ aws eks update-kubeconfig --region us-east-2 --name myeks01
Added new context arn:aws:eks:us-east-2:000381057009:cluster/myeks01 to /home/shiva-eks/.kube/config
shiva-eks@wks01:~$

#### 內容解密:

  • aws configure:組態AWS CLI的命令,根據提示輸入存取金鑰、預設區域等資訊。
  • aws sts get-caller-identity:驗證當前AWS CLI的使用者身份。
  • aws eks update-kubeconfig:更新.kube/config檔案,將EKS叢集的組態資訊加入其中。
    • --region us-east-2:指定EKS叢集所在的AWS區域。
    • --name myeks01:指定EKS叢集的名稱。

驗證kubectl連線

更新完.kube/config檔案後,我們可以執行kubectl version命令來驗證kubectl是否能夠正確連線到EKS叢集,如清單14-6所示。

清單14-6:驗證kubectl連線

kubectl get svc

執行結果如下:

shiva-eks@wks01:~$ kubectl get svc
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.100.0.1   <none>        443/TCP   10h
shiva-eks@wks01:~$

#### 內容解密:

  • kubectl get svc:取得當前叢集中所有服務的資訊。
  • 輸出結果顯示了預設的kubernetes服務,表明kubectl已成功連線到EKS叢集。

取得叢集資訊

接下來,我們可以使用kubectl命令來取得叢集中的各種資源資訊,例如Pod、節點等。清單14-7展示瞭如何取得所有名稱空間下的Pod資訊。

清單14-7:取得所有名稱空間下的Pod

kubectl get pods --all-namespaces

執行結果如下:

shiva-eks@wks01:~$ kubectl get pods --all-namespaces
NAMESPACE     NAME                       READY   STATUS    RESTARTS   AGE
kube-system   aws-node-bpbsn1            1/1     Running   0          9h
kube-system   aws-node-r4rhw1            1/1     Running   0          9h
kube-system   coredns-647484dc8b-5pfqr   1/1     Running   0          10h
kube-system   coredns-647484dc8b-qrrd4   1/1     Running   0          10h
kube-system   kube-proxy-cvqfp          1/1     Running   0          9h
kube-system   kube-proxy-mdgw9          1/1     Running   0          9h
shiva-eks@wks01:~$

#### 內容解密:

  • kubectl get pods --all-namespaces:取得所有名稱空間下的Pod資訊。
  • 輸出結果顯示了系統名稱空間下的各個Pod,包括aws-nodecorednskube-proxy等。

取得節點資訊

我們還可以使用kubectl get nodes命令來取得叢集中的節點資訊,如清單14-8所示。

清單14-8:取得節點資訊

kubectl get nodes

執行結果如下:

shiva-eks@wks01:~$ kubectl get nodes
NAME                                            STATUS   ROLES    AGE   VERSION
ip-172-31-11-245.us-east-2.compute.internal     Ready    <none>   9h    v1.27.3-eks-a5565ad
ip-172-31-36-222.us-east-2.compute.internal     Ready    <none>   9h    v1.27.3-eks-a5565ad
shiva-eks@wks01:~$

#### 內容解密:

  • kubectl get nodes:取得叢集中的節點資訊。
  • 輸出結果顯示了節點的名稱、狀態、角色、存活時間以及Kubernetes版本。

在EKS中佈署第一個Pod

現在,我們已經成功組態了kubectl並能夠與EKS叢集進行通訊,接下來我們將佈署第一個Pod。佈署Pod的方式與在其他Kubernetes叢集中相同,可以使用YAML佈署檔案或直接使用命令列。

使用命令列佈署Pod

這裡,我們將使用命令列方式來佈署一個名為primeornot的應用,如清單14-9所示。

清單14-9:在EKS叢集中佈署Pod

kubectl create deployment primeornot --image=gitshiva/primeornot

執行結果如下:

shiva-eks@wks01:~$ kubectl create deployment primeornot --image=gitshiva/primeornot
deployment.apps/primeornot created
shiva-eks@wks01:~$

#### 內容解密:

  • kubectl create deployment primeornot --image=gitshiva/primeornot:建立一個名為primeornot的佈署,使用gitshiva/primeornot映象。
  • 輸出結果表明佈署已成功建立。

驗證佈署狀態

佈署完成後,我們可以使用kubectl get deployment命令來檢查佈署的狀態,如清單14-10所示。

清單14-10:取得佈署詳情

kubectl get deployment

執行結果如下:

shiva-eks@wks01:~$ kubectl get deployment
NAME         READY   UP-TO-DATE   AVAILABLE   AGE
primeornot   1/1     1            1           25s
shiva-eks@wks01:~$

#### 內容解密:

  • kubectl get deployment:取得佈署的詳情。
  • 輸出結果顯示了primeornot佈署的狀態,包括就緒副本數、更新副本數、可用副本數以及佈署的存活時間。

取得Pod詳情

進一步地,我們可以使用kubectl get pods命令來取得Pod的詳情,如清單14-11所示。

清單14-11:取得Pod詳情

kubectl get pods

執行結果如下:

shiva-eks@wks01:~$ kubectl get pods
NAME                          READY   STATUS    RESTARTS   AGE
primeornot-9d584fd7d-8zvl2   1/1     Running   0          47s
shiva-eks@wks01:~$

#### 內容解密:

  • kubectl get pods:取得當前名稱空間下的Pod資訊。
  • 輸出結果顯示了primeornot佈署下的Pod詳情,包括名稱、就緒狀態、執行狀態、重啟次數以及存活時間。

至此,我們已經成功在EKS叢集中佈署了第一個Pod,並驗證了其執行狀態。接下來的章節中,我們將繼續探討如何在EKS叢集中進行更複雜的操作和管理。```mermaid graph LR A[開始] –> B[組態kubectl] B –> C[更新kubeconfig檔案] C –> D[驗證kubectl連線] D –> E[取得叢集資訊] E –> F[佈署第一個Pod] F –> G[驗證佈署狀態] G –> H[取得Pod詳情] H –> I[結束]


**圖表翻譯:**
此圖表展示了從組態`kubectl`到佈署第一個Pod的整個流程。首先,我們組態`kubectl`並更新`kubeconfig`檔案。接著,驗證`kubectl`的連線狀態。隨後,取得叢集的相關資訊。然後,佈署第一個Pod,並驗證其佈署狀態。最後,取得Pod的詳細資訊,完成整個操作流程。

## 在Amazon EKS上操作叢集與應用程式佈署

在前面的章節中,我們已經成功地在Amazon Elastic Kubernetes ServiceEKS)上建立了一個Kubernetes叢集。現在,我們將進一步探討如何在這個叢集中佈署應用程式,並對叢集進行操作與管理。

### 取得Pod日誌以瞭解應用程式狀態

如同在microk8s叢集中一樣,我們可以透過取得Pod的日誌來瞭解應用程式的執行狀態。所使用的命令並無不同,如以下**清單14-12**所示。

#### 清單14-12. 取得Pod日誌
```bash
kubectl logs -f primeornot-9d584fd7d-8zvl2

執行結果:

shiva-eks@wks01:~$ kubectl logs -f primeornot-9d584fd7d-8zvl2
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.2.6.RELEASE)
2023-08-27 13:56:50.640 INFO 7 --- [ main] us.subbu.Primeornot01Application : Starting Primeornot01Application on primeornot-9d584fd7d-8zvl2 with PID 7 (/tmp/primeornot01-0.0.1-SNAPSHOT.jar started by root in /)
<SNIP>
o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
2023-08-27 13:56:53.959 INFO 7 --- [ main] us.subbu.Primeornot01Application : Started Primeornot01Application in

## 在AWS上操作EKS叢集:IAM使用者與許可權管理

在現代的雲端基礎設施管理中,Amazon Elastic Kubernetes Service(EKS)提供了一個強大且可擴充套件的容器協調平台。為了有效地管理EKS叢集,正確組態IAM使用者和許可權至關重要。本文將探討如何在AWS上為EKS叢集建立IAM使用者、群組,並授予適當的許可權。

### 建立IAM使用者和群組

首先,我們需要在AWS帳戶中建立三個IAM使用者群組和六個IAM使用者。這些群組和使用者將根據其角色和所需的許可權進行區分。

#### 建立IAM使用者群組

1. **grp-k8s-admins**:用於系統或平台工程團隊
2. **grp-k8s-devops**:用於DevOps團隊,包括SRE型別的工程師
3. **grp-k8s-readonly**:用於監控和只需要檢視叢集資訊的使用者

#### 建立IAM使用者

1. **k8sadmin01**:主要的Kubernetes管理員使用者,新增到`grp-k8s-admins`
2. **k8sadmin02**:第二個Kubernetes管理員使用者
3. **k8sdevops01**:DevOps/SRE團隊使用者01,新增到`grp-k8s-devops`
4. **k8sdevops02**:DevOps/SRE團隊使用者02
5. **k8sreadonly01**:唯讀使用者,新增到`grp-k8s-readonly`
6. **k8sreadonly02**:另一個唯讀使用者

這些使用者和群組的設定是為了展示當使用者執行叢集操作時,如何根據其許可權獲得不同的回應。

### 為grp-k8s-admins群組授予EKS所有許可權

接下來,我們將為`grp-k8s-admins`群組附加一個內嵌策略,以授予EKS的所有許可權。

1. 編輯`grp-k8s-admins`群組並導航到許可權標籤。
2. 點選“新增許可權”下拉選單並選擇“建立內嵌策略”。
3. 在“指定許可權”畫面中,輸入`EKS`並選擇EKS服務。
4. 選擇“所有資源”並點選“檢視策略”。
5. 將策略命名為`k8sadmins`並點選“建立策略”。

```json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "EKSPermissions",
            "Effect": "Allow",
            "Action": "eks:*",
            "Resource": "*"
        }
    ]
}

內容解密:

此內嵌策略授予grp-k8s-admins群組對EKS的所有操作許可權。eks:*表示允許所有與EKS相關的操作,*表示這些操作適用於所有資源。

將IAM使用者對映到叢集角色

為了使IAM使用者能夠與EKS叢集互動,我們需要使用eksctl命令將IAM使用者對映到Kubernetes叢集角色。

eksctl create iamidentitymapping \
  --cluster myeks01 \
  --region=us-east-2 \
  --arn arn:aws:iam::000381057009:user/k8sadmin01 \
  --group system:masters \
  --no-duplicate-arns

內容解密:

此命令將IAM使用者k8sadmin01對映到EKS叢集的system:masters角色,賦予該使用者叢集管理員許可權。--no-duplicate-arns選項確保不會建立重複的對映。

驗證k8sadmin01使用者的存取許可權

最後,我們驗證k8sadmin01使用者是否能夠與EKS叢集互動。

kubectl get svc

內容解密:

此命令嘗試取得叢集中的服務列表。如果k8sadmin01使用者具有適當的許可權,該命令應成功執行並傳回服務列表。

隨著雲原生技術的不斷發展,未來我們可以預期在IAM和Kubernetes的整合上會有更多的創新和改進。例如,利用AWS IAM的進階功能,如條件和屬性基礎的存取控制(ABAC),可以進一步增強EKS叢集的安全性和靈活性。

安全性考量

在組態IAM使用者和許可權時,安全性是一個重要的考量因素。建議遵循最小許可權原則,即僅授予使用者完成其任務所需的最小許可權。此外,定期稽核和檢查IAM策略和使用者許可權也是確保叢集安全性的重要措施。

效能最佳化

在大型EKS叢集中,高效的許可權管理和IAM組態對於保持叢集效能至關重要。過於複雜或過寬的許可權設定可能會導致效能問題或安全風險。因此,持續監控和最佳化IAM組態是保持叢集高效執行的關鍵。