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.

Sichern Sie Webhooks mit mutual Transport Layer Security (mTLS) mit K3s.

Diese Anleitung zeigt Ihnen, wie Sie die gegenseitige Transport Layer Security (mTLS) für Webhooks des SUSE Security Admission Controller-Stacks aktivieren, wenn Sie K3s als Ihre Kubernetes-Distribution verwenden.

Für weitere Informationen zur Absicherung der Webhooks, siehe die Referenzseite.

Voraussetzungen

Bevor Sie K3s installieren, müssen Sie eine Zertifizierungsstelle (CA) und ein Client-Zertifikat erstellen. Sie verwenden es, um die Kommunikation zwischen den Webhooks des Admission Controller und dem Kubernetes API-Server abzusichern.

Als ersten Schritt erstellen Sie das /etc/rancher/k3s/admission/certs-Verzeichnis:

sudo mkdir -p /etc/rancher/k3s/admission/certs

Erstellen Sie eine Root-CA und das Client-Zertifikat

Als root-Benutzer wechseln Sie in das /etc/rancher/k3s/admission/certs-Verzeichnis und erstellen alle benötigten Zertifikate:

export FQDN=mtls.kubewarden.io

# Create openssl config file
cat > openssl.cnf <<EOL
[ req ]
default_keyfile     = rootCA.key
distinguished_name  = req_distinguished_name
x509_extensions     = v3_ca
string_mask         = utf8only

[ req_distinguished_name ]
countryName         = Country Name (2 letter code)
countryName_default = US
stateOrProvinceName = State or Province Name (full name)
localityName        = Locality Name (eg, city)
organizationName    = Organization Name (eg, company)
commonName          = Common Name (eg, your domain or your CA name)

[ v3_ca ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical, CA:true, pathlen:1
keyUsage = critical, keyCertSign, cRLSign
EOL

# Create CA
openssl req -nodes -batch -x509 -sha256 -days 3650 -newkey rsa:4096 -keyout rootCA.key -out rootCA.crt \
  -config openssl.cnf

# Create CSR
openssl req -nodes -batch -newkey rsa:4096 -keyout client.key -out client.csr \
    -addext "subjectAltName = DNS:$FQDN"  -config openssl.cnf

# Create CRT
openssl x509 -req -CA rootCA.crt -CAkey rootCA.key -in client.csr -out client.crt -days 3650 -CAcreateserial \
    -extfile <(echo "subjectAltName=DNS:$FQDN")

# Print CRT

openssl x509 -text -noout -in client.crt

Dies erstellt die folgenden Dateien:

  • client.crt

  • client.csr

  • client.key

  • rootCA.crt

  • rootCA.key

  • rootCA.srl

Erstellen Sie die Kubernetes-Konfigurationsdatei

Erstellen Sie die /etc/rancher/k3s/admission/admission.yaml-Datei mit dem folgenden Inhalt:

# /etc/rancher/k3s/admission/admission.yaml
apiVersion: apiserver.config.k8s.io/v1
kind: AdmissionConfiguration
plugins:
- name: ValidatingAdmissionWebhook
  configuration:
    apiVersion: apiserver.config.k8s.io/v1
    kind: WebhookAdmissionConfiguration
    kubeConfigFile: "/etc/rancher/k3s/admission/kubeconfig"
- name: MutatingAdmissionWebhook
  configuration:
    apiVersion: apiserver.config.k8s.io/v1
    kind: WebhookAdmissionConfiguration
    kubeConfigFile: "/etc/rancher/k3s/admission/kubeconfig"

Erstellen Sie schließlich eine kubeconfig-Datei unter /etc/rancher/k3s/admission/kubeconfig:

# /etc/rancher/admission/kubeconfig
apiVersion: v1
kind: Config
users:
- name: "*.kubewarden.svc" # namespace where the kubewarden stack is deployed
  user:
    client-certificate: /etc/rancher/k3s/admission/certs/client.crt
    client-key: /etc/rancher/k3s/admission/certs/client.key

Erstellen Sie eine K3s-Konfigurationsdatei

Erstellen Sie eine K3s-Konfigurationsdatei unter /etc/rancher/k3s/config.yaml:

# /etc/rancher/k3s/config.yaml
kube-apiserver-arg:
- admission-control-config-file=/etc/rancher/k3s/admission/admission.yaml

Installieren Sie K3s

Installieren Sie K3s mit dem folgenden Befehl:

curl -sfL https://get.k3s.io | sh -

Warten Sie ab, bis die Installation abgeschlossen ist.

Installieren Sie den Admission Controller Stack

Voraussetzungen

Das Zertifikat der Root-CA, die das Kubernetes-Client-Zertifikat ausgestellt hat, muss dem Admission Controller Stack zur Verfügung stehen.

Die Root-CA ist unter /etc/rancher/k3s/admission/certs/rootCA.crt auf dem Kubernetes-Knoten verfügbar. Sie benötigen den Inhalt in einer ConfigMap im Namespace kubewarden. Sie speichern den Inhalt der rootCA.crt-Datei im Schlüssel mit dem Namen client-ca.crt.

Zuerst erstellen Sie den kubewarden Namespace:

kubectl create namespace kubewarden

Dann erstellen Sie den ConfigMap darin. Der folgende Befehl, der auf dem Kubernetes-Knoten ausgeführt wird, erledigt das:

kubectl create configmap -n kubewarden api-server-mtls \
    --from-file=client-ca.crt=/etc/rancher/k3s/admission/certs/rootCA.crt

Der Name des resultierenden ConfigMap ist api-server-mtls.

Installieren Sie den Admission Controller Stack

Installieren Sie den Admission Controller Stack wie im Schnellstartleitfaden beschrieben. Befolgen Sie alle Schritte, aber stellen Sie beim Installieren des kubewarden-controller Helm-Charts sicher, dass Sie die folgenden Werte aktivieren:

  • mTLS.enable: muss true sein.

  • mTLS.configMapName: muss der Name des zuvor erstellten ConfigMap sein.

Der ConfigMap Name ist api-server-mtls. Der Helm-Befehl zur Installation des kubewarden-controller lautet:

helm install --wait -n kubewarden kubewarden-controller kubewarden/kubewarden-controller \
    --set mTLS.enable=true \
    --set mTLS.configMapName=api-server-mtls

Sobald dieser Befehl abgeschlossen ist, sichert mTLS die Installation des Admission Controller Stacks und seiner Webhooks.