模拟 DNS 故障
DNSChaos 用于模拟错误的 DNS 响应。例如,DNSChaos 可以在接收到 DNS 请求时返回错误,或随机的 IP 地址。
部署 Chaos DNS server
执行以下命令,检查 DNS 服务的状态是否正常:
kubectl get pods -n chaos-mesh -l app.kubernetes.io/component=chaos-dns-server
请确保 Pod 的状态为 Running。
注意事项
- 
目前 DNSChaos 只支持 DNS 记录类型 A和AAAA。
- 
Chaos DNS 服务运行带有 k8s_dns_chaos 插件的 CoreDNS。如果 Kubernetes 集群本身的 CoreDNS 服务包含一些特殊配置,请执行以下命令编辑 configMap dns-server-config,使 Chaos DNS 服务配置与 K8s CoreDNS 服务配置一致:kubectl edit configmap dns-server-config -n chaos-mesh
使用 kbcli 模拟故障注入
DNS 故障可分为 random 和 error 两种类型。你可以选择其中一种进行 DNS 故障注入。
--pattern 用于选择与故障匹配的域名模板,是必需的,支持使用占位符 ? 和通配符 *。
DNS random
执行以下命令,向默认命名空间中的所有 Pod 注入 DNS 故障。当发送 DNS 请求到指定的域名时,将返回一个随机的 IP 地址。
kbcli fault network dns random --patterns=google.com --duration=1m
DNS error
执行以下命令,向默认命名空间中的所有 Pod 注入 DNS 故障。当发送 DNS 请求到指定的域名时,将返回一个错误。
kbcli fault network dns error --patterns=google.com --duration=1m
使用 YAML 文件模拟故障注入
本节介绍如何使用 YAML 文件模拟故障注入。你可以在上述 kbcli 命令的末尾添加 --dry-run 命令来查看 YAML 文件,还可以参考 Chaos Mesh 官方文档获取更详细的信息。
DNS random 示例
- 
将实验配置写入到 dns-random.yaml文件中。在下例中,Chaos Mesh 向默认命名空间中的所有 Pod 注入 DNS 故障。当发送 DNS 请求到指定的域名时,将返回一个 IP 地址。 apiVersion: chaos-mesh.org/v1alpha1
 kind: DNSChaos
 metadata:
 creationTimestamp: null
 generateName: dns-chaos-
 namespace: default
 spec:
 action: random
 duration: 1m
 mode: all
 patterns:
 - google.com
 selector:
 namespaces:
 - default
- 
使用 kubectl创建实验。kubectl apply -f ./dns-random.yaml
DNS error 示例
- 
将实验配置写入到 dns-error.yaml文件中。在下例中,Chaos Mesh 向默认命名空间中的所有 Pod 注入 DNS 故障。当发送 DNS 请求到指定的域名时,将返回一个错误。 apiVersion: chaos-mesh.org/v1alpha1
 kind: DNSChaos
 metadata:
 creationTimestamp: null
 generateName: dns-chaos-
 namespace: default
 spec:
 action: error
 duration: 1m
 mode: all
 patterns:
 - google.com
 selector:
 namespaces:
 - default
- 
使用 kubectl创建实验。kubectl apply -f ./network-partition.yaml
字段说明
| 参数 | 类型 | 说明 | 默认值 | 是否必填 | 示例 | 
|---|---|---|---|---|---|
| action | string | 定义 DNS 故障的行为,可选值为 random或error。当值为random时, DNS 服务返回随机的 IP 地址;当值为error时 DNS 服务返回错误。 | 无 | 是 | random或error | 
| patterns | string array | 选择匹配故障行为的域名模版, 支持占位符 ?以及通配符*。 | [] | 否 | google.com、chaos-mesh.org、github.com | 
| mode | string | 指定实验的运行方式,可选项包括: one(表示随机选出一个符合条件的 Pod)、all(表示选出所有符合条件的 Pod)、fixed(表示选出指定数量且符合条件的 Pod)、fixed-percent(表示选出占符合条件的 Pod 中指定百分比的 Pod)和random-max-percent(表示选出占符合条件的 Pod 中不超过指定百分比的 Pod)。 | 无 | 是 | one | 
| value | string | 取决于 mode的配置,为mode提供对应的参数。例如,当你将mode配置为fixed-percent时,value用于指定 Pod 的百分比。 | 无 | 否 | 1 | 
| selector | struct | 指定目标 Pod。 | 无 | 是 |