Skip to content

Latest commit

 

History

History
139 lines (100 loc) · 4.27 KB

File metadata and controls

139 lines (100 loc) · 4.27 KB

Listener mTLS (port 9093)

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

Bootstrap

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.

1. Créer l’utilisateur et les ACLs

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=120s

Adapter metadata.name et spec.authorization.acls selon vos topics/groupes.

2. Récupérer les certificats

Strimzi crée le secret app-mtls (même nom que le KafkaUser).

CA du cluster (faire confiance aux brokers)

kubectl get secret boa-lab-cluster-ca-cert -n kafka \
  -o jsonpath='{.data.ca\.crt}' | base64 -d > ca.crt

Certificat et clé client

kubectl 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.key

Keystore PKCS12 (Java)

Le 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.p12

3. Configuration client

Java (fichier properties)

bootstrap.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.key

Avec 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=

Python (confluent-kafka)

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",
}

4. Tester la connexion

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 \
  --list

Cré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.location pour PEM peut varier selon la version ; utiliser ssl.keystore.certificate.chain et ssl.keystore.key comme en section 3 si besoin.

5. ACLs (rappel)

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.

6. Renouvellement

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).

Dépannage

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