Dies ist eine unveröffentlichte Dokumentation für Admission Controller 1.37-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.