Hinweis:
- Dieses Tutorial erfordert Zugriff auf Oracle Cloud. Informationen zum Registrieren eines kostenlosen Accounts finden Sie unter Erste Schritte mit Oracle Cloud Infrastructure Free Tier.
- Es verwendet Beispielwerte für Oracle Cloud Infrastructure-Zugangsdaten, -Mandanten und -Compartments. Wenn Sie Ihre Übung abgeschlossen haben, ersetzen Sie diese Werte durch spezifische Werte für Ihre Cloud-Umgebung.
Mit Cilium Networking-Services in Oracle Cloud Infrastructure Container Engine for Kubernetes bereitstellen
Einführung
Wenn wir ein neues Kubernetes-Cluster mit Oracle Cloud Infrastructure Container Engine for Kubernetes (OKE) bereitstellen, ist das installierte Standard-CNI-(Container Network Interface-)Plug-in das OCI-VCN-native CNI-Plug-in. Mit Cloud Native Computing können Sie flexibel Ihre Methode zur Bereitstellung von Netzwerk- (Sicherheits-)Diensten für Ihre Containerplattform auswählen, indem Sie einfach ein anderes CNI-Plugin auswählen. In diesem Tutorial werden wir ein neues Kubernetes-Cluster mit OKE mit dem Flannel CNI-Plug-in bereitstellen und dieses in das Cilium CNI-Plug-in ändern. Cilium bietet im Vergleich zum OCI-VCN-nativen CNI-Plug-in und Flannel andere Netzwerk-(Sicherheits-)Features.
Ziele
- Stellen Sie ein neues Kubernetes-Cluster auf der Oracle Cloud Infrastructure Container Engine for Kubernetes-Plattform mit der benutzerdefinierten Erstellungsmethode bereit. Während dieser Bereitstellung wählen wir das Flannel CNI-Plug-in aus, dann werden wir das Cilium CNI-Plug-in bereitstellen und das Flannel CNI-Plug-in entfernen, sodass Cilium das wichtigste CNI-Plug-in für Netzwerk-(Sicherheits-)Services für unsere Cloud-nativen Anwendungen ist, und das Cilium CNI-Plug-in verwenden, um einen NetworkPolicy- und LoadBalancer-Service bereitzustellen und zu testen.
Aufgabe 1: Kubernetes-Cluster mit OKE bereitstellen
Weitere Informationen zu den verschiedenen OKE-Deployment-Modellen finden Sie unter Beispielkonfigurationen für Netzwerkressourcen.
Beispiele für OKE-Deployment-Modelle:
-
Beispiel 1: Cluster mit Flannel-CNI-Plug-in, öffentlichem Kubernetes-API-Endpunkt, privaten Worker-Knoten und öffentlichen Load Balancern.
-
2. Beispiel: Cluster mit Flannel-CNI-Plug-in, privatem Kubernetes-API-Endpunkt, privaten Worker-Knoten und öffentlichen Load Balancern.
-
Beispiel 3: Cluster mit OCI-CNI-Plug-in, öffentlichem Kubernetes-API-Endpunkt, privaten Worker-Knoten und öffentlichen Load Balancern.
-
Beispiel 4: Cluster mit OCI-CNI-Plug-in, privatem Kubernetes-API-Endpunkt, privaten Worker-Knoten und öffentlichen Load Balancern.
In diesem Tutorial wählen Sie das Deployment-Modell Beispiel 1 aus. Hier wurde bereits erläutert, wie Sie Beispiel 3 bereitstellen: Neues Kubernetes-Cluster erstellen und die Komponenten prüfen.
-
Klicken Sie auf das Hamburger-Menü.
- Klicken Sie auf Entwicklerservices.
- Klicken Sie auf Kubernetes-Cluster (OKE).
-
Klicken Sie auf Cluster erstellen.
- Wählen Sie Benutzerdefinierte Erstellung.
- Klicken Sie auf Weiterleiten.
-
Geben Sie folgende Informationen ein.
- Geben Sie einen Clusternamen ein.
- Wählen Sie ein Compartment aus.
- Wählen Sie die Kubernetes-Version aus.
- Klicken Sie anschließend auf Weiter.
-
Geben Sie unter Netzwerksetup die folgenden Informationen ein.
- Wählen Sie Flannel-Overlay als Netzwerktyp aus.
- Wählen Sie ein VCN aus, mit dem Sie das neue Kubernetes-Cluster bereitstellen möchten. Informationen zum Erstellen eines VCN finden Sie unter Neues VCN erstellen.
- Wählen Sie ein Subnetz im VCN aus, das Sie ausgewählt haben, um den Kubernetes-Services IP-Adressen bereitzustellen. Informationen zum Erstellen eines Subnetzes finden Sie unter Privates Subnetz im VCN erstellen.
- Wählen Sie ein Subnetz im VCN aus, das Sie ausgewählt haben, um den Kubernetes-API-Endpunkten IP-Adressen bereitzustellen.
- Wählen Sie Öffentliche IP-Adresse dem API-Endpunkt zuweisen aus.
- Klicken Sie anschließend auf Weiter.
-
Geben Sie unter Knotenpool (Worker-Knoten) die folgenden Informationen ein. Wir können verschiedene Einstellungen auswählen, aber wir werden versuchen, die gleichen zu behalten.
- Wählen Sie ein Compartment aus.
- Wählen Sie die Kubernetes-Version aus.
- Wählen Sie eine Availability-Domain aus.
- Wählen Sie ein Subnetz im VCN aus, das Sie ausgewählt haben, um den Kubernetes-Worker-Knoten IP-Adressen bereitzustellen.
- Wählen Sie die Faultdomains aus, in denen Sie Ihre Worker-Knoten platzieren möchten.
- Klicken Sie anschließend auf Weiter.
- Überprüfen Sie die Netzwerkinformationen.
- Blättern Sie nach unten.
- Prüfen Sie die Cluster-Informationen.
- Blättern Sie nach unten.
- Lesen Sie die Informationen zu Knotenpools.
- Blättern Sie nach unten.
- Wählen Sie nicht Basiscluster erstellen aus.
- Klicken Sie auf Cluster erstellen.
- Prüfen Sie den Status der verschiedenen Komponenten.
- Klicken Sie auf Schließen.
-
Prüfen Sie, ob der Status Wird erstellt lautet.
- Stellen Sie sicher, dass der Status ACTIVE lautet.
- Blättern Sie nach unten.
- Klicken Sie auf Knotenpools.
- Beachten Sie, dass der Worker-Knoten im Pool noch Wird erstellt wird.
- Beachten Sie, dass der Worker-Knoten im Pool Aktiv ist.
- Klicken Sie auf den Knotenpoolnamen.
-
Blättern Sie nach unten.
-
Beachten Sie, dass alle Knoten Bereit und Aktiv sind.
Eine visuelle Darstellung dieser Bereitstellung finden Sie im folgenden Diagramm.
-
Navigieren Sie zu Entwicklerservices und Kubernetes-Cluster (OKE). Klicken Sie auf das neu bereitgestellte Kubernetes-Cluster.
-
Klicken Sie auf Auf Cluster zugreifen.
- Wählen Sie Cloud Shell-Zugriff aus.
- Klicken Sie auf Kopieren, um den Befehl zu kopieren, um den Zugriff auf das Kubernetes-Cluster zuzulassen.
- Klicken Sie auf Cloud Shell starten.
-
Cloud Shell wird jetzt gestartet. Einige Informationen werden im Hintergrund angezeigt.
- Beachten Sie, dass Sie Cloud Shell-Zugriff haben.
- Klicken Sie auf das Symbol "Maximieren", um das Cloud Shell-Fenster zu vergrößern.
-
Fügen Sie den kopierten Befehl ein.
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ oci ce cluster create-kubeconfig --cluster-id ocid1.cluster.oc1.eu-amsterdam-1.aaaaaaaaXXX --file $HOME/.kube/config --region eu-amsterdam-1 --token-version 2.0.0 --kube-endpoint PUBLIC_ENDPOINT Existing Kubeconfig file found at /home/iwan_hooge/.kube/config and new config merged into it
-
Führen Sie den folgenden Befehl aus, um die Informationen zu den Worker-Knoten abzurufen.
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl get nodes NAME STATUS ROLES AGE VERSION 10.0.10.132 Ready node 11m v1.28.2 10.0.10.178 Ready node 12m v1.28.2 10.0.10.79 Ready node 12m v1.28.2
-
Prüfen Sie die bereitgestellten Worker-Knoten.
-
Aufgabe 2: Cilium als CNI-Plug-in auf dem bereitgestellten OKE-Kubernetes-Cluster installieren
-
Prüfen Sie das aktuell bereitgestellte CNI-Plug-in (Flannel).
-
Führen Sie den folgenden Befehl aus.
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl get all -n kube-system NAME READY STATUS RESTARTS AGE pod/coredns-69c9994dbb-6b8tk 1/1 Running 0 12m pod/coredns-69c9994dbb-qxq5j 1/1 Running 0 12m pod/coredns-69c9994dbb-xdnfc 1/1 Running 0 16m pod/csi-oci-node-h57qv 1/1 Running 1 (12m ago) 14m pod/csi-oci-node-nfrnw 1/1 Running 0 14m pod/csi-oci-node-pjqwk 1/1 Running 0 15m pod/kube-dns-autoscaler-d8d55cddd-pbfql 1/1 Running 0 16m pod/kube-flannel-ds-9tc92 1/1 Running 1 (13m ago) 14m pod/kube-flannel-ds-b8dch 1/1 Running 1 (12m ago) 14m pod/kube-flannel-ds-lbvw9 1/1 Running 0 15m pod/kube-proxy-2stzh 1/1 Running 0 15m pod/kube-proxy-8t6j4 1/1 Running 0 14m pod/kube-proxy-jxx6c 1/1 Running 0 14m pod/proxymux-client-cmmxv 1/1 Running 0 15m pod/proxymux-client-kk9bh 1/1 Running 0 14m pod/proxymux-client-mn4k9 1/1 Running 0 14m NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kube-dns ClusterIP 10.96.5.5 <none> 53/UDP,53/TCP,9153/TCP 16m NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE daemonset.apps/csi-oci-node 3 3 3 3 3 <none> 16m daemonset.apps/kube-flannel-ds 3 3 3 3 3 <none> 16m daemonset.apps/kube-proxy 3 3 3 3 3 beta.kubernetes.io/os=linux 16m daemonset.apps/node-termination-handler 0 0 0 0 0 oci.oraclecloud.com/oke-is-preemptible=true 16m daemonset.apps/nvidia-gpu-device-plugin 0 0 0 0 0 <none> 16m daemonset.apps/proxymux-client 3 3 3 3 3 node.info.ds_proxymux_client=true 16m NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/coredns 3/3 3 3 16m deployment.apps/kube-dns-autoscaler 1/1 1 1 16m NAME DESIRED CURRENT READY AGE replicaset.apps/coredns-69c9994dbb 3 3 3 16m replicaset.apps/kube-dns-autoscaler-d8d55cddd 1 1 1 16m iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
Beachten Sie, dass das Flannel CNI-Plug-in als Pod bereitgestellt wird.
-
Beachten Sie, dass das Flannel CNI-Plug-in als Service bereitgestellt wird.
Dies ist eine visuelle Darstellung der Kubernetes-Worker-Knoten mit installiertem Flannel-CNI-Plug-in.
-
-
Fügen Sie das Cilium-Repository hinzu.
-
Führen Sie den folgenden Befehl aus, um das Cilium-Repository hinzuzufügen.
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ helm repo add cilium https://helm.cilium.io/ WARNING: Kubernetes configuration file is group-readable. This is insecure. Location: /home/iwan_hooge/.kube/config WARNING: Kubernetes configuration file is world-readable. This is insecure. Location: /home/iwan_hooge/.kube/config "cilium" has been added to your repositories
-
Führen Sie den folgenden Befehl aus, um die Datei
YAML
für das Cilium-Deployment zu generieren.iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ helm show values cilium/cilium > cilium.yaml WARNING: Kubernetes configuration file is group-readable. This is insecure. Location: /home/iwan_hooge/.kube/config WARNING: Kubernetes configuration file is world-readable. This is insecure. Location: /home/iwan_hooge/.kube/config iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
-
Vergewissern Sie sich mit dem folgenden Befehl, dass die Cilium-Datei
YAML
vorhanden ist.-
Führen Sie den folgenden Befehl aus.
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ ls cilium.yaml ssh-key-2024-02-14.key
-
Stellen Sie sicher, dass die Datei
YAML
vorhanden ist. -
Führen Sie den folgenden Befehl aus, um die Datei
YAML
mit dem Nano-Editor zu bearbeiten.iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ nano cilium.yaml
-
-
Die Datei
YAML
ist eine große Datei mit vielen Einstellungen, scrollen Sie durch die Datei, um die folgenden Einstellungen zu finden, und aktualisieren Sie sie.containerRuntime: integration: crio hubble: tls: enabled: false hubble: relay: enabled: true hubble: ui: enabled: true ipam: mode: "kubernetes" clustermesh: useAPIServer: true
-
Verwenden Sie die Tastenkombination
CTRL + W
, um nach einem Schlüsselwort, einer Einstellung oder einem Abschnitt zu suchen.- Suchen Sie den Containerlaufzeitabschnitt.
- Ändern Sie den Integrationstyp.
- Im Abschnitt TLS-Konfiguration für Hubble.
- Deaktivieren Sie TLS.
- Im Abschnitt Relay.
- Relais aktivieren.
- Im Abschnitt *ui.
- Aktivieren Sie die Benutzeroberfläche.
- Im Abschnitt ipam.
- Legen Sie den Modus auf kubernetes fest.
- im Abschnitt clustermesh.
- Setzen Sie die useAPIServer auf
true
. - Verwenden Sie die Tastenkombination
CTRL + X
, um den Nano-Editor zu beenden.
-
Geben Sie
Y
(ja) ein, um die DateiYAML
zu speichern. -
Behalten Sie den Standardwert für den Dateinamen
YAML
bei. -
Wenn die Datei gespeichert wurde, kehren Sie zum Terminal zurück.
-
Installieren Sie Cilium.
-
Führen Sie folgenden Befehl aus, um Cilium zu installieren:
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ helm install cilium cilium/cilium --namespace=kube-system -f cilium.yaml WARNING: Kubernetes configuration file is group-readable. This is insecure. Location: /home/iwan_hooge/.kube/config WARNING: Kubernetes configuration file is world-readable. This is insecure. Location: /home/iwan_hooge/.kube/config NAME: cilium LAST DEPLOYED: Thu Mar 21 10:31:04 2024 NAMESPACE: kube-system STATUS: deployed REVISION: 1 TEST SUITE: None NOTES: You have successfully installed Cilium with Hubble Relay and Hubble UI. Your release version is 1.15.2. For any further help, visit https://docs.cilium.io/en/v1.15/gettinghelp iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
Beachten Sie die Meldung, dass Cilium erfolgreich installiert wurde.
-
-
Um Cilium-Befehle auszuführen, laden Sie die Cilium-Befehlszeilenschnittstelle (CLI) mit den folgenden Befehlen herunter.
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ CILIUM_CLI_VERSION=$(curl -s https://raw.githubusercontent.com/cilium/cilium-cli/master/stable.txt) iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ CLI_ARCH=amd64 iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ if [ "$(uname -m)" = "aarch64" ]; then CLI_ARCH=arm64; fi iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ curl -L --fail --remote-name-all https://github.com/cilium/cilium-cli/releases/download/${CILIUM_CLI_VERSION}/cilium-linux-${CLI_ARCH}.tar.gz{,.sha256sum} % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 37.5M 100 37.5M 0 0 28.7M 0 0:00:01 0:00:01 --:--:-- 53.3M % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 92 100 92 0 0 128 0 --:--:-- --:--:-- --:--:-- 0 iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ sha256sum --check cilium-linux-${CLI_ARCH}.tar.gz.sha256sum cilium-linux-arm64.tar.gz: OK
-
Führen Sie den folgenden Befehl aus, um die Cilium-CLI-Anwendung zu dekomprimieren.
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ sudo tar xzvf cilium-linux-${CLI_ARCH}.tar.gz
-
Um zu bestätigen, dass die Cilium-CLI-Datei vorhanden ist, führen Sie den folgenden Befehl aus.
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ ls -l total 138060 -rw-r--r--. 1 iwan_hooge oci 101843096 Mar 18 17:19 cilium -rw-r--r--. 1 iwan_hooge oci 39388621 Mar 21 10:38 cilium-linux-arm64.tar.gz -rw-r--r--. 1 iwan_hooge oci 92 Mar 21 10:38 cilium-linux-arm64.tar.gz.sha256sum -rw-r--r--. 1 iwan_hooge oci 126806 Mar 21 10:29 cilium.yaml -rw-------. 1 iwan_hooge oci 1671 Feb 14 10:07 ssh-key-2024-02-14.key iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
Nach erfolgreicher Komprimierung wird in der Liste eine Datei mit dem Namen
cillium
angezeigt.
-
-
Führen Sie den folgenden Befehl aus, um die heruntergeladene komprimierte Datei zu entfernen.
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ rm cilium-linux-${CLI_ARCH}.tar.gz{,.sha256sum}
-
Verwenden Sie die Cilium-CLI.
-
Führen Sie den folgenden Befehl aus, um die Cilium-CLI-Datei ausführbar zu machen.
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ chmod 777 cilium
-
Führen Sie den folgenden Befehl aus, um den Status des Kubernetes-Clusters mit Cilium zu prüfen.
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ ./cilium status /¯¯\ /¯¯\__/¯¯\ Cilium: OK \__/¯¯\__/ Operator: OK /¯¯\__/¯¯\ Envoy DaemonSet: disabled (using embedded mode) \__/¯¯\__/ Hubble Relay: 1 errors \__/ ClusterMesh: OK Deployment clustermesh-apiserver Desired: 1, Ready: 1/1, Available: 1/1 Deployment cilium-operator Desired: 2, Ready: 2/2, Available: 2/2 Deployment hubble-ui Desired: 1, Unavailable: 1/1 Deployment hubble-relay Desired: 1, Unavailable: 1/1 DaemonSet cilium Desired: 3, Ready: 3/3, Available: 3/3 Containers: cilium Running: 3 cilium-operator Running: 2 hubble-ui Running: 1 clustermesh-apiserver Running: 1 hubble-relay Running: 1 Cluster Pods: 3/7 managed by Cilium Helm chart version: 1.15.2 Image versions cilium quay.io/cilium/cilium:v1.15.2@sha256:bfeb3f1034282444ae8c498dca94044df2b9c9c8e7ac678e0b43c849f0b31746: 3 cilium-operator quay.io/cilium/operator-generic:v1.15.2@sha256:4dd8f67630f45fcaf58145eb81780b677ef62d57632d7e4442905ad3226a9088: 2 hubble-ui quay.io/cilium/hubble-ui:v0.13.0@sha256:7d663dc16538dd6e29061abd1047013a645e6e69c115e008bee9ea9fef9a6666: 1 hubble-ui quay.io/cilium/hubble-ui-backend:v0.13.0@sha256:1e7657d997c5a48253bb8dc91ecee75b63018d16ff5e5797e5af367336bc8803: 1 clustermesh-apiserver quay.io/cilium/clustermesh-apiserver:v1.15.2@sha256:478c77371f34d6fe5251427ff90c3912567c69b2bdc87d72377e42a42054f1c2: 2 hubble-relay quay.io/cilium/hubble-relay:v1.15.2@sha256:48480053930e884adaeb4141259ff1893a22eb59707906c6d38de2fe01916cb0: 1 Errors: hubble-ui hubble-ui 1 pods of Deployment hubble-ui are not ready hubble-relay hubble-relay 1 pods of Deployment hubble-relay are not ready iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
Hinweis: Einige Fehler werden angezeigt, weil einige Pods noch nicht von Cilium verwaltet wurden, da der Pod vor der Ausführung von Cilium gestartet wurde.
-
Dieser Fehler bezieht sich auf ClusterMesh.
-
Dieser Fehler bezieht sich auf Hubble-UI und Hubble-Relay.
-
Beachten Sie, dass nicht alle Clusterpods von Cilium verwaltet werden. Nur 3/7 Pods werden von Cilium verwaltet. Wir müssen sicherstellen, dass alle von ihnen von Cilium verwaltet werden.
-
Beachten Sie einige zusätzliche Fehlermeldungen, die sich auf die oben genannten Fehler beziehen.
-
-
Überprüfen und zuweisen Sie die Pods, die derzeit nicht von Cilium verwaltet werden. Cilium stellt ein Skript zur Verfügung, mit dem Sie sie identifizieren können.
-
Führen Sie den folgenden Befehl aus, um das Skript herunterzuladen.
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ curl -sLO https://raw.githubusercontent.com/cilium/cilium/master/contrib/k8s/k8s-unmanaged.sh
-
Führen Sie den folgenden Befehl aus, um dieses Skript ausführbar zu machen.
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ chmod +x k8s-unmanaged.sh
-
Führen Sie den folgenden Befehl aus, um dieses Skript auszuführen und Pods zu ermitteln, die zusätzliche Aufmerksamkeit erfordern.
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ ./k8s-unmanaged.sh Skipping pods with host networking enabled or with status not in Running or Pending phase... kube-system/clustermesh-apiserver-664b6c9c84-p49tr kube-system/hubble-relay-58d6b4cc94-kdwl4 kube-system/hubble-ui-6548d56557-w9s6t kube-system/kube-dns-autoscaler-d8d55cddd-pbfql iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
Beachten Sie, dass die Pods, die Aufmerksamkeit benötigen.
-
Führen Sie den folgenden Befehl aus, um die zu bearbeitenden Pods zu löschen.
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl -n kube-system delete pod clustermesh-apiserver-664b6c9c84-p49tr hubble-relay-58d6b4cc94-kdwl4 hubble-ui-6548d56557-w9s6t kube-dns-autoscaler-d8d55cddd-pbfql pod "clustermesh-apiserver-664b6c9c84-p49tr" deleted pod "hubble-relay-58d6b4cc94-kdwl4" deleted pod "hubble-ui-6548d56557-w9s6t" deleted pod "kube-dns-autoscaler-d8d55cddd-pbfql" deleted iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
Die Bestätigung der gelöschten Pods.
-
-
Führen Sie den folgenden Befehl aus, um dieses Skript auszuführen und Pods zu ermitteln, die erneut zusätzliche Aufmerksamkeit erfordern.
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ ./k8s-unmanaged.sh Skipping pods with host networking enabled or with status not in Running or Pending phase... iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
Beachten Sie, dass es keine Pods mehr gibt, die Aufmerksamkeit erfordern. Dies bedeutet, dass die Pods jetzt mit aktiviertem Cilium-Netzwerk neu erstellt werden.
-
Prüfen Sie den Status des Kubernetes-Clusters mit Cilium.
-
Führen Sie den folgenden Befehl aus, um den Status des Kubernetes-Clusters mit Cilium zu prüfen.
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ ./cilium status /¯¯\ /¯¯\__/¯¯\ Cilium: OK \__/¯¯\__/ Operator: OK /¯¯\__/¯¯\ Envoy DaemonSet: disabled (using embedded mode) \__/¯¯\__/ Hubble Relay: OK \__/ ClusterMesh: OK Deployment hubble-ui Desired: 1, Ready: 1/1, Available: 1/1 Deployment cilium-operator Desired: 2, Ready: 2/2, Available: 2/2 Deployment clustermesh-apiserver Desired: 1, Ready: 1/1, Available: 1/1 DaemonSet cilium Desired: 3, Ready: 3/3, Available: 3/3 Deployment hubble-relay Desired: 1, Ready: 1/1, Available: 1/1 Containers: cilium Running: 3 hubble-ui Running: 1 hubble-relay Running: 1 cilium-operator Running: 2 clustermesh-apiserver Running: 1 Cluster Pods: 7/7 managed by Cilium Helm chart version: 1.15.2 Image versions hubble-ui quay.io/cilium/hubble-ui:v0.13.0@sha256:7d663dc16538dd6e29061abd1047013a645e6e69c115e008bee9ea9fef9a6666: 1 hubble-ui quay.io/cilium/hubble-ui-backend:v0.13.0@sha256:1e7657d997c5a48253bb8dc91ecee75b63018d16ff5e5797e5af367336bc8803: 1 hubble-relay quay.io/cilium/hubble-relay:v1.15.2@sha256:48480053930e884adaeb4141259ff1893a22eb59707906c6d38de2fe01916cb0: 1 cilium-operator quay.io/cilium/operator-generic:v1.15.2@sha256:4dd8f67630f45fcaf58145eb81780b677ef62d57632d7e4442905ad3226a9088: 2 clustermesh-apiserver quay.io/cilium/clustermesh-apiserver:v1.15.2@sha256:478c77371f34d6fe5251427ff90c3912567c69b2bdc87d72377e42a42054f1c2: 2 cilium quay.io/cilium/cilium:v1.15.2@sha256:bfeb3f1034282444ae8c498dca94044df2b9c9c8e7ac678e0b43c849f0b31746: 3 iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
Beachten Sie, dass alle Cluster-Pods von Cilium verwaltet werden.
-
-
Prüfen Sie die aktuell bereitgestellten CNI-Plug-ins.
-
Führen Sie den folgenden Befehl aus, um die aktuell bereitgestellten CNI-Plug-ins (Flannel und Cilium) zu prüfen.
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl get all -n kube-system NAME READY STATUS RESTARTS AGE pod/cilium-operator-5995454695-8c6m4 1/1 Running 0 33m pod/cilium-operator-5995454695-s28sl 1/1 Running 0 33m pod/cilium-v8phg 1/1 Running 0 33m pod/cilium-vnfng 1/1 Running 0 33m pod/cilium-w8qq9 1/1 Running 0 33m pod/clustermesh-apiserver-664b6c9c84-4gvrp 1/2 Error 1 (77s ago) 2m29s pod/coredns-69c9994dbb-c2v77 1/1 Running 0 33m pod/coredns-69c9994dbb-kjdxp 1/1 Running 0 33m pod/coredns-69c9994dbb-sqv8t 1/1 Running 0 32m pod/csi-oci-node-h57qv 1/1 Running 1 (22h ago) 22h pod/csi-oci-node-nfrnw 1/1 Running 0 22h pod/csi-oci-node-pjqwk 1/1 Running 0 22h pod/hubble-relay-58d6b4cc94-lrjls 1/1 Running 0 2m29s pod/hubble-ui-6548d56557-hnt2d 2/2 Running 0 2m29s pod/kube-dns-autoscaler-d8d55cddd-n5zv5 1/1 Running 0 2m29s pod/kube-flannel-ds-9tc92 1/1 Running 1 (22h ago) 22h pod/kube-flannel-ds-b8dch 1/1 Running 1 (22h ago) 22h pod/kube-flannel-ds-lbvw9 1/1 Running 0 22h pod/kube-proxy-2stzh 1/1 Running 0 22h pod/kube-proxy-8t6j4 1/1 Running 0 22h pod/kube-proxy-jxx6c 1/1 Running 0 22h pod/proxymux-client-cmmxv 1/1 Running 0 22h pod/proxymux-client-kk9bh 1/1 Running 0 22h pod/proxymux-client-mn4k9 1/1 Running 0 22h NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/clustermesh-apiserver NodePort 10.96.181.249 <none> 2379:32379/TCP 33m service/clustermesh-apiserver-metrics ClusterIP None <none> 9962/TCP,9963/TCP 33m service/hubble-peer ClusterIP 10.96.249.93 <none> 80/TCP 33m service/hubble-relay ClusterIP 10.96.172.180 <none> 80/TCP 33m service/hubble-ui ClusterIP 10.96.119.250 <none> 80/TCP 33m service/kube-dns ClusterIP 10.96.5.5 <none> 53/UDP,53/TCP,9153/TCP 22h NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE daemonset.apps/cilium 3 3 3 3 3 kubernetes.io/os=linux 33m daemonset.apps/csi-oci-node 3 3 3 3 3 <none> 22h daemonset.apps/kube-flannel-ds 3 3 3 3 3 <none> 22h daemonset.apps/kube-proxy 3 3 3 3 3 beta.kubernetes.io/os=linux 22h daemonset.apps/node-termination-handler 0 0 0 0 0 oci.oraclecloud.com/oke-is-preemptible=true 22h daemonset.apps/nvidia-gpu-device-plugin 0 0 0 0 0 <none> 22h daemonset.apps/proxymux-client 3 3 3 3 3 node.info.ds_proxymux_client=true 22h NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/cilium-operator 2/2 2 2 33m deployment.apps/clustermesh-apiserver 0/1 1 0 33m deployment.apps/coredns 3/3 3 3 22h deployment.apps/hubble-relay 1/1 1 1 33m deployment.apps/hubble-ui 1/1 1 1 33m deployment.apps/kube-dns-autoscaler 1/1 1 1 22h NAME DESIRED CURRENT READY AGE replicaset.apps/cilium-operator-5995454695 2 2 2 33m replicaset.apps/clustermesh-apiserver-664b6c9c84 1 1 0 33m replicaset.apps/coredns-69c9994dbb 3 3 3 22h replicaset.apps/hubble-relay-58d6b4cc94 1 1 1 33m replicaset.apps/hubble-ui-6548d56557 1 1 1 33m replicaset.apps/kube-dns-autoscaler-d8d55cddd 1 1 1 22h iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
Beachten Sie, dass das Cilium CNI-Plugin vorhanden ist.
-
Beachten Sie, dass das Flannel CNI-Plugin ebenfalls vorhanden ist.
Dies ist eine visuelle Darstellung der Kubernetes-Worker-Knoten mit dem installierten Flannel- und Cilium-CNI-Plug-in.
-
-
Löschen Sie das Flannel CNI-Plug-in.
-
Führen Sie den folgenden Befehl aus, um das Flannel CNI-Plug-in zu löschen.
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl delete -n kube-system daemonset kube-flannel-ds daemonset.apps "kube-flannel-ds" deleted iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
Beachten Sie die Meldung, dass das Flannel CNI-Plug-in erfolgreich gelöscht wurde.
-
-
Prüfen Sie die aktuell bereitgestellten CNI-Plug-ins.
-
Führen Sie den folgenden Befehl aus, um die aktuell bereitgestellten CNI-Plug-ins (Cilium) zu prüfen.
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl get all -n kube-system NAME READY STATUS RESTARTS AGE pod/cilium-operator-5995454695-8c6m4 1/1 Running 0 35m pod/cilium-operator-5995454695-s28sl 1/1 Running 0 35m pod/cilium-v8phg 1/1 Running 0 35m pod/cilium-vnfng 1/1 Running 0 35m pod/cilium-w8qq9 1/1 Running 0 35m pod/clustermesh-apiserver-664b6c9c84-4gvrp 2/2 Running 3 (50s ago) 4m28s pod/coredns-69c9994dbb-c2v77 1/1 Running 0 35m pod/coredns-69c9994dbb-kjdxp 1/1 Running 0 35m pod/coredns-69c9994dbb-sqv8t 1/1 Running 0 34m pod/csi-oci-node-h57qv 1/1 Running 1 (22h ago) 22h pod/csi-oci-node-nfrnw 1/1 Running 0 22h pod/csi-oci-node-pjqwk 1/1 Running 0 22h pod/hubble-relay-58d6b4cc94-lrjls 1/1 Running 0 4m28s pod/hubble-ui-6548d56557-hnt2d 2/2 Running 0 4m28s pod/kube-dns-autoscaler-d8d55cddd-n5zv5 1/1 Running 0 4m28s pod/kube-proxy-2stzh 1/1 Running 0 22h pod/kube-proxy-8t6j4 1/1 Running 0 22h pod/kube-proxy-jxx6c 1/1 Running 0 22h pod/proxymux-client-cmmxv 1/1 Running 0 22h pod/proxymux-client-kk9bh 1/1 Running 0 22h pod/proxymux-client-mn4k9 1/1 Running 0 22h NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/clustermesh-apiserver NodePort 10.96.181.249 <none> 2379:32379/TCP 35m service/clustermesh-apiserver-metrics ClusterIP None <none> 9962/TCP,9963/TCP 35m service/hubble-peer ClusterIP 10.96.249.93 <none> 80/TCP 35m service/hubble-relay ClusterIP 10.96.172.180 <none> 80/TCP 35m service/hubble-ui ClusterIP 10.96.119.250 <none> 80/TCP 35m service/kube-dns ClusterIP 10.96.5.5 <none> 53/UDP,53/TCP,9153/TCP 22h NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE daemonset.apps/cilium 3 3 3 3 3 kubernetes.io/os=linux 35m daemonset.apps/csi-oci-node 3 3 3 3 3 <none> 22h daemonset.apps/kube-proxy 3 3 3 3 3 beta.kubernetes.io/os=linux 22h daemonset.apps/node-termination-handler 0 0 0 0 0 oci.oraclecloud.com/oke-is-preemptible=true 22h daemonset.apps/nvidia-gpu-device-plugin 0 0 0 0 0 <none> 22h daemonset.apps/proxymux-client 3 3 3 3 3 node.info.ds_proxymux_client=true 22h NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/cilium-operator 2/2 2 2 35m deployment.apps/clustermesh-apiserver 1/1 1 1 35m deployment.apps/coredns 3/3 3 3 22h deployment.apps/hubble-relay 1/1 1 1 35m deployment.apps/hubble-ui 1/1 1 1 35m deployment.apps/kube-dns-autoscaler 1/1 1 1 22h NAME DESIRED CURRENT READY AGE replicaset.apps/cilium-operator-5995454695 2 2 2 35m replicaset.apps/clustermesh-apiserver-664b6c9c84 1 1 1 35m replicaset.apps/coredns-69c9994dbb 3 3 3 22h replicaset.apps/hubble-relay-58d6b4cc94 1 1 1 35m replicaset.apps/hubble-ui-6548d56557 1 1 1 35m replicaset.apps/kube-dns-autoscaler-d8d55cddd 1 1 1 22h iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
Beachten Sie, dass das Cilium CNI-Plug-in vorhanden ist und das Flannel CNI-Plug-in entfernt wird.
Dies ist eine visuelle Darstellung der Kubernetes-Worker-Knoten mit installiertem Cilium CNI-Plug-in.
-
-
Zusätzlicher Befehl, mit dem Sie prüfen können, wo Cilium installiert ist.
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl -n kube-system get pods -l k8s-app=cilium NAME READY STATUS RESTARTS AGE cilium-v8phg 1/1 Running 0 22h cilium-vnfng 1/1 Running 0 22h cilium-w8qq9 1/1 Running 0 22h iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
Prüfen Sie den Status des Kubernetes-Clusters mit Cilium.
-
Führen Sie den folgenden Befehl aus, um den Status des Kubernetes-Clusters mit Cilium zu prüfen.
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ ./cilium status /¯¯\ /¯¯\__/¯¯\ Cilium: OK \__/¯¯\__/ Operator: OK /¯¯\__/¯¯\ Envoy DaemonSet: disabled (using embedded mode) \__/¯¯\__/ Hubble Relay: OK \__/ ClusterMesh: OK Deployment clustermesh-apiserver Desired: 1, Ready: 1/1, Available: 1/1 Deployment cilium-operator Desired: 2, Ready: 2/2, Available: 2/2 Deployment hubble-ui Desired: 1, Ready: 1/1, Available: 1/1 Deployment hubble-relay Desired: 1, Ready: 1/1, Available: 1/1 DaemonSet cilium Desired: 3, Ready: 3/3, Available: 3/3 Containers: cilium Running: 3 cilium-operator Running: 2 hubble-ui Running: 1 clustermesh-apiserver Running: 1 hubble-relay Running: 1 Cluster Pods: 7/7 managed by Cilium Helm chart version: 1.15.2 Image versions cilium quay.io/cilium/cilium:v1.15.2@sha256:bfeb3f1034282444ae8c498dca94044df2b9c9c8e7ac678e0b43c849f0b31746: 3 cilium-operator quay.io/cilium/operator-generic:v1.15.2@sha256:4dd8f67630f45fcaf58145eb81780b677ef62d57632d7e4442905ad3226a9088: 2 hubble-ui quay.io/cilium/hubble-ui:v0.13.0@sha256:7d663dc16538dd6e29061abd1047013a645e6e69c115e008bee9ea9fef9a6666: 1 hubble-ui quay.io/cilium/hubble-ui-backend:v0.13.0@sha256:1e7657d997c5a48253bb8dc91ecee75b63018d16ff5e5797e5af367336bc8803: 1 clustermesh-apiserver quay.io/cilium/clustermesh-apiserver:v1.15.2@sha256:478c77371f34d6fe5251427ff90c3912567c69b2bdc87d72377e42a42054f1c2: 2 hubble-relay quay.io/cilium/hubble-relay:v1.15.2@sha256:48480053930e884adaeb4141259ff1893a22eb59707906c6d38de2fe01916cb0: 1 iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
Beachten Sie, dass alle Cluster-Pods von Cilium verwaltet werden.
-
-
Cilium verfügt über einen integrierten Konnektivitätstest, der Netzwerke im Kubernetes-Cluster testen kann. Führen Sie den folgenden Befehl aus, um die Cilium-Konnektivitätstests durchzuführen.
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ ./cilium connectivity test ℹ️ Monitor aggregation detected, will skip some flow validation steps ✨ [cluster-c6e7ypjgkyq] Creating namespace cilium-test for connectivity check... ✨ [cluster-c6e7ypjgkyq] Deploying echo-same-node service... ✨ [cluster-c6e7ypjgkyq] Deploying DNS test server configmap... ✨ [cluster-c6e7ypjgkyq] Deploying same-node deployment... ✨ [cluster-c6e7ypjgkyq] Deploying client deployment... ✨ [cluster-c6e7ypjgkyq] Deploying client2 deployment... ✨ [cluster-c6e7ypjgkyq] Deploying client3 deployment... ✨ [cluster-c6e7ypjgkyq] Deploying echo-other-node service... ✨ [cluster-c6e7ypjgkyq] Deploying other-node deployment... ✨ [host-netns] Deploying cluster-c6e7ypjgkyq daemonset... ✨ [host-netns-non-cilium] Deploying cluster-c6e7ypjgkyq daemonset... ℹ️ Skipping tests that require a node Without Cilium ⌛ [cluster-c6e7ypjgkyq] Waiting for deployment cilium-test/client to become ready... ⌛ [cluster-c6e7ypjgkyq] Waiting for deployment cilium-test/client2 to become ready... ⌛ [cluster-c6e7ypjgkyq] Waiting for deployment cilium-test/echo-same-node to become ready... ⌛ [cluster-c6e7ypjgkyq] Waiting for deployment cilium-test/client3 to become ready... ⌛ [cluster-c6e7ypjgkyq] Waiting for deployment cilium-test/echo-other-node to become ready... ⌛ [cluster-c6e7ypjgkyq] Waiting for pod cilium-test/client-69748f45d8-pxzz5 to reach DNS server on cilium-test/echo-same-node-66b5db75b9-hxjws pod... ⌛ [cluster-c6e7ypjgkyq] Waiting for pod cilium-test/client2-56896f78f8-5tzsv to reach DNS server on cilium-test/echo-same-node-66b5db75b9-hxjws pod... ⌛ [cluster-c6e7ypjgkyq] Waiting for pod cilium-test/client3-5f56bc568c-xx8kd to reach DNS server on cilium-test/echo-same-node-66b5db75b9-hxjws pod... ⌛ [cluster-c6e7ypjgkyq] Waiting for pod cilium-test/client3-5f56bc568c-xx8kd to reach DNS server on cilium-test/echo-other-node-d8c5659dc-mhpkk pod... ⌛ [cluster-c6e7ypjgkyq] Waiting for pod cilium-test/client-69748f45d8-pxzz5 to reach DNS server on cilium-test/echo-other-node-d8c5659dc-mhpkk pod... ⌛ [cluster-c6e7ypjgkyq] Waiting for pod cilium-test/client2-56896f78f8-5tzsv to reach DNS server on cilium-test/echo-other-node-d8c5659dc-mhpkk pod... ⌛ [cluster-c6e7ypjgkyq] Waiting for pod cilium-test/client-69748f45d8-pxzz5 to reach default/kubernetes service... ⌛ [cluster-c6e7ypjgkyq] Waiting for pod cilium-test/client2-56896f78f8-5tzsv to reach default/kubernetes service... ⌛ [cluster-c6e7ypjgkyq] Waiting for pod cilium-test/client3-5f56bc568c-xx8kd to reach default/kubernetes service... ⌛ [cluster-c6e7ypjgkyq] Waiting for Service cilium-test/echo-other-node to become ready... ⌛ [cluster-c6e7ypjgkyq] Waiting for Service cilium-test/echo-other-node to be synchronized by Cilium pod kube-system/cilium-v8phg ⌛ [cluster-c6e7ypjgkyq] Waiting for Service cilium-test/echo-other-node to be synchronized by Cilium pod kube-system/cilium-vnfng ⌛ [cluster-c6e7ypjgkyq] Waiting for Service cilium-test/echo-same-node to become ready... ⌛ [cluster-c6e7ypjgkyq] Waiting for Service cilium-test/echo-same-node to be synchronized by Cilium pod kube-system/cilium-v8phg ⌛ [cluster-c6e7ypjgkyq] Waiting for Service cilium-test/echo-same-node to be synchronized by Cilium pod kube-system/cilium-vnfng ⌛ [cluster-c6e7ypjgkyq] Waiting for NodePort 10.0.10.132:31758 (cilium-test/echo-other-node) to become ready... ⌛ [cluster-c6e7ypjgkyq] Waiting for NodePort 10.0.10.132:31787 (cilium-test/echo-same-node) to become ready... ⌛ [cluster-c6e7ypjgkyq] Waiting for NodePort 10.0.10.178:31758 (cilium-test/echo-other-node) to become ready... ⌛ [cluster-c6e7ypjgkyq] Waiting for NodePort 10.0.10.178:31787 (cilium-test/echo-same-node) to become ready... ⌛ [cluster-c6e7ypjgkyq] Waiting for NodePort 10.0.10.79:31758 (cilium-test/echo-other-node) to become ready... ⌛ [cluster-c6e7ypjgkyq] Waiting for NodePort 10.0.10.79:31787 (cilium-test/echo-same-node) to become ready... ⌛ [cluster-c6e7ypjgkyq] Waiting for DaemonSet cilium-test/host-netns-non-cilium to become ready... ⌛ [cluster-c6e7ypjgkyq] Waiting for DaemonSet cilium-test/host-netns to become ready... ℹ️ Skipping IPCache check 🔭 Enabling Hubble telescope... ⚠️ Unable to contact Hubble Relay, disabling Hubble telescope and flow validation: rpc error: code = Unavailable desc = connection error: desc = "transport: Error while dialing: dial tcp 127.0.0.1:4245: connect: connection refused" ℹ️ Expose Relay locally with: cilium hubble enable cilium hubble port-forward& ℹ️ Cilium version: 1.15.2 🏃 Running 75 tests ... [=] Test [no-unexpected-packet-drops] [1/75] ... [=] Test [no-policies] [2/75] ......................................................... [=] Skipping Test [no-policies-from-outside] [3/75] (skipped by condition) [=] Test [no-policies-extra] [4/75] ................................................ [=] Test [allow-all-except-world] [5/75] .................................... [=] Test [client-ingress] [6/75] ...... [=] Test [client-ingress-knp] [7/75] ...... [=] Test [allow-all-with-metrics-check] [8/75] ...... [=] Test [all-ingress-deny] [9/75] ............ [=] Skipping Test [all-ingress-deny-from-outside] [10/75] (skipped by condition) [=] Test [all-ingress-deny-knp] [11/75] ............ [=] Test [all-egress-deny] [12/75] ........................ [=] Test [all-egress-deny-knp] [13/75] ........................ [=] Test [all-entities-deny] [14/75] ............ [=] Test [cluster-entity] [15/75] ... [=] Skipping Test [cluster-entity-multi-cluster] [16/75] (skipped by condition) [=] Test [host-entity-egress] [17/75] .................. [=] Test [host-entity-ingress] [18/75] ...... [=] Test [echo-ingress] [19/75] ...... [=] Skipping Test [echo-ingress-from-outside] [20/75] (skipped by condition) [=] Test [echo-ingress-knp] [21/75] ...... [=] Test [client-ingress-icmp] [22/75] ...... [=] Test [client-egress] [23/75] ...... [=] Test [client-egress-knp] [24/75] ...... [=] Test [client-egress-expression] [25/75] ...... [=] Test [client-egress-expression-knp] [26/75] ...... [=] Test [client-with-service-account-egress-to-echo] [27/75] ...... [=] Test [client-egress-to-echo-service-account] [28/75] ...... [=] Test [to-entities-world] [29/75] ......... [=] Test [to-cidr-external] [30/75] ...... [=] Test [to-cidr-external-knp] [31/75] ...... [=] Skipping Test [from-cidr-host-netns] [32/75] (skipped by condition) [=] Test [echo-ingress-from-other-client-deny] [33/75] .......... [=] Test [client-ingress-from-other-client-icmp-deny] [34/75] ............ [=] Test [client-egress-to-echo-deny] [35/75] ............ [=] Test [client-ingress-to-echo-named-port-deny] [36/75] .... [=] Test [client-egress-to-echo-expression-deny] [37/75] .... [=] Test [client-with-service-account-egress-to-echo-deny] [38/75] .... [=] Test [client-egress-to-echo-service-account-deny] [39/75] .. [=] Test [client-egress-to-cidr-deny] [40/75] ...... [=] Test [client-egress-to-cidr-deny-default] [41/75] ...... [=] Test [health] [42/75] ... [=] Skipping Test [north-south-loadbalancing] [43/75] (Feature node-without-cilium is disabled) [=] Test [pod-to-pod-encryption] [44/75] . [=] Test [node-to-node-encryption] [45/75] ... [=] Skipping Test [egress-gateway] [46/75] (skipped by condition) [=] Skipping Test [egress-gateway-excluded-cidrs] [47/75] (Feature enable-ipv4-egress-gateway is disabled) [=] Skipping Test [pod-to-node-cidrpolicy] [48/75] (Feature cidr-match-nodes is disabled) [=] Skipping Test [north-south-loadbalancing-with-l7-policy] [49/75] (Feature node-without-cilium is disabled) [=] Test [echo-ingress-l7] [50/75] .................. [=] Test [echo-ingress-l7-named-port] [51/75] .................. [=] Test [client-egress-l7-method] [52/75] .................. [=] Test [client-egress-l7] [53/75] ............... [=] Test [client-egress-l7-named-port] [54/75] ............... [=] Skipping Test [client-egress-l7-tls-deny-without-headers] [55/75] (Feature secret-backend-k8s is disabled) [=] Skipping Test [client-egress-l7-tls-headers] [56/75] (Feature secret-backend-k8s is disabled) [=] Skipping Test [client-egress-l7-set-header] [57/75] (Feature secret-backend-k8s is disabled) [=] Skipping Test [echo-ingress-auth-always-fail] [58/75] (Feature mutual-auth-spiffe is disabled) [=] Skipping Test [echo-ingress-mutual-auth-spiffe] [59/75] (Feature mutual-auth-spiffe is disabled) [=] Skipping Test [pod-to-ingress-service] [60/75] (Feature ingress-controller is disabled) [=] Skipping Test [pod-to-ingress-service-deny-all] [61/75] (Feature ingress-controller is disabled) [=] Skipping Test [pod-to-ingress-service-deny-ingress-identity] [62/75] (Feature ingress-controller is disabled) [=] Skipping Test [pod-to-ingress-service-deny-backend-service] [63/75] (Feature ingress-controller is disabled) [=] Skipping Test [pod-to-ingress-service-allow-ingress-identity] [64/75] (Feature ingress-controller is disabled) [=] Skipping Test [outside-to-ingress-service] [65/75] (Feature ingress-controller is disabled) [=] Skipping Test [outside-to-ingress-service-deny-world-identity] [66/75] (Feature ingress-controller is disabled) [=] Skipping Test [outside-to-ingress-service-deny-cidr] [67/75] (Feature ingress-controller is disabled) [=] Skipping Test [outside-to-ingress-service-deny-all-ingress] [68/75] (Feature ingress-controller is disabled) [=] Test [dns-only] [69/75] ............... [=] Test [to-fqdns] [70/75] ............ [=] Skipping Test [pod-to-controlplane-host] [71/75] (skipped by condition) [=] Skipping Test [pod-to-k8s-on-controlplane] [72/75] (skipped by condition) [=] Skipping Test [pod-to-controlplane-host-cidr] [73/75] (skipped by condition) [=] Skipping Test [pod-to-k8s-on-controlplane-cidr] [74/75] (skipped by condition) [=] Test [check-log-errors] [75/75] ............................. ✅ All 47 tests (555 actions) successful, 28 tests skipped, 1 scenarios skipped. iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
Beachten Sie, dass der Test in diesem Fall 75 Tests ausgeführt hat.
-
Nach Abschluss der Tests wird eine Zusammenfassung angezeigt.
Aufgabe 3: Beispielwebanwendung und -service bereitstellen
-
Beispiel für eine Webanwendung und einen Service bereitstellen.
-
Führen Sie den folgenden Befehl aus, um eine Beispielwebanwendung und einen Beispielservice bereitzustellen.
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl run web --image=nginx --labels="app=web" --expose --port=80 service/web created pod/web created iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
Beachten Sie, dass die Anwendung und der Service erfolgreich erstellt wurden.
-
-
Prüfen Sie die bereitgestellte Anwendung.
-
Führen Sie den folgenden Befehl aus, um die bereitgestellte Anwendung zu prüfen.
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl get pods NAME READY STATUS RESTARTS AGE web 1/1 Running 0 56s
-
Beachten Sie, dass die Webanwendung ausgeführt wird.
-
Führen Sie den folgenden Befehl aus, um den bereitgestellten Service zu prüfen.
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl get deploy,svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP,12250/TCP 44h service/web ClusterIP 10.96.199.73 <none> 80/TCP 74s
-
Beachten Sie, dass der Webservice ausgeführt wird.
-
-
Es gibt mehrere Möglichkeiten, die Konnektivität zur Anwendung zu testen. Eine Möglichkeit besteht darin, einen Browser zu öffnen und zu testen, ob wir auf die Webseite zugreifen können. Wenn jedoch kein Browser verfügbar ist, können wir einen weiteren Schnelltest durchführen, indem wir einen temporären Pod bereitstellen.
-
Führen Sie den folgenden Befehl aus, um einen Beispiel-Pod zum Testen der Webanwendungskonnektivität bereitzustellen.
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl run --rm -i -t --image=alpine test-$RANDOM -- sh If you don't see a command prompt, try pressing enter. / #
-
Führen Sie den folgenden Befehl aus, um die Konnektivität mit dem Webserver mit
wget
zu testen./ # wget -qO- http://web <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style> html { color-scheme: light dark; } body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p> <p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br/> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p> </body> </html>
-
Beachten Sie den HTML-Code, den der Webserver zurückgibt, und bestätigen Sie, dass der Webserver und die Konnektivität funktionieren.
-
Führen Sie den folgenden Befehl aus, um den temporären Pod zu beenden.
/ # exit Session ended, resume using 'kubectl attach test-8599 -c test-8599 -i -t' command when the pod is running pod "test-8599" deleted iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
Beachten Sie, dass der Pod unmittelbar nach dem Beenden der CLI gelöscht wird.
-
Aufgabe 4: Kubernetes-Services vom Typ NetworkPolicy konfigurieren
Einer der Netzwerksicherheitsdienste, die das Cilium CNI-Plug-in anbietet, ist der Service vom Typ NetworkPolicy. Dies ist eine Möglichkeit, die Konnektivität zwischen Pods zu steuern, indem die Konnektivität zwischen zwei Pods verweigert wird.
-
Führen Sie den folgenden Befehl aus, um den Nano-Editor zu öffnen und eine neue
YAML
-Datei zu erstellen, um eine NetworkPolicy zu implementieren, um den gesamten Netzwerkverkehr zu verweigern.iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ nano web-deny-all.yaml
-
Verwenden Sie den folgenden Inhalt in der Datei
YAML
.kind: NetworkPolicy apiVersion: networking.k8s.io/v1 metadata: name: web-deny-all spec: podSelector: matchLabels: app: web ingress: []
-
Verwenden Sie die Tastenkombination
CTRL + X
, um den Nano-Editor zu beenden.
-
-
Geben Sie
Y
(ja) ein, um die DateiYAML
zu speichern. -
Behalten Sie den Standardwert für den Dateinamen
YAML
bei. -
Prüfen Sie die Datei
YAML
.-
Führen Sie den folgenden Befehl aus, um die neue Datei
YAML
zu prüfen.iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ ls -l total 138068 -rwxrwxrwx. 1 iwan_hooge oci 101843096 Mar 18 17:19 cilium -rw-r--r--. 1 iwan_hooge oci 39388621 Mar 21 10:38 cilium-linux-arm64.tar.gz -rw-r--r--. 1 iwan_hooge oci 92 Mar 21 10:38 cilium-linux-arm64.tar.gz.sha256sum -rw-r--r--. 1 iwan_hooge oci 126806 Mar 21 10:29 cilium.yaml -rwxr-xr-x. 1 iwan_hooge oci 574 Mar 21 10:58 k8s-unmanaged.sh -rw-------. 1 iwan_hooge oci 1671 Feb 14 10:07 ssh-key-2024-02-14.key -rw-r--r--. 1 iwan_hooge oci 151 Mar 22 09:11 web-deny-all.yaml
-
Beachten Sie, dass die Datei
web-deny-all.yaml
vorhanden ist.
-
-
Implementieren Sie die Sicherheitsrichtlinie.
-
Führen Sie den folgenden Befehl aus, um die Sicherheits-Policy zu implementieren.
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl apply -f web-deny-all.yaml networkpolicy.networking.k8s.io/web-deny-all created iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
Beachten Sie, dass die Sicherheits-Policy erstellt wurde.
-
-
Stellen Sie einen Beispiel-Pod bereit, um die Webanwendungskonnektivität nach dem Deployment von NetworkPolicy erneut zu testen.
-
Führen Sie den folgenden Befehl aus, um einen Beispiel-Pod zum Testen der Webanwendungskonnektivität bereitzustellen.
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl run --rm -i -t --image=alpine test-$RANDOM -- sh If you don't see a command prompt, try pressing Enter.
-
Führen Sie den folgenden Befehl aus, um die Konnektivität mit dem Webserver mit
wget
zu testen./ # wget -qO- --timeout=2 http://web wget: download timed out
-
Beachten Sie, dass für die Anforderung ein Timeout auftritt.
-
Führen Sie den folgenden Befehl aus, um den temporären Pod zu beenden.
/ # exit Session ended, resume using 'kubectl attach test-26867 -c test-26867 -i -t' command when the pod is running pod "test-26867" deleted
-
-
Entfernen Sie die Sicherheits-Policy, und führen Sie die Tests erneut aus.
-
Führen Sie den folgenden Befehl aus, um die Sicherheits-Policy zu löschen.
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl delete -f web-deny-all.yaml
-
Beachten Sie, dass die Sicherheits-Policy entfernt wurde.
-
Führen Sie den folgenden Befehl aus, um einen Beispiel-Pod zum Testen der Webanwendungskonnektivität bereitzustellen.
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl run --rm -i -t --image=alpine test-$RANDOM -- sh If you don't see a command prompt, try pressing enter.
-
Führen Sie den folgenden Befehl aus, um die Konnektivität mit dem Webserver mit
wget
zu testen. -
Beachten Sie den HTML-Code, den der Webserver zurückgibt. Dadurch wird bestätigt, dass der Webserver und die Konnektivität funktionieren.
-
Führen Sie den folgenden Befehl aus, um den temporären Pod zu beenden.
/ # exit Session ended, resume using 'kubectl attach test-26248 -c test-26248 -i -t' command when the pod is running pod "test-26248" deleted iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
Beachten Sie, dass der Pod unmittelbar nach dem Beenden der CLI gelöscht wird.
-
Aufgabe 5: Beispielwebanwendung und -service entfernen
-
Um die bereitgestellte Webanwendung zu entfernen, führen Sie den folgenden Befehl aus.
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl delete service web --namespace default service "web" deleted
-
Um den bereitgestellten Webservice zu entfernen, führen Sie den folgenden Befehl aus.
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl delete pods -l app=web --namespace default pod "web" deleted
Aufgabe 6: Beispielanwendung bereitstellen und Kubernetes-Services des Typs LoadBalancer konfigurieren
Wir haben den Service NetworkPolicy mit Cilium getestet. Testen Sie auch den Service LoadBalancer mit Cilium.
-
Stellen Sie eine neue Beispielanwendung und einen neuen Service bereit.
-
Führen Sie den folgenden Befehl aus, um eine neue Beispielanwendung bereitzustellen.
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl apply -f https://k8s.io/examples/application/deployment.yaml deployment.apps/nginx-deployment created
-
Prüfen Sie, ob die Anwendung erfolgreich erstellt wurde.
-
Führen Sie den folgenden Befehl aus, um die bereitgestellten Pods abzurufen.
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl get pods NAME READY STATUS RESTARTS AGE nginx-deployment-86dcfdf4c6-6ncvx 1/1 Running 0 10s nginx-deployment-86dcfdf4c6-qbhn2 1/1 Running 0 10s
-
Prüfen Sie die bereitgestellten Pods.
-
Führen Sie den folgenden Befehl aus, um die Anwendung dem LoadBalancer-Service zur Verfügung zu stellen.
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl expose deployment nginx-deployment --type=LoadBalancer --name=my-service service/my-service exposed
-
Prüfen Sie, ob der Service erfolgreich erstellt wurde und die Anwendung erfolgreich bereitgestellt wurde.
-
Führen Sie den folgenden Befehl aus, um die bereitgestellten Services und die IP-Adressen zu prüfen.
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP,12250/TCP 46h my-service LoadBalancer 10.96.56.91 <pending> 80:32422/TCP 12s iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP,12250/TCP 46h my-service LoadBalancer 10.96.56.91 <pending> 80:32422/TCP 23s
-
Beachten Sie, dass die externe IP aussteht.
-
Führen Sie den folgenden Befehl aus, und beachten Sie, dass die öffentliche IP-Adresse konfiguriert ist (mit
.88
endet).iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP,12250/TCP 46h my-service LoadBalancer 10.96.56.91 XXX.XXX.XXX.88 80:32422/TCP 37s iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
-
Kopieren Sie die öffentliche IP-Adresse, und fügen Sie sie in einen Internetbrowser ein, und prüfen Sie, ob die bereitgestellte Anwendung (Nginx-Webserver mit der Standardwebsite) über die öffentliche IP-Adresse des LoadBalancer-Service erreichbar ist.
Aufgabe 7: Beispielanwendungen und Kubernetes-Services des Typs LoadBalancer entfernen
-
Führen Sie den folgenden Befehl aus, um die bereitgestellten Pods abzurufen.
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl get pods NAME READY STATUS RESTARTS AGE nginx-deployment-86dcfdf4c6-6ncvx 1/1 Running 0 2m54s nginx-deployment-86dcfdf4c6-qbhn2 1/1 Running 0 2m54s
-
Prüfen Sie die bereitgestellten Pods.
-
Um die bereitgestellte Webanwendung zu entfernen, führen Sie den folgenden Befehl aus.
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl delete deployment nginx-deployment --namespace default deployment.apps "nginx-deployment" deleted
-
Vergewissern Sie sich, dass die Anwendung gelöscht wurde.
-
Führen Sie den folgenden Befehl aus, um die bereitgestellten Pods abzurufen.
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl get pods No resources found in default namespace.
-
Beachten Sie, dass die Pods nicht mehr bereitgestellt und erfolgreich gelöscht wurden.
-
Führen Sie den folgenden Befehl aus, um die bereitgestellten Services abzurufen.
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP,12250/TCP 46h my-service LoadBalancer 10.96.56.91 XXX.XXX.XXX.88 80:32422/TCP 2m42s
-
Prüfen Sie die bereitgestellten Services.
-
Um die bereitgestellten LoadBalancer-Services zu entfernen, führen Sie den folgenden Befehl aus.
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl delete service my-service -n default service "my-service" deleted
-
Prüfen Sie, ob der Service gelöscht wurde.
-
Führen Sie den folgenden Befehl aus, um die bereitgestellten Services abzurufen.
iwan_hooge@cloudshell:~ (eu-amsterdam-1)$ kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP,12250/TCP 46h iwan_hooge@cloudshell:~ (eu-amsterdam-1)$
-
Beachten Sie, dass der LoadBalancer-Service nicht mehr bereitgestellt und erfolgreich gelöscht wurde.
Verwandte Links
Danksagungen
- Autor - Iwan Hoogendoorn (OCI Network Specialist)
Weitere Lernressourcen
Lernen Sie andere Übungen auf docs.oracle.com/learn kennen, oder greifen Sie auf weitere kostenlose Lerninhalte im Oracle Learning YouTube Channel zu. Außerdem können Sie education.oracle.com/learning-explorer besuchen, um Oracle Learning Explorer zu werden.
Die Produktdokumentation finden Sie im Oracle Help Center.
Use Cilium to Provide Networking Services in Oracle Cloud Infrastructure Container Engine for Kubernetes
F96021-01
April 2024