Este documento foi traduzido usando tecnologia de tradução automática de máquina. Sempre trabalhamos para apresentar traduções precisas, mas não oferecemos nenhuma garantia em relação à integridade, precisão ou confiabilidade do conteúdo traduzido. Em caso de qualquer discrepância, a versão original em inglês prevalecerá e constituirá o texto official.

Esta é uma documentação não divulgada para Admission Controller 1.34-dev.

Proteja webhooks com mTLS com K3s

Este guia mostra como ativar o protocolo TLS mútuo (mTLS) para webhooks do stack SUSE Security Admission Controller ao usar K3s como sua distribuição Kubernetes.

Para mais informações sobre como fortalecer os webhooks, consulte a página de referência.

Pré-requisitos

Antes de instalar o K3s, você precisa criar uma CA (autoridade certificadora) e um certificado de cliente. Você usa para proteger a comunicação entre os Admission Controller webhooks e o servidor API do Kubernetes.

Como primeiro passo, crie o diretório /etc/rancher/k3s/admission/certs:

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

Crie uma CA raiz e o certificado de cliente

Como usuário root, mude o diretório para o diretório /etc/rancher/k3s/admission/certs e crie todos os certificados necessários:

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

Isso cria os seguintes arquivos:

  • client.crt

  • client.csr

  • client.key

  • rootCA.crt

  • rootCA.key

  • rootCA.srl

Crie o arquivo de configuração do Kubernetes

Crie o arquivo /etc/rancher/k3s/admission/admission.yaml com o seguinte conteúdo:

# /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"

Por fim, crie um arquivo kubeconfig em /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

Crie um arquivo de configuração do K3s

Crie um arquivo de configuração do K3s em /etc/rancher/k3s/config.yaml:

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

Instale o K3s

Instale o K3s usando o seguinte comando:

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

Aguarde a conclusão da instalação.

Instale o Admission Controller stack

Pré-requisitos

O certificado da CA raiz, que emitiu o certificado do cliente Kubernetes, precisa estar disponível para o Admission Controller stack.

A CA raiz está disponível em /etc/rancher/k3s/admission/certs/rootCA.crt no nó Kubernetes. Você precisa do seu conteúdo em um ConfigMap sob o namespace kubewarden. Você armazena o conteúdo do arquivo rootCA.crt na chave chamada client-ca.crt.

Primeiro, crie o namespace kubewarden:

kubectl create namespace kubewarden

Depois, crie o ConfigMap nele. O seguinte comando, executado no nó Kubernetes, faz isso:

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

O nome do ConfigMap resultante é api-server-mtls.

Instale o Admission Controller stack

Instale o Admission Controller stack conforme descrito no guia de início rápido. Siga todos os passos, mas ao instalar o chart Helm kubewarden-controller, certifique-se de habilitar os seguintes valores:

  • mTLS.enable: deve ser true.

  • mTLS.configMapName: deve ser o nome do ConfigMap criado anteriormente.

O nome do ConfigMap é api-server-mtls. O comando Helm para instalar o kubewarden-controller é:

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

Uma vez que este comando termine, o mTLS garante a instalação do Admission Controller stack e seus webhooks.