{"id":827,"date":"2020-05-07T09:35:13","date_gmt":"2020-05-07T07:35:13","guid":{"rendered":"https:\/\/loeilduse.fr\/?p=827"},"modified":"2020-05-07T10:55:32","modified_gmt":"2020-05-07T08:55:32","slug":"ajouter-un-self-signed-certificat-dans-kubernetes-avec-containerd","status":"publish","type":"post","link":"https:\/\/loeilduse.fr\/?p=827&lang=fr","title":{"rendered":"Ajouter un self-signed certificat dans Kubernetes avec Containerd"},"content":{"rendered":"<p style=\"text-align: justify;\"><span style=\"font-family: trebuchet ms, geneva, sans-serif;\">Dans cet article <span style=\"font-size: 10pt;\"><a href=\"https:\/\/loeilduse.fr\/?p=765\">(D\u00e9ployer Harbor avec type loadBalancer)<\/a><\/span> j&#8217;ai expliqu\u00e9 comment d\u00e9ployer Habor et utiliser le certificat self-signed pour que Docker puisse l&#8217;utiliser. Si vous utilisez Kubernetes avec docker, vous pouvez aussi suivre cette proc\u00e9dure sur chaque worker node. Sinon vous risquez d&#8217;avoir l&#8217;erreur suivante :<\/span><\/p>\n<p><span style=\"font-size: 10pt;\"><em>Unknown desc = failed to pull and unpack image &#8220;harbor.cpod-tkg.az-lab.shwrfr.com\/memecached\/hello-world:latest&#8221;: failed to resolve reference &#8220;harbor.cpod-tkg.az-lab.shwrfr.com\/memecached\/hello-world:latest&#8221;: failed to do request: Head https:\/\/harbor.cpod-tkg.az-lab.shwrfr.com\/v2\/memecached\/hello-world\/manifests\/latest: <span style=\"color: #ff0000;\"><strong>x509: certificate signed by unknown authority<\/strong><\/span><\/em><\/span><br \/>\n<span style=\"font-size: 10pt;\"><em>Warning Failed 12s (x2 over 24s) kubelet, tkg-utility-md-0-798c695db5-pjgsk Error: ErrImagePull<\/em><\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-family: trebuchet ms, geneva, sans-serif;\"> Si vous utilisez Kubernetes avec Containerd, la proc\u00e9dure est diff\u00e9rente. Mon coll\u00e8gue Rob Hardt <span style=\"font-size: 10pt;\">(<a href=\"https:\/\/gist.github.com\/rhardt-pivotal\/\">https:\/\/gist.github.com\/rhardt-pivotal\/<\/a>)<\/span> a d\u00e9velopp\u00e9 un script pour \u00e7a : <a href=\"https:\/\/gist.githubusercontent.com\/rhardt-pivotal\/4aa09ced6302194561936717262bb203\/raw\/623c707748925c969c525ade4bb432f95b61cff0\/node-ca-updater-daemonset.yaml\"><span style=\"font-size: 10pt;\">https:\/\/gist.githubusercontent.com\/rhardt-pivotal\/4aa09ced6302194561936717262bb203\/raw\/623c707748925c969c525ade4bb432f95b61cff0\/node-ca-updater-daemonset.yaml<\/span><\/a><\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-family: trebuchet ms, geneva, sans-serif;\">Il faut n\u00e9anmoins modifier les 3 champs en rouge :<\/span><\/p>\n<p><span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">apiVersion: v1<\/span><\/em><\/span><br \/>\n<span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">data:<\/span><\/em><\/span><br \/>\n<span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">\u00a0 ca.pem: |+<\/span><\/em><\/span><br \/>\n<span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">\u00a0\u00a0\u00a0 &#8212;&#8211;BEGIN CERTIFICATE&#8212;&#8211;<\/span><\/em><\/span><br \/>\n<span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">\u00a0\u00a0\u00a0 <span style=\"color: #ff0000; font-size: 12pt;\"><strong>Mettre votre certificat<\/strong><\/span><\/span><\/em><\/span><br \/>\n<span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">\u00a0\u00a0\u00a0 &#8212;&#8211;END CERTIFICATE&#8212;&#8211;<\/span><\/em><\/span><\/p>\n<p><span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">kind: ConfigMap<\/span><\/em><\/span><br \/>\n<span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">metadata:<\/span><\/em><\/span><br \/>\n<span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">\u00a0name: trusted-ca-cm<\/span><\/em><\/span><br \/>\n<span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">\u00a0namespace: default<\/span><\/em><\/span><\/p>\n<p><span style=\"font-size: 10pt;\">\u00a0\u00a0 &#8212;-<\/span><\/p>\n<p><span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">apiVersion: v1<\/span><\/em><\/span><br \/>\n<span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">data:<\/span><\/em><\/span><br \/>\n<span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">\u00a0\u00a0\u00a0 build-ca.sh: &#8220;#!\/usr\/bin\/env bash \\nset -euxo pipefail\\ntdnf update \\ntdnf install -y ca-certificates\\ntdnf install -y openssl-c_rehash\\necho \\&#8221;$TRUSTED_CERT\\&#8221; &gt; \/etc\/ssl\/certs\/my-trusted-cert.pem\\n\/usr\/bin\/rehash_ca_certificates.sh\\ncurl -vv https:\/\/<span style=\"font-size: 12pt;\"><strong><span style=\"color: #ff0000;\">&lt;Votre URL HARBOR&gt;<\/span><\/strong><\/span>\\n&#8221;<\/span><\/em><\/span><br \/>\n<span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">kind: ConfigMap<\/span><\/em><\/span><br \/>\n<span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">metadata:<\/span><\/em><\/span><br \/>\n<span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">\u00a0\u00a0\u00a0 name: rehash-script<\/span><\/em><\/span><br \/>\n<span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">\u00a0\u00a0\u00a0 namespace: default<\/span><\/em><\/span><br \/>\n<span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">&#8212;\u00a0\u00a0\u00a0<\/span><\/em><\/span><br \/>\n<span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">apiVersion: apps\/v1<\/span><\/em><\/span><br \/>\n<span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">kind: DaemonSet<\/span><\/em><\/span><br \/>\n<span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">metadata:<\/span><\/em><\/span><br \/>\n<span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">\u00a0 name: trusted-ca-updater<\/span><\/em><\/span><br \/>\n<span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">\u00a0 namespace: default<\/span><\/em><\/span><br \/>\n<span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">\u00a0 labels:<\/span><\/em><\/span><br \/>\n<span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">\u00a0\u00a0\u00a0 k8s-app: trusted-ca-updater<\/span><\/em><\/span><br \/>\n<span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">spec:<\/span><\/em><\/span><br \/>\n<span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">\u00a0 selector:<\/span><\/em><\/span><br \/>\n<span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">\u00a0\u00a0\u00a0 matchLabels:<\/span><\/em><\/span><br \/>\n<span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">\u00a0\u00a0\u00a0\u00a0\u00a0 name: trusted-ca-updater<\/span><\/em><\/span><br \/>\n<span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">\u00a0 template:<\/span><\/em><\/span><br \/>\n<span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">\u00a0\u00a0\u00a0 metadata:<\/span><\/em><\/span><br \/>\n<span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">\u00a0\u00a0\u00a0\u00a0\u00a0 labels:<\/span><\/em><\/span><br \/>\n<span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 name: trusted-ca-updater<\/span><\/em><\/span><br \/>\n<span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">\u00a0\u00a0\u00a0 spec:<\/span><\/em><\/span><br \/>\n<span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">\u00a0\u00a0\u00a0\u00a0\u00a0 tolerations:<\/span><\/em><\/span><br \/>\n<span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">\u00a0\u00a0\u00a0\u00a0\u00a0 # this toleration is to have the daemonset runnable on master nodes<\/span><\/em><\/span><br \/>\n<span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">\u00a0\u00a0\u00a0\u00a0\u00a0 # remove it if your masters can&#8217;t run pods<\/span><\/em><\/span><br \/>\n<span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">\u00a0\u00a0\u00a0\u00a0\u00a0 &#8211; key: node-role.kubernetes.io\/master<\/span><\/em><\/span><br \/>\n<em><span style=\"font-family: courier new, courier, monospace;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 effect: NoSchedule<\/span><\/em><br \/>\n<em><span style=\"font-family: courier new, courier, monospace;\">\u00a0\u00a0\u00a0\u00a0\u00a0 initContainers:<\/span><\/em><br \/>\n<em><span style=\"font-family: courier new, courier, monospace;\">\u00a0\u00a0\u00a0\u00a0\u00a0 &#8211; name: script-runner<\/span><\/em><br \/>\n<em><span style=\"font-family: courier new, courier, monospace;\">\u00a0\u00a0<span style=\"font-size: 10pt;\">\u00a0\u00a0\u00a0\u00a0\u00a0 image: photon:3.0<\/span><\/span><\/em><br \/>\n<span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 command: [&#8220;\/bin\/sh&#8221;, &#8220;-c&#8221;, &#8220;\/root\/build-ca.sh&#8221; ]<\/span><\/em><\/span><br \/>\n<span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 volumeMounts:<\/span><\/em><\/span><br \/>\n<span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &#8211; name: update-trusted-certs-script<\/span><\/em><\/span><br \/>\n<span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 mountPath: \/root\/<\/span><\/em><\/span><br \/>\n<span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &#8211; name: certs-dir<\/span><\/em><\/span><br \/>\n<span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 mountPath: \/etc\/ssl\/certs<\/span><\/em><\/span><br \/>\n<span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &#8211; name: agg-certs-dir<\/span><\/em><\/span><br \/>\n<span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 mountPath: \/etc\/pki\/tls\/certs\/<\/span><\/em><\/span><br \/>\n<span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 env:<\/span><\/em><\/span><br \/>\n<span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &#8211; name: TRUSTED_CERT<\/span><\/em><\/span><br \/>\n<span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 valueFrom:<\/span><\/em><\/span><br \/>\n<span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 configMapKeyRef:<\/span><\/em><\/span><br \/>\n<span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 name: trusted-ca-cm<\/span><\/em><\/span><br \/>\n<span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 key: ca.pem\u00a0\u00a0\u00a0<\/span><\/em><\/span><br \/>\n<span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 resources:<\/span><\/em><\/span><br \/>\n<span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 limits:<\/span><\/em><\/span><br \/>\n<span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <span style=\"font-size: 12pt;\"><strong><span style=\"color: #ff0000;\">ephemeral-storage: 30G # mettre une plus petite taille<\/span><\/strong><\/span><\/span><\/em><\/span><br \/>\n<span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">\u00a0\u00a0\u00a0\u00a0\u00a0 containers:<\/span><\/em><\/span><br \/>\n<span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">\u00a0\u00a0\u00a0\u00a0\u00a0 &#8211; name: sleepy<\/span><\/em><\/span><br \/>\n<span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 image: photon:3.0<\/span><\/em><\/span><br \/>\n<span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 command: [&#8220;\/bin\/sh&#8221;]<\/span><\/em><\/span><br \/>\n<span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 args: [&#8220;-c&#8221;, &#8220;while true; do sleep 3600;done&#8221;]<\/span><\/em><\/span><br \/>\n<span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">\u00a0\u00a0\u00a0\u00a0\u00a0 volumes:<\/span><\/em><\/span><br \/>\n<span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">\u00a0\u00a0\u00a0\u00a0\u00a0 &#8211; name: update-trusted-certs-script<\/span><\/em><\/span><br \/>\n<span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 configMap:<\/span><\/em><\/span><br \/>\n<span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 name: rehash-script<\/span><\/em><\/span><br \/>\n<span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 defaultMode: 0766<\/span><\/em><\/span><br \/>\n<span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">\u00a0\u00a0\u00a0\u00a0\u00a0 &#8211; name: certs-dir<\/span><\/em><\/span><br \/>\n<span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 hostPath:<\/span><\/em><\/span><br \/>\n<span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 path: \/etc\/ssl\/certs<\/span><\/em><\/span><br \/>\n<span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 type: Directory<\/span><\/em><\/span><br \/>\n<span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">\u00a0\u00a0\u00a0\u00a0\u00a0 &#8211; name: agg-certs-dir<\/span><\/em><\/span><br \/>\n<span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 hostPath:<\/span><\/em><\/span><br \/>\n<span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 path: \/etc\/pki\/tls\/certs\/<\/span><\/em><\/span><br \/>\n<span style=\"font-size: 10pt;\"><em><span style=\"font-family: courier new, courier, monospace;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 type: Directory<\/span><\/em><\/span><\/p>\n<p>&nbsp;<\/p>\n<p style=\"text-align: justify;\"><span style=\"font-family: courier new, courier, monospace;\"><span style=\"font-family: trebuchet ms, geneva, sans-serif;\">Il faut ensuite se connecter sur les workernodes pour relancer containerd. Ci-dessous un exemple pour TKG <span style=\"font-size: 10pt;\">(<\/span><\/span><span style=\"font-size: 10pt;\"><a href=\"https:\/\/loeilduse.fr\/?p=737\"><span style=\"font-family: trebuchet ms, geneva, sans-serif;\">Une solution Kubernetes as a Service pour tous les Clouds)<\/span><\/a><\/span><\/span><\/p>\n<p><em><span style=\"font-family: courier new, courier, monospace;\"># ssh capv@&lt;ip-YourWokerNode&gt;<\/span><\/em><\/p>\n<p><em><span style=\"font-family: courier new, courier, monospace;\">capv@YourWokerNode$ sudo systemctl restart containerd<\/span><\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dans cet article (D\u00e9ployer Harbor avec type loadBalancer) j&#8217;ai expliqu\u00e9 comment d\u00e9ployer Habor et utiliser le certificat self-signed pour que Docker puisse l&#8217;utiliser. Si vous utilisez Kubernetes avec docker, vous pouvez aussi suivre cette proc\u00e9dure sur chaque worker node. Sinon vous risquez d&#8217;avoir l&#8217;erreur suivante : Unknown desc = failed to pull and unpack image<\/p><\/div>\n<div class=\"blog-btn\"><a href=\"https:\/\/loeilduse.fr\/?p=827&#038;lang=fr\" class=\"home-blog-btn\">Lire la suite<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[147],"tags":[177,176,99,148,180,29,28,167,179,150,6,178,181],"post_mailing_queue_ids":[],"_links":{"self":[{"href":"https:\/\/loeilduse.fr\/index.php?rest_route=\/wp\/v2\/posts\/827"}],"collection":[{"href":"https:\/\/loeilduse.fr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/loeilduse.fr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/loeilduse.fr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/loeilduse.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=827"}],"version-history":[{"count":2,"href":"https:\/\/loeilduse.fr\/index.php?rest_route=\/wp\/v2\/posts\/827\/revisions"}],"predecessor-version":[{"id":829,"href":"https:\/\/loeilduse.fr\/index.php?rest_route=\/wp\/v2\/posts\/827\/revisions\/829"}],"wp:attachment":[{"href":"https:\/\/loeilduse.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=827"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/loeilduse.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=827"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/loeilduse.fr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=827"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}