无法修改(补丁)docker eks(aws) 上现有 kubernetes 部署定义的映像 ID
Can't modify(patch) docker image id of existing kubernetes deployment definition on eks(aws)
我在 aws 上创建了 CodePipeline 定义。一开始我构建 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 上的所有资源具有完全权限。
Does/did 有人对使用 lambda 函数在 eks 上进行此类部署修补有类似的问题吗?
您可以检查服务帐户是否有 RBAC 来修补命名空间中的部署 arch-ns
kubectl auth can-i patch deployment --as=system:serviceaccount:arch-user:default -n arch-ns
如果上面的命令returns no
然后添加必要的角色和角色绑定到服务帐户。
这里要注意的一件事是,它是 arch-user
命名空间中的 default
服务帐户,但试图在不同的命名空间中执行操作 arch-ns
我在 aws 上创建了 CodePipeline 定义。一开始我构建 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 上的所有资源具有完全权限。
Does/did 有人对使用 lambda 函数在 eks 上进行此类部署修补有类似的问题吗?
您可以检查服务帐户是否有 RBAC 来修补命名空间中的部署 arch-ns
kubectl auth can-i patch deployment --as=system:serviceaccount:arch-user:default -n arch-ns
如果上面的命令returns no
然后添加必要的角色和角色绑定到服务帐户。
这里要注意的一件事是,它是 arch-user
命名空间中的 default
服务帐户,但试图在不同的命名空间中执行操作 arch-ns