Can';t修改eks(aws)上现有kubernetes部署定义的docker映像id(补丁)

Can';t修改eks(aws)上现有kubernetes部署定义的docker映像id(补丁),kubernetes,aws-lambda,aws-codepipeline,amazon-eks,aws-ecr,Kubernetes,Aws Lambda,Aws Codepipeline,Amazon Eks,Aws Ecr,我在aws上创建了代码管道定义。开始时,我构建docker映像并将其发送到ecr(aws上的容器注册)。当docker映像被发送到注册表时,我调用lambda函数,该函数应该通过替换部署定义中的docker映像id来更新现有部署的定义。Lambda函数使用nodejs实现,获取最近发送的映像id,并尝试修补部署定义。当它试图修补部署时,我收到如下响应 body: { kind: 'Status', apiVersion: 'v1', metadata: {}, status: 'Failure'

我在aws上创建了代码管道定义。开始时,我构建docker映像并将其发送到ecr(aws上的容器注册)。当docker映像被发送到注册表时,我调用lambda函数,该函数应该通过替换部署定义中的docker映像id来更新现有部署的定义。Lambda函数使用nodejs实现,获取最近发送的映像id,并尝试修补部署定义。当它试图修补部署时,我收到如下响应

body: {
kind: 'Status',
apiVersion: 'v1',
metadata: {},
status: 'Failure',
message: 'deployments.apps "arch-app" is forbidden: 
          User "system:serviceaccount:arch-user:default" cannot patch resource "deployments" 
          in API group "apps" in the namespace "arch-ns"',
reason: 'Forbidden',
details: [Object],
code: 403
}
这个用户帐户属于aws iam,我使用它创建了带有kubernetes的测试集群,因此它是集群的所有者。我在集群上执行的任何操作都是使用此帐户执行的,并且工作正常(使用此帐户,我可以创建资源并对其应用更改,而不会出现任何问题)

我在这个名称空间中创建了额外的角色,并为我使用的aws用户帐户创建了角色绑定,但它没有解决这个问题(可能是多余的)。Lambda函数对ecr和eks上的所有资源具有完全权限


是否有人/是否有人对使用lambda函数在eks上进行的此类部署修补有类似问题?

您可以检查服务帐户是否在命名空间
arch ns中有RBAC来修补部署

kubectl auth can-i patch deployment --as=system:serviceaccount:arch-user:default -n arch-ns
如果上述命令返回
no
,则向服务帐户添加必要的角色和角色绑定


这里需要注意的一点是,它是
arch-user
命名空间中的
default
服务帐户,但尝试在另一个命名空间
arch-ns

中执行操作,为system:servicecomport:arch-user:default添加角色绑定解决了问题。谢谢
kubectl auth can-i patch deployment --as=system:serviceaccount:arch-user:default -n arch-ns