首页 文章

从kube-system命名空间应用kubernetes配置

提问于
浏览
0

我在AWS上使用kops创建了kubernetes集群 . 我正在尝试使用kube-applieryaml 配置应用于我的集群:我使用 kube-applier 创建了一个部署:

apiVersion: "extensions/v1beta1"
kind: "Deployment"
metadata:
  name: "kube-applier"
  namespace: "kube-system"
spec:
  # spec

并按照自述文件中的建议在 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"}

1 回答

  • 2

    如何向kube-applier pod授予权限以在其他命名空间中应用配置?

    使用正确的资源权限创建或查找 ClusterRole ,然后使用 ClusterRoleBindingServiceAccount 绑定到它

    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
    

    BUT ,正如@jhernandez所说,你真的想为 kube-applier 创建一个专用的 ServiceAccount ,而不是给我认为是 default 一个非常非常特权的 ClusterRole (这是我在上面的例子中所做的,但你不应该做真的)

    创建一个新的 ServiceAccount 超级便宜: kubectl -n kube-system create sa kube-applier 然后在上面的 subjects: 块中用 name: kube-applier 替换 name: default .

    理想情况下,人们会创建一个自定义的最小权限 ClusterRole 而不是使用像_2510399这样的大型锤子,但生成正确的锤子需要一些严肃的打字,所以我会自行决定 .

相关问题