在哪里可以查看"eksctl"创建的服务帐户



我在AWS中创建一个EKS集群,并使用此命令创建一个服务帐户eksctl create iamserviceaccount --name alb-ingress-controller --cluster $componentName --attach-policy-arn $serviceRoleArn --approve --override-existing-serviceaccounts。命令的输出为:

[ℹ]  using region ap-southeast-2
[ℹ]  1 existing iamserviceaccount(s) (default/alb-ingress-controller) will be excluded
[ℹ]  1 iamserviceaccount (default/alb-ingress-controller) was excluded (based on the include/exclude rules)
[!]  metadata of serviceaccounts that exist in Kubernetes will be updated, as --override-existing-serviceaccounts was set
[ℹ]  no tasks

我不确定它是否成功创建。

我使用这个命令eksctl get iamserviceaccount来验证结果,但得到错误响应:

Error: getting iamserviceaccounts: no output "Role1" in stack "eksctl-monitor-addon-iamserviceaccount-default-alb-ingress-controller"

我也试着运行kubectl get serviceaccount,但我得到了错误:Error from server (NotFound): serviceaccounts "alb-ingress-controller" not found

这是否意味着服务帐户创建失败?在哪里可以在AWS控制台中查看服务帐户?或者在哪里可以查看错误?

根据错误,这意味着服务帐户已经存在。

要获得服务帐户,请使用kubectl

kubectl get serviceaccount <SERVICE_ACCOUNT_NAME> -n kube-system -o yaml

顺序是,创建IAM角色,然后创建RBAC角色和绑定。以下是您想要覆盖现有服务帐户的命令

eksctl --profile <PROFILE_NAME> 
--region=ap-northeast-2 
create iamserviceaccount 
--name alb-ingress-controller 
--namespace kube-system 
--override-existing-serviceaccounts 
--approve --cluster <CLUSTER_NAME> 
--attach-policy-arn 
arn:aws:iam::ACCOUNT_ID:policy/ALBIngressControllerIAMPolicy

我发现这个研讨会亚马逊EKS研讨会在我进入EKS的过程中非常有用。

有关ALB的更多信息,请点击

编辑

从这个错误

[ℹ]1个现有的iamservice帐户(默认/alb入口控制器)将被排除在之外

服务帐户似乎是在默认命名空间中创建的。

因此检查服务帐户的命令将是

kubectl get serviceaccount <SERVICE_ACCOUNT_NAME> -n default-o yaml

eksctl使用CloudFormation创建资源,因此您可能会在那里找到错误的原因。

  1. 转到AWS中的CloudFormation控制台
  2. 找到名称为eksctl-[CLUSTER NAME]-addon-iamserviceaccount-default-[SERVICE ACCOUNT NAME]的堆栈,它应该具有ROLLBACK_COMPLETE状态
  3. 选择";事件";选项卡并滚动到第一个错误

在我的案例中,原因是我附加到该角色的策略丢失。

按预期工作,谢谢@samchatcher!


1为IAM角色创建IAM策略

curl -o iam_policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.3.0/docs/install/iam_policy.json
aws-vault exec Spryker-Humanetic-POC -- aws iam create-policy 
--policy-name AWSLoadBalancerControllerIAMPolicy 
--policy-document file://iam_policy.json

2创建IAM角色并将其附加到新创建的ServiceAccount

eksctl create iamserviceaccount 
--cluster education-eks-7yby62S7 
--namespace kube-system 
--name aws-load-balancer-controller 
--attach-policy-arn arn:aws:iam::ACCOUNT_ID:policy/AWSLoadBalancerControllerIAMPolicy 
--approve

3.1验证#1 ServiceAccount是否存在于--namespace kube-system

kubectl get sa aws-load-balancer-controller -n kube-system -o yaml
apiVersion: v1
kind: ServiceAccount
metadata:
annotations:
eks.amazonaws.com/role-arn: arn:aws:iam::ACCOUNT_ID:role/eksctl-education-eks-7yby62S7-addon-iamservi-Role1-126OXTBKF3WBM
creationTimestamp: "2021-12-12T17:38:48Z"
labels:
app.kubernetes.io/managed-by: eksctl
name: aws-load-balancer-controller
namespace: kube-system
resourceVersion: "686442"
uid: 895f6f34-ab04-4bca-aeac-1b6b75766546
secrets:
- name: aws-load-balancer-controller-token-gcd5c

3.2验证#2

kubectl get sa aws-load-balancer-controller -n kube-system
NAME                           SECRETS   AGE
aws-load-balancer-controller   1         123m

希望它能有所帮助!‍♀️

最新更新