使用KEDA对接Azure Event Hub报错:未提供存储连接字符串
问题原因分析
你遇到的错误核心是对connectionFromEnv和storageConnectionFromEnv字段的作用理解错误:
- 这两个字段的作用是引用Kubernetes Pod中已存在的环境变量名称,而非直接填写连接字符串内容。
- 你当前把完整的连接字符串直接写在这两个字段中,KEDA会尝试查找名为该长字符串的环境变量,自然找不到,因此抛出“no storage connection string given”的警告。
解决方案
推荐使用Kubernetes Secret存储敏感连接信息,再通过环境变量引用,具体步骤如下:
1. 创建存储连接字符串的Secret
首先将Event Hub和存储账户的连接字符串进行Base64编码(避免明文泄露),然后创建Secret:
apiVersion: v1 kind: Secret metadata: name: eventhub-secrets namespace: default type: Opaque data: # 替换为Base64编码后的Event Hub连接字符串 EVENTHUB_CONN: <base64-encoded-eventhub-connection-string> # 替换为Base64编码后的存储账户连接字符串 STORAGE_CONN: <base64-encoded-storage-connection-string>
编码方法:在终端执行
echo -n "你的原始连接字符串" | base64即可得到编码后的值。
2. 修改ScaledJob配置
调整触发器的metadata字段为环境变量名称,并在Job模板中添加从Secret读取环境变量的配置:
apiVersion: keda.sh/v1alpha1 kind: ScaledJob metadata: name: pi-az-consumer namespace: default spec: jobTargetRef: template: spec: containers: - name: pi image: perl:5.34.0 command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"] env: # 从Secret读取Event Hub连接字符串到环境变量 - name: EVENTHUB_CONN valueFrom: secretKeyRef: name: eventhub-secrets key: EVENTHUB_CONN # 从Secret读取存储连接字符串到环境变量 - name: STORAGE_CONN valueFrom: secretKeyRef: name: eventhub-secrets key: STORAGE_CONN restartPolicy: Never backoffLimit: 4 pollingInterval: 10 maxReplicaCount: 30 successfulJobsHistoryLimit: 3 failedJobsHistoryLimit: 2 scalingStrategy: strategy: "custom" customScalingQueueLengthDeduction: 1 customScalingRunningJobPercentage: "0.5" triggers: - type: azure-eventhub metadata: # 引用环境变量名称,而非直接写连接字符串 connectionFromEnv: "EVENTHUB_CONN" storageConnectionFromEnv: "STORAGE_CONN" consumerGroup: $Default unprocessedEventThreshold: '64' activationUnprocessedEventThreshold: '10' blobContainer: '{...}'
可选(不推荐):直接填写连接字符串
如果只是测试场景,也可以直接使用connection和storageConnection字段明文填写连接字符串(生产环境禁止,存在泄露风险):
triggers: - type: azure-eventhub metadata: connection: "Endpoint=sb://{...}.servicebus.windows.net/;SharedAccessKeyName={...};SharedAccessKey={...};EntityPath={...}" storageConnection: "DefaultEndpointsProtocol=https;AccountName={...};AccountKey={...};EndpointSuffix=core.windows.net" consumerGroup: $Default unprocessedEventThreshold: '64' activationUnprocessedEventThreshold: '10' blobContainer: '{...}'
内容的提问来源于stack exchange,提问作者smj16
相关产品推荐
相关产品推荐

