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

时间:2017-12-26 03:15:41

标签: 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"

2 个答案:

答案 0 :(得分:16)

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

在第一个错误中,问题是默认名称空间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"]

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

现在我们可以使用这个clusterrole创建一个clusterrolebinding:

kubectl create clusterrolebinding service-reader-pod \
  --clusterrole=service-reader  \
  --serviceaccount=default:default

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

在这种情况下,我创建了clusterroleclusterrolebinding,但您可能想要创建rolerolebinding。您可以查看documentation in detail here

答案 1 :(得分:1)

您应该将角色为system:serviceaccount:default:default的服务帐户cluster-admin(这是绑定到Pod的默认帐户)绑定,只需创建一个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

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

如果要取消绑定它们,只需运行kubectl delete -f fabric8-rbac.yaml