Istio 服务网格加载项 MeshConfig 故障排除

本文介绍如何排查使用 MeshConfig 配置 istio 服务网格加载项时出现的问题,Microsoft Azure Kubernetes 服务 (AKS)。

共享 ConfigMap 配置

Istio 加载项 MeshConfig 使你能够配置某些网格范围的设置。 为此,请在命名空间中创建 aks-istio-system 本地 ConfigMap。 然后,Istio 控制平面将此 ConfigMap 与默认 ConfigMap 合并。 (如果设置之间存在冲突,则默认设置优先。此方法称为共享 ConfigMap 配置。

创建在命名空间中aks-istio-system命名istio-shared-configmap-<asm-revision>的 ConfigMap。 例如,如果使用修订 asm-1-18,则应将 ConfigMap istio-shared-configmap-asm-1-18命名为 。 然后,在节的data字段中提供网格配置mesh,如以下 ConfigMap YAML 文件中所示:

apiVersion: v1
kind: ConfigMap
metadata:
  name: istio-shared-configmap-asm-1-18
  namespace: aks-istio-system
data:
  mesh: |-
    accessLogFile: /dev/stdout
    defaultConfig:
      holdApplicationUntilProxyStarts: true

字段中的值 defaultConfig 是 Envoy sidecar 的网格范围设置。

Canary 升级

在开始 Canary 升级之前,请按照 网格配置和升级指南 为命名空间中的 aks-istio-system 新控制平面修订版创建第二个共享 ConfigMap。

如果在开始升级之前未创建新的 ConfigMap,则共享 ConfigMap 配置的任何功能都无法访问。 若要解决此问题,请为相应的修订创建缺少的 ConfigMap,然后从以前的共享 ConfigMap 复制相关字段。

有关详细信息,请参阅升级基于 Istio 的服务网格加载项,了解 Azure Kubernetes 服务Istio 服务网格加载项次要修订升级故障排除

允许、支持和不允许的值

Istio 加载项将 MeshConfig 字段指定为允许字段,但supportedunsupported允许,以及disallowed。 若要了解加载项的允许和支持的 MeshConfig 字段,并查看不同支持层的概述,请参阅为 Azure Kubernetes 服务 配置基于 Istio 的服务网格加载项。 如果上游 Istio 文档中提到的字段未显示在加载项的允许列表中,则不允许这些字段。

故障排除清单

步骤 1:确保编辑正确的 ConfigMap

  • 请确保正在配置共享的 ConfigMap(例如 istio-shared-configmap-asm-1-17),而不编辑默认的 ConfigMap(例如, istio-asm-1-17)。
  • 确保共享的 ConfigMap 指向其标题中的正确修订。

步骤 2:从共享 ConfigMap 中的 MeshConfig 定义中删除选项卡缩进

在共享 ConfigMap(下 data.mesh)的 MeshConfig 定义中,请确保使用空格而不是选项卡。 删除找到的任何制表符。

步骤 3:确保 MeshConfig 字段有效

如果字段无法识别或未包含在 MeshConfig 允许列表中,则拒绝对 MeshConfig 的更新。 检查是否允许所需的 MeshConfig 字段,并确保字段拼写正确。

步骤 4:避免 CoreDNS 重载

与 CoreDNS 重载相关的问题可能需要更改某些 Istio DNS 设置,例如 dnsRefreshRate Istio MeshConfig 定义中的字段。

步骤 5:修复内存消耗问题

如果在 Envoy 中遇到高内存消耗,请仔细检查 Envoy 设置以获取 统计信息数据收集。 如果要通过 MeshConfig 自定义 Istio 指标,请记住,某些指标可能具有较高的基数,因此会导致内存占用量较高。

建议使用 discoverySelectors MeshConfig 定义中的字段来减少 Istiod 和 Envoy 的内存消耗。 有关详细信息,请参阅 常规 Istio 服务网格加载项故障排除

步骤 6:释放 CPU 核心

如果所有 CPU 核心都正在使用中, concurrency 则 MeshConfig 定义中的字段可能配置错误。 如果此字段设置为零,Envoy 将使用所有 CPU 核心。 在这种情况下,请从 MeshConfig 定义中删除 concurrencyconcurrency如果未配置该字段,则 CPU 请求和限制将确定改用的 CPU 核心数。

步骤 7:修复 Pod 和侧车比赛条件

如果应用程序 Pod 在 Envoy sidecar 启动之前启动,则应用程序可能会无响应,或者可能会重启。 有关如何避免此问题的说明,请参阅 Pod 或容器以网络问题开头(如果 istio-proxy 尚未准备就绪)。 具体而言,可以设置 holdApplicationUntilProxyStarts MeshConfig 字段 defaultConfigtrue 以帮助防止这些争用条件。

参考

第三方信息免责声明

本文中提到的第三方产品由 Microsoft 以外的其他公司提供。 Microsoft 对这些产品的性能和可靠性不作任何明示或默示担保。

第三方联系人免责声明

Microsoft 会提供第三方联系信息来帮助你查找有关本主题的其他信息。 此联系信息可能会更改,恕不另行通知。 Microsoft 不保证第三方联系信息的准确性。

联系我们寻求帮助

如果你有任何疑问或需要帮助,请创建支持请求联系 Azure 社区支持。 你还可以将产品反馈提交到 Azure 反馈社区