已配置Azure AD认证与正确权限,但KEDA Azure Service Bus ScaledObject仍提示“no connection setting given”失败
我之前也踩过一模一样的坑!从你的描述来看,整体配置方向是对的,但大概率是Secret键名拼写错误或者参数映射没对应上,咱们一步步排查:
先揪出最容易犯的手误:Secret里的键名拼写
你提到Secret里的键是clinetId——注意!这里少了一个'e',正确的拼写应该是clientId!KEDA在读取Azure AD认证参数时,严格要求使用clientId、clientSecret、tenantId这三个标准键名,拼写错误会直接导致KEDA找不到有效连接配置,触发“no connection setting given”的错误。验证TriggerAuthentication的映射是否完全匹配
要确保TriggerAuthentication的secretTargetRef里,每个参数的key和Secret里的键名完全一致,parameter对应KEDA期望的参数名。举个正确的配置示例:apiVersion: keda.sh/v1alpha1 kind: TriggerAuthentication metadata: name: keda-trigger-auth-azure-servicebus spec: secretTargetRef: - parameter: clientId name: keda-sp-connection-auth-secret key: clientId # 这里必须和Secret里的键名完全一致 - parameter: clientSecret name: keda-sp-connection-auth-secret key: clientSecret - parameter: tenantId name: keda-sp-connection-auth-secret key: tenantId同时,ScaledObject的trigger部分要正确关联这个认证对象,还要明确指定Service Bus的命名空间:
triggers: - type: azure-servicebus metadata: queueName: your-target-queue namespace: your-servicebus-namespace-name messageCount: "10" # 替换成你的扩缩容阈值 authenticationRef: name: keda-trigger-auth-azure-servicebus authenticationMode: azureActiveDirectory确认SecretProviderClass的同步是否生效
你可以在OpenShift里执行以下命令,检查Secret的实际内容:oc get secret keda-sp-connection-auth-secret -o yaml解码
data字段里的内容,确认clientId(不是clinetId)、clientSecret、tenantId这三个键都存在且值正确。如果Secret里还是错误的键名,要修改SecretProviderClass的secretObjects配置,把Key Vault的密钥映射为正确的键名:apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: your-spc-name spec: provider: azure secretObjects: - data: - key: clientId # 指定Secret里的正确键名 objectName: kv-client-id # 替换成Key Vault中存储clientId的密钥名称 - key: clientSecret objectName: kv-client-secret - key: tenantId objectName: kv-tenant-id secretName: keda-sp-connection-auth-secret type: Opaque最后检查KEDA版本兼容性
较旧的KEDA版本(比如v2.7及以下)对Azure Service Bus的AD认证支持有一些小问题,建议确保你的KEDA版本在v2.8以上。可以用这个命令查看版本:oc get deployment keda-operator -n keda -o jsonpath='{.spec.template.spec.containers[0].image}' | cut -d: -f2
一般来说,修正clinetId到clientId的拼写错误后,这个问题就能解决。如果还是不行,再依次排查映射配置和同步状态就好。
内容来源于stack exchange

