{"id":89143,"date":"2020-07-19T07:42:22","date_gmt":"2020-07-19T05:42:22","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/avtogeneracziya-sekretov-v-helm"},"modified":"2020-07-19T07:42:22","modified_gmt":"2020-07-19T05:42:22","slug":"avtogeneracziya-sekretov-v-helm","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/avtogeneracziya-sekretov-v-helm","title":{"rendered":"Autogeneracja sekret\u00f3w w Helm","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Autogeneracja sekret\u00f3w w Helm\" src=\"\/wp-content\/uploads\/2020\/07\/e2ba6ab1bf5b50c7cfcbf62d56ff15da.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Zesp\u00f3\u0142 <noindex><a rel=\"nofollow\" href=\"https:\/\/mcs.mail.ru\/containers\/\">Kubernetes aaS od Mail.ru<\/a><\/noindex> <noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/workfloplus\/reusing-auto-generated-helm-secrets-a7426403d4bb\">Przet\u0142umaczy\u0142em kr\u00f3tk\u0105 notatk\u0119<\/a><\/noindex> o tym, jak automatycznie generowa\u0107 sekrety Helm podczas aktualizacji. Dalej tekst od autora artyku\u0142u \u2014 dyrektora technicznego Intoware, firmy tworz\u0105cej rozwi\u0105zania SaaS. <\/p>\n<p>Kontenery to co\u015b niesamowitego. Na pocz\u0105tku by\u0142em przeciwnikiem kontener\u00f3w (wstyd mi si\u0119 przyzna\u0107), ale teraz ca\u0142kowicie popieram wykorzystanie tej technologii. Je\u017celi to czytasz, mam nadziej\u0119, \u017ce odnosi\u0142e\u015b ju\u017c sukcesy na morzach Dockera, dostrzeg\u0142e\u015b zalety Kubernetes i znacznie u\u0142atwi\u0142e\u015b sobie \u017cycie z Helmem.<\/p>\n<p>Jednak niekt\u00f3re rzeczy s\u0105 wyra\u017anie trudniejsze, ni\u017c powinny by\u0107.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nJak automatycznie generowa\u0107 sekrety podczas aktualizacji?<\/p>\n<p>Sekret Kubernetes to zas\u00f3b, kt\u00f3ry zawiera pary klucz\/warto\u015b\u0107, kt\u00f3re chcesz wykorzysta\u0107 w swoim kodzie. Mog\u0105 to by\u0107 dane po\u0142\u0105czenia z baz\u0105 danych, has\u0142a do wiadomo\u015bci e-mail i tak dalej. U\u017cywaj\u0105c sekret\u00f3w, tworzysz wyra\u017ane oddzielenie mi\u0119dzy kodem a ustawieniami, co pozwala \u0142atwo konfigurowa\u0107 r\u00f3\u017cne wdro\u017cenia bez zmiany bazy kodu.<\/p>\n<p>Cz\u0119sto wyst\u0119puj\u0105ca sytuacja, w kt\u00f3rej dwa modu\u0142y musz\u0105 wsp\u00f3\u0142dzia\u0142a\u0107 za pomoc\u0105 wsp\u00f3lnego klucza. Nikt poza klastrem nie powinien zna\u0107 tego klucza, poniewa\u017c jest on przeznaczony do komunikacji \u201eod jednego do drugiego\u201d wewn\u0105trz klastra.<\/p>\n<h2>Tworzenie sekret\u00f3w<\/h2>\n<p>\nZazwyczaj, aby stworzy\u0107 sekret w Helm, nale\u017cy:<\/p>\n<ul>\n<li>opisa\u0107 sekret w pliku warto\u015bci;<\/li>\n<li>przedefiniowa\u0107 go podczas wdro\u017cenia;<\/li>\n<li>odwo\u0142a\u0107 si\u0119 do niego we wdro\u017ceniu\/podzie;<\/li>\n<li>\u2026 zyski!<\/li>\n<\/ul>\n<p>\nZazwyczaj wygl\u0105da to mniej wi\u0119cej tak:<\/p>\n<pre><code class=\"plaintext\">apiVersion: v1\nkind: Secret\nmetadata:\n  name: my-super-awesome-api-key\ntype: Opaque\nstringData:\n  apiKey: {{ .Values.MyApiKeySecret | quote }}\n<\/code><\/pre>\n<p>\n<i>Prosty sekret Kubernetes, wykorzystuj\u0105cy warto\u015bci z values.yml<\/i><\/p>\n<p>Ale za\u0142\u00f3\u017cmy, \u017ce nie chcesz podawa\u0107 swojego sekretu w pliku warto\u015bci.<\/p>\n<p>Istnieje wiele sytuacji, w kt\u00f3rych do wdro\u017cenia potrzebny jest wsp\u00f3lny klucz, kt\u00f3ry musi by\u0107 generowany podczas instalacji.<\/p>\n<p>W powy\u017cszym przyk\u0142adzie ze wsp\u00f3\u0142prac\u0105 mi\u0119dzy modu\u0142ami niepo\u017c\u0105dane jest dzielenie si\u0119 sekretem poza wdro\u017ceniem. Dlatego bardzo wskazane jest, aby Helm mia\u0142 mechanizmy do automatycznego tworzenia sekretu bez konieczno\u015bci jego bezpo\u015bredniego wskazywania.<\/p>\n<h2>Hooki<\/h2>\n<p>\nHaki pozwalaj\u0105 na uruchamianie kodu w okre\u015blonych miejscach procesu instalacji. Mo\u017ce by\u0107 zadanie konfiguracyjne, kt\u00f3re nale\u017cy uruchomi\u0107 po pierwszej instalacji, lub mo\u017ce by\u0107 konieczne przeprowadzenie czyszczenia przed wykonaniem jakiejkolwiek aktualizacji.<\/p>\n<p>Do rozwi\u0105zania naszego problemu z dodawaniem klucza, generowanego podczas instalacji, idealnie nadaj\u0105 si\u0119 haki wst\u0119pne. Ale jest jeden haczyk: nie mo\u017cna automatycznie wygenerowa\u0107 sekretny raz przy aktualizacji. Haki b\u0119d\u0105 dzia\u0142a\u0107 przy ka\u017cdej aktualizacji.<\/p>\n<p>Je\u015bli wygenerowa\u0142e\u015b sw\u00f3j sekret, a twoja pierwsza instalacja jeszcze si\u0119 nie odby\u0142a, wtedy przesta\u0144 czyta\u0107, hak wst\u0119pny b\u0119dzie dla ciebie idealny.<\/p>\n<p>Ale je\u015bli sekret jest cz\u0119\u015bci\u0105 aktualizacji (by\u0107 mo\u017ce nowej funkcji, kt\u00f3rej nie by\u0142o podczas instalacji), to niestety niemo\u017cliwe jest stworzenie haka wst\u0119pnego, kt\u00f3ry zadzia\u0142a\u0142by tylko raz.<\/p>\n<h2>Funkcje<\/h2>\n<p>\nFunkcje Helm pozwalaj\u0105 na dodawanie r\u00f3\u017cnych element\u00f3w skrypt\u00f3w do skrypt\u00f3w wdro\u017ceniowych.<\/p>\n<pre><code class=\"plaintext\">apiVersion: v1\nkind: Secret\nmetadata:\n  name: my-super-awesome-api-key\ntype: Opaque\nstringData:\n  apiKey: {{ uuidv4 | quote }} #Generuj nowy UUID i zakotwicz go\n<\/code><\/pre>\n<p>\nW tym przyk\u0142adzie wida\u0107, \u017ce warto\u015bci\u0105 sekretn\u0105 apiKey b\u0119dzie nowy UUID, wygenerowany podczas instalacji.<\/p>\n<p>Helm zawiera naprawd\u0119 szerok\u0105 bibliotek\u0119 funkcji, kt\u00f3ra wykorzystuje niesamowite funkcje szablon\u00f3w GO i bibliotek\u0119 funkcji Sprig do tworzenia dostosowanych wdro\u017ce\u0144.<\/p>\n<h3>Funkcja Lookup<\/h3>\n<p>\nW Helm 3.1 dodano <noindex><a rel=\"nofollow\" href=\"https:\/\/helm.sh\/docs\/chart_template_guide\/functions_and_pipelines\/\">funkcj\u0119 Lookup<\/a><\/noindex>, kt\u00f3ra pozwala na zapytanie istniej\u0105cego wdro\u017cenia i:<\/p>\n<ul>\n<li>sprawdzi\u0107 istnienie zasob\u00f3w;<\/li>\n<li>zwr\u00f3ci\u0107 warto\u015b\u0107 istniej\u0105cego zasobu do dalszego wykorzystania.<\/li>\n<\/ul>\n<p>\nWykorzystuj\u0105c te dwie mo\u017cliwo\u015bci, mo\u017cemy stworzy\u0107 jednorazowy, dynamicznie generowany sekret!<\/p>\n<pre><code class=\"plaintext\"># 1. \u0417\u0430\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0435\u043a\u0440\u0435\u0442\u0430 \u0438 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 $secret\n{{- $secret := (lookup &quot;v1&quot; &quot;Secret&quot; .Release.Namespace &quot;some-awesome-secret&quot; -}}\napiVersion: v1\nkind: Secret\nmetadata:\n  name: some-awesome-secret\ntype: Opaque\n\n# 2. \u0415\u0441\u043b\u0438 \u0441\u0435\u043a\u0440\u0435\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442, \u0432\u0437\u044f\u0442\u044c \u0435\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u0430\u043a apiKey (\u0441\u0435\u043a\u0440\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 Base64, \u0442\u0430\u043a \u0447\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043a\u043b\u044e\u0447 &quot;data&quot;)\n{{ if $secret -}}\ndata:\n  apiKey: {{ $secret.data.apiKey }}\n\n# 3. \u0415\u0441\u043b\u0438 \u0441\u0435\u043a\u0440\u0435\u0442 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u2014 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0435\u0433\u043e (\u0432 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 &quot;stringData&quot;, \u0442\u0430\u043a \u043a\u0430\u043a \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u044b\u0447\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435)!\n{{ else -}}\nstringData:\n  apiKey: {{ uuidv4 | quote }}\n{{ end }}\n<\/code><\/pre>\n<p>\nZa ka\u017cdym razem, gdy nowe aktualizacje s\u0105 stosowane do serwera, Helm b\u0119dzie albo generowa\u0107 now\u0105 warto\u015b\u0107 sekretn\u0105 (je\u015bli sekret jeszcze nie istnieje), albo ponownie wykorzystywa\u0107 istniej\u0105c\u0105 warto\u015b\u0107.<\/p>\n<p>Powodzenia!<\/p>\n<p><strong>Co jeszcze przeczyta\u0107 na ten temat<\/strong>:<\/p>\n<ol>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/mcs.mail.ru\/blog\/tri-urovnya-avtomasshtabirovaniya-v-kubernetes-kak-ikh-effektivno-ispolzovat\">Trzy poziomy automatycznego skalowania w Kubernetes i jak je skutecznie wykorzysta\u0107<\/a><\/noindex>.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/mailru\/blog\/490362\/\">Kubernetes w duchu pirat\u00f3w z szablonem wdro\u017ceniowym<\/a><\/noindex>.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/tele.click\/k8s_mail\">Nasz kana\u0142 Wok\u00f3\u0142 Kubernetes na Telegramie<\/a><\/noindex>.<\/li>\n<\/ol>\n<p>\u0179r\u00f3d\u0142o: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/mailru\/blog\/507376\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041a\u043e\u043c\u0430\u043d\u0434\u0430 Kubernetes aaS \u043e\u0442 Mail.ru \u043f\u0435\u0440\u0435\u0432\u0435\u043b\u0430 \u043a\u043e\u0440\u043e\u0442\u043a\u0443\u044e \u0437\u0430\u043c\u0435\u0442\u043a\u0443 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0435\u043a\u0440\u0435\u0442\u044b Helm \u043f\u0440\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438. \u0414\u0430\u043b\u0435\u0435 \u0442\u0435\u043a\u0441\u0442 \u043e\u0442 \u0430\u0432\u0442\u043e\u0440\u0430 \u0441\u0442\u0430\u0442\u044c\u0438 \u2014 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0430 Intoware, \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 SaaS-\u0440\u0435\u0448\u0435\u043d\u0438\u0439. \u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u2014 \u044d\u0442\u043e \u043a\u0440\u0443\u0442\u043e. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u044f \u0431\u044b\u043b \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u0438\u043a\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 (\u0441\u0442\u044b\u0434\u043d\u043e \u043f\u0440\u0438\u0437\u043d\u0430\u0442\u044c\u0441\u044f), \u043d\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u044f \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u044d\u0442\u043e\u0439 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438. \u0415\u0441\u043b\u0438 \u0432\u044b \u0447\u0438\u0442\u0430\u0435\u0442\u0435 \u044d\u0442\u043e, \u0442\u043e, \u043d\u0430\u0434\u0435\u044e\u0441\u044c, \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043f\u043b\u0430\u0432\u0430\u043b\u0438 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":89144,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-89143","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041a\u043e\u043c\u0430\u043d\u0434\u0430\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/avtogeneracziya-sekretov-v-helm\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"pl_PL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0410\u0432\u0442\u043e\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u0441\u0435\u043a\u0440\u0435\u0442\u043e\u0432 \u0432 Helm | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041a\u043e\u043c\u0430\u043d\u0434\u0430\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/avtogeneracziya-sekretov-v-helm\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-07-19T05:42:22+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-07-19T05:42:22+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Autogeneracja sekret\u00f3w w Helm | ProHoster","description":"Zesp\u00f3\u0142","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/avtogeneracziya-sekretov-v-helm","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pl_PL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0410\u0432\u0442\u043e\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u0441\u0435\u043a\u0440\u0435\u0442\u043e\u0432 \u0432 Helm | ProHoster","og:description":"\u041a\u043e\u043c\u0430\u043d\u0434\u0430","og:url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/avtogeneracziya-sekretov-v-helm","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-07-19T05:42:22+00:00","article:modified_time":"2020-07-19T05:42:22+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"89143","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 13:15:24","updated":"2022-10-05 12:06:33","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/89143","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/comments?post=89143"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/89143\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media\/89144"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=89143"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=89143"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=89143"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}