簡體   English   中英

在 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值; 為了調試目的,我把兩者都留下了。 部署順序如下:

  1. 安裝公共環境變量(這是存儲AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYKEDA_ROLE_ARN值的位置AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY值在文件中分別列為AWS_ACCESS_KEY_ID_ASSUMEAWS_SECRET_ACCESS_KEY_ASSUME ,並將在容器上采用它們的適當值。同樣,這些被復制以進行調試目的。我更願意使用這些值而不是單獨的秘密。使用 Helm 安裝 Keda pods
  2. 部署keda-secrets secret和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. 已部署擴展的 object

出於某種原因,當縮放器嘗試縮放時,我不斷從 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用戶

在這種方法中,我們需要創建以下對象

  1. 在 AWS 中創建 IAM 用戶。
  2. 在 Kube.netes 中創建秘密。
  3. 在 Kube.netes 中創建 TriggerAuthentication。
  4. 在 Kube.netes 中創建 scaledObject。

創建 IAM 用戶並向該 IAM 用戶授予 SQS 權限。

首先使用 base64 對 IAM 用戶訪問密鑰和秘密密鑰進行編碼,這在創建 Kube.netes 秘密時是必需的。

創建秘密

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到 map 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"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM