Zum Hauptinhalt springen
Version: Nächste

Netzwerkfehler simulieren

Inoffizielle Beta-Übersetzung

Diese Seite wurde von PageTurner AI übersetzt (Beta). Nicht offiziell vom Projekt unterstützt. Fehler gefunden? Problem melden →

Dieses Dokument beschreibt, wie Sie mit NetworkChaos in Chaos Mesh Netzwerkfehler simulieren können.

Einführung in NetworkChaos

NetworkChaos ist eine Fehlerart in Chaos Mesh. Durch die Erstellung eines NetworkChaos-Experiments können Sie ein Netzwerkfehlerszenario für einen Cluster simulieren. Derzeit unterstützt NetworkChaos folgende Fehlertypen:

  • Partition: Netzwerktrennung und -segmentierung.

  • Net Emulation: Schlechte Netzwerkbedingungen wie hohe Latenz, hohe Paketverlustrate, Paketumordnung usw.

  • Bandwidth: Begrenzung der Kommunikationsbandbreite zwischen Knoten.

Hinweise

Vor dem Erstellen von NetworkChaos-Experimenten stellen Sie bitte Folgendes sicher:

  1. Während der Netzwerkinjektion muss die Verbindung zwischen Controller Manager und Chaos Daemon funktionieren, da der NetworkChaos ansonsten nicht wiederhergestellt werden kann.

  2. Für die Simulation von Net Emulation-Fehlern muss das NET_SCH_NETEM-Modul im Linux-Kernel installiert sein. Bei CentOS können Sie das Modul über das kernel-modules-extra-Paket installieren. Die meisten anderen Linux-Distributionen haben dieses Modul standardmäßig bereits installiert.

Experimente mit Chaos Dashboard erstellen

  1. Öffnen Sie Chaos Dashboard und klicken Sie auf NEW EXPERIMENT, um ein neues Experiment zu erstellen:

    Create Experiment
    Create Experiment

  2. Wählen Sie im Bereich Choose a Target die Option NETWORK ATTACK und ein spezifisches Verhalten wie LOSS. Füllen Sie dann die spezifische Konfiguration aus.

    NetworkChaos Experiments
    NetworkChaos Experiments

    Details zu den Konfigurationsfeldern finden Sie unter Feldbeschreibung.

  3. Geben Sie die Experimentinformationen ein und legen Sie den Experimentumfang sowie die geplante Laufzeit fest.

    Experiment Information
    Experiment Information

  4. Übermitteln Sie die Experimentinformationen.

Experimente mit YAML-Dateien erstellen

Verzögerungsbeispiel

  1. Schreiben Sie die Experimentkonfiguration in die Datei network-delay.yaml, wie unten gezeigt:

    apiVersion: chaos-mesh.org/v1alpha1
    kind: NetworkChaos
    metadata:
    name: delay
    spec:
    action: delay
    mode: one
    selector:
    namespaces:
    - default
    labelSelectors:
    'app': 'web-show'
    delay:
    latency: '10ms'
    correlation: '100'
    jitter: '0ms'

    Diese Konfiguration verursacht eine Latenz von 10 Millisekunden in den Netzwerkverbindungen der Ziel-Pods. Zusätzlich zur Latenzinjektion unterstützt Chaos Mesh auch Paketverlust und Paketumordnung. Details finden Sie unter Feldbeschreibung.

  2. Nachdem die Konfigurationsdatei vorbereitet ist, erstellen Sie das Experiment mit kubectl:

    kubectl apply -f ./network-delay.yaml

Partitionierungsbeispiel

  1. Schreiben Sie die Experimentkonfiguration in die Datei network-partition.yaml, wie unten gezeigt:

    apiVersion: chaos-mesh.org/v1alpha1
    kind: NetworkChaos
    metadata:
    name: partition
    spec:
    action: partition
    mode: all
    selector:
    namespaces:
    - default
    labelSelectors:
    'app': 'app1'
    direction: to
    target:
    mode: all
    selector:
    namespaces:
    - default
    labelSelectors:
    'app': 'app2'

    Diese Konfiguration blockiert Verbindungen von app1 zu app2. Der Wert für das Feld direction kann to, from oder both sein. Details finden Sie unter Feldbeschreibung.

  2. Nachdem die Konfigurationsdatei vorbereitet ist, erstellen Sie das Experiment mit kubectl:

    kubectl apply -f ./network-partition.yaml

Bandbreitenbeispiel

  1. Schreiben Sie die Experimentkonfiguration in die Datei network-bandwidth.yaml, wie unten gezeigt:

    apiVersion: chaos-mesh.org/v1alpha1
    kind: NetworkChaos
    metadata:
    name: bandwidth
    spec:
    action: bandwidth
    mode: all
    selector:
    namespaces:
    - default
    labelSelectors:
    'app': 'app1'
    bandwidth:
    rate: '1mbps'
    limit: 20971520
    buffer: 10000

    Diese Konfiguration begrenzt die Bandbreite von app1 auf 1 Mbps.

  2. Nachdem die Konfigurationsdatei vorbereitet ist, verwenden Sie kubectl, um das Experiment zu erstellen:

    kubectl apply -f ./network-bandwidth.yaml

Beispiel für Netzwerkemulation

  1. Schreiben Sie die Experimentkonfiguration in die Datei netem.yaml, wie unten gezeigt:

    apiVersion: chaos-mesh.org/v1alpha1
    kind: NetworkChaos
    metadata:
    name: network-emulation
    spec:
    action: netem
    mode: all
    selector:
    namespaces:
    - default
    labelSelectors:
    'app': 'web-show'
    delay:
    latency: '10ms'
    correlation: '100'
    jitter: '0ms'
    rate:
    rate: '10mbps'

    Diese Konfiguration verursacht eine Latenz von 10 Millisekunden und eine Bandbreitenbegrenzung von 10 Mbps in den Netzwerkverbindungen der Ziel-Pods. Neben Latenz und Bandbreite unterstützt die netem-Aktion auch Paketverlust, Neuordnung und Beschädigung.

  2. Nachdem die Konfigurationsdatei vorbereitet ist, verwenden Sie kubectl, um das Experiment zu erstellen:

    kubectl apply -f ./netem.yaml

Feldbeschreibung

ParameterTypeDescriptionDefault valueRequiredExample
actionstringIndicates the specific fault type. Available types include: netem, delay (network delay), loss (packet loss), duplicate (packet duplicating), corrupt (packet corrupt), partition (network partition), and bandwidth (network bandwidth limit). After you specify action field, refer to Description for action-related fields for other necessary field configuration.NoneYesPartition
targetSelectorUsed in combination with direction, making Chaos only effective for some packets.NoneNo
directionenumIndicates the direction of target packets. Available values include from (the packets from target), to (the packets to target), and both ( the packets from or to target). This parameter makes Chaos only take effect for a specific direction of packets.toNoboth
modestringSpecifies the mode of the experiment. The mode options include one (selecting a random Pod), all (selecting all eligible Pods), fixed (selecting a specified number of eligible Pods), fixed-percent (selecting a specified percentage of Pods from the eligible Pods), and random-max-percent (selecting the maximum percentage of Pods from the eligible Pods).NoneYesone
valuestringProvides a parameter for the mode configuration, depending on mode. For example, when mode is set to fixed-percent, value specifies the percentage of Pods.NoneNo1
selectorstructSpecifies the target Pod. For details, refer to Define the experiment scope.NoneYes
externalTargets[]stringIndicates the network targets except for Kubernetes, which can be IPv4 addresses or domains. This parameter only works with direction: to.NoneNo1.1.1.1, google.com
devicestringSpecifies the affected network interfaceNoneNo"eth0"

Beschreibung der action-bezogenen Felder

Für die Fehlertypen Netzwerkemulation und Bandbreite können Sie die action-bezogenen Parameter gemäß der folgenden Beschreibung weiter konfigurieren.

  • Netzwerkemulationstyp: delay, loss, duplicated, corrupt, rate

  • Bandbreitentyp: bandwidth

delay

Wenn Sie action auf delay setzen, simulieren Sie Netzwerklatenzfehler. Sie können folgende Parameter konfigurieren.

ParameterTypeDescriptionRequiredRequiredExample
latencystringIndicates the network latencyNoNo2ms
correlationstringIndicates the correlation between the current latency and the previous one. Range of value: [0, 100]NoNo50
jitterstringIndicates the range of the network latencyNoNo1ms
reorderReorder(#Reorder)Indicates the status of network packet reorderingNo

Das Berechnungsmodell für correlation ist wie folgt:

  1. Generieren Sie eine Zufallszahl, deren Verteilung mit dem vorherigen Wert korreliert:

    rnd = value * (1-corr) + last_rnd * corr

    rnd ist die Zufallszahl. corr ist die von Ihnen festgelegte correlation.

  2. Verwenden Sie diese Zufallszahl, um die Verzögerung des aktuellen Pakets zu bestimmen:

    ((rnd % (2 * sigma)) + mu) - sigma

    In der obigen Formel entspricht sigma dem jitter und mu der latency.

reorder

Wenn Sie action auf reorder setzen, simulieren Sie Paketreihenfolgefehler im Netzwerk. Sie können folgende Parameter konfigurieren.

ParameterTypeDescriptionDefault valueRequiredExample
reorderstringIndicates the probability to reorder0No0.5
correlationstringIndicates the correlation between this time's length of delay time and the previous time's length of delay time. Range of value: [0, 100]0No50
gapintIndicates the gap before and after packet reordering0No5

loss

Wenn Sie action auf loss setzen, simulieren Sie Paketverlustfehler. Sie können folgende Parameter konfigurieren.

ParameterTypeDescriptionDefault valueRequiredExample
lossstringIndicates the probability of packet loss. Range of value: [0, 100]0No50
correlationstringIndicates the correlation between the probability of current packet loss and the previous time's packet loss. Range of value: [0, 100]0No50

duplicate

Setzen Sie action auf duplicate, um Paketduplizierung zu simulieren. Dabei können Sie folgende Parameter festlegen.

ParameterTypeDescriptionDefault valueRequiredExample
duplicatestringIndicates the probability of packet duplicating. Range of value: [0, 100]0No50
correlationstringIndicates the correlation between the probability of current packet duplicating and the previous time's packet duplicating. Range of value: [0, 100]0No50

corrupt

Wenn Sie action auf corrupt setzen, simulieren Sie Paketbeschädigungsfehler. Sie können folgende Parameter konfigurieren.

ParameterTypeDescriptionDefault valueRequiredExample
corruptstringIndicates the probability of packet corruption. Range of value: [0, 100]0No50
correlationstringIndicates the correlation between the probability of current packet corruption and the previous time's packet corruption. Range of value: [0, 100]0No50

Für sporadische Ereignisse wie reorder, loss, duplicate und corrupt ist die correlation komplexer. Eine detaillierte Modellbeschreibung finden Sie unter NetemCLG.

rate

Wenn Sie action auf rate setzen, wird eine Bandbreitenraten-Störung simuliert. Diese Aktion ähnelt bandwidth/rate, der entscheidende Unterschied ist jedoch, dass sie mit anderen oben aufgeführten netem-Aktionen kombiniert werden kann. Wenn Sie jedoch mehr Kontrolle über die Bandbreitensimulation benötigen (z.B. Begrenzung der Puffergröße), verwenden Sie stattdessen die bandwidth-Aktion.

ParameterTypeDescriptionDefault valueRequiredExample
ratestringIndicates the rate of bandwidth limit. Allows bit, kbit, mbit, gbit, tbit, bps, kbps, mbps, gbps, tbps unit. bps means bytes per secondYes1mbps

bandwidth

Wenn Sie action auf bandwidth setzen, wird eine Bandbreitenbegrenzungs-Störung simuliert. Sie müssen zusätzlich folgende Parameter konfigurieren.

Hinweis

Diese Aktion schließt sich gegenseitig mit allen oben definierten netem-Aktionen aus. Wenn Sie Bandbreitenraten zusammen mit anderen Netzwerkfehlern wie Korruption injizieren müssen, verwenden Sie stattdessen die rate-Aktion.

ParameterTypeDescriptionDefault valueRequiredExample
ratestringIndicates the rate of bandwidth limit. Allows bit, kbit, mbit, gbit, tbit, bps, kbps, mbps, gbps, tbps unit. bps means bytes per secondYes1mbps
limituint32Indicates the number of bytes waiting in queueYes1
bufferuint32Indicates the maximum number of bytes that can be sent instantaneouslyYes1
peakrateuint64Indicates the maximum consumption of bucket (usually not set)No1
minburstuint32Indicates the size of peakrate bucket (usually not set)No1

Weitere Details zu diesen Feldern finden Sie im tc-tbf-Dokument. Es wird empfohlen, limit auf mindestens 2 * rate * latency zu setzen, wobei latency die geschätzte Latenz zwischen Quelle und Ziel ist und über den ping-Befehl ermittelt werden kann. Ein zu kleiner limit-Wert kann zu hoher Paketverlustrate führen und den TCP-Durchsatz beeinträchtigen.