|
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. |
|
Dies ist eine unveröffentlichte Dokumentation für Admission Controller 1.34-dev. |
Tracing-Kurzanleitung
Dieser Abschnitt zeigt, wie Sie die Tracing-Unterstützung für den Policy Server aktivieren.
|
Bevor Sie fortfahren, stellen Sie sicher, dass Sie den vorherigen OpenTelemetry Abschnitt dieser Dokumentation abgeschlossen haben. Es ist erforderlich, damit dieser Abschnitt korrekt funktioniert. |
Tracing ermöglicht es Ihnen, detaillierte Informationen über die Richtlinienbewertungen zu sammeln. Es kann ein nützliches Werkzeug zur Fehlersuche bei Problemen in Ihrer SUSE Security Admission Controller Bereitstellung und den Richtlinien sein.
Sie verwenden Jaeger --, um Trace-Ereignisse zu empfangen, zu speichern und zu visualisieren.
Installieren Sie Jaeger
Sie verwenden den Jaeger Operator, um alle verschiedenen Jaeger-Komponenten zu verwalten. Sie können den Jaeger-Operator mit Helm-Charts installieren.
|
Zum Zeitpunkt des Schreibens (2022-06-21) sind nur bestimmte Versionen von Jaeger mit Cert Manager kompatibel, siehe das Kompatibilitätsdiagramm. |
Um das Helm-Chart zu installieren:
helm repo add jaegertracing https://jaegertracing.github.io/helm-charts
helm upgrade -i --wait \
--namespace jaeger \
--create-namespace \
--version 2.49.0 \
jaeger-operator jaegertracing/jaeger-operator \
--set rbac.clusterRole=true
|
Dies ist nicht für die Produktionsbereitstellung geeignet. Sie sollten die offizielle Dokumentation von Jaeger lesen. |
Um eine Jaeger-Ressource zu erstellen:
kubectl apply -f - <<EOF
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
name: my-open-telemetry
namespace: jaeger
spec: {}
EOF
Nach der Erstellung der Jaeger-Operator-Ressourcen haben Sie einen Service unter
my-open-telemetry-collector.jaeger.svc.cluster.local. Die Jaeger Query UI wird durch den my-open-telemetry-query Service im jaeger Namespace bereitgestellt.
Installieren Sie Admission Controller
Jetzt können Sie mit der Bereitstellung von Admission Controller auf die übliche Weise fortfahren.
|
Das |
Als ersten Schritt fügen Sie das Helm-Repository hinzu, das Admission Controller enthält:
helm repo add kubewarden https://charts.kubewarden.io
Dann installieren Sie die benutzerdefinierten Ressourcenbeschreibungen (CRDs), die von Admission Controller definiert sind:
helm install --wait \
--namespace kubewarden \
--create-namespace \
kubewarden-crds kubewarden/kubewarden-crds
Jetzt können Sie den Rest des Admission Controller Stacks bereitstellen. Das offizielle kubewarden-defaults Helm-Chart erstellt einen PolicyServer mit dem Namen default. Sie möchten, dass diese PolicyServer-Instanz das Tracing aktiviert hat.
Um das zu tun, müssen Sie einige zusätzliche Werte für das kubewarden-controller Chart angeben. Sie sollten eine values.yaml Datei mit folgendem Inhalt erstellen:
telemetry:
mode: sidecar
tracing: True
sidecar:
tracing:
jaeger:
endpoint: "my-open-telemetry-collector.jaeger.svc.cluster.local:4317"
tls:
insecure: true
|
Zur Vereinfachung gibt es keine Verschlüsselung der Kommunikation zwischen dem OpenTelemetry Collector und dem Jaeger-Endpunkt. Wiederum ist dies ungeeignet für eine Produktionsbereitstellung. Konsultieren Sie die offizielle Dokumentation von Jaeger. |
Dann können Sie mit der Installation der Helm-Charts fortfahren:
helm install --wait --namespace kubewarden --create-namespace \
--values values.yaml \
kubewarden-controller kubewarden/kubewarden-controller
helm install --wait --namespace kubewarden --create-namespace \
kubewarden-defaults kubewarden/kubewarden-defaults
Dies erstellt die default Instanz von PolicyServer:
kubectl get policyservers.policies.kubewarden.io
NAME AGE
default 3m7s
Wenn Sie sich den Pod, der die PolicyServer-Instanz ausführt, genauer ansehen, können Sie sehen, dass er zwei Container enthält. Der policy-server und der OpenTelemetry Collector-Sidecar otc-container.
Durchsetzung einer Richtlinie
Sie beginnen mit der Bereitstellung der safe-labels Richtlinie.
Sie möchten, dass die Richtlinie nur in Namespaces durchgesetzt wird, die ein Label environment mit einem Wert von production haben.
Zu einem Namespace, der ein solches Label hat:
kubectl apply -f - <<EOF
apiVersion: v1
kind: Namespace
metadata:
name: team-alpha-prod
labels:
environment: production
EOF
Als Nächstes können Sie eine ClusterAdmissionPolicy definieren:
kubectl apply -f - <<EOF
apiVersion: policies.kubewarden.io/v1
kind: ClusterAdmissionPolicy
metadata:
name: safe-labels
spec:
module: registry://ghcr.io/kubewarden/policies/safe-labels:v0.1.6
settings:
mandatory_labels:
- owner
rules:
- apiGroups:
- apps
apiVersions:
- v1
resources:
- deployments
operations:
- CREATE
- UPDATE
namespaceSelector:
matchExpressions:
- key: environment
operator: In
values: ["production"]
mutating: false
EOF
Sie müssen warten, bis die Richtlinie aktiv wird:
kubectl wait --for=condition=PolicyActive clusteradmissionpolicy/safe-labels
Sobald die Richtlinie aktiv ist, können Sie es versuchen:
kubectl apply -f - <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
namespace: team-alpha-prod
labels:
owner: octocat
spec:
selector:
matchLabels:
app: nginx
replicas: 0
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
EOF
Die Richtlinie erlaubt die Erstellung dieses Deployment-Objekts, da sie die Richtlinie nicht verletzt.
Die Richtlinie blockiert dieses Deployment-Objekt:
kubectl apply -f - <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment-without-labels
namespace: team-alpha-prod
spec:
selector:
matchLabels:
app: nginx
replicas: 0
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
EOF
Die Richtlinie wird in einem anderen Namespace nicht durchgesetzt.
Dieser Befehl erstellt einen neuen Namespace mit dem Namen team-alpha-staging:
kubectl apply -f - <<EOF
apiVersion: v1
kind: Namespace
metadata:
name: team-alpha-staging
labels:
environment: staging
EOF
Die Richtlinie erlaubt die Erstellung einer Deployment-Ressource ohne Labels im Namespace team-alpha-staging:
kubectl apply -f - <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment-without-labels
namespace: team-alpha-staging
spec:
selector:
matchLabels:
app: nginx
replicas: 0
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
EOF
Wie erwartet, wird diese Ressource erfolgreich erstellt.
Erkundung der Jaeger UI
Sie können die Trace-Ereignisse sehen, die von der PolicyServer-Instanz an Jaeger gesendet werden, da ein neuer Dienst kubewarden-policy-server in der UI aufgeführt ist:
Der Jaeger-Collector empfängt die von Ihrem PolicyServer generierten Traces.
Wenn Sie Traefik im vorherigen Leitfaden installiert haben, geben Sie die Jaeger Query UI mit diesem Ingress frei:
kubectl apply -f - <<EOF
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-open-telemetry-query
namespace: jaeger
spec:
ingressClassName: traefik
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-open-telemetry-query
port:
number: 16686
EOF
Um auf die Jaeger UI mit Traefik zuzugreifen, führen Sie aus:
kubectl -n traefik port-forward service/traefik 8080:80
Gehen Sie dann zu http://localhost:8080.
Wenn Sie Traefik umgehen möchten, greifen Sie direkt auf Jaeger zu:
kubectl -n jaeger port-forward service/my-open-telemetry-query 16686
Gehen Sie dann zu http://localhost:16686.