Разница между токенами учетной записи службы Kubernetes и секретным объемом - PullRequest
0 голосов
/ 17 апреля 2020

Когда я делаю kubectl get secret my-sa-token-lr928 -o yaml, для data.token есть значение base64 (JWT A ). В этом возвращенном секрете есть и другие поля, например data.ca.crt.

Когда я использую проецируемый том с источником serviceAccountToken и читаю файл, появляется другая строка не-base64 ( JWT B ).

cat /var/run/secrets/some.directory/serviceaccount/token

Почему строки JWT A и JWT B отличаются? Наиболее заметное различие заключается в JWT B iss, т. Е. URL моего эмитента (- service-account-эмитент ) и в JWT A iss i.e my issuer url is kubernetes / serviceaccount`. Разве они оба не являются токенами учетной записи JWT? Если нет, то какой объект API Kubernetes они на самом деле представляют?

Ниже приводится мой модуль Kubernetes Pod spe c (отредактированный для краткости)

apiVersion: v1
kind: Pod
metadata:
  annotations:
  labels:
    app: sample-app
  name: sample-pod-gwrcf
spec:
  containers:
    image: someImage
    name: sample-app-container
    resources: {}
    volumeMounts:
    - mountPath: /var/run/secrets/kubernetes.io/serviceaccount
      name: my-sa-token-lr928
      readOnly: true
    - mountPath: /var/run/secrets/some.directory/serviceaccount
      name: good-token
      readOnly: true
  serviceAccount: my-sa
  serviceAccountName: my-sa
  terminationGracePeriodSeconds: 30
  volumes:
  - name: good-token
    projected:
      defaultMode: 420
      sources:
      - serviceAccountToken:
          audience: my.audience.com
          expirationSeconds: 86400
          path: token
  - name: my-sa-token-lr928
    secret:
      defaultMode: 420
      secretName: my-sa-token-lr928

1 Ответ

0 голосов
/ 17 апреля 2020

Не являются ли они обоими токенами учетной записи JWT?

Да, они оба являются токенами JWT.

Тот, который вы указали как JWT A в my-sa-token-lr928, кодируется в base64 как все данные в каждом секрете kubernetes. .

Когда k8s монтирует секретные данные в модуль, эти данные декодируются и сохраняются, например, в этом случае как файл токена.

JWT B токен с использованием Объем Проекции Token Service Account выдан kubelet и обеспечивает большую гибкость, например, установка срока действия в отличие от токенов Regular Service Account, которые были выпущены, остаются прежними (если не воссозданы) и не имеют срока действия.

Если Вы запускаете c в свой модуль и просматриваете содержимое этих токенов, и вы увидите, что это настоящие токены JWT. Вы можете декодировать данные из этих токенов, используя любой декодер jwt, например, jwt.io .

Почему строки JWT A и JWT B отличаются?

Поскольку они содержат разные данные.

...