我在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创建资源,因此您可能会在那里找到错误的原因。
- 转到AWS中的CloudFormation控制台
- 找到名称为
eksctl-[CLUSTER NAME]-addon-iamserviceaccount-default-[SERVICE ACCOUNT NAME]
的堆栈,它应该具有ROLLBACK_COMPLETE
状态 - 选择";事件";选项卡并滚动到第一个错误
在我的案例中,原因是我附加到该角色的策略丢失。
按预期工作,谢谢@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
希望它能有所帮助!♀️