在 Keda 中验证 AWS SQS 缩放器
Authenticate an AWS SQS scaler in 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
分别在文件中,并将在容器上采用它们的适当值。同样,为了调试目的,这些是重复的。我更愿意使用这些值而不是单独的秘密。
使用 Helm 安装 Keda pods
- 部署keda-secrets secret和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 凭据。我在这里做错了什么?
我将向您展示两种基于 AWS SQS 成功扩展部署的方法
第一种方式:使用附加到节点的 AWS IAM 角色
如果你的IAM角色(节点角色)有SQS的权限,那么访问SQS就会变得更容易你只需要将identityOwner: pod
字段更改为identityOwner: operator
,这样KEDA就可以使用节点角色访问AWS SQS
带有 SQS 触发器的示例 ScaledObject 文件
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用户
在这种方法中,我们需要创建以下对象
- 在 AWS 中创建 IAM 用户。
- 在 Kubernetes 中创建秘密。
- 在 Kubernetes 中创建 TriggerAuthentication。
- 在 Kubernetes 中创建 scaledObject。
创建 IAM 用户并向该 IAM 用户授予 SQS 权限。
首先使用 base64 对 IAM 用户访问密钥和秘密密钥进行编码,这在创建 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"
我有一个 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
分别在文件中,并将在容器上采用它们的适当值。同样,为了调试目的,这些是重复的。我更愿意使用这些值而不是单独的秘密。 使用 Helm 安装 Keda pods
- 部署keda-secrets secret和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 凭据。我在这里做错了什么?
我将向您展示两种基于 AWS SQS 成功扩展部署的方法
第一种方式:使用附加到节点的 AWS IAM 角色
如果你的IAM角色(节点角色)有SQS的权限,那么访问SQS就会变得更容易你只需要将identityOwner: pod
字段更改为identityOwner: operator
,这样KEDA就可以使用节点角色访问AWS SQS
带有 SQS 触发器的示例 ScaledObject 文件
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用户
在这种方法中,我们需要创建以下对象
- 在 AWS 中创建 IAM 用户。
- 在 Kubernetes 中创建秘密。
- 在 Kubernetes 中创建 TriggerAuthentication。
- 在 Kubernetes 中创建 scaledObject。
创建 IAM 用户并向该 IAM 用户授予 SQS 权限。
首先使用 base64 对 IAM 用户访问密钥和秘密密钥进行编码,这在创建 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"