连接器状态故障排除

本指南提供全面的信息,帮助您根据连接器的状态条件诊断和解决常见问题。

目录

检查连接器状态

要查看连接器的完整状态信息,包括所有条件,请执行:

kubectl describe connector <connector-name> -n <namespace>

有关更详细的信息,包括完整的状态对象和条件:

kubectl get connector <connector-name> -n <namespace> -o yaml

这些命令将显示所有条件状态,便于识别哪些特定条件出现故障。

故障排除特定条件

Ready = False

这是一个摘要条件,只有在所有其他条件为 True 时才为 True。

故障排除步骤

  1. 检查所有其他条件,以识别哪个特定条件为 False
  2. 根据以下指南集中解决特定的失败条件
  3. 验证连接器规范配置是否正确

ConnectorClassReady = False

指示连接器类不存在或无效。

故障排除步骤

  1. 确认 ConnectorClass 存在:
    kubectl get connectorclass <class-name>
  2. 验证连接器配置是否正确:
    kubectl get connector <connector-name> -n <namespace> -o jsonpath='{.spec.connectorClassName}'
  3. 检查连接器类定义:
    kubectl get connectorclass <class-name> -o yaml

常见原因

  • ConnectorClass 名称拼写错误
  • ConnectorClass 未安装
  • 使用了来自不同命名空间的 ConnectorClass(ConnectorClasses 是集群范围内的)

示例错误

conditions:
  - lastTransitionTime: "2023-05-15T10:25:30Z"
    message: "connectorclass.connectors.alauda.io \"git\" not found"
    reason: ConnectorClassNotFound
    status: "False"
    type: ConnectorClassReady

解决方案: 安装缺失的 ConnectorClass 或更正连接器配置中的类名。

SecretReady = False

指示身份验证密钥存在问题。

故障排除步骤

  1. 确认密钥存在:
    kubectl get secret <secret-name> -n <namespace>
  2. 验证密钥具有正确的身份验证方法类型:
    kubectl get secret <secret-name> -n <namespace> -o jsonpath='{.type}'
  3. 检查密钥数据是否包含所需字段:
    kubectl get secret <secret-name> -n <namespace> -o yaml

常见原因

  • 密钥不存在
  • 密钥在错误的命名空间中
  • 密钥类型错误
  • 密钥缺少所需字段
  • RBAC 阻止访问密钥

示例错误

conditions:
  - lastTransitionTime: "2023-05-15T10:27:15Z"
    message: "secrets \"my-git-creds\" not found"
    reason: SecretNotFound
    status: "False"
    type: SecretReady

解决方案: 创建缺失的密钥或更正连接器配置中的密钥引用。

LivenessReady = False

指示目标服务不可达。

故障排除步骤

  1. 验证连接器的地址是否正确:
    kubectl get connector <connector-name> -n <namespace> -o jsonpath='{.spec.address}'
  2. 测试与目标服务的连通性:
    kubectl run -it --rm --restart=Never curl --image=curlimages/curl -n <namespace> -- curl -v <address>
  3. 检查网络策略:
    kubectl get networkpolicies -n connectors-system

常见原因

  • 目标地址不正确
  • 目标服务已关闭
  • 网络策略阻止访问
  • DNS 解析问题
  • 防火墙阻止连接

示例错误

conditions:
  - lastTransitionTime: "2023-05-15T10:29:00Z"
    message: "Get \"https://github.invalid.com\": dial tcp: lookup github.invalid.com: no such host"
    reason: ConnectionFailed
    status: "False"
    type: LivenessReady

解决方案: 将地址更新为有效且可达的 URL,或修复网络连接问题。

AuthReady = False

指示提供的凭据身份验证失败。

故障排除步骤

  1. 验证密钥中的凭据:
    kubectl get secret <secret-name> -n <namespace> -o jsonpath='{.data.username}' | base64 -d
    kubectl get secret <secret-name> -n <namespace> -o jsonpath='{.data.password}' | base64 -d
  2. 检查身份验证参数是否正确配置:
    kubectl get connector <connector-name> -n <namespace> -o jsonpath='{.spec.auth}'
  3. 手动测试身份验证:
    kubectl run -it --rm --restart=Never curl --image=curlimages/curl -n <namespace> -- \
      curl -v -u <username>:<password> <address>

常见原因

  • 用户名/密码不正确
  • 令牌已过期
  • 权限不足
  • 身份验证类型不匹配
  • 存储库/资源不存在

示例错误

conditions:
  - lastTransitionTime: "2023-05-15T10:32:20Z"
    message: "Authentication failed: status code 401"
    reason: AuthenticationFailed
    status: "False"
    type: AuthReady

解决方案: 在密钥中更新凭据或验证用户对资源拥有适当的权限。

ProxyServiceReady = False

指示代理服务配置存在问题。

故障排除步骤

  1. 检查代理服务是否存在:
    kubectl get service -n connectors-system -l app.kubernetes.io/name=connectors-proxy
  2. 验证代理服务是否具有端点:
    kubectl get endpoints -n connectors-system connectors-proxy-service
  3. 检查代理 Pod 状态:
    kubectl get pods -n connectors-system -l app.kubernetes.io/name=connectors-proxy

常见原因

  • 代理服务未部署
  • 代理 Pod 未运行
  • 服务配置错误
  • 网络策略阻止代理访问
  • 资源限制(CPU/内存)

示例错误

conditions:
  - lastTransitionTime: "2023-05-15T10:35:10Z"
    message: "Service connectors-proxy-service not found in namespace connectors-system"
    reason: ProxyServiceNotFound
    status: "False"
    type: ProxyServiceReady

解决方案: 部署 connectors-proxy 组件或修复服务配置。

高级故障排除

检查组件日志

要进行更深入的故障排除,请检查控制器组件的日志:

# 控制器管理器日志
kubectl logs -n connectors-system -l app.kubernetes.io/name=connectors-controller-manager

# 代理服务日志
kubectl logs -n connectors-system -l app.kubernetes.io/name=connectors-proxy

# CSI 驱动日志
kubectl logs -n connectors-system -l app.kubernetes.io/name=connectors-csi

其他资源