Аутентифицировать масштабировщик 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
значение повторяется здесь; Я оставил оба для отладки. Порядок его развертывания следующий:
- Установите общие переменные среды (здесь
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 - Разверните секрет keda-secrets и триггер аутентификации keda-trigger-authentication
- Разверните контейнер, который нужно масштабировать. Вот где
AWS_ACCESS_KEY_ID_ASSUME
значение примет имяAWS_ACCESS_KEY_ID
иAWS_SECRET_ACCESS_KEY_ASSUME
значение примет имяAWS_SECRET_ACCESS_KEY
и гдеAWS_REGION
значение определено. - Масштабируемый объект развернут
По какой-то причине я продолжаю получать сообщение об ошибке от 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
В этом подходе нам нужно создать объекты ниже
- Создайте пользователя IAM в AWS.
- Создайте секрет в Kubernetes.
- Создайте TriggerAuthentication в Kubernetes.
- Создайте 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"