除api / v1以外的api请求返回403“Forbidden”

时间:2018-03-04 17:18:15

标签: kubernetes

您好我使用本教程在Ubuntu 16.04上安装了一个新的kubernetes集群:
https://blog.alexellis.io/kubernetes-in-10-minutes/

然而,只要我尝试访问我的api(例如:https://[server-ip]:6443 / api / v1 / namespaces),我就会收到以下消息

{
    "kind": "Status",
    "apiVersion": "v1",
    "metadata": {},
    "status": "Failure",
    "message": "namespaces is forbidden: User \"system:bootstrap:a916af\" cannot list namespaces at the cluster scope",
    "reason": "Forbidden",
    "details": {
        "kind": "namespaces"
    },
    "code": 403
}

有谁知道如何解决这个或我做错了什么?

2 个答案:

答案 0 :(得分:0)

虽然我没有完成该教程,但您提出请求的服务帐户无法访问群集级信息,例如列出命名空间。 RBAC(基于角色的访问控制)将用户与Role或ClusterRole绑定,后者授予他们不同的权限。我的猜测是服务帐户不应该知道存在哪些其他命名空间,因此无权列出它们。

就“修复”而言,除了创建具有正确权限的serviceaccount / user之外,该教程还会对存储在$HOME/.kube/config的配置文件进行多次引用,该文件存储应该具有访问权限的用户的凭据到群集级资源,包括列出命名空间。你可以从那里开始。

答案 1 :(得分:0)

您应该将角色为cluster-admin的服务帐户system:serviceaccount:default:default(绑定到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