Isolierung von virtuellen Maschinen
|
Alle Funktionen, die Kube-OVN verwenden, gelten als experimentell. Für weitere Informationen zu experimentellen Funktionen siehe Funktionsbezeichnungen. |
Die Isolierung zwischen virtuellen Maschinen wird typischerweise entweder durch VLANs (in traditionellen Netzwerken) oder durch virtuelle Switches (in Kube-OVN) erreicht. Wenn Sie virtuelle Maschinen innerhalb des gleichen virtuellen Switch-Netzwerks isolieren möchten, können Sie eine der folgenden Methoden verwenden, um die erforderliche Mikrosegmentierung zu erreichen:
-
Subnetz-Zugriffskontrolllisten (ACLs): Regeln auf ein Subnetz anwenden, das von virtuellen Maschinen verwendet wird.
-
Kubernetes-Netzwerkrichtlinien: Regeln innerhalb von Netzwerk-Namespaces und unter Verwendung von Pod-Selektoren anwenden.
Subnetz-ACLs
Für weitere Informationen über das Schema und die Nutzungshinweise siehe Subnetz-ACL und ACL-API-Referenz in der Kube-OVN-Dokumentation.
Beispiele
-
Beispiel 1: Alle virtuellen Maschinen innerhalb des
172.20.10.0/24Subnetzes, mit Ausnahme derjenigen mit den Adressen172.20.10.2und172.20.10.3im Subnetzbereich172.20.10.0/30, dürfen miteinander kommunizieren.Kube-OVN fügt automatisch die Gateway-Adresse
172.20.10.1zurexcludeIpsListe hinzu, wodurch verhindert wird, dass sie virtuellen Maschinen zugewiesen wird. Die Kommunikation zu und von der Gateway-Adresse ist ebenfalls betroffen.apiVersion: kubeovn.io/v1 kind: Subnet metadata: name: vswitch1 spec: acls: - action: drop direction: to-lport match: ip4.dst == 172.20.10.0/30 priority: 1005 - action: drop direction: from-lport match: ip4.src == 172.20.10.0/30 priority: 1005 cidrBlock: 172.20.10.0/24 excludeIps: - 172.20.10.1 gateway: 172.20.10.1 gatewayNode: "" natOutgoing: false private: false protocol: IPv4 provider: vswitch1.default.ovn vpc: vpc1 -
Beispiel 2: Alle virtuellen Maschinen innerhalb des
172.20.10.0/24Subnetzes, mit Ausnahme derjenigen mit der Adresse172.20.10.3, dürfen miteinander kommunizieren. Virtuelle Maschinen mit der Adresse172.20.10.2dürfen kommunizieren, da die Ausführung der ACL-Regeln auf Priorität basiert. Für dieses Subnetz werden Regeln mit einem Prioritätswert von1006vor1005ausgeführt.Kube-OVN fügt automatisch die Gateway-Adresse
172.20.10.1zurexcludeIpsListe hinzu, wodurch verhindert wird, dass sie virtuellen Maschinen zugewiesen wird. Die Kommunikation zu und von der Gateway-Adresse ist ebenfalls betroffen.apiVersion: kubeovn.io/v1 kind: Subnet metadata: name: vswitch1 spec: acls: - action: allow direction: to-lport match: ip4.dst == 172.20.10.2 priority: 1006 - action: allow direction: from-lport match: ip4.src == 172.20.10.2 priority: 1006 - action: drop direction: to-lport match: ip4.dst == 172.20.10.0/30 priority: 1005 - action: drop direction: from-lport match: ip4.src == 172.20.10.0/30 priority: 1005 cidrBlock: 172.20.10.0/24 excludeIps: - 172.20.10.1 gateway: 172.20.10.1 gatewayNode: "" natOutgoing: false private: false protocol: IPv4 provider: vswitch1.default.ovn vpc: vpc1 -
Beispiel 3: Virtuelle Maschinen mit der Adresse
172.20.10.2dürfen mit anderen virtuellen Maschinen kommunizieren. Der Datenverkehr in die entgegengesetzte Richtung ist jedoch blockiert. Keine virtuellen Maschinen dürfen mit172.20.10.2kommunizieren.apiVersion: kubeovn.io/v1 kind: Subnet metadata: name: vswitch1 spec: acls: - action: drop direction: to-lport match: ip4.dst == 172.20.10.2 priority: 1005 cidrBlock: 172.20.10.0/24 excludeIps: - 172.20.10.1 gateway: 172.20.10.1 gatewayNode: "" natOutgoing: false private: false protocol: IPv4 provider: vswitch1.default.ovn vpc: vpc1 -
Beispiel 4: TCP-Verkehr, der von Port
9501und der IP-Adresse172.20.10.6stammt, wird im Subnetzvswitch1blockiert.apiVersion: kubeovn.io/v1 kind: Subnet metadata: name: vswitch1 spec: acls: - action: drop direction: from-lport match: ip4.src == 172.20.10.6 && tcp.src == 9501 priority: 1005 cidrBlock: 172.20.10.0/24 excludeIps: - 172.20.10.1 gateway: 172.20.10.1 gatewayNode: "" natOutgoing: false private: false protocol: IPv4 provider: vswitch1.default.ovn vpc: vpc1
Netzwerkrichtlinien
|
Die Regeln der Netzwerkrichtlinie verweigern standardmäßig den Verkehr. Um andere Pods nicht zu beeinträchtigen, stellen Sie sicher, dass Folgendes beachtet wird:
|
Die Beispiele in diesem Dokument konzentrieren sich darauf, die Isolation zwischen virtuellen Maschinen im selben Subnetz zu erreichen.
Für weitere Informationen siehe Netzwerkrichtlinien in der Kubernetes-Dokumentation und NetworkPolicy-Protokollierung in der Kube-OVN-Dokumentation.
Beispiele
Die folgenden virtuellen Maschinen werden im Namespace default erstellt und sind mit dem Overlay-Netzwerk verbunden, das für den Subnetzbereich 172.20.10.0/24 erstellt wurde.
| Virtuelle Maschine | IP-Adresse |
|---|---|
|
|
|
|
|
|
|
|
|
|
-
Beispiel 1:
VM1undVM2dürfen miteinander kommunizieren, da ihre Adressen im Subnetz172.20.10.0/30liegen. Der gesamte übrige Verkehr im Namespacedefault, einschließlich Verkehr zu und vonVM3,VM4undVM5, wird blockiert.apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: ip-block namespace: default spec: egress: - to: - ipBlock: cidr: 172.20.10.0/30 ingress: - from: - ipBlock: cidr: 172.20.10.0/30 policyTypes: - Ingress - Egress -
Beispiel 2:
VM1undVM2dürfen miteinander kommunizieren und mit anderen virtuellen Maschinen im Subnetz172.20.10.0/24. Andere virtuelle Maschinen in diesem Subnetz können jedoch nicht mitVM1,VM2und untereinander kommunizieren. Das liegt daran, dass die Eingangsrichtlinie nur Verkehr zulässt, der von172.20.10.0/30stammt.apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: ip-block namespace: default spec: ingress: - from: - ipBlock: cidr: 172.20.10.0/30 policyTypes: - Ingress -
Beispiel 3:
VM1undVM2dürfen miteinander kommunizieren, jedoch nicht mit anderen virtuellen Maschinen im Subnetz172.20.10.0/24. Die anderen virtuellen Maschinen im selben Subnetz können mitVM1undVM2kommunizieren. Das liegt daran, dass die Ausgangsrichtlinie den Verkehr zu172.20.10.0/30zulässt.apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: ip-block namespace: default spec: egress: - to: - ipBlock: cidr: 172.20.10.0/30 policyTypes: - egress -
Beispiel 4:
VM2darf mitVM1kommunizieren, jedoch nicht mit anderen virtuellen Maschinen im Subnetz172.20.10.0/24. Das liegt daran, dass ein Pod-Selektor-Label aufVM2angewendet wird. Alle anderen virtuellen Maschinen im selben Subnetz können mitVM1und untereinander kommunizieren.apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: ip-block namespace: default spec: podSelector: matchLabels: vm.kubevirt.io/name: VM2 egress: - to: - ipBlock: cidr: 172.20.10.0/30 ingress: - from: - ipBlock: cidr: 172.20.10.0/30 policyTypes: - Ingress - Egress