istio - 使用 istio 和 envoy 过滤器进行 redis 故障注入
问题描述
我正在尝试使用 istio 向 redis 实例(不在集群中)注入 2s 延迟。因此,首先我创建了一个ExternalName
k8s 服务以访问外部 redis,以便 istio 了解该服务。这行得通。但是,当我创建EnvoyFilter
添加故障时,我看不到同一命名空间中的 pod 的redis_proxy
过滤器。istioctl pc listeners <pod-name> -o json
(也没有引入延迟)
apiVersion: v1
kind: Namespace
metadata:
name: chaos
labels:
istio-injection: enabled
---
apiVersion: v1
kind: Service
metadata:
name: redis-proxy
namespace: chaos
spec:
type: ExternalName
externalName: redis-external.bla
ports:
- name: tcp
protocol: TCP
port: 6379
---
apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
name: redis-proxy-filter
namespace: chaos
spec:
configPatches:
- applyTo: NETWORK_FILTER
match:
listener:
portNumber: 6379
filterChain:
filter:
name: "envoy.filters.network.redis_proxy"
patch:
operation: MERGE
value:
name: "envoy.filters.network.redis_proxy"
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.network.redis_proxy.v3.RedisProxy
faults:
- fault_type: DELAY
fault_enabled:
default_value:
numerator: 100
denominator: HUNDRED
delay: 2s
有人可以给出一个想法吗?谢谢。
解决方案
我在本地 istio 1.8.2 中尝试了您的 yaml。以下是一些可能对您有所帮助的更改
在 istiod env var 中设置 PILOT_ENABLE_REDIS_FILTER。否则,过滤器名称将为“name”:“envoy.filters.network.tcp_proxy”
添加匹配上下文
match: context: SIDECAR_OUTBOUND
使用redis协议
ports: - name: redis-proxy port: 6379 appProtocol: redis
我可以看到以下内容
% istioctl pc listener nginx.chaos --port 6379 -o json
[
{
"name": "0.0.0.0_6379",
"address": {
"socketAddress": {
"address": "0.0.0.0",
"portValue": 6379
}
},
"filterChains": [
{
"filters": [
{
"name": "envoy.filters.network.redis_proxy",
"typedConfig": {
"@type": "type.googleapis.com/envoy.extensions.filters.network.redis_proxy.v3.RedisProxy",
"statPrefix": "outbound|6379||redis-proxy.chaos.svc.cluster.local",
"settings": {
"opTimeout": "5s"
},
"latencyInMicros": true,
"prefixRoutes": {
"catchAllRoute": {
"cluster": "outbound|6379||redis-proxy.chaos.svc.cluster.local"
}
},
"faults": [
{
"faultEnabled": {
"defaultValue": {
"numerator": 100
}
},
"delay": "2s"
}
]
}
}
]
}
],
"deprecatedV1": {
"bindToPort": false
},
"trafficDirection": "OUTBOUND"
}
]
推荐阅读
- webpack-5 - 无法使用 Single-SPA Angular 11 应用程序配置 webpack 5
- scala - Convert one case class to another by using selected element
- javascript - 使用 API 的数组缓冲区响应生成 PDF 文档的替代方法
- kotlin - 如何在 rxbinding 中的微调器中设置字符串数组
- javascript - 无法从夹具文件夹中导入具有简单变量的文件
- python - 使用 Pandas 加速 csv 数据的 OHLC 计算
- java - Optaplanner 和数据库
- logging - ColdFusion 目录观察程序日志问题
- ocaml - 如何将 OCaml 库引用添加到原因代码文件?
- r - 如何运行具有大量自变量的 Beta 回归?