Аутентифицировать масштабировщик AWS SQS в Keda

У меня есть развертывание Keda, которое я пытаюсь запустить уже около месяца. На данный момент мой скейлер выглядит так:

apiVersion: keda.k8s.io/v1alpha1
kind: ScaledObject
metadata:
  name: {service-name}-scaler
spec:
  scaleTargetRef:
    deploymentName: {service-name}
    containerName: {service-name}
  pollingInterval: 30
  cooldownPeriod:  600
  minReplicaCount: 0
  maxReplicaCount: 10
  triggers:
  - type: aws-sqs-queue
    authenticationRef:
      name: keda-trigger-authentication
    metadata:
      queueURL: https://sqs.ap-northeast-1.amazonaws.com/{AWS ID}/{Queue-name}
      queueLength: "1"
      awsRegion: "ap-northeast-1"
      identityOwner: pod

Связанные аутентификация триггера и секрет:

apiVersion: v1
kind: Secret
metadata:
  name: keda-secrets
data:
  AWS_ACCESS_KEY_ID: {base64-encoded-string}
  AWS_SECRET_ACCESS_KEY: {base64-encoded-string}
  KEDA_ROLE_ARN: {base64-encoded-string}

---

apiVersion: keda.k8s.io/v1alpha1
kind: TriggerAuthentication
metadata:
  name: keda-trigger-authentication
spec:
  env:
  - parameter: awsRegion
    name: AWS_REGION
  - parameter: awsAccessKeyID
    name: AWS_ACCESS_KEY_ID
  - parameter: awsSecretAccessKey
    name: AWS_SECRET_ACCESS_KEY
  - parameter: awsRoleArn
    name: KEDA_ROLE_ARN
  secretTargetRef:
  - parameter: awsRoleArn
    name: keda-secrets
    key: KEDA_ROLE_ARN

Я понимаю, что KEDA_ROLE_ARNзначение повторяется здесь; Я оставил оба для отладки. Порядок его развертывания следующий:

  1. Установите общие переменные среды (здесь AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY а также KEDA_ROLE_ARNзначения сохраняются. ВAWS_ACCESS_KEY_ID а также AWS_SECRET_ACCESS_KEY значения перечислены как AWS_ACCESS_KEY_ID_ASSUME а также AWS_SECRET_ACCESS_KEY_ASSUMEсоответственно в файле и примет соответствующие значения в контейнере. Опять же, они дублируются для целей отладки. Я бы предпочел использовать эти значения, а не отдельный секрет. Установите Keda pods с помощью Helm
  2. Разверните секрет keda-secrets и триггер аутентификации keda-trigger-authentication
  3. Разверните контейнер, который нужно масштабировать. Вот гдеAWS_ACCESS_KEY_ID_ASSUME значение примет имя AWS_ACCESS_KEY_ID и AWS_SECRET_ACCESS_KEY_ASSUME значение примет имя AWS_SECRET_ACCESS_KEY и где AWS_REGION значение определено.
  4. Масштабируемый объект развернут

По какой-то причине я продолжаю получать сообщение об ошибке от AWS, когда средство масштабирования пытается масштабировать, говоря, что в цепочке нет поставщиков учетных данных. Похоже, что учетные данные AWS не отправляются. Что я здесь делаю не так?

1 ответ

Я покажу вам два способа успешного масштабирования развертывания на основе AWS SQS.

Первый способ: использование роли AWS IAM, прикрепленной к узлу

Если ваша роль IAM (роль узла) имеет разрешение на SQS, тогда доступ к SQS станет проще, вам просто нужно изменить identityOwner: pod поле для identityOwner: operator чтобы KEDA могла использовать роль узла для доступа к AWS SQS

Пример файла ScaledObject с триггером SQS

      apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
  name: aws-sqs-queue-scaledobject
  namespace: default
spec:
  scaleTargetRef:
    name: test-deployment
  minReplicaCount: 0
  maxReplicaCount: 2
  triggers:
  - type: aws-sqs-queue
    metadata:
      queueURL: https://sqs.us-east-1.amazonaws.com/3243234432432/Queue
      queueLength: "5"
      awsRegion: "us-east-1"
      identityOwner: operator

Второй способ: использование пользователя IAM

В этом подходе нам нужно создать объекты ниже

  1. Создайте пользователя IAM в AWS.
  2. Создайте секрет в Kubernetes.
  3. Создайте TriggerAuthentication в Kubernetes.
  4. Создайте scaledObject в Kubernetes.

Создайте пользователя IAM и дайте ему разрешения SQS.

сначала закодируйте ключ доступа пользователя IAM и секретный ключ с помощью base64, который потребуется при создании секрета Kubernetes.

Создать секрет

      apiVersion: v1
kind: Secret
metadata:
  name: test-secrets
  namespace: default
data:
  AWS_ACCESS_KEY_ID: <base64-encoded-key>
  AWS_SECRET_ACCESS_KEY: <base64-encoded-secret-key>

Создайте TriggerAuthentication, это будет использоваться в scaledObject

      apiVersion: keda.sh/v1alpha1
kind: TriggerAuthentication
metadata:
  name: keda-trigger-auth-aws-credentials
  namespace: default
spec:
  secretTargetRef:
  - parameter: awsAccessKeyID     # Required.
    name: test-secrets            # Required.
    key: AWS_ACCESS_KEY_ID        # Required.
  - parameter: awsSecretAccessKey # Required.
    name: test-secrets            # Required.
    key: AWS_SECRET_ACCESS_KEY    # Required.

Создайте scaledObject для сопоставления keda с развертыванием, которое вы хотите масштабировать на основе триггера SQS.

      apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
  name: aws-sqs-queue-scaledobject
  namespace: default
spec:
  scaleTargetRef:
    name: test-deployment
  minReplicaCount: 0
  maxReplicaCount: 2
  triggers:
  - type: aws-sqs-queue
    authenticationRef:
      name: keda-trigger-auth-aws-credentials
    metadata:
      queueURL: https://sqs.us-east-1.amazonaws.com/012345678912/Queue
      queueLength: "5"
      awsRegion: "us-east-1"
Другие вопросы по тегам