【问题标题】:Can't modify(patch) docker image id of existing kubernetes deployment definition on eks(aws)无法在 eks(aws) 上修改(补丁)现有 kubernetes 部署定义的 docker 镜像 id
【发布时间】:2020-07-27 08:36:33
【问题描述】:

我在 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 上的所有资源拥有完全权限。

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

【问题讨论】:

    标签: kubernetes aws-lambda aws-codepipeline amazon-eks aws-ecr


    【解决方案1】:

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

    kubectl auth can-i patch deployment --as=system:serviceaccount:arch-user:default -n arch-ns
    

    如果上述命令返回no,则将必要的角色和角色绑定添加到服务帐户。

    这里需要注意的一点是,它是 arch-user 命名空间中的 default 服务帐户,但尝试在不同的命名空间 arch-ns 中执行操作

    【讨论】:

    • 为 system:serviceaccount:arch-user:default 添加角色绑定解决了这个问题。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-29
    • 2019-08-28
    • 2019-09-16
    • 1970-01-01
    相关资源
    最近更新 更多