我正在按照分步指南在 AWS 上设置 kubernetes 环境。
https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html#role-create
它已经有一些 gochchas.. 并且已经得到部分解答。
- https://stackoverflow.com/questions/51135795/error-the-server-doesnt-have-resource-type-svc
- https://stackoverflow.com/questions/50791303/kubectl-error-you-must-be-logged-in-to-the-server-unauthorized-when-accessing
出于某种原因,人们能够使用这些答案中提供的指导方针来解决问题,而我仍然无法解决它。
could not get token: AccessDenied: User: arn:aws:iam::sssssss:user/testprofileUser is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::sssssssss:role/eksServiceRole
我做了什么:
- 我创建了一个具有管理员权限的 IAM 用户。(servicesDev)。
- 为 EKS 服务创建 IAM 角色 (amazonEKSServiceRole)
amazonEKSServiceRole 具有以下信任关系,
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "eks.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
这是我的 kubeconfig 文件,
apiVersion: v1
clusters:
- cluster:
server: https://7F30ANNSDSDMDCE1.ylq.us-east-1.eks.amazonaws.com
certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUN5RENDQWJDZ0F3SUJBZ0lCQURB...
name: clouddev
contexts:
- context:
cluster: clouddev
user: aws
name: aws
current-context: aws
kind: Config
preferences: {}
users:
- name: aws
user:
exec:
apiVersion: client.authentication.k8s.io/v1alpha1
command: aws-iam-authenticator
args:
- "token"
- "-i"
- "clouddev"
- "-r"
- "arn:aws:iam::xxxxx:role/amazonEKSServiceRole"
env:
- name: AWS_PROFILE
value: "testprofile"
为了清楚起见,我已经testprofile
正确设置了~/.aws/credentials
如果有人能够阐明这一点,我将不胜感激。
答案1
您还需要为 AWSServiceRoleForAmazonEKS 角色设置“信任关系”,以允许 EKS 承担该角色。
此链接底部附近将提供有关如何操作的详细信息:
答案2
我能够让它工作的唯一方法是使用 CLI 创建集群:
aws eks create-cluster --name <cluster name>
--role-arn <EKS Service Role>
--resources-vpc-config subnetIds=<subnet ids>,securityGroupIds=<security group id>
这是多个 AWS 资源和指南中建议的;运行它的确切命令来自这个 SO 答案:https://stackoverflow.com/a/53002925/8749874
答案3
我的情况是,我使用 root 用户创建了 VPC,并使用其他用户创建了其余的基础设施(eks 控制平面和工作节点)。当我使用同一用户(但不是 root 用户)重新创建所有内容时,事情变得顺利,并且能够使用 aws 文档创建集群。