为什么访问 File Storage for VPC 时会出现“MetadataServiceNotEnabled”错误?

虚拟私有云

如果您在使用 File Storage for VPC 并启用传输中加密(EIT)时,Pod或PVC出现 MetadataServiceNotEnabled 错误,请参考本主题来排查并解决该问题。

当您在 File Storage for VPC 中使用传输中加密(EIT)时,您的Pod或PVC会因 MetadataServiceNotEnabled 错误而失败。

您会在 Pod 事件或 describe 命令的输出中看到类似以下示例的错误消息:

Code: MetadataServiceNotEnabled,
Description: Failed to mount target.,
Action: Metadata service might not be enabled for worker node.
  Make sure to use IKS>=1.30 or ROKS>=4.16 cluster.

此错误表示 EIT 挂载过程尝试访问位于 169.254.169.254 的实例元数据服务,但未收到任何响应。 有两个独立的根本原因——请同时检查这两个原因。

解决问题

请检查以下根本原因。

根本原因 A — 集群版本过旧

EIT 需要 ROKS 4.16 或更高版本。 在较旧的集群上,工作负载无法访问元数据服务端点。

请检查当前集群的版本,以确认您的集群是否满足最低要求。 输出显示 Pendingnormal 的状态,以及 Kubernetes 的版本。

ibmcloud ks cluster get --cluster CLUSTER_ID | grep "Version"

解决方案: 将集群升级至 ROKS 4.16 版或更高版本。

根本原因 B —“默认安全”集群缺少元数据出站规则

对于“默认安全”集群,除非在 kube-<clusterID> 安全组中明确添加了出站规则,否则发往 169.254.169.254 的出站流量将被阻止。 如果没有这条规则,即使在受支持的集群版本上,EIT 流程也无法访问元数据服务。

对于版本为 4.18 及更高版本的ROKS集群,该规则会自动添加。 对于较旧的集群版本,请手动添加该规则。

  1. 检查出站规则是否已存在。 如果该命令返回的行中包含 169.254.169.254,则说明该规则存在,因此这不是问题原因。

    ibmcloud is sg kube-CLUSTER_ID | grep 169.254.169.254
    
  2. 如果该规则不存在,请添加它。

    ibmcloud is sg-rulec kube-CLUSTER_ID outbound \
      --protocol all \
      --remote 169.254.169.254
    

    或者,在 IBM Cloud 用户界面中的 “VPC基础设施”>“安全组”>“kube-<clusterID>”>“出站规则”下添加一条规则,并设置以下值:

    元数据服务访问的出站规则值
    字段
    协议 任意
    源类型 任意
    0.0.0.0/0
    目标 169.254.169.254
  3. 添加规则后,请重试出现故障的 Pod。 无需重启节点。

如果完成这两项检查后问题仍然存在,请通过 提交支持工单 联系 IBM Cloud 容器存储团队。