Beispiel: Calico installieren und Netzwerk-Policys einrichten
Erfahren Sie, wie Sie Calico installieren und Netzwerkrichtlinien auf einem Cluster einrichten, das Sie mit der Kubernetes Engine (OKE) erstellt haben.
Im Kubernetes-Networkingmodell wird davon ausgegangen, dass Container (Pods) eindeutige und weiterleitbare IP-Adressen innerhalb eines Clusters aufweisen. Im Kubernetes-Networkingmodell kommunizieren Container untereinander mit diesen IP-Adressen, unabhängig davon, ob die Container auf demselben Knoten in einem Cluster oder auf einem anderen Knoten bereitgestellt sind. Kubernetes hat die Container Network Interface-(CNI-)Spezifikation für die Netzwerkressourcenverwaltung übernommen. Das CNI besteht aus einer Spezifikation und Bibliotheken zum Schreiben von Plugins zur Konfiguration von Netzwerkschnittstellen in Linux-Containern sowie einer Reihe von unterstützten Plugins.
Standardmäßig akzeptieren Pods Traffic aus jeder Quelle. Um die Clustersicherheit zu verbessern, können Pods "isoliert" werden, indem sie in einer Netzwerk-Policy ausgewählt werden (Kubernetes NetworkPolicy-Ressource). Eine Netzwerk-Policy ist eine Spezifikation, wie Gruppen mit Pods untereinander und mit anderen Netzwerkendpunkten kommunizieren können. NetworkPolicy-Ressourcen verwenden Labels, um Pods auszuwählen und Regeln zu definieren, mit denen angegeben wird, welcher Traffic für die ausgewählten Pods zulässig ist. Wenn eine NetworkPolicy in einem Cluster-Namespace ein bestimmtes Pod auswählt, lehnt dieses Pod alle Verbindungen ab, die von keiner NetworkPolicy zugelassen werden. Andere Pods im Namespace, die nicht von einer NetworkPolicy ausgewählt wurden, akzeptieren weiterhin den gesamten Traffic. Weitere Informationen zu Netzwerk-Policys finden Sie in der Kubernetes-Dokumentation.
Netzwerk-Policys werden vom CNI-Netzwerkprovider implementiert. Eine einfache Erstellung der NetworkPolicy-Ressource ohne einen CNI-Netzwerkprovider zur Implementierung bewirkt nichts. Beachten Sie, dass nicht alle CNI-Netzwerkprovider die NetworkPolicy-Ressource implementieren.
Wenn Sie Cluster mit der Kubernetes-Engine erstellen, wählen Sie einen Netzwerktyp aus. Der von Ihnen ausgewählte Netzwerktyp bestimmt den CNI-Netzwerkprovider und das zugehörige CNI-Plug-in, das für Podnetworking verwendet wird, wie folgt:
- VCN-natives Podnetzwerk: Verwendet das OCI-VCN-native Podnetzwerk-CNI-Plug-in, um Worker-Knoten mit Podsubnetzen in einem Oracle Cloud Infrastructure-VCN zu verbinden. Daher können Pod-IP-Adressen in einem VCN direkt von anderen VCNs, die mit diesem VCN verbunden sind (Peered) und von On-Premise-Netzwerken weitergeleitet werden. Siehe CNI-Plug-in für OCI-VCN-natives Podnetworking für Podnetworking verwenden.
- Flannel-Overlay: Mit dem Flannel-CNI-Plug-in wird die Kommunikation zwischen Pods im Flannel-Overlay-Netzwerk gekapselt, einem einfachen virtuellen Overlay-Netzwerk für privates Overlay, das IP-Adressen an Container anhängt. Auf die Pods im privaten Overlay-Netzwerk kann nur von anderen Pods im selben Cluster zugegriffen werden. Siehe Flannel-CNI-Plug-in für Podnetworking verwenden.
Obwohl sowohl das OCI-VCN-native Pod-Networking-CNI-Plug-in als auch das Flannel-CNI-Plug-in die Anforderungen des Kubernetes-Netzwerkmodells erfüllen, unterstützen keine der beiden Kubernetes-NetworkPolicy-Ressourcen. Wenn Sie die Sicherheit von Clustern, die Sie mit Kubernetes Engine erstellen, durch Implementierung von Netzwerk-Policys verbessern möchten, müssen Sie einen Netzwerkprovider, der NetworkPolicy-Ressourcen im Cluster unterstützt, installieren und konfigurieren. Ein solcher Provider ist Calico (eine Liste anderer Netzwerkprovider finden Sie in der Kubernetes-Dokumentation).
Calico ist eine Open-Source-Networking- und Netzwerksicherheitslösung für Container, virtuelle Maschinen und native hostbasierte Workloads. Weitere Informationen zu Calico finden Sie in der Calico-Dokumentation.
- Sie können Calico mit verwalteten Knotenpools verwenden, jedoch nicht mit virtuellen Knotenpools.
-
Nur die Verwendung der Open-Source-Version von Calico wird unterstützt. Die Verwendung von Calico Enterprise wird nicht unterstützt.
-
Wenn Sie ein Cluster erstellt und Flannel-Overlay als Netzwerktyp ausgewählt haben, können Sie Calico anstelle des Flannel-CNI-Plug-ins installieren (siehe Calico anstelle des Flannel-CNI-Plug-ins installieren). Beachten Sie jedoch, dass die Änderung des CNI-Plugins von Flannel zu Calico nur für neue Knoten gilt, die anschließend im Cluster erstellt werden. Daher wird empfohlen, Flannel nicht durch Calico in Clustern zu ersetzen, die bereits Worker-Knoten aufweisen.
Calico-Kompatibilität
In der Tabelle sind die Versionen des Calico-Netzwerk-Plug-ins aufgeführt, die Oracle erfolgreich auf Clustern getestet hat, die mit Kubernetes Engine erstellt wurden. Oracle unterstützt nur erfolgreich getestete Calico-Versionen. Für jede Calico-Version zeigt die Tabelle die Kubernetes-Version an, die in erfolgreichen Tests auf Clustern ausgeführt wurde.
Beachten Sie, dass nur die Verwendung der Open-Source-Version von Calico unterstützt wird. Die Verwendung von Calico Enterprise wird nicht unterstützt.
Weitere Informationen finden Sie unter Beispiel: Calico installieren und Netzwerk-Policys einrichten.
Calico-Version | Auf Clustern getestet (und unterstützt), auf denen Kubernetes 1.30 ausgeführt wird? | Getestet (und unterstützt) auf Clustern, auf denen Kubernetes 1.31 ausgeführt wird? | Auf Clustern getestet (und unterstützt), auf denen Kubernetes 1.32 ausgeführt wird? | Getestet (und unterstützt) auf Clustern mit Kubernetes 1.33? |
---|---|---|---|---|
3.25.1 |
(nicht getestet) | (nicht getestet) | (nicht getestet) | (nicht getestet) |
3.26.1 |
(nicht getestet) | (nicht getestet) | (nicht getestet) | (nicht getestet) |
3.26.4 |
(nicht getestet) | (nicht getestet) | (nicht getestet) | (nicht getestet) |
3.27.2 |
(nicht getestet) | (nicht getestet) | (nicht getestet) | (nicht getestet) |
3.28.0 |
Ja | (nicht getestet) | (nicht getestet) | (nicht getestet) |
3.28.2 |
(nicht getestet) | Ja | (nicht getestet) | (nicht getestet) |
3.29.2 |
(nicht getestet) | (nicht getestet) | Ja | (nicht getestet) |
3.30.0 |
(nicht getestet) | (nicht getestet) | (nicht getestet) | Ja |
Installieren von Calico anstelle des flannel CNI-Plugins
Nachdem Sie ein erweitertes Cluster mit der Kubernetes-Engine (mit der Konsole oder der API) erstellt und Flannel-Overlay als Netzwerktyp ausgewählt haben, können Sie Calico anschließend im Cluster installieren, um Netzwerk-Policys zu unterstützen.
Bevor Sie Calico anstelle des flannel CNI Plugins installieren, müssen Sie zuerst das flannel CNI Plugin deaktivieren. Beachten Sie, dass die Änderung des CNI-Plugins von Flannel in Calico nur für neue Knoten gilt, die anschließend im Cluster erstellt werden. Daher wird empfohlen, Flannel nicht durch Calico in Clustern zu ersetzen, die bereits Worker-Knoten aufweisen.
Aus Gründen der Benutzerfreundlichkeit finden Sie unten eine Calico-Installationsanleitung. Beachten Sie, dass die Calico-Installationsanleitungen zwischen den Calico-Versionen variieren. Informationen zur Installation unterschiedlicher Versionen von Calico finden Sie immer in der Calico-Installationsdokumentation.
-
Deaktivieren Sie das flannel CNI Plugin Cluster Add-on. Siehe Cluster-Add-on deaktivieren (und entfernen).
-
Falls noch nicht geschehen, führen Sie die Schritte zum Einrichten der kubeconfig-Konfigurationsdatei des Clusters aus, und legen Sie (gegebenenfalls) die Umgebungsvariable KUBECONFIG so fest, dass sie auf die Datei verweist. Beachten Sie, dass Sie Ihre eigene kubeconfig-Datei einrichten müssen. Sie können nicht mit einer kubeconfig-Datei, die von einem anderen Benutzer eingerichtet wurde, auf ein Cluster zugreifen. Siehe Clusterzugriff einrichten.
- Entfernen Sie das Flannel-Daemonset aus dem Namespace des kube-Systems, indem Sie Folgendes eingeben:
kubectl delete -n kube-system daemonset kube-flannel-ds
-
Laden Sie in einem Terminalfenster das Calico-Manifest für den Kubernetes-API-Datenspeicher herunter, indem Sie Folgendes eingeben:
curl https://raw.githubusercontent.com/projectcalico/calico/v3.28.0/manifests/calico.yaml -o calico.yaml
Beachten Sie, dass die URL je nach der Version von Calico, die Sie installieren möchten, unterschiedlich ist.
- Wenn Sie ein Oracle Linux 8-Image für Worker-Knoten im Cluster ausgewählt haben, legen Sie wie folgt eine zusätzliche Umgebungsvariable in der Datei
calico.yaml
fest:- Öffnen Sie die Datei
calico.yaml
in einem Texteditor Ihrer Wahl. -
Fügen Sie die folgende Umgebungsvariable zum Abschnitt
env
für den Containercalico-node
im Manifest des Manifestscalico-node
DaemonSet hinzu:- name: FELIX_IPTABLESBACKEND value: "NFT"
- Speichern und schließen Sie die geänderte Datei
calico.yaml
.
- Öffnen Sie die Datei
-
Installieren und konfigurieren Sie Calico durch Eingabe des folgenden Befehls:
kubectl apply -f calico.yaml
Calico neben dem CNI-Plug-in für OCI-VCN-natives Podnetworking installieren
Nachdem Sie ein Cluster mit der Kubernetes-Engine (mit der Konsole oder der API) erstellt und VCN-natives Podnetzwerk als Netzwerktyp ausgewählt haben, können Sie Calico anschließend neben dem OCI-VCN-nativen Podnetzwerk-CNI-Plug-in im Cluster installieren, um Netzwerk-Policys zu unterstützen.
Aus Gründen der Benutzerfreundlichkeit finden Sie unten eine Calico-Installationsanleitung. Beachten Sie, dass die Calico-Installationsanleitungen zwischen den Calico-Versionen variieren. Informationen zur Installation unterschiedlicher Versionen von Calico finden Sie immer in der Calico-Installationsdokumentation.
-
Falls noch nicht geschehen, führen Sie die Schritte zum Einrichten der kubeconfig-Konfigurationsdatei des Clusters aus, und legen Sie (gegebenenfalls) die Umgebungsvariable KUBECONFIG so fest, dass sie auf die Datei verweist. Beachten Sie, dass Sie Ihre eigene kubeconfig-Datei einrichten müssen. Sie können nicht mit einer kubeconfig-Datei, die von einem anderen Benutzer eingerichtet wurde, auf ein Cluster zugreifen. Siehe Clusterzugriff einrichten.
-
Laden Sie in einem Terminalfenster das ausschließlich für Calico-Policy geltende Manifest für den Kubernetes-API-Datenspeicher herunter, indem Sie Folgendes eingeben:
curl https://raw.githubusercontent.com/projectcalico/calico/v3.28.0/manifests/calico-policy-only.yaml -o calico-policy-only.yaml
Beachten Sie, dass die URL je nach der Version von Calico, die Sie installieren möchten, unterschiedlich ist.
- Die Datei
calico-policy-only.yaml
enthält Calico-Komponenten, die nicht erforderlich sind, wenn Calico neben dem CNI-Plug-in für OCI-VCN-native Podnetworking verwendet wird. Daher müssen Sie diese Komponenten entfernen. Außerdem müssen Sie einige zusätzliche Umgebungsvariablen festlegen.- Öffnen Sie die Datei
calico-policy-only.yaml
in einem Texteditor Ihrer Wahl. - Entfernen Sie den Abschnitt
initContainers
aus dem Manifest der Dateicalico-node
DaemonSet. - Entfernen Sie Folgendes aus dem Abschnitt
env
für den Containercalico-node
aus dem Manifest der Dateicalico-node
DaemonSet:# Typha support: controlled by the ConfigMap. - name: FELIX_TYPHAK8SSERVICENAME valueFrom: configMapKeyRef: name: calico-config key: typha_service_name
- Entfernen Sie den folgenden Abschnitt
envFrom
für den Containercalico-node
aus dem Manifest der Dateicalico-node
DaemonSet:envFrom: - configMapRef: # Allow KUBERNETES_SERVICE_HOST and KUBERNETES_SERVICE_PORT to be overridden for eBPF mode. name: kubernetes-services-endpoint optional: true
- Entfernen Sie die folgenden Volumes aus dem Abschnitt
volumes
des Manifests der Dateicalico-node
DaemonSet:cni-bin-dir
cni-net-dir
cni-log-dir
Bevor Sie die Änderung vornehmen, sieht der Abschnitt
volumes
des Manifestscalico-node
DaemonSet folgendermaßen aus:... volumes: # Used by calico-node. - name: lib-modules hostPath: path: /lib/modules - name: var-run-calico hostPath: path: /var/run/calico - name: var-lib-calico hostPath: path: /var/lib/calico - name: xtables-lock hostPath: path: /run/xtables.lock type: FileOrCreate - name: sys-fs hostPath: path: /sys/fs/ type: DirectoryOrCreate - name: bpffs hostPath: path: /sys/fs/bpf type: Directory # mount /proc at /nodeproc to be used by mount-bpffs initContainer to mount root cgroup2 fs. - name: nodeproc hostPath: path: /proc # Used to install CNI. - name: cni-bin-dir hostPath: path: /opt/cni/bin - name: cni-net-dir hostPath: path: /etc/cni/net.d # Used to access CNI logs. - name: cni-log-dir hostPath: path: /var/log/calico/cni # Used to create per-pod Unix Domain Sockets - name: policysync hostPath: type: DirectoryOrCreate path: /var/run/nodeagent ...
Nachdem Sie die Änderung vorgenommen haben, prüfen Sie, ob der Abschnitt
volumes
des Manifestscalico-node
DaemonSet wie folgt aussieht:... volumes: # Used by calico-node. - name: lib-modules hostPath: path: /lib/modules - name: var-run-calico hostPath: path: /var/run/calico - name: var-lib-calico hostPath: path: /var/lib/calico - name: xtables-lock hostPath: path: /run/xtables.lock type: FileOrCreate - name: sys-fs hostPath: path: /sys/fs/ type: DirectoryOrCreate - name: bpffs hostPath: path: /sys/fs/bpf type: Directory # mount /proc at /nodeproc to be used by mount-bpffs initContainer to mount root cgroup2 fs. - name: nodeproc hostPath: path: /proc # Used to create per-pod Unix Domain Sockets - name: policysync hostPath: type: DirectoryOrCreate path: /var/run/nodeagent ...
- Entfernen Sie die folgenden Volume Mounts aus dem Abschnitt
volumeMounts
für den Containercalico-node
im Manifest der Dateicalico-node
DaemonSet:cni-net-dir
, einschließlich des zugehörigen Kommentars# For maintaining CNI plugin API credentials.
cni-log-dir
Bevor Sie die Änderung vornehmen, sieht der Abschnitt
volumeMounts
folgendermaßen aus:... volumeMounts: # For maintaining CNI plugin API credentials. - mountPath: /host/etc/cni/net.d name: cni-net-dir readOnly: false - mountPath: /lib/modules name: lib-modules readOnly: true - mountPath: /run/xtables.lock name: xtables-lock readOnly: false - mountPath: /var/run/calico name: var-run-calico readOnly: false - mountPath: /var/lib/calico name: var-lib-calico readOnly: false - name: policysync mountPath: /var/run/nodeagent # For eBPF mode, we need to be able to mount the BPF filesystem at /sys/fs/bpf so we mount in the # parent directory. - name: bpffs mountPath: /sys/fs/bpf - name: cni-log-dir mountPath: /var/log/calico/cni readOnly: true ...
Nachdem Sie die Änderung vorgenommen haben, prüfen Sie, ob der Abschnitt
volumeMounts
wie folgt aussieht:... volumeMounts: - mountPath: /lib/modules name: lib-modules readOnly: true - mountPath: /run/xtables.lock name: xtables-lock readOnly: false - mountPath: /var/run/calico name: var-run-calico readOnly: false - mountPath: /var/lib/calico name: var-lib-calico readOnly: false - name: policysync mountPath: /var/run/nodeagent # For eBPF mode, we need to be able to mount the BPF filesystem at /sys/fs/bpf so we mount in the # parent directory. - name: bpffs mountPath: /sys/fs/bpf ...
- Fügen Sie die folgenden Umgebungsvariablen für den Container
calico-node
im Manifest der Dateicalico-node
DaemonSet hinzu:FELIX_INTERFACEPREFIX="oci"
NO_DEFAULT_POOLS="true"
FELIX_CHAININSERTMODE="Append"
FELIX_IPTABLESMANGLEALLOWACTION="Return"
FELIX_IPTABLESBACKEND="NFT"
Hinweis: Fügen Sie diese Umgebungsvariable nur hinzu, wenn Sie ein Oracle Linux 8-Image für Worker-Knoten im Cluster ausgewählt haben.
Bevor Sie die Änderung vornehmen, sieht der Abschnitt
calico-node
der Containerumgebungsvariablen (env:
) des Manifestscalico-node
DaemonSet folgendermaßen aus:... containers: # Runs calico-node container on each Kubernetes node. This # container programs network policy and routes on each # host. - name: calico-node image: docker.io/calico/node:v3.28.0 imagePullPolicy: IfNotPresent env: # Use Kubernetes API as the backing datastore. - name: DATASTORE_TYPE value: "kubernetes" # Configure route aggregation based on pod CIDR. - name: USE_POD_CIDR value: "true" # Wait for the datastore. - name: WAIT_FOR_DATASTORE value: "true" # Set based on the k8s node name. - name: NODENAME valueFrom: fieldRef: fieldPath: spec.nodeName # Don't enable BGP. - name: CALICO_NETWORKING_BACKEND value: "none" # Cluster type to identify the deployment type - name: CLUSTER_TYPE value: "k8s" # Non-calico CNI, disable credential management. - name: CALICO_MANAGE_CNI value: "false" # The default IPv4 pool to create on startup if none exists. Pod IPs will be # chosen from this range. Changing this value after installation will have # no effect. This should fall within `--cluster-cidr`. # - name: CALICO_IPV4POOL_CIDR # value: "192.168.0.0/16" # Disable file logging so `kubectl logs` works. - name: CALICO_DISABLE_FILE_LOGGING value: "true" # Set Felix endpoint to host default action to ACCEPT. - name: FELIX_DEFAULTENDPOINTTOHOSTACTION value: "ACCEPT" # Disable IPv6 on Kubernetes. - name: FELIX_IPV6SUPPORT value: "false" - name: FELIX_HEALTHENABLED value: "true" ...
Nachdem Sie die Änderung vorgenommen haben, prüfen Sie, ob der Abschnitt
calico-node
der Containerumgebungsvariablen (env:
) des Manifestscalico-node
DaemonSet wie folgt aussieht:... containers: # Runs calico-node container on each Kubernetes node. This # container programs network policy and routes on each # host. - name: calico-node image: docker.io/calico/node:v3.28.0 imagePullPolicy: IfNotPresent env: # Use Kubernetes API as the backing datastore. - name: DATASTORE_TYPE value: "kubernetes" # Configure route aggregation based on pod CIDR. - name: USE_POD_CIDR value: "true" # Wait for the datastore. - name: WAIT_FOR_DATASTORE value: "true" # Set based on the k8s node name. - name: NODENAME valueFrom: fieldRef: fieldPath: spec.nodeName # Don't enable BGP. - name: CALICO_NETWORKING_BACKEND value: "none" # Cluster type to identify the deployment type - name: CLUSTER_TYPE value: "k8s" # Non-calico CNI, disable credential management. - name: CALICO_MANAGE_CNI value: "false" # The default IPv4 pool to create on startup if none exists. Pod IPs will be # chosen from this range. Changing this value after installation will have # no effect. This should fall within `--cluster-cidr`. # - name: CALICO_IPV4POOL_CIDR # value: "192.168.0.0/16" # Disable file logging so `kubectl logs` works. - name: CALICO_DISABLE_FILE_LOGGING value: "true" # Set Felix endpoint to host default action to ACCEPT. - name: FELIX_DEFAULTENDPOINTTOHOSTACTION value: "ACCEPT" # Disable IPv6 on Kubernetes. - name: FELIX_IPV6SUPPORT value: "false" - name: FELIX_HEALTHENABLED value: "true" - name: FELIX_INTERFACEPREFIX value: "oci" - name: NO_DEFAULT_POOLS value: "true" - name: FELIX_CHAININSERTMODE value: "Append" - name: FELIX_IPTABLESMANGLEALLOWACTION value: "Return" - name: FELIX_IPTABLESBACKEND value: "NFT" ...
- Speichern und schließen Sie die geänderte Datei
calico-policy-only.yaml
.
- Öffnen Sie die Datei
-
Installieren und konfigurieren Sie Calico durch Eingabe des folgenden Befehls:
kubectl apply -f calico-policy-only.yaml
Netzwerk-Policys einrichten
Nach der Installation von Calico auf einem Cluster, das Sie mit Kubernetes Engine erstellt haben, können Sie Kubernetes-NetworkPolicy-Ressourcen erstellen, um Pods nach Bedarf zu isolieren.
Beispiele für NetworkPolicy und deren Verwendung finden Sie in der Calico-Dokumentation und speziell unter:
- Kubernetes Policy, Demo
- Kubernetes Policy, allgemeines Tutorial
- Kubernetes Policy, erweitertes Tutorial
Beachten Sie, dass die Beispiele je nach installierter Calico-Version variieren.