amazon-web-services - Kubectl with Gitlab EKS Cluster Error: You must be logged in to the server (Unauthorized)
问题描述
我正在尝试在从第三方(Gitlab)创建的 EKS 集群中运行 kubectl,我需要使用 kubectl 访问此集群以安装指标服务器。
但是我不能用 kubectl 访问这个集群。我从文档中做了所有事情。我已经在集群的 IAM 角色中设置了信任关系,如下所示:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "eks.amazonaws.com",
"AWS": [
"arn:aws:sts::123456789012:assumed-role/AzureAD_AWS_Admin/me@mycompany.com",
"arn:aws:iam::123456789012:root"
]
},
"Action": "sts:AssumeRole"
}
]
}
而且我已经像上面的命令一样使用 external-id 测试了假设角色,并且一切都可以无缝运行!
aws sts assume-role --role-arn arn:aws:iam::123456789012:role/eksServiceRole --external-id 2ffd8b2c3d8edaf02104a081af4b78d82f6e770f --role-session-name my_test
因此,我按照这些步骤担任角色并向我的用户授予权限(对于步骤:如果 cluster_creator 是 IAM 角色,则将指定用户添加到 ConfigMap)以使用 kubectl。
但是当我运行时,我kubectl get pods
再次收到此消息:
error: You must be logged in to the server (Unauthorized)
解决方案
遵循 Gitlab 说明时,我遇到了同样的问题。本指南有助于:
在 aws-services -> IAM -> Roles -> 中选择您为 gitlab 定义的角色。
现在您可以 (1) 简单地将您的用户添加到受信任的实体,或者 (2) 仅临时更新它们并编辑 aws-auth 配置。
(1) 用您的账户 ID 添加另一个不带外部 ID 条件的语句:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::[account]:user/username"
},
"Action": "sts:AssumeRole"
},
{
// Leave untouched
}
]
}
(2) 通过删除 externalId 条件来编辑受信任实体并将其更改为您的用户帐户 ID(您使用它配置 aws-cli):
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::[gitlabsaccount]:root"
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"sts:ExternalId": "[externalId]"
}
}
}
]
}
->
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::[account]:user/username"
},
"Action": "sts:AssumeRole"
}
]
}
然后运行 cli-command 以使用此角色重新配置您的 kubectl 集群访问:
aws --region [region] eks update-kubeconfig --name [cluster-name] --role-arn arn:aws:iam::[account]:role/[role-name]
最后,使用权限将自己添加到 aws-auth 配置映射:
kubectl edit -n kube-system configmap/aws-auth
然后添加您的帐户:
apiVersion: v1
data:
mapRoles: |
...
mapUsers: |
---
- userarn: arn:aws:iam::[account]:user/[username]
username: [username]
groups:
- system:masters
...
不要忘记将 gitlab-user 改回角色和外部条件。
推荐阅读
- html - 您如何处理两个元素具有相同可访问名称但功能不同的情况?
- r - 不知道为什么我会收到此错误:“model.frame.default 中的错误......可变长度不同”?
- tensorflow - 在图像预处理方面,我在将 Tensorflow Python 转换为 Tensorflow.js 时遇到了麻烦。我错过了什么?
- java - Pdfbox Java docusign 签名消失
- java - 在线程完成其工作或在 android 中返回一个值后,在 MainActivity 中运行一行
- regex - 仅用于文件上传图像的正则表达式 - opencart
- reactjs - 为什么 `npm test` 只进行一项测试就需要这么长时间?
- firebase - 两个读取规则和第二个规则进行字段检查
- javascript - 动态插入的选择下拉字段无法正常工作
- android - 我想要片段中的android覆盖活动方法