如何在 Amazon EKS 叢集上為 Fargate 設定 AWS 負載平衡器控制器,然後部署 2048 遊戲?

3 分的閱讀內容
0

我想在 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) 政策

若要建立叢集和政策,請執行下列操作:

  1. 若要使用 eksctl 建立 Amazon EKS 叢集,請執行下列命令:

    eksctl create cluster --name YOUR_CLUSTER_NAME --version 1.28 --fargate

    **注意:**您無需為僅使用 Fargate Pod (--fargate) 的叢集建立 Fargate Pod 執行角色

  2. 透過下列命令,允許叢集使用服務帳戶的 AWS Identity and Access Management (IAM):

    eksctl utils associate-iam-oidc-provider --cluster YOUR_CLUSTER_NAME --approve

    **注意:**FargateExecutionRolekubeletkube-proxy 用來執行 Fargate Pod 的角色。但是,它不是 Fargate Pod (即 aws-load-balancer-controller) 使用的角色。對於 Fargate Pod,您必須使用服務帳戶的 IAM 角色。如需詳細資訊,請參閱服務帳戶的 IAM 角色

  3. 若要下載允許 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
  4. 使用您下載的政策建立 IAM 政策。使用下列命令:

    aws iam create-policy \
    --policy-name AWSLoadBalancerControllerIAMPolicy \
    --policy-document file://iam_policy.json
  5. 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
  6. 執行下列其中一個命令,以確認已建立新的服務角色:

    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 負載平衡器控制器,請執行下列操作:

  1. 若要將 Amazon EKS 圖表新增至 Helm,請執行下列命令:

    helm repo add eks https://aws.github.io/eks-charts
  2. 更新儲存庫以提取最新圖表:

      helm repo update eks
  3. 執行下列命令以安裝 Helm Chart。注意: 將 clusterNameregionvpcId 取代為您的值:

    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
  4. 確認已成功安裝控制器:

    $ 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 BalancerNetwork Load Balancer。您可以使用其中一個來建立 k8s 服務。若要使用 Application Load Balancer 輸入部署名為 2048 的範例應用程式,請執行下列操作:

  1. 建立遊戲部署所需的 Fargate 設定檔。使用下列命令:

    eksctl create fargateprofile --cluster your-cluster --region your-region-code --name your-alb-sample-app --namespace game-2048
  2. 若要部署範例遊戲並確認 AWS 負載平衡器控制器已建立 ALB 輸入資源,請執行下列命令:

    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.6.1/docs/examples/2048/2048_full.yaml
  3. 幾分鐘後,透過下列命令確認已建立輸入資源:

    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

    日誌可能包含可協助您診斷部署問題的錯誤訊息。

  4. 若要檢視範例應用程式,請開啟瀏覽器。然後,從上一個命令輸出導覽至 ADDRESS URL。
    **注意:**如果您沒有看到範例應用程式,請稍候幾分鐘,然後重新整理瀏覽器。

部署範例應用程式

若要使用 Network Load Balancer IP 位址模式服務部署範例應用程式,請執行下列操作:

  1. 若要建立 Fargate 設定檔,請執行下列命令:

    eksctl create fargateprofile --cluster your-cluster --region your-region-code --name your-alb-sample-app --namespace game-2048
  2. 若要取得資訊清單來部署 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
  3. 步驟 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
  4. 修改服務物件:

    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
  5. 若要建立服務和部署資訊清單,請執行下列命令:

    kubectl apply -f 2048-game.yaml
  6. 若要檢查服務建立情況和 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
  7. 等待幾分鐘,直到負載平衡器處於作用中狀態。然後,檢查您是否可以進行部署。在 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 負載平衡器控制器

AWS 官方
AWS 官方已更新 1 個月前