Authentification par certificat client : le broker vérifie que le client présente un certificat signé par la CA clients Strimzi. Les ACLs utilisent le CN du certificat (nom du KafkaUser).
Voir aussi : Authentification et ACLs · Listener SCRAM
boa-lab-kafka-bootstrap.kafka.svc:9093
Depuis un pod dans le cluster ; depuis l’extérieur, utiliser un ingress/route ou kubectl port-forward vers le service bootstrap.
export KUBECONFIG=/Users/modoulobolysow/Downloads/lab-boa-kubeconfig.yaml
kubectl apply -f manifests/examples/kafka-user-mtls.yaml
kubectl wait kafkauser/app-mtls -n kafka --for=condition=Ready --timeout=120sAdapter metadata.name et spec.authorization.acls selon vos topics/groupes.
Strimzi crée le secret app-mtls (même nom que le KafkaUser).
kubectl get secret boa-lab-cluster-ca-cert -n kafka \
-o jsonpath='{.data.ca\.crt}' | base64 -d > ca.crtkubectl get secret app-mtls -n kafka \
-o jsonpath='{.data.user\.crt}' | base64 -d > app-mtls.crt
kubectl get secret app-mtls -n kafka \
-o jsonpath='{.data.user\.key}' | base64 -d > app-mtls.keyLe secret contient aussi user.p12 (mot de passe souvent vide ou documenté par Strimzi) :
kubectl get secret app-mtls -n kafka \
-o jsonpath='{.data.user\.p12}' | base64 -d > app-mtls.p12bootstrap.servers=boa-lab-kafka-bootstrap.kafka.svc:9093
security.protocol=SSL
ssl.truststore.type=PEM
ssl.truststore.location=ca.crt
ssl.keystore.type=PEM
ssl.keystore.certificate.chain=app-mtls.crt
ssl.keystore.key=app-mtls.keyAvec PKCS12 :
bootstrap.servers=boa-lab-kafka-bootstrap.kafka.svc:9093
security.protocol=SSL
ssl.truststore.location=ca.crt
ssl.truststore.type=PEM
ssl.keystore.location=app-mtls.p12
ssl.keystore.type=PKCS12
ssl.keystore.password=conf = {
"bootstrap.servers": "boa-lab-kafka-bootstrap.kafka.svc:9093",
"security.protocol": "SSL",
"ssl.ca.location": "ca.crt",
"ssl.certificate.location": "app-mtls.crt",
"ssl.key.location": "app-mtls.key",
}export KUBECONFIG=/Users/modoulobolysow/Downloads/lab-boa-kubeconfig.yaml
# Copier les fichiers dans le pod broker pour un test rapide
kubectl cp ca.crt kafka/boa-lab-boa-lab-brokers-0:/tmp/ca.crt
kubectl cp app-mtls.crt kafka/boa-lab-boa-lab-brokers-0:/tmp/user.crt
kubectl cp app-mtls.key kafka/boa-lab-boa-lab-brokers-0:/tmp/user.key
kubectl exec -n kafka boa-lab-boa-lab-brokers-0 -- \
bin/kafka-topics.sh \
--bootstrap-server boa-lab-kafka-bootstrap.kafka.svc:9093 \
--command-config /tmp/client-ssl.properties \
--listCréer /tmp/client-ssl.properties dans le pod (ou monter via ConfigMap) :
security.protocol=SSL
ssl.truststore.type=PEM
ssl.truststore.location=/tmp/ca.crt
ssl.keystore.type=PEM
ssl.keystore.location=/tmp/user.crt
ssl.keystore.key.location=/tmp/user.key
ssl.keystore.locationpour PEM peut varier selon la version ; utiliserssl.keystore.certificate.chainetssl.keystore.keycomme en section 3 si besoin.
Le principal mTLS correspond au nom du KafkaUser (app-mtls). Exemple dans kafka-user-mtls.yaml : droits sur le topic orders et les consumer groups préfixés app-mtls-.
Sans ACL adaptée : ClusterAuthorizationException ou TopicAuthorizationException.
Strimzi renouvelle les certificats utilisateur avant expiration. Les pods clients doivent recharger les fichiers ou redémarrer si les certs sont montés depuis un secret Kubernetes (recommandé : montage volume sur le secret, mise à jour automatique).
| Erreur | Piste |
|---|---|
SSL handshake failed |
Mauvais ca.crt, ou connexion sur le mauvais port (9092 au lieu de 9093) |
Authentication failed |
Certificat non émis par la CA clients Strimzi |
Authorization failed |
ACL manquante — vérifier kubectl describe kafkauser |