0

我有一个 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_KEYKEDA_ROLE_ARN值的存储位置。AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY值在文件中分别列为AWS_ACCESS_KEY_ID_ASSUMEAWS_SECRET_ACCESS_KEY_ASSUME,并将在容器上假定它们的适当值。同样,这些重复用于调试目的。我更喜欢使用这些值而不是单独的秘密。使用 Helm 安装 Keda pod
  2. 部署 keda-secrets secret 和 keda-trigger-authentication trigger authentication
  3. 部署应该扩展的容器。这是AWS_ACCESS_KEY_ID_ASSUME值将采用的名称AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY_ASSUME值将采用的名称AWS_SECRET_ACCESS_KEYAWS_REGION定义值的位置。
  4. 已部署缩放对象

出于某种原因,当缩放器尝试缩放时,我不断收到来自 AWS 的错误,说链中没有凭证提供者。似乎没有发送 AWS 凭证。我在这里做错了什么?

4

1 回答 1

0

我将向您展示两种基于 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 用户

在这种方法中,我们需要创建以下对象

  1. 在 AWS 中创建 IAM 用户。
  2. 在 Kubernetes 中创建秘密。
  3. 在 Kubernetes 中创建 TriggerAuthentication。
  4. 在 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以根据 SQS 触发器将 keda 映射到要扩展的部署

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"
于 2021-06-21T05:37:43.963 回答