假设我使用以下命令获得一个EKS令牌:
aws eks get-token --region us-west-2 --cluster-name eks1
结果如下所示:
{"status": {"token": "k8s-aws-v1.aHR0.....Ni"}, "kind": "ExecCredential", "apiVersion": "client.authentication.k8s.io/v1alpha1", "spec": {}}
如何将令牌传递给其他cli命令?类似于:
kubectl get svc --token="$token-from-above"
在没有令牌的情况下,我一直收到这个错误:
错误:您必须登录到服务器(未经授权)
但是我的AWS证书是存在的,这就是为什么我可以得到令牌。我假设它与aws-iam-authenticator token -i eks1
生成的令牌相同
我试着运行这个:
export AWS_SESSION_TOKEN="$token-from-above"
kubectl get svc
这也不起作用,同样的错误。
发布于 2019-05-21 04:54:21
确保您没有配置任何这样的环境变量:
unset AWS_ACCESS_KEY_ID
unset AWS_SECRET_ACCESS_KEY
大多数(如果不是全部) aws工具都会将这些配置置于其他配置之上。例如,当我尝试使用AWS_PROFILE
时,我就被这一点愚弄了。
发布于 2019-05-21 07:11:07
@MrCholo,您是否已确保将您的KUBECONFIG
配置为使用exec凭据流?使用EKS和/或验证器,您不需要生成令牌,然后将其注入到每个请求中kubectl
有一种方法可以为您exec
二进制文件。
但是它看起来是这样的:
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: XXX
server: XXX
name: XXX
contexts:
- context:
cluster: XXX
user: XXX
name: XXX
current-context: XXX
kind: Config
preferences: {}
users:
- name: XXX
user:
exec:
apiVersion: client.authentication.k8s.io/v1alpha1
args:
- eks
- get-token
- --region us-west-2
- --cluster-name eks1
command: aws
env: null
您需要确保您至少拥有可以使用kubectl version --client --short
进行检查的1.10+ kubectl
客户端版本。
其他需要注意的是,此令牌不是AWS IAM令牌,它是API服务器用来验证用户身份的生成并签名的URL。底层的请求实际上是aws sts get-caller-identity
,但我们没有完成请求,我们对URL进行签名,然后对其进行base64编码,并将其封装在JSON中提交给api服务器。一旦令牌被传递到api服务器,令牌就会被发送到控制平面中的身份验证器web服务器,该服务器会对STS调用进行解码,然后“完成”STS调用以返回您是谁,然后使用该调用来验证您是否在用户白名单中。
希望这能有所帮助。
https://stackoverflow.com/questions/56227322
复制相似问题