IaC with Terraform 22
這篇筆記就是要到AWS Console上面檢視EKS Cluster建立結果
並且佈署一個Nginx來連線測試
這邊為了觀察方便,參考講師改到一個沒用過的Region來建置EKS
執行實際的建置:
#執行Terraform建置EKS到倫敦Region,前篇看過plan了,所以省去確認(大約要10~15分鐘):
terraform apply --auot-approve
其中額外要記得使用的AWS管理帳號(不是root)要有EKS相關權限IAM開通
(可以看到EKS第二篇筆記)
大約15分鐘左右看到:
EKS Cluster Overview
順利完成後得到的基礎設施建置內容如下:
登入AWS Web Console切到倫敦區(eu-west-2),然後到EKS服務頁面
接著來檢視一下IAM服務上,Terraform幫我們建立了哪些東西:
接著看到EC2頁面:
看到VPC服務:
再來看到Subnet部分:
再來看到SG:
這些都是為了:
這邊背後到底防火牆怎麼開,就都是自動化建立好,並且遵守最低權限原則
嘗試透過kubectl工具使用這個EKS Cluster
首先要先建立可以跟這座EKS溝通用的kubeconfig檔(可以參考EKS筆記2)
主要前置需要安裝:
- AWS CLI
- kubectl
- aws-iam-authenticator
#執行以下aws工具指令取得該Region指定的EKS Cluster名稱的kubeconfig檔:
aws eks update-kubeconfig --name myapp-eks-cluster --region eu-west-2
然後因為我沒有把kubectl工具加到環境變數去,所以要到該工具目錄執行
並且發現連不到API-Server:
後來嘗試開我本機防火牆到各個SG都沒用
#改用詳細kubectl指令:
kubectl get node -v=10
另外我注意到上面的10.0.1.XXX或有時候是10.0.3.XXX是private subnet網段
然後看到AWS文件上EKS進到endpoint有這類設定:
然後發現EKS module有這兩個input,我應該要給true才能連進去:
現在這座是我重建的,看起來有些異常,重建出現的Error log:
看起是是自動發配public IP給Node group的EC2有問題
因為我這時候嘗試改成這樣導致的:
但是更新上面的input後至少可以發request了
後面再砍掉重來,重建後看到:
再次嘗試kubectl指令溝通(記得要刷新kubeconfig檔)
#刷新 & kubectl指令:
aws eks update-kubeconfig --name myapp-eks-cluster --region eu-west-2
kubectl get node
建立一個測試用的Nginx服務
使用的Nginx的yaml如下:
#執行建置:
kubectl apply -f nginx-config.yaml
在EKS篇章有說過,EKS內當有type為LoadBalancer的Server元件被建立時
自動地就會建立AWS的Load Balancer來對應並暴露服務到Cluster之外:
並且可以仔細看到是該Region的所有AZ:
這時候就可以複製其DNS位置:
然後真的打到外面暴露的80 PORT的Nginx:
這邊我想再重新貼一下EKS筆記那時候做的描述網路的一張圖:
就會看到是我們建立的public的Subnet三個其中一個:
Destroy all Components
這邊就體現Terraform的一個非常大的好處是即便建立了55個AWS Cloud元件
根本記不起來有哪些
要移除的時候只要...
#在Terraform專案程式路徑執行以下指令即可移除:
terraform destroy --auto-approve
這邊我剛好遇到Terraform刪除卡住,因為沒有拿到provider的回應:
索性ctrl+c中止重新刪除:
還是卡住:
先暫時手動移除igw,subnet,vpc
後來發現可能是因為ELB卡到,要先手動去刪:
然後就可以透過指令刪除,大概兩秒鐘:
最後還是有因為卡住,手動刪除VPC
#最後還可以執行以下指令確認(刪除後,才執行這指令應該沒有output):
terraform state list
Terraform程式部分就commit推上git