Я пытаюсь создать развертывание 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