[zh] improve validation wasm-pull-policy envoy-stats (#13227)

Signed-off-by: xin.li <xin.li@daocloud.io>
This commit is contained in:
my-git9 2023-05-23 09:21:07 +08:00 committed by GitHub
parent 578711163e
commit 7614bd2d1e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 68 additions and 35 deletions

View File

@ -13,17 +13,20 @@ test: no
## 看似有效的配置不生效 {#valid-configuration-is-rejected}
使用 [istioctl validate -f](/zh/docs/reference/commands/istioctl/#istioctl-validate) 以及 [istioctl analyze](/zh/docs/reference/commands/istioctl/#istioctl-analyze) 来获取更多为什么配置不生效的信息。使用和控制面版本相似的 _istioctl_ CLI 。
使用 [istioctl validate -f](/zh/docs/reference/commands/istioctl/#istioctl-validate)
以及 [istioctl analyze](/zh/docs/reference/commands/istioctl/#istioctl-analyze)
来获取更多为什么配置不生效的信息。使用和控制面版本相似的 **istioctl** CLI。
最常见的配置问题是关于 YAML 文件空格缩进以及数组符号 (`-`) 的错误。
最常见的配置问题是关于 YAML 文件空格缩进以及数组符号`-`的错误。
手动验证您的配置是否正确,当有必要的时候请参照 [Istio API 文档](/zh/docs/reference/config)
手动验证您的配置是否正确,当有必要的时候请参照 [Istio API 文档](/zh/docs/reference/config)。
## 接受无效配置 {#invalid-configuration-is-accepted}
验证存在正确的名为 `istio-validator-` 且后跟 `<revision>-``validatingwebhookconfiguration`
如果不是默认的修订版则后跟 Istio 系统命名空间(例如 `istio-validator-myrev-istio-system`)。
有效配置的 `apiVersion`、`apiGroup` 和 `resource` 应列举在 `validatingwebhookconfiguration``webhooks` 部分。
有效配置的 `apiVersion`、`apiGroup` 和 `resource` 应列举在 `validatingwebhookconfiguration`
`webhooks` 部分。
{{< text bash yaml >}}
$ kubectl get validatingwebhookconfiguration istio-validator-istio-system -o yaml
@ -47,11 +50,11 @@ webhooks:
- v1beta1
- v1
clientConfig:
# caBundle should be non-empty. This is periodically (re)patched
# every second by the webhook service using the ca-cert
# from the mounted service account secret.
# caBundle 应该是非空的。webhook
# 服务使用已安装服务帐户密码中的 ca-cert
# 每隔一秒定期(重新)修订一次。
caBundle: LS0t...
# service corresponds to the Kubernetes service that implements the webhook
# service 对应实现 webhook 的 Kubernetes 服务
service:
name: istiod
namespace: istio-system
@ -85,15 +88,20 @@ webhooks:
timeoutSeconds: 10
{{< /text >}}
如果 `istio-validator-` webhook 不存在,那就验证 `global.configValidation` 安装选项是否被设为 `true`
如果 `istio-validator-` webhook 不存在,那就验证 `global.configValidation`
安装选项是否被设为 `true`
校验配置如果失败会自动关闭。如果配置存在且作用范围正确webhook 将被调用。
在资源创建或更新的时候,如果 `caBundle` 缺失或证书错误,亦或网络连接问题都将会导致报错。
如果你确信你的配置没有问题webhook 没有被调用却看不到任何错误信息,你的集群配置肯定有问题。
如果您确信您的配置没有问题webhook 没有被调用却看不到任何错误信息,您的集群配置肯定有问题。
## 创建配置失败报错x509 certificate errors {#x509-certificate-errors}
`x509: certificate signed by unknown authority` 错误通常和 webhook 配置中的空 `caBundle` 有关,所以要确认它不为空 (请查阅[验证 webhook 配置](#invalid-configuration-is-accepted))。Istio 有意识地使用 `istio-validation` `configmap` 和根证书,调整了 webhook 配置。
`x509: certificate signed by unknown authority` 错误通常和 webhook
配置中的空 `caBundle` 有关,所以要确认它不为空
(请查阅[验证 webhook 配置](#invalid-configuration-is-accepted))。
Istio 有意识地使用 `istio-validation` `configmap` 和根证书,调整了
webhook 配置。
1. 验证 `istio-pilot` Pod 是否在运行:
@ -131,7 +139,9 @@ webhooks:
## 创建配置报错:`no such hosts` 或 `no endpoints available` {#creating-configuration-fail}
校验失败自动关闭。如果 `istiod` Pod 没有准备就绪,配置是不会被创建或者更新的,在下面的例子里您可以看到关于 `no endpoints available` 的错误信息。
校验失败自动关闭。如果 `istiod` Pod 没有准备就绪,
配置是不会被创建或者更新的,在下面的例子里您可以看到关于
`no endpoints available` 的错误信息。
检查 `istiod` Pod 是否运行,并且检查 endpoint 是否准备就绪。
@ -147,7 +157,8 @@ NAME ENDPOINTS AGE
istiod 10.48.6.108:15014,10.48.6.108:443 3d
{{< /text >}}
如果 Pod 或者 endpoint 尚未准备就绪,请检查 Pod 日志和任何导致 webhook Pod 无法启动的异常状态以及服务流量。
如果 Pod 或者 endpoint 尚未准备就绪,请检查 Pod 日志和任何导致
webhook Pod 无法启动的异常状态以及服务流量。
{{< text bash >}}
$ for pod in $(kubectl -n istio-system get pod -lapp=istiod -o jsonpath='{.items[*].metadata.name}'); do \

View File

@ -12,7 +12,8 @@ status: Alpha
[WasmPlugin API](/zh/docs/reference/config/proxy_extensions/wasm-plugin)
提供了一种[将 Wasm 模块分发给](/zh/docs/tasks/extensibility/wasm-module-distribution)代理的方法。
由于每个代理将从远程镜像仓库或 HTTP 服务器中拉取 Wasm 模块,所以了解 Istio 如何选择拉取模块的机制在可用性和性能方面都很重要。
由于每个代理将从远程镜像仓库或 HTTP 服务器中拉取 Wasm 模块,所以了解
Istio 如何选择拉取模块的机制在可用性和性能方面都很重要。
## 镜像拉取策略和异常 {#image-pull-policy-and-exceptions}
@ -20,27 +21,37 @@ status: Alpha
[WasmPlugin](/zh/docs/reference/config/proxy_extensions/wasm-plugin/#WasmPlugin)
也有`IfNotPresent` 和 `Always` 的概念,这分别意味着“使用缓存模块”和“不管缓存而始终拉取模块”。
用户使用 `ImagePullPolicy` 字段显式配置 Wasm 模块检索的行为。但是,在以下场景中 Istio 可以覆盖用户提供的行为:
用户使用 `ImagePullPolicy` 字段显式配置 Wasm 模块检索的行为。
但是,在以下场景中 Istio 可以覆盖用户提供的行为:
1. 如果用户在 [WasmPlugin](/zh/docs/reference/config/proxy_extensions/wasm-plugin/#WasmPlugin) 中设置 `sha256`,则不管 `ImagePullPolicy`,使用 `IfNotPresent` 策略。
1. 如果 `url` 字段指向一个 OCI 镜像且该字段有一个摘要后缀(例如 `gcr.io/foo/bar@sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef`),则使用 `IfNotPresent` 策略。
1. 如果用户在 [WasmPlugin](/zh/docs/reference/config/proxy_extensions/wasm-plugin/#WasmPlugin)
中设置 `sha256`,则不管 `ImagePullPolicy`使用 `IfNotPresent` 策略。
如果没有为某资源指定 `ImagePullPolicy`,则 Istio 默认为 `IfNotPresent` 行为。
但是如果提供的 `url` 字段指定一个标记值为 `latest` 的 OCI 镜像,则 Istio 将使用 `Always` 行为。
1. 如果 `url` 字段指向一个 OCI 镜像且该字段有一个摘要后缀(例如
`gcr.io/foo/bar@sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef`
则使用 `IfNotPresent` 策略。
如果没有为某资源指定 `ImagePullPolicy`,则 Istio 默认为 `IfNotPresent`
行为。但是如果提供的 `url` 字段指定一个标记值为 `latest` 的 OCI 镜像,则
Istio 将使用 `Always` 行为。
## 缓存模块的生命周期 {#lifecycle-of-cached-modules}
每个代理,无论是 Sidecar 代理还是网关,都会缓存 Wasm 模块。因此,缓存 Wasm 模块的生存期受相应 Pod 的生存期限制。
此外,还有一种过期机制可以将代理内存占用量保持在最小:如果在某个时间段内未使用缓存的 Wasm 模块,则会清除该模块。
每个代理,无论是 Sidecar 代理还是网关,都会缓存 Wasm 模块。因此,缓存
Wasm 模块的生存期受相应 Pod 的生存期限制。此外,还有一种过期机制可以将代理内存占用量保持在最小:
如果在某个时间段内未使用缓存的 Wasm 模块,则会清除该模块。
这个过期行为可以通过 [pilot-proxy](/zh/docs/reference/commands/pilot-agent/#envvars)
的环境变量 `WASM_MODULE_EXPIRY``WASM_PURGE_INTERVAL` 进行配置,具体包括过期的持续时间和检查过期的时间间隔。
的环境变量 `WASM_MODULE_EXPIRY``WASM_PURGE_INTERVAL` 进行配置,
具体包括过期的持续时间和检查过期的时间间隔。
## “始终”的含义 {#the-meaning-of-always}
在 Kubernetes 中,`ImagePullPolicy: Always` 意味着每次创建 Pod 时都会直接从其镜像源中拉取镜像。
每次新的 Pod 启动时Kubernetes 就会重新拉取新的镜像。
在 Kubernetes 中,`ImagePullPolicy: Always` 意味着每次创建
Pod 时都会直接从其镜像源中拉取镜像。每次新的 Pod 启动时Kubernetes
就会重新拉取新的镜像。
对于 `WasmPlugin``ImagePullPolicy: Always` 意味着每次创建或更改相应的 `WasmPlugin` Kubernetes 资源时Istio 将直接从其镜像源中拉取镜像。
请注意,当使用 `Always` 策略时,`spec` 和 `metadata` 中的变更都会触发 Wasm 模块的拉取。
对于 `WasmPlugin``ImagePullPolicy: Always` 意味着每次创建或更改相应的
`WasmPlugin` Kubernetes 资源时Istio 将直接从其镜像源中拉取镜像。请注意,当使用
`Always` 策略时,`spec` 和 `metadata` 中的变更都会触发 Wasm 模块的拉取。
这可能意味着在 Pod 的生命周期和单个代理的生命周期内,会多次从镜像源中拉取镜像。

View File

@ -12,7 +12,8 @@ test: yes
Envoy 代理收集了关于网络流量的详细统计信息。
Envoy 的统计信息只覆盖了特定 Envoy 实例的流量。参考[可观测性](/zh/docs/tasks/observability/)
了解关于服务级别的 Istio 遥测方面的内容。这些由 Envoy 代理产生的统计数据记录能够提供更多关于 Pod 实例的具体信息。
了解关于服务级别的 Istio 遥测方面的内容。这些由 Envoy 代理产生的统计数据记录能够提供更多关
Pod 实例的具体信息。
查看某个 Pod 的统计信息:
@ -20,7 +21,8 @@ Envoy 的统计信息只覆盖了特定 Envoy 实例的流量。参考[可观测
$ kubectl exec "$POD" -c istio-proxy -- pilot-agent request GET stats
{{< /text >}}
Envoy 会生成与 Pod 行为相关的统计数据,并通过代理函数来限定统计范围。参考示例包括:
Envoy 会生成与 Pod 行为相关的统计数据,并通过代理函数来限定统计范围。
参考示例包括:
- [上游连接](https://www.envoyproxy.io/docs/envoy/latest/configuration/upstream/cluster_manager/cluster_stats)
- [监听器](https://www.envoyproxy.io/docs/envoy/latest/configuration/listeners/stats)
@ -28,7 +30,8 @@ Envoy 会生成与 Pod 行为相关的统计数据,并通过代理函数来限
- [TCP 代理](https://www.envoyproxy.io/docs/envoy/latest/configuration/listeners/network_filters/tcp_proxy_filter#statistics)
- [路由](https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_filters/router_filter.html?highlight=vhost#statistics)
Istio 默认配置下 Envoy 只会记录最小化的统计信息,以减少代理服务器的整体 CPU 和内存占用情况。缺省的关键词集合有:
Istio 默认配置下 Envoy 只会记录最小化的统计信息,
以减少代理服务器的整体 CPU 和内存占用情况。缺省的关键词集合有:
- `cluster_manager`
- `listener_manager`
@ -36,16 +39,21 @@ Istio 默认配置下 Envoy 只会记录最小化的统计信息,以减少代
- `cluster.xds-grpc`
要查看关于统计数据收集的 Envoy 配置,可以使用
[`istioctl proxy-config bootstrap`](/zh/docs/reference/commands/istioctl/#istioctl-proxy-config-bootstrap) 命令,还可以参考
[深入研究 Envoy 配置](/zh/docs/ops/diagnostic-tools/proxy-cmd/#deep-dive-into-envoy-configuration)。
[`istioctl proxy-config bootstrap`](/zh/docs/reference/commands/istioctl/#istioctl-proxy-config-bootstrap)
命令,还可以参考[深入研究 Envoy 配置](/zh/docs/ops/diagnostic-tools/proxy-cmd/#deep-dive-into-envoy-configuration)。
Envoy 只收集在 `stats_matcher` JSON 字段中能匹配上 `inclusion_list` 的统计数据。
{{< tip >}}
注意Envoy 统计数据的名称由组成 Envoy 的不同配置而导致其拥有不同的名称。因此,由 Istio 管理的 Envoy 的统计数据暴露的名称会受到 Istio 配置行为的影响。
如果您基于 Envoy 建立或者维护仪表盘或者告警,**强烈建议**您在**升级 Istio 之前**先在[金丝雀环境](/zh/docs/setup/upgrade/canary/index.md)检查统计信息。
注意Envoy 统计数据的名称由组成 Envoy 的不同配置而导致其拥有不同的名称。因此,
由 Istio 管理的 Envoy 的统计数据暴露的名称会受到 Istio 配置行为的影响。
如果您基于 Envoy 建立或者维护仪表盘或者告警,**强烈建议**您在**升级 Istio
之前**先在[金丝雀环境](/zh/docs/setup/upgrade/canary/index.md)检查统计信息。
{{< /tip >}}
想让 Istio 代理能够记录更多的统计信息,您可以在您的网格配置中添加 [`ProxyConfig.ProxyStatsMatcher`](/zh/docs/reference/config/istio.mesh.v1alpha1/#ProxyStatsMatcher)。例如,为了全局启用断路器、请求重试、上游连接和请求超时的统计数据,您可以指定如下的数据统计的匹配配置:
想让 Istio 代理能够记录更多的统计信息,您可以在您的网格配置中添加
[`ProxyConfig.ProxyStatsMatcher`](/zh/docs/reference/config/istio.mesh.v1alpha1/#ProxyStatsMatcher)。
例如,为了全局启用断路器、请求重试、上游连接和请求超时的统计数据,
您可以指定如下的数据统计的匹配配置:
{{< tip >}}
为了能加载数据统计的匹配配置,代理需要重新启动。
@ -83,5 +91,8 @@ metadata:
{{< /text >}}
{{< tip >}}
注意:如果您使用 `sidecar.istio.io/statsInclusionPrefixes`、`sidecar.istio.io/statsInclusionRegexps` 和 `sidecar.istio.io/statsInclusionSuffixes`,考虑需要切换到基于 `ProxyConfig` 配置,因此它提供了一个全局默认并且统一的方法去重载 Gateway 和 Sidecar 代理。
注意:如果您使用 `sidecar.istio.io/statsInclusionPrefixes`
`sidecar.istio.io/statsInclusionRegexps``sidecar.istio.io/statsInclusionSuffixes`
考虑需要切换到基于 `ProxyConfig` 配置,因此它提供了一个全局默认并且统一的方法去重载
Gateway 和 Sidecar 代理。
{{< /tip >}}