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 字段指定为允许字段,但supported
unsupported
允许,以及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 定义中删除 concurrency
。 concurrency
如果未配置该字段,则 CPU 请求和限制将确定改用的 CPU 核心数。
步骤 7:修复 Pod 和侧车比赛条件
如果应用程序 Pod 在 Envoy sidecar 启动之前启动,则应用程序可能会无响应,或者可能会重启。 有关如何避免此问题的说明,请参阅 Pod 或容器以网络问题开头(如果 istio-proxy 尚未准备就绪)。 具体而言,可以设置 holdApplicationUntilProxyStarts
MeshConfig 字段 defaultConfig
, true
以帮助防止这些争用条件。
参考
第三方信息免责声明
本文中提到的第三方产品由 Microsoft 以外的其他公司提供。 Microsoft 对这些产品的性能和可靠性不作任何明示或默示担保。
第三方联系人免责声明
Microsoft 会提供第三方联系信息来帮助你查找有关本主题的其他信息。 此联系信息可能会更改,恕不另行通知。 Microsoft 不保证第三方联系信息的准确性。
联系我们寻求帮助
如果你有任何疑问或需要帮助,请创建支持请求或联系 Azure 社区支持。 你还可以将产品反馈提交到 Azure 反馈社区。