{"id":528,"date":"2022-02-28T07:56:50","date_gmt":"2022-02-28T07:56:50","guid":{"rendered":"https:\/\/cloudspert.com\/?p=528"},"modified":"2025-03-13T00:33:25","modified_gmt":"2025-03-13T00:33:25","slug":"opendistro-avec-cert-manager","status":"publish","type":"post","link":"https:\/\/cloudspert.com\/?p=528","title":{"rendered":"OpenDistro avec cert-manager"},"content":{"rendered":"<p>Dans notre premi\u00e8re partie de cet article, nous avons vu ensemble l\u2019installation d\u2019OpenDistro sur Kubernetes en utilisant des certificats auto-sign\u00e9s que presque personne ne trouve la motivation pour les g\u00e9rer. Ils trouvent que c\u2019est une t\u00e2che r\u00e9p\u00e9titive, ennuyeuse et qui demande plus de prudence au fur et \u00e0 mesure du nombre de certificats utilis\u00e9s.<\/p>\n<p>Si vous nous partagez le m\u00eame avis, nous vous conseillons de lire cette deuxi\u00e8me partie de l\u2019article et qui vous permettra de d\u00e9l\u00e9guer toute la gestion de ces certificats au cert-manager.<\/p>\n<p>D\u2019ailleurs, si vous n\u2019avez pas encore consult\u00e9 la premi\u00e8re partie de cet article, vous pouvez la trouver sur le lien suivant\u00a0:<\/p>\n<p><a href=\"https:\/\/abdellahtdj.medium.com\/opendistro-avec-openid-42bcf4e92701\">OpenDistro avec OpenID<\/a><\/p>\n<h3>cert-manager<\/h3>\n<p>cert-manager est un outil de gestion de certificats sur Kubernetes. Il d\u00e9livre des certificats \u00e0 partir de diverses sources telles que Let\u2019s Encrypt, HashiCorp Vault, Venafi, une paire de cl\u00e9s \u00e0 signature puis les pr\u00e9sente en tant que secrets aux applications.<\/p>\n<p>Comment pouvons nous le d\u00e9ployer sur un cluster kubernetes\u00a0?!<\/p>\n<h4>D\u00e9ploiement de cert-manager<\/h4>\n<p>cert-manager est tr\u00e8s simple \u00e0 d\u00e9ployer, nous avons besoin du helm et suivre les \u00e9tapes suivantes:<\/p>\n<pre>helm repo add jetstack <a href=\"https:\/\/charts.jetstack.io\/\">https:\/\/charts.jetstack.io<\/a><br \/>helm repo update<br \/>helm install <br \/>  cert-manager jetstack\/cert-manager <br \/>  --namespace cert-manager <br \/>  --create-namespace <br \/>  --version v1.4.0 <br \/>  <em>--set installCRDs=true<\/em><\/pre>\n<p>Et voil\u00e0 comme promis c\u2019est simple \u00e0 installer un cert-manager sur votre cluster. Maintenant, la prochaine \u00e9tape consiste \u00e0 configurer notre\u00a0Issuer.<\/p>\n<h4>Issuers<\/h4>\n<p>Un Issuer est une ressource Kubernetes qui repr\u00e9sente des autorit\u00e9s de certification (CA) capables de g\u00e9n\u00e9rer des certificats. Il existe de multiples types d\u2019\u00e9metteurs de certificats, les plus importants sont les suivants:<\/p>\n<ul>\n<li><strong>SelfSigned\u00a0<\/strong>: Les certificats seront sign\u00e9s en utilisant la m\u00eame cl\u00e9 priv\u00e9e attach\u00e9e au certificat sign\u00e9.<\/li>\n<li><strong>CA:<\/strong> Les certificats sont sign\u00e9s en utilisant une autorit\u00e9 de certification d\u00e9j\u00e0 import\u00e9e.<\/li>\n<li><strong>Vault:<\/strong> Cette option d\u00e9l\u00e8gue la signature du certificat \u00e0 vault, qui peut \u00eatre configur\u00e9e comme une\u00a0PKI.<\/li>\n<li><strong>ACME:<\/strong> ACME est l\u2019acronyme de Automated Certificate Management Environment, l\u2019un des exemples les plus connus d\u2019ACME est lets\u00a0encrypt.<\/li>\n<\/ul>\n<h4><strong>Configuration de\u00a0l\u2019Issuer<\/strong><\/h4>\n<pre>apiVersion: cert-manager.io\/v1alpha2                       <br \/>kind: Issuer                       <br \/>metadata:                         <br \/>  name: selfsigned-issuer                         <br \/>  namespace: opendistro                      <br \/>spec:                         <br \/>  selfSigned: {}<\/pre>\n<h4><strong>Certificate<\/strong><\/h4>\n<p>Les certificats sont \u00e9galement des ressources Kubernetes, cette ressource se base sur un Issuer pour \u00eatre g\u00e9n\u00e9r\u00e9e. Une fois cr\u00e9\u00e9s, le cert- manager va \u00e9tablir des secrets kubernetes pour stocker ces certificats qui seront pr\u00e9sent\u00e9s aux applications par la\u00a0suite.<\/p>\n<p>Pour g\u00e9n\u00e9rer les certificats pour notre OpenDistro, nous devons passer un manifeste kubernetes avec les options suivantes\u00a0:<\/p>\n<pre>apiVersion: cert-manager.io\/v1                       <br \/>kind: Certificate                       <br \/>metadata:                         <br \/>  name: es-transport-tls                         <br \/>  namespace: opendistro                       <br \/>spec:                         <br \/>  isCA: true                         <br \/>  duration: 2160h # 90d 2160h                         <br \/>  renewBefore: 168h # 7d 168h                         <br \/>  commonName: es-client                         <br \/>  dnsNames:                           <br \/>  - es-client                         <br \/>  privateKey:                           <br \/>    algorithm: RSA                           <br \/>    encoding: PKCS8                           <br \/>    size: 4096                         <br \/>  issuerRef:                          <br \/>    kind: Issuer                           <br \/>    name: selfsigned-issuer                         <br \/>  secretName: es-transport-tls<\/pre>\n<p>Ne vous inqui\u00e9tez pas, nous allons expliquer par la suite certaines options qui ne sont pas explicites:<br \/><strong>commonName:<\/strong> Il doit \u00eatre identique \u00e0 la valeur de node_dn dans la configuration d\u2019OpenDistro.<br \/><strong>encoding:<\/strong> par d\u00e9faut cert-manager g\u00e9n\u00e8re des privatekeys au format PKCS11 qui n\u2019est pas support\u00e9 par OpenDistro, donc nous devons le changer en PKCS8.<br \/><strong>secretName:<\/strong> le nom du secret Kubernetes o\u00f9 le certificat et la cl\u00e9 priv\u00e9e seront\u00a0stock\u00e9s.<\/p>\n<h4>Configuration d\u2019OpenDistro\u00a0:<\/h4>\n<p>Pour OpenDistro la configuration ainsi que le reste de l\u2019installation resteront les m\u00eames \u00e0 l\u2019exception de quelques options li\u00e9es aux noms des certificats.<\/p>\n<pre>......<br \/>elasticsearch:<br \/>......<br \/>  tls:<br \/>    existingCertSecret: es-transport-tls<br \/>    existingCertSecretCertSubPath: tls.crt<br \/>    existingCertSecretKeySubPath: tls.key<br \/>    existingCertSecretRootCASubPath: ca.crt<br \/>.........<\/pre>\n<p>Comme les cl\u00e9s secr\u00e8tes sont modifi\u00e9es, nous devons adapter la configuration. Pour le reste de l\u2019installation, elle restera la\u00a0m\u00eame.<\/p>\n<p>Une fois la modification est faite, vous pouvez proc\u00e9der \u00e0 l\u2019installation\u00a0:<\/p>\n<pre>helm upgrade --install <br \/>     -n opendistro  &lt;release_name&gt;  -f values.yaml <br \/>     \/opendistro-build\/helm\/opendistro-es<\/pre>\n<p>\u00e0 la fin de cet article, j\u2019esp\u00e8re que ce sujet vous a \u00e9t\u00e9 utile et comme d\u2019habitude, veuillez trouver tous les fichiers de la configuration n\u00e9cessaires sur mon\u00a0github.<\/p>\n<p><a href=\"https:\/\/github.com\/abdellahseddikpro\/blog\/tree\/master\/opendistro-cert-manager\">abdellahseddikpro\/blog<\/a><\/p>\n<p>Merci pour cette lecture et \u00e0 la prochaine avec un nouveau sujet et des nouvelles astuces.<\/p>\n<h3>Bey\u00a0!\u00a0!!<\/h3>\n<p><img decoding=\"async\" src=\"https:\/\/medium.com\/_\/stat?event=post.clientViewed&amp;referrerSource=full_rss&amp;postId=32bf9b7bdf23\" width=\"1\" height=\"1\" alt=\"\"\/><\/p>","protected":false},"excerpt":{"rendered":"<p>Dans notre premi\u00e8re partie de cet article, nous avons vu ensemble l\u2019installation d\u2019OpenDistro sur Kubernetes en utilisant des certificats auto-sign\u00e9s que presque personne ne trouve la motivation pour les g\u00e9rer. Ils trouvent que c\u2019est une t\u00e2che r\u00e9p\u00e9titive, ennuyeuse et qui demande plus de prudence au fur et \u00e0 mesure du nombre de certificats utilis\u00e9s. Si vous nous partagez le m\u00eame avis, nous vous conseillons de lire cette deuxi\u00e8me partie de l\u2019article et qui vous permettra de d\u00e9l\u00e9guer toute la gestion de ces certificats au cert-manager. D\u2019ailleurs, si vous n\u2019avez pas encore consult\u00e9 la premi\u00e8re partie de cet article, vous pouvez la trouver sur le lien suivant\u00a0: OpenDistro avec OpenID cert-manager cert-manager est un outil de gestion de certificats sur Kubernetes. Il d\u00e9livre des certificats \u00e0 partir de diverses sources telles que Let\u2019s Encrypt, HashiCorp Vault, Venafi, une paire de cl\u00e9s \u00e0 signature puis les pr\u00e9sente en tant que secrets aux applications. Comment pouvons nous le d\u00e9ployer sur un cluster kubernetes\u00a0?! D\u00e9ploiement de cert-manager cert-manager est tr\u00e8s simple \u00e0 d\u00e9ployer, nous avons besoin du helm et suivre les \u00e9tapes suivantes: helm repo add jetstack https:\/\/charts.jetstack.iohelm repo updatehelm install cert-manager jetstack\/cert-manager &#8211;namespace cert-manager &#8211;create-namespace &#8211;version v1.4.0 &#8211;set installCRDs=true Et voil\u00e0 comme promis c\u2019est simple \u00e0 installer un cert-manager sur votre cluster. Maintenant, la prochaine \u00e9tape consiste \u00e0 configurer notre\u00a0Issuer. Issuers Un Issuer est une ressource Kubernetes qui repr\u00e9sente des autorit\u00e9s de certification (CA) capables de g\u00e9n\u00e9rer des certificats. Il existe de multiples types d\u2019\u00e9metteurs de certificats, les plus importants sont les suivants: SelfSigned\u00a0: Les certificats seront sign\u00e9s en utilisant la m\u00eame cl\u00e9 priv\u00e9e attach\u00e9e au certificat sign\u00e9. CA: Les certificats sont sign\u00e9s en utilisant une autorit\u00e9 de certification d\u00e9j\u00e0 import\u00e9e. Vault: Cette option d\u00e9l\u00e8gue la signature du certificat \u00e0 vault, qui peut \u00eatre configur\u00e9e comme une\u00a0PKI. ACME: ACME est l\u2019acronyme de Automated Certificate Management Environment, l\u2019un des exemples les plus connus d\u2019ACME est lets\u00a0encrypt. Configuration de\u00a0l\u2019Issuer apiVersion: cert-manager.io\/v1alpha2 kind: Issuer metadata: name: selfsigned-issuer namespace: opendistro spec: selfSigned: {} Certificate Les certificats sont \u00e9galement des ressources Kubernetes, cette ressource se base sur un Issuer pour \u00eatre g\u00e9n\u00e9r\u00e9e. Une fois cr\u00e9\u00e9s, le cert- manager va \u00e9tablir des secrets kubernetes pour stocker ces certificats qui seront pr\u00e9sent\u00e9s aux applications par la\u00a0suite. Pour g\u00e9n\u00e9rer les certificats pour notre OpenDistro, nous devons passer un manifeste kubernetes avec les options suivantes\u00a0: apiVersion: cert-manager.io\/v1 kind: Certificate metadata: name: es-transport-tls namespace: opendistro spec: isCA: true duration: 2160h # 90d 2160h renewBefore: 168h # 7d 168h commonName: es-client dnsNames: &#8211; es-client privateKey: algorithm: RSA encoding: PKCS8 size: 4096 issuerRef: kind: Issuer name: selfsigned-issuer secretName: es-transport-tls Ne vous inqui\u00e9tez pas, nous allons expliquer par la suite certaines options qui ne sont pas explicites:commonName: Il doit \u00eatre identique \u00e0 la valeur de node_dn dans la configuration d\u2019OpenDistro.encoding: par d\u00e9faut cert-manager g\u00e9n\u00e8re des privatekeys au format PKCS11 qui n\u2019est pas support\u00e9 par OpenDistro, donc nous devons le changer en PKCS8.secretName: le nom du secret Kubernetes o\u00f9 le certificat et la cl\u00e9 priv\u00e9e seront\u00a0stock\u00e9s. Configuration d\u2019OpenDistro\u00a0: Pour OpenDistro la configuration ainsi que le reste de l\u2019installation resteront les m\u00eames \u00e0 l\u2019exception de quelques options li\u00e9es aux noms des certificats. &#8230;&#8230;elasticsearch:&#8230;&#8230; tls: existingCertSecret: es-transport-tls existingCertSecretCertSubPath: tls.crt existingCertSecretKeySubPath: tls.key existingCertSecretRootCASubPath: ca.crt&#8230;&#8230;&#8230; Comme les cl\u00e9s secr\u00e8tes sont modifi\u00e9es, nous devons adapter la configuration. Pour le reste de l\u2019installation, elle restera la\u00a0m\u00eame. Une fois la modification est faite, vous pouvez proc\u00e9der \u00e0 l\u2019installation\u00a0: helm upgrade &#8211;install -n opendistro &lt;release_name&gt; -f values.yaml \/opendistro-build\/helm\/opendistro-es \u00e0 la fin de cet article, j\u2019esp\u00e8re que ce sujet vous a \u00e9t\u00e9 utile et comme d\u2019habitude, veuillez trouver tous les fichiers de la configuration n\u00e9cessaires sur mon\u00a0github. abdellahseddikpro\/blog Merci pour cette lecture et \u00e0 la prochaine avec un nouveau sujet et des nouvelles astuces. Bey\u00a0!\u00a0!!<\/p>\n","protected":false},"author":3,"featured_media":635,"comment_status":"open","ping_status":"open","sticky":false,"template":"elementor_canvas","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[15],"tags":[],"class_list":["post-528","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-opendistro","entry","has-media"],"jetpack_featured_media_url":"https:\/\/cloudspert.com\/wp-content\/uploads\/2022\/02\/OPENDISTRO.webp","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/cloudspert.com\/index.php?rest_route=\/wp\/v2\/posts\/528","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cloudspert.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cloudspert.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cloudspert.com\/index.php?rest_route=\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/cloudspert.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=528"}],"version-history":[{"count":1,"href":"https:\/\/cloudspert.com\/index.php?rest_route=\/wp\/v2\/posts\/528\/revisions"}],"predecessor-version":[{"id":636,"href":"https:\/\/cloudspert.com\/index.php?rest_route=\/wp\/v2\/posts\/528\/revisions\/636"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cloudspert.com\/index.php?rest_route=\/wp\/v2\/media\/635"}],"wp:attachment":[{"href":"https:\/\/cloudspert.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=528"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cloudspert.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=528"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cloudspert.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=528"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}