gpt4 book ai didi

kubernetes - 使用 RBAC 时, "kubectl auth reconcile"和 "kubectl apply"有什么区别?

转载 作者:行者123 更新时间:2023-12-03 23:39:21 35 4
gpt4 key购买 nike

我有一些平均 yaml 文件定义了一些平均角色资源,所有 yaml 都应该反射(reflect)我的资源所需的状态。
为了让新的平均角色进入集群,我通常运行 kubectl apply -f my-new-role.yaml但现在我看到了这个(推荐!?)替代kubectl auth reconcile -f my-new-role.yaml好的,可能存在 RBAC 关系,即绑定(bind),但不应该是 申请做同样的事情?
是否有过更新(集群)角色但不希望更新其相关(集群)绑定(bind)的情况?

最佳答案

kubectl auth reconcile Kubernetes 中添加了命令行实用程序 v1.8 .
正确应用 RBAC 权限是一项复杂的任务,因为您需要计算规则集之间的逻辑覆盖操作。
正如您在 CHANGELOG-1.8.md 中看到的那样:

Added RBAC reconcile commands with kubectl auth reconcile -f FILE. When passed a file which contains RBAC roles, rolebindings, clusterroles, or clusterrolebindings, this command computes covers and adds the missing rules. The logic required to properly apply RBAC permissions is more complicated than a JSON merge because you have to compute logical covers operations between rule sets. This means that we cannot use kubectl apply to update RBAC roles without risking breaking old clients, such as controllers.

kubectl auth reconcile命令将忽略任何不是 Role 的资源, RoleBinding , ClusterRole , 和 ClusterRoleBinding对象,因此您可以安全地在全套 list 上运行协调(参见: Use 'kubectl auth reconcile' before 'kubectl apply')

我创建了一个示例来演示 kubectl auth reconcile 的有用性。命令是。
我有一个简单的 secret-reader RoleBinding我想更改绑定(bind)的 roleRef (我想更改此绑定(bind)所指的 Role):
注意:与不同角色的绑定(bind)是根本不同的绑定(bind)(参见: A binding to a different role is a fundamentally different binding)。
# BEFORE
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: secret-admin
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: secret-reader
subjects:
- kind: ServiceAccount
name: service-account-1
namespace: default

# AFTER
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: secret-admin
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: secret-creator
subjects:
- kind: ServiceAccount
name: service-account-1
namespace: default
我们知道, roleRef是不可变的,因此无法更新 secret-admin RoleBinding使用 kubectl apply :
$ kubectl apply -f secret-admin.yml
The RoleBinding "secret-admin" is invalid: roleRef: Invalid value: rbac.RoleRef{APIGroup:"rbac.authorization.k8s.io", Kind:"Role", Name:"secret-creator"}: cannot change roleRef
相反,我们可以使用 kubectl auth reconcile .如果一个 RoleBinding已更新为新的 roleRef , kubectl auth reconcile命令为我们处理删除/重新创建相关对象。
$ kubectl auth reconcile -f secret-admin.yml
rolebinding.rbac.authorization.k8s.io/secret-admin reconciled
reconciliation required recreate
此外,您可以使用 --remove-extra-permissions--remove-extra-subjects选项。
最后,我们可以检查是否所有内容都已成功更新:
$ kubectl describe rolebinding secret-admin
Name: secret-admin
Labels: <none>
Annotations: <none>
Role:
Kind: Role
Name: secret-creator
Subjects:
Kind Name Namespace
---- ---- ---------
ServiceAccount service-account-1 default

关于kubernetes - 使用 RBAC 时, "kubectl auth reconcile"和 "kubectl apply"有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66805649/

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