k8s服務調用報錯MessageForbidden!Configured service account doesnt have access.

將微服務部署在k8s中,使用k8s的服務發現調用另外一個服務的接口。報錯如下:Message: Forbidden!Configured service account doesn't have access. Service account may have been revoked. endpoints \"service-bookstar\" is forbidden: User \"system:serviceaccount:ns-booker:default\"
cannot get resource \"endpoints\" in API group \"\" in the namespace \"ns-booker\".", "path": "xxxxxx"

意思是serviceaccount 中 ns-booker:default 沒有權限“get” "endpoints"。權限是“get”對象是“endpoints”。

所以解決辦法是:需要給ns-booker:default賦權get去訪問endpoints。

知識點:k8s RBAC

解決步驟:

1、新建一個clusterrole:endpoints-cluster-role.yaml  如下:

kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  namespace: ns-booker
  name: endpoints-reader
rules:
- apiGroups: [""]
  resources: ["endpoints"]
  verbs: ["get", "watch", "list"]

kubectl create -f endpoints-cluster-role.yaml

注意namespce和resources的類型,完整的api-resource使用 kubectl api-resources 查詢

2、添加serviceacount的binding

kubectl create clusterrolebinding endpoints-reader-mydefault \
  --clusterrole=endpoints-reader  \
  --serviceaccount=ns-booker:default  

然後就可以順利訪問了。

網上也有使用如下方式解決的,該解決方式是提升權限到cluster-admin,不建議使用。爲了安全應該是需要什麼權限就給什麼權限,不能無限制的提升權限。

kubectl create clusterrolebinding permissive-binding \
  --clusterrole=cluster-admin \
  --user=admin \
  --user=kubelet \
  --group=system:serviceaccounts	

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章