403 Запрещенная ошибка при попытке доступа к API Kubernetes из модуля - PullRequest
0 голосов
/ 21 октября 2019

Согласно этой документации , я пытаюсь получить доступ к API Kuberenetes из модуля, используя следующую команду

curl --cacert ca.crt -H "Authorization: Bearer $(<token)" https://kubernetes/apis/extensions/v1beta1/namespaces/default/deployments/ballerina-prime/scale

, которая следует следующему шаблону

curl --cacert ca.crt -H "Authorization: Bearer $(<token)" https://kubernetes/apis/extensions/v1beta1/namespaces/{namespace}/deployments/{name}/scale

Выдает следующую ошибку

{
  "kind": "Status",
  "apiVersion": "v1",
  "metadata": {

  },
  "status": "Failure",
  "message": "deployments.extensions \"ballerina-prime\" is forbidden: User \"system:serviceaccount:default:default\" cannot get resource \"deployments/scale\" in API group \"extensions\" in the namespace \"default\"",
  "reason": "Forbidden",
  "details": {
    "name": "ballerina-prime",
    "group": "extensions",
    "kind": "deployments"
  },
  "code": 403
}

Может ли кто-нибудь указать, где я совершаю ошибку, или предложить любой другой способ, которым я могу получить доступ к KubernetesAPI?

Обновление 01

Я создал роль в соответствии с предложенной документацией. Ниже приведен манифест, который я использовал.

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: deployments-and-deployements-scale
rules:
- apiGroups: [""]
  resources: ["deployments", "deployments/scale"]
  verbs: ["get", "list"]

Я применил его с помощью этой команды. kubectl apply -f deployments-and-deployements-scale.yaml. Тем не менее я не могу получить доступ к необходимой конечной точке. Где я делаю ошибку?

Ответы [ 2 ]

2 голосов
/ 21 октября 2019

Во-первых, вы правильно подключаетесь к API kubernetes!

Но используемая по умолчанию учетная запись службы («пользователь») не имеет необходимых привилегий для выполнения операции, которую вы хотите выполнить. (Чтение развертывания «ballerina-prima» в пространстве имен «default»)

Что нужно сделать: использовать другую учетную запись службы или предоставить разрешения, необходимые для учетной записи службы по умолчанию.

Подробную информацию вы можете найти в документации: https://kubernetes.io/docs/reference/access-authn-authz/rbac/

1 голос
/ 22 октября 2019

Как @Thomas упомянул в комментарии под своим ответом, вам необходимо назначить определенную Роль целевой службе учетная запись через RoleBinding ресурс, чтобы исправить эту авторизацию проблему.

В отношении вашего манифеста:

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: deployments-and-deployements-scale
rules:
- apiGroups: ["extensions", "apps"]
  resources: ["deployments", "deployments/scale"]
  verbs: ["get", "list"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: deployments-and-deployements-scale-rb
subjects:
- kind: ServiceAccount
  name: default
  namespace: default
roleRef:
  kind: Role
  name: deployments-and-deployements-scale
  apiGroup: ""

Вы можете рассмотреть либо явно установленное apiGroups: в определении роли, соответствует определенным API группам или широко ["*"], просматривая все версии API.

...