Hinweis:
- Dieses Tutorial erfordert Zugriff auf Oracle Cloud. Informationen zum Anmelden für einen kostenlosen Account 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 die Werte, die für Ihre Cloud-Umgebung spezifisch sind.
Setzen Sie interne Oracle Container Engine for Kubernetes Load Balancer-Services mit Kyverno durch
Einführung
Oracle Cloud Infrastructure Container Engine for Kubernetes (OKE) ist ein vollständig verwalteter, skalierbarer und hochverfügbarer Service, mit dem Sie Ihre Containeranwendungen in der Cloud bereitstellen können.
Anwendungen, die im OKE-Cluster ausgeführt werden, können mit Services des Typs LoadBalancer verfügbar gemacht werden. Für jeden Service erstellt der integrierte OKE-Cloud-Controller-Manager einen Oracle Cloud Infrastructure-(OCI-)Load Balancer und konfiguriert das Backend automatisch so, dass die OKE-Worker-Knoten enthalten sind. Die OCI Load Balancer-Konfiguration kann mit Annotationen gesteuert werden. Im Falle ihrer Abwesenheit nimmt der Cloud-Controller-Manager die folgenden Standardwerte an:
- Interner Load Balancer:
false - Ausprägung:
fixed - Bandbreite:
100Mbps - Listener-Protokoll:
TCP
Mit Kyverno können wir die Webhooks für die gegenseitige Zulassung von Kubernetes nutzen und eine Policy mit einer Gruppe von Standardanmerkungen definieren, die Services des Typs LoadBalancer hinzugefügt werden sollen, die im OKE-Cluster erstellt wurden.
Ziele
-
Stellen Sie Kyverno für das OKE-Cluster bereit.
-
Erfahren Sie, wie Sie mithilfe von Kyverno die Erstellung interner Load Balancer standardmäßig durchsetzen.
Voraussetzungen
-
Registrieren Sie sich, oder melden Sie sich bei Ihrem Oracle Cloud-Account an.
-
Verwenden Sie ein vorhandenes OKE-Cluster, oder erstellen Sie eines mit dem Schnellerstellungsablauf.
-
kubectlwurde für den Zugriff auf das OKE-Cluster installiert und konfiguriert.
Aufgabe 1: Kyverno installieren
Auf der Kyverno-Webseite werden zwei Methoden zur Installation von Kyverno in einem Kubernetes-Cluster beschrieben:
- Helm-Diagramme
- YAMLs
In diesem Tutorial wird die Installation von Kyverno mithilfe der Helm-Diagramme erläutert.
Aufgabe 1.1: helm installieren
-
Gehen Sie je nach aktiviertem Betriebssystem durch dieses Handbuch, und installieren Sie
helm. -
Prüfen Sie, ob die Installation erfolgreich war, indem Sie den folgenden Befehl ausführen:
$ helm version version.BuildInfo{Version:"v3.8.1", GitCommit:"5cb9af4b1b271d11d7a97a71df3ac337dd94ad37", GitTreeState:"clean", GoVersion:"go1.17.5"}
Aufgabe 1.2: Kyverno im Standalone-Modus installieren
-
Fügen Sie das Kyverno Helm-Repository hinzu.
$ helm repo add kyverno https://kyverno.github.io/kyverno/ "kyverno" has been added to your repositories -
Scannen Sie das neue Repository nach Diagrammen.
$ helm repo update Hang tight while we grab the latest from your chart repositories... ...Successfully got an update from the "kyverno" chart repository Update Complete. ⎈Happy Helming!⎈ -
Installieren Sie Kyverno im Namespace
kyverno.$ helm install kyverno kyverno/kyverno -n kyverno --create-namespace NAME: kyverno LAST DEPLOYED: Fri Jun 16 17:50:48 2023 NAMESPACE: kyverno STATUS: deployed REVISION: 1 NOTES: Chart version: 3.0.1 Kyverno version: v1.10.0 Thank you for installing kyverno! Your release is named kyverno. The following components have been installed in your cluster: - CRDs - Admission controller - Reports controller - Cleanup controller - Background controller
Aufgabe 2: Servicestandardwerte mit ClusterPolicy definieren
-
Erstellen Sie eine Datei mit dem Namen
enforce-internal-loadbalancer.yaml. -
Kopieren Sie den Text, und fügen Sie ihn in die Datei ein.
apiVersion: kyverno.io/v1 # The `ClusterPolicy` kind applies to the resources deployed in any namespace. kind: ClusterPolicy metadata: name: mutate-oci-services spec: rules: # As part of this rule we intend to mutate Flexible Load Balancers. - name: mutate-lb-services # We look for all requests to Create or Update Kubernetes Services. match: resources: kinds: - Service operations: - CREATE - UPDATE # We exclude services with the label: "service-type: external". exclude: resources: selector: matchLabels: service-type: "external" # Out of all the services we are interested in those of type Load Balancer where the annotation oci.oraclecloud.com/load-balancer-type is not present or equal to "nlb". preconditions: all: - key: "" operator: Equals value: LoadBalancer - key: "" operator: NotEquals value: "nlb" # We mutate the request by appending the annotations required to create an internal Load Balancer. mutate: patchStrategicMerge: metadata: annotations: service.beta.kubernetes.io/oci-load-balancer-internal: "true" # service.beta.kubernetes.io/oci-load-balancer-subnet1: "ocid1.subnet.oc1...3gi7y5a" # As part of this rule we intend to mutate Network Load Balancers. - name: mutate-nlb-services # We look for all requests to Create or Update Kubernetes Services with the annotation oci.oraclecloud.com/load-balancer-type: "nlb". match: resources: kinds: - Service annotations: oci.oraclecloud.com/load-balancer-type: "nlb" operations: - CREATE - UPDATE # We exclude services with the label: "service-type: external". exclude: resources: selector: matchLabels: service-type: "external" # Out of all the services we are interested in those of type Load Balancer. preconditions: all: - key: "" operator: Equals value: LoadBalancer # We mutate the request by appending the annotations required to create an internal NetworkLoad Balancer. mutate: patchStrategicMerge: metadata: annotations: oci-network-load-balancer.oraclecloud.com/internal: "true" # oci-network-load-balancer.oraclecloud.com/subnet: "ocid1.subnet.oc1...3gi7y5a" -
Speichern Sie die Datei.
Hinweis: Eine Liste aller unterstützten Annotationen in OKE für den Servicetyp LoadBalancer finden Sie unter Zusammenfassung der Annotationen für Load Balancer und Network Load Balancer.
-
Erstellen Sie
ClusterPolicyim Cluster, und führen Sie den folgenden Befehl aus, um die Policy durchzusetzen:$ kubectl apply -f enforce-internal-loadbalancer.yaml clusterpolicy.kyverno.io/mutate-oci-services created
Aufgabe 3: Testen
-
Erstellen Sie eine Datei mit dem Namen
test-service.yaml, die den folgenden Text enthält:apiVersion: v1 kind: Service metadata: name: my-nginx-svc labels: app: nginx # service-type: external annotations: oci.oraclecloud.com/load-balancer-type: "lb" spec: type: LoadBalancer ports: - port: 80 selector: app: nginx -
Prüfen Sie, ob die erforderlichen Annotationen zum Erstellen einer internen LoadBalancer mit dem folgenden Befehl hinzugefügt werden:
$ kubectl apply -f test_service.yaml --dry-run=server -o json | jq ".metadata.annotations" { "kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"v1\",\"kind\":\"Service\",\"metadata\":{\"annotations\":{\"oci.oraclecloud.com/load-balancer-type\":\"lb\"},\"labels\":{\"app\":\"nginx\"},\"name\":\"my-nginx-svc\",\"namespace\":\"default\"},\"spec\":{\"ports\":[{\"port\":80}],\"selector\":{\"app\":\"nginx\"},\"type\":\"LoadBalancer\"}}\n", "oci.oraclecloud.com/load-balancer-type": "lb", "policies.kyverno.io/last-applied-patches": "mutate-lb-services.mutate-oci-services.kyverno.io: added /metadata/annotations/service.beta.kubernetes.io~1oci-load-balancer-internal\n", "service.beta.kubernetes.io/oci-load-balancer-internal": "true" } -
Sie können prüfen, ob der interne Load Balancer erfolgreich erstellt wurde, indem Sie den folgenden Befehl ausführen:
$ kubectl apply -f test_service.yaml
Aufgabe 4: Bereinigen
-
Löschen Sie den Load Balancer, der während des Tests erstellt wurde:
$ kubectl delete -f test_service.yaml -
Deinstallieren Sie Kyverno, indem Sie den folgenden Befehl ausführen:
$ helm uninstall kyverno -n kyverno
Verwandte Links
- OKE-Dokumentation
- OKE-Services des Typs Load Balancer
- Oracle Cloud Free Tier
- Bei Oracle Cloud-Account anmelden
- Kyverno-Homepage
Bestätigungen
- Autor - Andrei Ilas (Principal Cloud Architect)
Weitere Lernressourcen
Sehen Sie sich andere Übungen zu docs.oracle.com/learn an, oder greifen Sie auf weitere kostenlose Lerninhalte im Oracle Learning YouTube-Kanal zu. Besuchen Sie außerdem die Website education.oracle.com/learning-explorer, um Oracle Learning Explorer zu werden.
Produktdokumentation finden Sie im Oracle Help Center.
Enforce internal Oracle Container Engine for Kubernetes Load Balancer services using Kyverno
F83798-01
July 2023
Copyright © 2023, Oracle and/or its affiliates.