我在AWS上使用kops创建了kubernetes集群。我尝试使用kube-applier将yaml
配置应用于我的群集:我使用kube-applier
创建了部署:
apiVersion: "extensions/v1beta1"
kind: "Deployment"
metadata:
name: "kube-applier"
namespace: "kube-system"
spec:
# spec
并按照README中的建议在kube-system
命名空间中启动它:
kubectl --namespace=kube-system apply -f deployment.yaml
。
但是当收到要申请的新文件时,kube-applier
会因此错误而失败:
$ kubectl apply -f /git/deployment.yaml
Error from server (Forbidden): error when retrieving current configuration of:
&{0xc43034ca91 0xc43034ca91 kube-system kube-applier /git/applier-deployment.yaml 0xc421432531 false}
from server for: "/git/deployment.yaml": deployments.extensions "kube-applier" is forbidden: User "system:serviceaccount:kube-system:default" cannot get deployments.extensions in the namespace "kube-system"
如何向kube-applier
pod授予权限以在其他命名空间中应用配置?
Kubernetes版本:Server Version: version.Info{Major:"1", Minor:"9", GitVersion:"v1.9.6", GitCommit:"9f8ebd171479bec0ada837d7ee641dec2f8c6dd1", GitTreeState:"clean", BuildDate:"2018-03-21T15:13:31Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"linux/amd64"}
答案 0 :(得分:2)
如何向kube-applier pod授予权限以在其他命名空间中应用配置?
使用正确的资源权限创建或查找ClusterRole
,然后使用ServiceAccount
将ClusterRoleBinding
绑定到该{/ 1}}
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
# C.R.B. don't have a "namespace:"
name: my-kube-applier
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: default
namespace: kube-system
但,正如@jhernandez所说,你真的想为ServiceAccount
创建一个专用的kube-applier
,而不是给予我认为是非常非常特权的ClusterRole
default
1}}到ServiceAccount
SA(这是我在上面的示例中所做的,但你不应该做真的)
创建新的kubectl -n kube-system create sa kube-applier
非常便宜:name: default
然后将name: kube-applier
替换为上面subjects:
块中的ClusterRole
。
理想情况下,人们可以创建自定义的最低权限cluster-admin
,而不是像{{1}}那样使用大量的锤子,但生成正确的会产生一些严重的打字,所以我将由您自行决定。