gpt4 book ai didi

kubernetes - 从 EKS 中的 Pod 将 IAM 角色附加到 Serviceaccount

转载 作者:行者123 更新时间:2023-12-04 08:28:26 25 4
gpt4 key购买 nike

我正在尝试从 EKS 中的 POD 中将 IAM 角色附加到 Pod 的服务帐户。

kubectl annotate serviceaccount -n $namespace $serviceaccount eks.amazonaws.com/role-arn=$ARN
当前角色附加到 $serviceaccount概述如下:
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: common-role
rules:
- apiGroups: [""]
resources:
- event
- secrets
- configmaps
- serviceaccounts
verbs:
- get
- create
但是,当我执行 kubectl 时命令我得到以下信息:
error from server (forbidden): serviceaccounts $serviceaccount is forbidden: user "system:servi...." cannot get resource "serviceaccounts" in API group "" ...
我的角色正确吗?为什么我不能修改服务帐号?

最佳答案

默认情况下,Kubernetes 将使用 service account: default 运行 Pod。没有正确的权限。由于我无法确定您为 pod 使用的是哪个,我只能假设您使用的是默认值或您创建的其他一些。在这两种情况下,错误都表明您用来运行 pod 的服务帐户没有适当的权限。
如果您使用服务帐户类型默认运行​​此 pod,您将为其添加适当的权限。另一种方法是使用为此目的创建的另一个服务帐户运行您的 pod。这是一个例子:

apiVersion: v1  
kind: ServiceAccount
metadata:
name: run-kubectl-from-pod
然后你必须创建适当的角色(你可以找到完整的动词列表 here ):
apiVersion: rbac.authorization.k8s.io/v1  
kind: Role
metadata:
name: modify-service-accounts
rules:
- apiGroups: [""]
resources:
- serviceaccounts
verbs:
- get
- create
- patch
- list
我在这里使用更多动词作为测试。 GetPatch对于这个用例就足够了。我之所以提到这一点,是因为它的最佳实践是提供尽可能少的权利。
然后相应地创建您的角色:
apiVersion: rbac.authorization.k8s.io/v1  
kind: RoleBinding
metadata:
name: modify-service-account-bind
subjects:
- kind: ServiceAccount
name: run-kubectl-from-pod
roleRef:
kind: Role
name: modify-service-accounts
apiGroup: rbac.authorization.k8s.io
现在,您只需在运行 Pod 时引用该服务帐户:
apiVersion: v1  
kind: Pod
metadata:
name: run-kubectl-in-pod
spec:
serviceAccountName: run-kubectl-from-pod
containers:
- name: kubectl-in-pod
image: bitnami/kubectl
command:
- sleep
- "3600"
完成后,您只需执行 pod:
➜  kubectl-pod kubectl exec -ti run-kubectl-in-pod sh  
然后注释服务帐户:
$ kubectl get sa 
NAME SECRETS AGE
default 1 19m
eks-sa 1 36s
run-kubectl-from-pod 1 17m

$ kubectl annotate serviceaccount eks-sa eks.amazonaws.com/role-arn=$ARN
serviceaccount/eks-sa annotated

$ kubectl describe sa eks-sa
Name: eks-sa
Namespace: default
Labels: <none>
Annotations: eks.amazonaws.com/role-arn:
Image pull secrets: <none>
Mountable secrets: eks-sa-token-sldnn
Tokens: <none>
Events: <none>
如果您遇到任何请求被拒绝的问题,请先查看 your request attributesdetermine the appropriate request verb .
您还可以使用 kubectl auth can-i 检查您的访问权限命令:
kubectl-pod kubectl auth can-i patch serviceaccount 
API 服务器将响应简单的 yesno .

请注意 如果您想修补服务帐户以使用 IAM 角色,您将需要删除并重新创建与服务帐户关联的任何现有 pod,以应用凭证环境变量。您可以阅读更多相关信息 here .

关于kubernetes - 从 EKS 中的 Pod 将 IAM 角色附加到 Serviceaccount,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65139122/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com