Учетная запись службы Kubernetes, созданная с помощью Terraform, приводит к отсутствию пути к документу: «/ spec / volume / 0» Ошибка для набора реплик - PullRequest
1 голос
/ 08 ноября 2019

Я пытаюсь создать развертывание Kubernetes со связанным ServiceAccount, который связан с ролью AWS IAM . Этот yaml дает желаемый результат, и соответствующее развертывание (включенное внизу) вращается правильно:

apiVersion: v1
kind: ServiceAccount
metadata:
  name: service-account
  namespace: example
  annotations:
    eks.amazonaws.com/role-arn: ROLE_ARN

Однако вместо этого я хотел бы использовать поставщика Terraform Kubernetes для создания ServiceAccount:

resource "kubernetes_service_account" "this" {
  metadata {
    name = "service-account2"
    namespace = "example"
    annotations = {
      "eks.amazonaws.com/role-arn" = "ROLE_ARN"
    }
  }
}

К сожалению, когда я создаю ServiceAccount таким образом, ReplicaSet для моего развертывания завершается с ошибкой:

Error creating: Internal error occurred: Internal error occurred: jsonpatch add operation does not apply: doc is missing path: "/spec/volumes/0"

Я подтвердил, что не имеет значения, создается ли Развертывание через Terraform илиkubectl;он не будет работать с service-account2 созданным Terraform, но отлично работает с service-account, созданным kubectl. Переключение развертывания назад и вперед между service-account и service-account2 соответственно заставляет его работать или не работать так, как вы могли бы ожидать.

Я также определил, что eks.amazonaws.com/role-arn связан;создание / назначение учетных записей ServiceAcc, которые не пытаются установить связь с ролью IAM, независимо от того, были ли они созданы с помощью Terraform или kubectl.

с использованием kubectl для описания развертывания, ReplicaSet, ServiceAccount и связанных с нимиСекрет, я не вижу никаких явных различий, хотя я признаю, что не совсем уверен, что я могу искать.

Вот простой пример развертывания, который показывает проблему:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: example
  namespace: example
spec:
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: example
    spec:
      serviceAccountName: service-account # or "service-account2"
      containers:
      - name: nginx
        image: nginx:1.7.8

1 Ответ

2 голосов
/ 11 ноября 2019

Добавление automountServiceAccountToken: true к спецификации модуля в вашем развертывании должно исправить эту ошибку. Обычно это включено по умолчанию для учетных записей служб, но по умолчанию Terraform отключено. См. Эту проблему в мутирующем веб-хуке, который добавляет необходимые переменные среды в ваши модули: https://github.com/aws/amazon-eks-pod-identity-webhook/issues/17

...