|
Dieses Dokument wurde mithilfe automatisierter maschineller Übersetzungstechnologie übersetzt. Wir bemühen uns um korrekte Übersetzungen, übernehmen jedoch keine Gewähr für die Vollständigkeit, Richtigkeit oder Zuverlässigkeit der übersetzten Inhalte. Im Falle von Abweichungen ist die englische Originalversion maßgebend und stellt den verbindlichen Text dar. |
Grundlegende Netzwerkoptionen
Diese Seite beschreibt die K3s-Netzwerkkonfigurationsoptionen, einschließlich der Konfiguration oder des Austauschs von Flannel sowie der Konfiguration von IPv6 oder DualStack.
Flannel-Optionen
Flannel ist ein leichtgewichtiger Anbieter von Layer-3-Netzwerkfabric, der die Kubernetes Container Network Interface (CNI) implementiert. Es wird allgemein als CNI-Plugin bezeichnet.
-
Flannel-Optionen können nur auf Serverknoten festgelegt werden und müssen auf allen Servern im Cluster identisch sein.
-
Das Standard-Backend für Flannel ist
vxlan. Um die Verschlüsselung zu aktivieren, verwenden Sie daswireguard-nativeBackend. -
Die Verwendung von
vxlanauf Raspberry Pi mit aktuellen Versionen von Ubuntu erfordert zusätzliche Vorbereitungen. -
Die Verwendung von
wireguard-nativeals Flannel-Backend kann zusätzliche Module auf einigen Linux-Distributionen erfordern. Bitte beachten Sie den WireGuard Installationsleitfaden für weitere Details. Die Installationsschritte für WireGuard stellen sicher, dass die entsprechenden Kernel-Module für Ihr Betriebssystem installiert sind. Sie müssen sicherstellen, dass die WireGuard-Kernel-Module auf jedem Knoten, sowohl auf Servern als auch auf Agenten, verfügbar sind, bevor Sie versuchen, das WireGuard-Flannel-Backend zu verwenden.
| CLI-Flag und Wert | Beschreibung |
|---|---|
|
Wenden Sie Maskierungsregeln auf IPv6-Verkehr an (Standard für IPv4). Gilt nur für Dual-Stack- oder IPv6-Cluster. Kompatibel mit jedem Flannel-Backend außer |
|
Verwenden Sie die externen IP-Adressen der Knoten als Ziel für den Flannel-Verkehr, anstelle von internen IPs. Gilt nur, wenn --node-external-ip auf einem Knoten festgelegt ist. |
|
Verwenden Sie VXLAN, um die Pakete zu kapseln. Möglicherweise sind zusätzliche Kernel-Module auf dem Raspberry Pi erforderlich. |
|
Verwenden Sie IP-Routen zu Pod-Subnetzen über die Knoten-IPs. Erfordert eine direkte Layer-2-Konnektivität zwischen allen Knoten im Cluster. |
|
Verwenden Sie WireGuard, um den Netzwerkverkehr zu kapseln und zu verschlüsseln. Möglicherweise sind zusätzliche Kernel-Module erforderlich. |
|
Verwenden Sie strongSwan IPSec über die |
|
Deaktivieren Sie Flannel vollständig. |
|
Versionssperre
K3s enthält ab den Releases 2022-12 (v1.26.0+k3s1, v1.25.5+k3s1, v1.24.9+k3s1, v1.23.15+k3s1) nicht mehr strongSwan |
Migration von wireguard oder ipsec zu wireguard-native
Das veraltete wireguard-Backend erfordert die Installation des wg-Tools auf dem Host. Dieses Backend ist in K3s v1.26 und höher nicht verfügbar, zugunsten des wireguard-native-Backends, das direkt mit dem Kernel kommuniziert.
Das veraltete ipsec-Backend erfordert die Installation der swanctl- und charon-Binärdateien auf dem Host. Dieses Backend ist in K3s v1.27 und höher nicht verfügbar, zugunsten des wireguard-native-Backends.
Wir empfehlen den Benutzern, so schnell wie möglich auf das neue Backend zu migrieren. Die Migration erfordert eine kurze Ausfallzeit, während die Knoten mit der neuen Konfiguration hochgefahren werden. Sie sollten diese beiden Schritte befolgen:
-
Aktualisieren Sie die K3s Konfiguration auf allen Serverknoten. Wenn Sie Konfigurationsdateien verwenden, sollte die
/etc/rancher/k3s/config.yamlflannel-backend: wireguard-nativeanstelle vonflannel-backend: wireguardoderflannel-backend: ipsecenthalten. Wenn Sie K3s über CLI-Flags in der systemd-Einheit konfigurieren, sollten die entsprechenden Flags geändert werden. -
Starten Sie alle Knoten neu, beginnend mit den Servern.
Flannel-Agent-Optionen
Diese Optionen sind für jeden Agenten verfügbar und spezifisch für die Flannel-Instanz, die auf diesem Knoten ausgeführt wird.
| CLI-Flag | Beschreibung |
|---|---|
|
Standard-Flannel-Schnittstelle überschreiben |
|
Standard-Flannel-Konfigurationsdatei überschreiben |
|
Standard-Flannel-CNI-Konfigurationsdatei überschreiben |
Benutzerdefinierte CNI
Starten Sie K3s mit --flannel-backend=none und installieren Sie Ihre bevorzugte CNI. Die meisten CNI-Plugins verfügen über ihre eigene Netzwerk-Richtlinien-Engine, daher wird empfohlen, auch --disable-network-policy festzulegen, um Konflikte zu vermeiden. Einige wichtige Informationen, die zu berücksichtigen sind:
-
Canal
-
Calico
-
Cilium
Besuchen Sie die Kanal-Dokumentation Website. Befolgen Sie die Schritte zur Installation von Canal. Ändern Sie die Canal-YAML, damit IP-Weiterleitung im Abschnitt container_settings erlaubt ist, zum Beispiel:
"container_settings": {
"allow_ip_forwarding": true
}
Wenden Sie die Canal-YAML an.
Stellen Sie sicher, dass die Einstellungen angewendet wurden, indem Sie den folgenden Befehl auf dem Host ausführen:
cat /etc/cni/net.d/10-canal.conflist
Sie sollten sehen, dass die IP-Weiterleitung auf true gesetzt ist.
Befolgen Sie die Calico CNI Plugins Anleitung. Ändern Sie die Calico YAML, damit IP-Weiterleitung im container_settings Abschnitt erlaubt ist, zum Beispiel:
"container_settings": {
"allow_ip_forwarding": true
}
Wenden Sie die Calico YAML an.
Stellen Sie sicher, dass die Einstellungen angewendet wurden, indem Sie den folgenden Befehl auf dem Host ausführen:
cat /etc/cni/net.d/10-calico.conflist
Sie sollten sehen, dass die IP-Weiterleitung auf true gesetzt ist.
Bevor Sie k3s-killall.sh oder k3s-uninstall.sh ausführen, müssen Sie die cilium_host, cilium_net und cilium_vxlan Schnittstellen manuell entfernen. Wenn Sie dies nicht tun, verlieren Sie möglicherweise die Netzwerkverbindung zum Host, wenn K3s gestoppt wird.
ip link delete cilium_host
ip link delete cilium_net
ip link delete cilium_vxlan
Zusätzlich sollten die iptables-Regeln für Cilium entfernt werden:
iptables-save | grep -iv cilium | iptables-restore
ip6tables-save | grep -iv cilium | ip6tables-restore
Konfiguration des Egress-Selectors für die Steuerungsebene
K3s-Agenten und -Server halten Websocket-Tunnel zwischen Knoten aufrecht, die verwendet werden, um die bidirektionale Kommunikation zwischen den Komponenten der Steuerungsebene (apiserver) und Agenten (kubelet und containerd) zu kapseln. Dies ermöglicht es den Agenten, zu arbeiten, ohne die kubelet- und Container-Laufzeit-Streaming-Ports für eingehende Verbindungen freizugeben, und für die Steuerungsebene, sich mit Cluster-Diensten zu verbinden, wenn der Agent deaktiviert ist. Diese Funktionalität entspricht dem Konnectivity Dienst, der häufig in anderen Kubernetes-Distributionen verwendet wird, und wird über die Konfiguration des Egress-Selectors des apiservers verwaltet.
Der Standardmodus ist agent. pod oder cluster Modi werden empfohlen, wenn agentenlose Server betrieben werden, um dem apiserver den Zugriff auf Cluster-Service-Endpunkte in Abwesenheit von Flannel und kube-proxy zu ermöglichen.
Der Egress-Selector-Modus kann auf Servern über das --egress-selector-mode Flag konfiguriert werden und bietet vier Modi:
-
disabled: Der apiserver verwendet keine Agententunnel, um mit Kubelets oder Cluster-Endpunkten zu kommunizieren. Dieser Modus erfordert, dass die Server das Kubelet, CNI und kube-proxy ausführen und eine direkte Verbindung zu den Agenten haben, andernfalls kann der apiserver nicht auf Service-Endpunkte zugreifen oderkubectl execundkubectl logsausführen. -
agent(Standard): Der apiserver verwendet Agententunnel, um mit Kubelets zu kommunizieren. Dieser Modus erfordert, dass die Server auch das Kubelet, CNI und kube-proxy ausführen, andernfalls kann der apiserver nicht auf Service-Endpunkte zugreifen. -
pod: Der apiserver verwendet Agententunnel, um mit Kubelets und Service-Endpunkten zu kommunizieren, und leitet Verbindungen zu den richtigen Agenten, indem er Knoten und Endpunkte überwacht.
HINWEIS: Dieser Modus funktioniert nicht, wenn ein CNI verwendet wird, das seine eigene IPAM verwendet und die PodCIDR-Zuweisung des Knotens nicht respektiert.clusteroderagentModus sollte stattdessen mit diesen CNIs verwendet werden. -
cluster: Der apiserver verwendet Agententunnel, um mit Kubelets und Dienstendpunkten zu kommunizieren, und leitet Verbindungen zu den richtigen Agenten, indem er Pods und Endpunkte überwacht. Dieser Modus hat die höchste Portabilität über verschiedene Clusterkonfigurationen hinweg, auf Kosten eines erhöhten Overheads.
Dual-Stack (IPv4 + IPv6) Netzwerk
|
Versionssperre
Experimentelle Unterstützung ist ab v1.21.0+k3s1 verfügbar. |
|
Bekanntes Problem
Vor 1.27 verursacht Kubernetes Issue #111695, dass das Kubelet die IPv6-Adressen des Knotens ignoriert, wenn Sie eine Dual-Stack-Umgebung haben und die primäre Netzwerkschnittstelle nicht für den Clusterverkehr verwenden. Um diesen Fehler zu vermeiden, verwenden Sie 1.27 oder neuer oder fügen Sie beiden K3s-Servern und -Agenten die folgende Option hinzu: --kubelet-arg="node-ip=0.0.0.0" # To proritize IPv4 traffic #OR --kubelet-arg="node-ip=::" # To proritize IPv6 traffic |
Das Dual-Stack-Netzwerk muss konfiguriert werden, wenn der Cluster zuerst erstellt wird. Es kann nicht in einem bestehenden Cluster aktiviert werden, nachdem er als nur IPv4 gestartet wurde.
Um Dual-Stack in K3s zu aktivieren, müssen Sie gültige Dual-Stack cluster-cidr und service-cidr auf allen Serverknoten bereitstellen. Dies ist ein Beispiel für eine gültige Konfiguration:
--cluster-cidr=10.42.0.0/16,2001:db8:42::/56 --service-cidr=10.43.0.0/16,2001:db8:43::/112
Beachten Sie, dass Sie beliebige gültige cluster-cidr und service-cidr Werte konfigurieren können, aber die obigen Masken empfohlen werden. Wenn Sie die cluster-cidr Maske ändern, sollten Sie auch die node-cidr-mask-size-ipv4 und node-cidr-mask-size-ipv6 Werte ändern, um mit der geplanten Anzahl von Pods pro Knoten und der Gesamtzahl der Knoten übereinzustimmen. Die größte unterstützte service-cidr Maske ist /12 für IPv4 und /112 für IPv6. Denken Sie daran, den IPv6-Verkehr zuzulassen, wenn Sie in einer Public Cloud bereitstellen.
Wenn Sie IPv6-Adressen verwenden, die nicht öffentlich geroutet sind, zum Beispiel im ULA-Bereich, möchten Sie möglicherweise die --flannel-ipv6-masq Option hinzufügen, um IPv6 NAT zu aktivieren, da standardmäßig Pods ihre Pod-IPv6-Adresse für ausgehenden Verkehr verwenden.
Wenn jedoch öffentlich geroutete IPv6-Adressen verwendet werden, müssen Sie sicherstellen, dass diese Adressen zu Ihrem Cluster geroutet werden. Andernfalls können Pods keine Antworten auf Pakete erhalten, die von ihrer IPv6-Adresse stammen. Obwohl es nicht im Rahmen von K3s liegt, automatisch zu kommunizieren, welche Adressen auf welchem Knoten zur externen Routing-Infrastruktur verwendet werden, können Cluster-Mitglieder den Pod-Verkehr korrekt weiterleiten, sodass Sie Ihre Routen auf jeden Knoten im Cluster zeigen können.
Wenn Sie ein benutzerdefiniertes CNI-Plugin verwenden, d.h. ein CNI-Plugin, das nicht Flannel ist, kann zusätzliche Konfiguration erforderlich sein. Bitte konsultieren Sie die Dokumentation Ihres Plugins zum Dual-Stack und überprüfen Sie, ob Netzwerkrichtlinien aktiviert werden können.
|
Bekanntes Problem
Beim Definieren von cluster-cidr und service-cidr mit IPv6 als primärer Familie sollte die node-ip aller Cluster-Mitglieder explizit festgelegt werden, wobei die gewünschte IPv6-Adresse des Knotens als erste Adresse angegeben wird. Standardmäßig verwendet das Kubelet immer IPv4 als primäre Adressfamilie. |
Single-Stack IPv6-Netzwerk
|
Versionssperre
Verfügbar ab v1.22.9+k3s1 |
|
Bekanntes Problem
Wenn Ihre IPv6-Standardroute durch eine Router-Werbung (RA) festgelegt wird, müssen Sie den sysctl |
Single-Stack IPv6-Cluster (Cluster ohne IPv4) werden in K3s mit den Flags --cluster-cidr und --service-cidr unterstützt. Dies ist ein Beispiel für eine gültige Konfiguration:
--cluster-cidr=2001:db8:42::/56 --service-cidr=2001:db8:43::/112
Wenn Sie IPv6-Adressen verwenden, die nicht öffentlich geroutet sind, zum Beispiel im ULA-Bereich, möchten Sie möglicherweise die --flannel-ipv6-masq Option hinzufügen, um IPv6 NAT zu aktivieren, da standardmäßig Pods ihre Pod-IPv6-Adresse für ausgehenden Verkehr verwenden.
Knoten ohne Hostnamen
Einige Cloud-Anbieter, wie Linode, erstellen Maschinen mit "localhost" als Hostnamen, und andere haben möglicherweise überhaupt keinen Hostnamen festgelegt. Dies kann Probleme bei der Namensauflösung verursachen. Sie können K3s mit dem --node-name-Flag oder der K3S_NODE_NAME-Umgebungsvariable ausführen und dies wird den Knotennamen übergeben, um dieses Problem zu lösen.