Kubernetes日志,用户"system:serviceaccount:default:default"无法在命名空间中获取服务

Mur*_*ali 7 kubernetes

Forbidden!Configured service account doesn't have access. Service account may have been revoked. User "system:serviceaccount:default:default" cannot get services in the namespace "mycomp-services-process"

对于上述问题,我创建了"mycomp-service-process"命名空间并检查了问题.

但它再次显示这样的消息:

Message: Forbidden!Configured service account doesn't have access. Service account may have been revoked. User "system:serviceaccount:mycomp-services-process:default" cannot get services in the namespace "mycomp-services-process"

Vis*_*ani 26

当然,创建命名空间不会解决问题,因为这根本不是问题.

在第一个错误中,问题是serviceaccount默认名称空间中的默认值,can not get services因为它无法访问list/get服务.因此,您需要做的是使用该角色为该用户分配角色clusterrolebinding.

遵循一组最低权限,您可以先创建一个可以访问列表服务的角色:

kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  namespace: default
  name: service-reader
rules:
- apiGroups: [""] # "" indicates the core API group
  resources: ["services"]
  verbs: ["get", "watch", "list"]
Run Code Online (Sandbox Code Playgroud)

上面代码片段的作用是创建一个可以列出,获取和观看服务的集群.(您必须创建一个yaml文件并应用上述规范)

现在我们可以使用此clusterrole创建clusterrolebinding:

kubectl create clusterrolebinding service-reader-pod \
  --clusterrole=service-reader  \
  --serviceaccount=default:default
Run Code Online (Sandbox Code Playgroud)

在上面的命令中,service-reader-pod是clusterrolebinding的名称,它将服务读取器clusterrole分配给默认命名空间中的默认serviceaccount.您遇到的第二个错误可以遵循类似的步骤.

在这种情况下,我创建clusterroleclusterrolebinding但您可能希望创建一个rolerolebinding代替.您可以在此处详细查看文档

  • 我认为应该从 ClusterRole 中删除命名空间。根据文档 ClusterRoles 没有命名空间:https://kubernetes.io/docs/reference/access-authn-authz/rbac/#role-and-clusterrole (2认同)

Yas*_*ale 7

您应该将服务帐户system:serviceaccount:default:default(这是绑定到Pod的默认帐户)与role绑定cluster-admin,只需创建一个Yaml(名为fabric8-rbac.yaml),其内容如下:

# NOTE: The service account `default:default` already exists in k8s cluster.
# You can create a new account following like this:
#---
#apiVersion: v1
#kind: ServiceAccount
#metadata:
#  name: <new-account-name>
#  namespace: <namespace>

---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: fabric8-rbac
subjects:
  - kind: ServiceAccount
    # Reference to upper's `metadata.name`
    name: default
    # Reference to upper's `metadata.namespace`
    namespace: default
roleRef:
  kind: ClusterRole
  name: cluster-admin
  apiGroup: rbac.authorization.k8s.io
Run Code Online (Sandbox Code Playgroud)

然后,通过运行来应用它kubectl apply -f fabric8-rbac.yaml

如果要解除绑定,请运行kubectl delete -f fabric8-rbac.yaml

  • 虽然这样做后不会出现“拒绝访问”错误消息,但我强烈建议不要对Kubernetes集群中的所有Pod分配“ cluster-admin”角色。如果有人出于某种原因设法在您的一个应用程序中发现安全问题,使他们可以执行本地命令,则只需将整个群集的管理员帐户交给他们。 (6认同)