Complete a 3 Question Survey and Earn a re:Post Badge
Help improve AWS Support Official channel in re:Post and share your experience - complete a quick three-question survey to earn a re:Post badge!
如何在 Amazon EKS 叢集上為 Fargate 設定 AWS Load Balancer Controller?
我想在 Amazon Elastic Kubernetes Service (Amazon EKS) 叢集上為 AWS Fargate 設定 AWS Load Balancer Controller。
解決方法
**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本。
您可以在未部署任何現有 Application Load Balancer 輸入控制器的情況下,設定 AWS Load Balancer Controller。
先決條件:
- 解除安裝現有的 AWS ALB Ingress Controller for Kubernetes。AWS Load Balancer Controller 取代了其功能。
- 請使用 eksctl 0.109.0 版或更新版本。如需詳細資訊,請參閱 eksctl 網站上的安裝。
- 在您的工作站上安裝 Helm。
建立 Amazon EKS 叢集、服務 AWS 帳戶政策和角色型存取控制政策
請完成下列步驟:
-
若要使用 eksctl 建立 Amazon EKS 叢集,請執行下列命令:
eksctl create cluster \ --name YOUR_CLUSTER_NAME \ --version 1.28 \ --fargate
**注意:**將 YOUR_CLUSTER_NAME 替換為您的叢集名稱。您無需為僅使用 Fargate Pod (--fargate) 的叢集建立 Fargate Pod 執行角色。
-
若要允許叢集對服務帳戶使用 AWS Identity and Access Management (IAM),請執行下列命令:
eksctl utils associate-iam-oidc-provider \ --cluster YOUR_CLUSTER_NAME \ --approve
**注意:**將 YOUR_CLUSTER_NAME 替換為您的叢集名稱。kubelet 和 kube-proxy 使用 FargateExecutionRole 來執行您的 Fargate Pod。但是,FargateExecutionRole 不是 Fargate Pod 的 IAM 角色。對於 Fargate Pod,您必須使用服務帳戶的 IAM 角色。
-
若要下載允許 WS Load Balancer Controller 代表您呼叫 AWS API 的 IAM 政策,請執行下列命令:
-
curl -o iam_policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.11.0/docs/install/iam_policy.json
-
若要使用下載的政策建立 IAM 政策,請執行下列 create-policy AWS CLI 命令:
aws iam create-policy \ --policy-name AWSLoadBalancerControllerIAMPolicy \ --policy-document file://iam_policy.json
-
若要為 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
**注意:**將 YOUR_CLUSTER_NAME 替換為您的叢集名稱,將 AWS_ACCOUNT_ID 替換為您的帳戶 ID。上述命令會在 kube-system 命名空間中建立一個名為 aws-load-balancer-controller 的服務帳戶。
-
若要確認是否已建立新的服務角色,請執行下列其中一個命令:
eksctl get iamserviceaccount \ --cluster=YOUR_CLUSTER_NAME \ --name=aws-load-balancer-controller \ --namespace=kube-system
**注意:**將 YOUR_CLUSTER_NAME 替換為您的叢集名稱。
- 或 -kubectl get serviceaccount aws-load-balancer-controller \ --namespace kube-system \ -o yaml
使用 Helm 安裝 AWS Load Balancer Controller
請完成下列步驟:
-
若要將 Amazon EKS 圖表新增至 Helm,請執行下列命令:
helm repo add eks https://aws.github.io/eks-charts
-
若要更新儲存庫並提取最新圖表,請執行下列命令:
helm repo update eks
-
若要安裝 Helm 圖表,請執行下列命令:
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=EKS_CLUSTER_VPC_ID \ --set serviceAccount.name=aws-load-balancer-controller \ --version 1.11.0 \ -n kube-system
**注意:**將 YOUR_CLUSTER_NAME 替換為您的叢集名稱,將 YOUR_REGION_CODE 替換為您叢集的 AWS 區域。另外,將 EKS_CLUSTER_VPC_ID 替換為叢集的虛擬私有雲端 (VPC) ID。
-
若要確認控制器安裝已正確安裝,請執行下列命令:
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 Load Balancer Controller
若要測試您的實作,請使用 AWS Load Balancer Controller 來建立下列其中一個資源:
- 用於輸入的 Application Load Balancer
- Network Load Balancer,在 Service (服務) 中,Type (類型) 為 LoadBalancer
輸入資源會根據網頁概念 (如 URI、主機名稱和路徑) 將流量路由到不同的服務。最佳做法是使用輸入資源與多個服務共用負載平衡器,或控制服務路由。使用Service (服務) LoadBalancer 為您的服務指派專用負載平衡器。
**注意:**以下測試步驟會部署一個名為 2048 的遊戲應用程式範例。
建立 Application Load Balancer
若要為輸入建立 Application Load Balancer,請完成下列步驟:
-
若要建立部署遊戲所需的 Fargate 設定檔,請執行下列命令:
eksctl create fargateprofile \ --cluster YOUR_CLUSTER_NAME \ --region YOUR_REGION_CODE \ --name your-alb-sample-app \ --namespace game-2048
**注意:**將 YOUR_CLUSTER_NAME 替換為您的叢集名稱,將 YOUR_REGION_CODE 替換為您的區域。
-
若要部署應用程式,請執行下列命令:
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.11.0/docs/examples/2048/2048_full.yaml
-
等待幾分鐘。然後,執行下列命令來確認 AWS Load Balancer Controller 是否建立了輸入資源:
kubectl get ingress/ingress-2048 -n game-2048
輸出範例:
NAME CLASS HOSTS ADDRESS PORTS AGE ingress-2048 alb * k8s-game2048-ingress2-xxxxxxxxxx-yyyyyyyyyy.region.elb.amazonaws.com 80 3d4h
如果幾分鐘後仍未看到輸入資源,請執行以下命令查看 AWS Load Balancer Controller 日誌:
kubectl logs -n kube-system deployment.apps/aws-load-balancer-controller
檢查日誌中的錯誤訊息,協助您診斷部署問題。
-
若要查看應用程式,請開啟瀏覽器,然後瀏覽至輸入資源命令輸出中的網址。
**注意:**如果您沒有看到應用程式,請稍候幾分鐘,然後重新整理瀏覽器。
建立 Network Load Balancer
若要使用 Network Load Balancer IP 位址模式服務部署範例應用程式,請完成下列步驟:
-
若要建立 Fargate 設定檔,請執行下列命令:
eksctl create fargateprofile --cluster your-cluster --region your-region-code --name your-alb-sample-app --namespace game-2048
**注意:**將 your-cluster 替換為您叢集的名稱,將 your-region-code 替換為您叢集的區域。
-
若要取得資訊清單來部署 2048 遊戲,請執行下列命令:
curl -o 2048-game.yaml https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.11.0/docs/examples/2048/2048_full.yaml
-
在資訊清單中,刪除以下 Ingress (輸入) 區段:
apiVersion: networking.k8s.io/v1 kind: 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
-
修改 Service (服務) 物件以使用下列值:
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:xxxxx/TCP 23m
-
等待幾分鐘,直到負載平衡器處於作用中狀態。若要確認您是否可以存取部署,請開啟 Web 瀏覽器。然後,在 EXTERNAL-IP 下的命令輸出中開啟完整網域名稱 (FQDN)。
對 AWS Load Balancer Controller 進行疑難排解
如果您在設定 AWS Load Balancer Controller 時遇到問題,請執行下列命令:
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
檢查 logs 命令的輸出是否有錯誤訊息,例如標籤或子網路的問題。如需常見錯誤的疑難排解步驟,請參閱 GitHub 網站上的問題。另請參閱如何對使用 AWS Load Balancer Controller 建立負載平衡器時出現的問題進行疑難排解?
get endpoints 命令會顯示您是否正確註冊了支援的部署 Pod。get ingress 命令會顯示您是否已部署輸入資源。
如需詳細資訊,請參閱 Kubernetes 網站上的 AWS Load Balancer Controller。
相關內容
- 已提問 2 年前lg...