首先,我们必须为集群设置一个 OIDC Provider。 默认情况下未启用 IAM OIDC Provider,可以使用以下命令启用它:
eksctl utils associate-iam-oidc-provider \
    --region ${AWS_REGION} \
    --cluster eksworkshop-eksctl \
    --approve
2021-05-02 17:37:05 [ℹ]  eksctl version 0.45.0
2021-05-02 17:37:05 [ℹ]  using region $AWS_REGION
2021-05-02 17:37:05 [ℹ]  will create IAM Open ID Connect provider for cluster "eksworkshop-eksctl" in "$AWS_REGION"
2021-05-02 17:37:05 [✔]  created IAM Open ID Connect provider for cluster "eksworkshop-eksctl" in "$AWS_REGION"
我们将创建prodcatalog-ns 命名空间和 IRSA,用来授予 X-Ray、AppMesh 和 Cloudwatch Logs的访问权限。
kubectl create namespace prodcatalog-ns
cd eks-app-mesh-polyglot-demo
aws iam create-policy \
    --policy-name ProdEnvoyNamespaceIAMPolicy \
    --policy-document file://deployment/envoy-iam-policy.json
eksctl create iamserviceaccount --cluster eksworkshop-eksctl \
  --namespace prodcatalog-ns \
  --name prodcatalog-envoy-proxies \
  --attach-policy-arn arn:aws:iam::$ACCOUNT_ID:policy/ProdEnvoyNamespaceIAMPolicy \
  --override-existing-serviceaccounts \
  --approve 
这样,IAM Role与 K8s的 Service Account绑定。 可以查看创建的Service Account的详细信息:
kubectl describe sa prodcatalog-envoy-proxies -n prodcatalog-ns

在 Amazon EKS 文档中了解有关 IAM Roles for Service Account 的更多信息。
Fargate profile允许管理员声明哪些 Pod 将在 Fargate 上运行。
将用户的应用程序部署到 kube-system 和 default 以外的命名空间通常是一种最佳实践,以便有更细的粒度来管理 Pod。
在本节中,我们将创建一个名为 fargate-productcatalog 的新 Fargate 配置文件,该配置文件匹配所有 prodcatalog-ns Namespace下标签为 app: prodcatalog 的 Pod。 可以从 clusterconfig.yaml
 看到下面的 Fargate Profile配置:
---
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
  name: eksworkshop-eksctl
  region: ${AWS_REGION}
fargateProfiles:
  - name: fargate-productcatalog
    selectors:
      - namespace: prodcatalog-ns
        labels:
          app: prodcatalog
运行以下命令以创建 Fargate Profile:
cd eks-app-mesh-polyglot-demo
envsubst < ./deployment/clusterconfig.yaml | eksctl create fargateprofile -f -
2021-05-02 17:44:51 [ℹ]  eksctl version 0.45.0
2021-05-02 17:44:51 [ℹ]  using region $AWS_REGION
2021-05-02 17:44:51 [ℹ]  deploying stack "eksctl-eksworkshop-eksctl-fargate"
2021-05-02 17:44:51 [ℹ]  waiting for CloudFormation stack "eksctl-eksworkshop-eksctl-fargate"
2021-05-02 17:45:08 [ℹ]  waiting for CloudFormation stack "eksctl-eksworkshop-eksctl-fargate"
2021-05-02 17:45:24 [ℹ]  waiting for CloudFormation stack "eksctl-eksworkshop-eksctl-fargate"
2021-05-02 17:45:25 [ℹ]  creating Fargate profile "fargate-productcatalog" on EKS cluster "eksworkshop-eksctl"
2021-05-02 17:49:43 [ℹ]  created Fargate profile "fargate-productcatalog" on EKS cluster "eksworkshop-eksctl"
当 EKS 使用 Fargate 调度 Pod 时,Pod 可能需要调用 AWS API 以执行诸如从 Amazon ECR 拉取容器映像之类的操作。 Fargate Pod Execution Role 提供 IAM 权限来执行此操作。
此 IAM 角色是通过上述命令为您自动创建的。
创建 Fargate Profile需要几分钟时间(大约 5 - 7 分钟)。 Profile创建完成后执行以下命令,您应该会看到类似于下面的输出:
eksctl get fargateprofile --cluster eksworkshop-eksctl -o yaml
- name: fargate-productcatalog
  podExecutionRoleARN: arn:aws:iam::$ACCOUNT_ID:role/eksctl-eksworkshop-eksctl-FargatePodExecutionRole-JPQ56PZ7R9NL
  selectors:
  - labels:
      app: prodcatalog
    namespace: prodcatalog-ns
  status: ACTIVE
  subnets:
  - subnet-084a7XXXXXXXXXXXX
  - subnet-0b2dXXXXXXXXXXXXX
  - subnet-08565XXXXXXXXXXXX
登录控制台并进入 Amazon EKS -> 集群 -> 单击 eksworkshop-eksctl -> Configuration -> Compute,您应该会看到创建的Fargate Profile: fargate-productcatalog
 请注意, Fargate 上运行的 Pod 未分配公有 IP 地址,因此在创建 Fargate Profile时仅支持私有子网(没有到 Internet Gateway的直接路由)。
请注意, Fargate 上运行的 Pod 未分配公有 IP 地址,因此在创建 Fargate Profile时仅支持私有子网(没有到 Internet Gateway的直接路由)。
在配置 EKS 集群时,您必须确保您创建的 VPC 包含一个或多个私有子网。
当使用 eksctl 创建 EKS 集群时,它会自动创建满足这些要求的 VPC。