如何在 Amazon EKS 叢集上為 Fargate 設定 AWS 負載平衡器控制器,然後部署 2048 遊戲?
我想在 Amazon Elastic Kubernetes Service (Amazon EKS) 叢集上為 AWS Fargate 設定 AWS 負載平衡器控制器。然後,我想部署 2048 遊戲。
簡短描述
您可以在未部署任何現有 Application Load Balancer (ALB) 輸入控制器的情況下設定 AWS 負載平衡器控制器。
在新的 Fargate 叢集上設定 AWS 負載平衡器控制器之前,請完成下列動作:
- 解除安裝適用於 Kubernetes 的 AWS ALB 輸入控制器。AWS 負載平衡器控制器會取代 AWS ALB 輸入控制器的功能。
- 使用 eksctl 0.109.0 版或更新版本。如需詳細資訊,請參閱 eksctl 網站上的安裝。
- 在工作站上安裝 Helm。
- 將程式碼片段中的預留位置值取代為您自己的值。
解決方法
建立 Amazon EKS 叢集、服務帳戶政策和角色型存取控制 (RBAC) 政策
若要建立叢集和政策,請執行下列操作:
-
若要使用 eksctl 建立 Amazon EKS 叢集,請執行下列命令:
eksctl create cluster --name YOUR_CLUSTER_NAME --version 1.28 --fargate
**注意:**您無需為僅使用 Fargate Pod (--fargate) 的叢集建立 Fargate Pod 執行角色。
-
透過下列命令,允許叢集使用服務帳戶的 AWS Identity and Access Management (IAM):
eksctl utils associate-iam-oidc-provider --cluster YOUR_CLUSTER_NAME --approve
**注意:**FargateExecutionRole 是 kubelet 和 kube-proxy 用來執行 Fargate Pod 的角色。但是,它不是 Fargate Pod (即 aws-load-balancer-controller) 使用的角色。對於 Fargate Pod,您必須使用服務帳戶的 IAM 角色。如需詳細資訊,請參閱服務帳戶的 IAM 角色。
-
若要下載允許 AWS 負載平衡器控制器代表您呼叫 AWS API 的 IAM 政策,請執行下列命令:
curl -o iam_policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.6.1/docs/install/iam_policy.json
-
使用您下載的政策建立 IAM 政策。使用下列命令:
aws iam create-policy \ --policy-name AWSLoadBalancerControllerIAMPolicy \ --policy-document file://iam_policy.json
-
在 kube-system 命名空間中為 AWS 負載平衡器控制器建立名為 aws-load-balancer-controller 的服務帳戶。使用下列命令:
eksctl create iamserviceaccount \ --cluster=YOUR_CLUSTER_NAME \ --namespace=kube-system \ --name=aws-load-balancer-controller \ --attach-policy-arn=arn:aws:iam::<AWS_ACCOUNT_ID>:policy/AWSLoadBalancerControllerIAMPolicy \ --override-existing-serviceaccounts \ --approve
-
執行下列其中一個命令,以確認已建立新的服務角色:
eksctl get iamserviceaccount --cluster YOUR_CLUSTER_NAME --name aws-load-balancer-controller --namespace kube-system
-或-
kubectl get serviceaccount aws-load-balancer-controller --namespace kube-system
使用 Helm 安裝 AWS 負載平衡器控制器
若要安裝 AWS 負載平衡器控制器,請執行下列操作:
-
若要將 Amazon EKS 圖表新增至 Helm,請執行下列命令:
helm repo add eks https://aws.github.io/eks-charts
-
更新儲存庫以提取最新圖表:
helm repo update eks
-
執行下列命令以安裝 Helm Chart。注意: 將 clusterName、region 和 vpcId 取代為您的值:
helm install aws-load-balancer-controller eks/aws-load-balancer-controller \ --set clusterName=YOUR_CLUSTER_NAME \ --set serviceAccount.create=false \ --set region=YOUR_REGION_CODE \ --set vpcId=<VPC_ID> \ --set serviceAccount.name=aws-load-balancer-controller \ -n kube-system
-
確認已成功安裝控制器:
$ kubectl get deployment -n kube-system aws-load-balancer-controller
範例輸出:
NAME READY UP-TO-DATE AVAILABLE AGE aws-load-balancer-controller 2/2 2 2 84s
測試 AWS 負載平衡器控制器
使用 AWS 負載平衡器控制器建立用於輸入的 Application Load Balancer 或 Network Load Balancer。您可以使用其中一個來建立 k8s 服務。若要使用 Application Load Balancer 輸入部署名為 2048 的範例應用程式,請執行下列操作:
-
建立遊戲部署所需的 Fargate 設定檔。使用下列命令:
eksctl create fargateprofile --cluster your-cluster --region your-region-code --name your-alb-sample-app --namespace game-2048
-
若要部署範例遊戲並確認 AWS 負載平衡器控制器已建立 ALB 輸入資源,請執行下列命令:
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.6.1/docs/examples/2048/2048_full.yaml
-
幾分鐘後,透過下列命令確認已建立輸入資源:
kubectl get ingress/ingress-2048 -n game-2048
您會收到下列輸出:
NAME CLASS HOSTS ADDRESS. PORTS AGE ingress-2048 <none> * k8s-game2048-ingress2-xxxxxxxxxx-yyyyyyyyyy.us-
**注意:**如果輸出在數分鐘後未建立,請執行下列命令以檢視 AWS 負載平衡器控制器日誌:
kubectl logs -n kube-system deployment.apps/aws-load-balancer-controller
日誌可能包含可協助您診斷部署問題的錯誤訊息。
-
若要檢視範例應用程式,請開啟瀏覽器。然後,從上一個命令輸出導覽至 ADDRESS URL。
**注意:**如果您沒有看到範例應用程式,請稍候幾分鐘,然後重新整理瀏覽器。
部署範例應用程式
若要使用 Network Load Balancer IP 位址模式服務部署範例應用程式,請執行下列操作:
-
若要建立 Fargate 設定檔,請執行下列命令:
eksctl create fargateprofile --cluster your-cluster --region your-region-code --name your-alb-sample-app --namespace game-2048
-
若要取得資訊清單來部署 2048 遊戲,請執行下列命令:
curl -o 2048-game.yaml https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.6.1/docs/examples/2048/2048_full.yaml
-
在步驟 2 的資訊清單中,刪除以下「輸入」部分:
apiVersion: networking.k8s.io/v1kind: Ingress metadata: namespace: game-2048 name: ingress-2048 annotations: alb.ingress.kubernetes.io/scheme: internet-facing alb.ingress.kubernetes.io/target-type: ip spec:ingressClassName: alb rules: - http: paths: - path: / pathType: Prefix backend: service: name: service-2048 port: number: 80
-
修改服務物件:
apiVersion: v1 kind: Service metadata: namespace: game-2048 name: service-2048 annotations: service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: "ip" service.beta.kubernetes.io/aws-load-balancer-type: external service.beta.kubernetes.io/aws-load-balancer-scheme: internet-facing spec: ports: - port: 80 targetPort: 80 protocol: TCP type: LoadBalancer selector: app.kubernetes.io/name: app-2048
-
若要建立服務和部署資訊清單,請執行下列命令:
kubectl apply -f 2048-game.yaml
-
若要檢查服務建立情況和 Network Load Balancer 的 DNS 名稱,請執行下列命令:
kubectl get svc -n game-2048
您收到下列輸出:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service-2048 LoadBalancer 10.100.114.197 k8s-game2048-service2-xxxxxxxxxx-yyyyyyyyyy.us-east-2.elb.amazonaws.com 80:30159/TCP 23m
-
等待幾分鐘,直到負載平衡器處於作用中狀態。然後,檢查您是否可以進行部署。在 Web 瀏覽器中開啟 EXTERNAL-IP 部分中參考的 NLB 的完整網域名稱 (FQDN)。
對 AWS 負載平衡器控制器進行疑難排解
如果您在設定控制器時遇到問題,請執行下列命令:
$ kubectl logs -n kube-system deployment.apps/aws-load-balancer-controller $ kubectl get endpoints -n game-2048 $ kubectl get ingress/ingress-2048 -n game-2048
日誌命令的輸出會傳回錯誤訊息 (例如,包含標籤或子網路)。這些錯誤訊息可協助您對 Kubernetes GitHub 網站上的常見錯誤進行疑難排解。get endpoints 命令顯示支援的部署 Pod 是否已正確註冊。get ingress 命令顯示是否已部署輸入資源。如需詳細資訊,請參閱 Kubernetes 網站上的 AWS 負載平衡器控制器。
相關內容
- 已提問 10 個月前lg...
- 已提問 8 個月前lg...
- AWS 官方已更新 1 年前
- AWS 官方已更新 2 年前