{"id":27370,"date":"2026-07-27T23:22:14","date_gmt":"2026-07-27T23:22:14","guid":{"rendered":"https:\/\/umang.pk\/2026\/07\/27\/homelab-%d8%b3%db%92-aws-%d8%aa%da%a9-%d9%be%d8%b1%d9%88%da%88%da%a9%d8%b4%d9%86-%da%a9%db%92-%d9%84%db%8c%db%92-%d8%aa%db%8c%d8%a7%d8%b1-devsecops-%d9%be%d9%84%db%8c%d9%b9-%d9%81%d8%a7%d8%b1%d9%85\/"},"modified":"2026-07-27T23:22:15","modified_gmt":"2026-07-27T23:22:15","slug":"homelab-%d8%b3%db%92-aws-%d8%aa%da%a9-%d9%be%d8%b1%d9%88%da%88%da%a9%d8%b4%d9%86-%da%a9%db%92-%d9%84%db%8c%db%92-%d8%aa%db%8c%d8%a7%d8%b1-devsecops-%d9%be%d9%84%db%8c%d9%b9-%d9%81%d8%a7%d8%b1%d9%85","status":"publish","type":"post","link":"https:\/\/umang.pk\/en_us\/2026\/07\/27\/homelab-%d8%b3%db%92-aws-%d8%aa%da%a9-%d9%be%d8%b1%d9%88%da%88%da%a9%d8%b4%d9%86-%da%a9%db%92-%d9%84%db%8c%db%92-%d8%aa%db%8c%d8%a7%d8%b1-devsecops-%d9%be%d9%84%db%8c%d9%b9-%d9%81%d8%a7%d8%b1%d9%85\/","title":{"rendered":"Homelab \u0633\u06d2 AWS \u062a\u06a9 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062a\u06cc\u0627\u0631 DevSecOps \u067e\u0644\u06cc\u0679 \u0641\u0627\u0631\u0645 \u06a9\u06cc\u0633\u06d2 \u0628\u0646\u0627\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4 [Full Book]"},"content":{"rendered":"\n<div id=\"\">\n<p>\u0627\u0633 \u06a9\u062a\u0627\u0628 \u0645\u06cc\u06ba\u060c \u0622\u067e \u0634\u0631\u0648\u0639 \u0633\u06d2 \u0641\u0646\u0679\u06cc\u06a9 \u0679\u0631\u0627\u0646\u0632\u06cc\u06a9\u0634\u0646 \u0644\u06cc\u062c\u0631 \u0628\u0646\u0627\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0622\u06c1\u0633\u062a\u06c1 \u0622\u06c1\u0633\u062a\u06c1 \u0627\u0633\u06d2 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062a\u06cc\u0627\u0631 DevSecOps \u067e\u0644\u06cc\u0679 \u0641\u0627\u0631\u0645 \u0645\u06cc\u06ba \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06c1\u0645 \u0627\u0633\u06d2 AWS \u067e\u0631 \u0628\u06be\u06cc \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u06cc\u067e \u06a9\u0631\u06cc\u0688\u0679 \u0627\u0648\u0631 \u0688\u06cc\u0628\u0679 \u0644\u06cc\u0646 \u062f\u06cc\u0646 \u067e\u0631 \u06a9\u0627\u0631\u0631\u0648\u0627\u0626\u06cc \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u060c \u062a\u0639\u0645\u06cc\u0644 \u06a9\u06d2 \u0627\u0646\u062a\u0628\u0627\u06c1\u0627\u062a \u06a9\u0648 \u0628\u0691\u06be\u0627\u062a\u06cc \u06c1\u06d2\u060c \u0627\u0648\u0631 \u06c1\u0631 \u0686\u06cc\u0632 \u06a9\u0648 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0645\u06cc\u06ba \u0627\u0633\u0679\u0648\u0631 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 \u0622\u067e \u0628\u0646\u06cc\u0627\u062f\u06cc \u0688\u06be\u0627\u0646\u0686\u06c1 \u062e\u0648\u062f \u0628\u0646\u0627\u0626\u06cc\u06ba \u06af\u06d2\u060c \u0628\u0634\u0645\u0648\u0644 \u0622\u0679\u0648\u0645\u06cc\u0634\u0646\u060c \u062f\u0631\u06cc\u0627\u0641\u062a\u060c \u067e\u0627\u0644\u06cc\u0633\u06cc \u06a9\u0627 \u0646\u0641\u0627\u0630\u060c \u0631\u0627\u0632 \u06a9\u0627 \u0627\u0646\u062a\u0638\u0627\u0645\u060c \u062e\u0637\u0631\u06d2 \u06a9\u0627 \u067e\u062a\u06c1 \u0644\u06af\u0627\u0646\u0627\u060c \u0627\u0648\u0631 \u0645\u0634\u0627\u06c1\u062f\u06c1\u06d4<\/p>\n<p>\u0627\u0646\u0679\u0631\u0648\u06cc\u0648 \u06a9\u06d2 \u0627\u062e\u062a\u062a\u0627\u0645 \u062a\u06a9\u060c \u0622\u067e \u0627\u0646\u0679\u0631\u0648\u06cc\u0648 \u0645\u06cc\u06ba \u06a9\u06cc\u06d2 \u06af\u0626\u06d2 \u062a\u0645\u0627\u0645 \u0641\u06cc\u0635\u0644\u0648\u06ba \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u0628\u0627\u062a \u06a9\u0631 \u0633\u06a9\u06cc\u06ba \u06af\u06d2\u06d4 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u06c1\u0631 \u0641\u06cc\u0635\u0644\u06c1 \u0622\u067e \u0646\u06d2 \u06a9\u0631\u0646\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06cc\u06c1 \u06af\u0627\u0626\u06cc\u0688 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u062a\u06cc\u0627\u0631 \u06a9\u0631\u062f\u06c1 \u062d\u0644 \u0641\u0631\u0627\u06c1\u0645 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0645\u062c\u06be\u06d2 \u0628\u06c1\u062a\u0631 \u0645\u062d\u0633\u0648\u0633 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u06c1\u0631 \u0645\u0633\u0626\u0644\u06d2 \u06a9\u0648 \u062d\u0644 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0679\u0648\u0644 \u06a9\u0648 \u0645\u062a\u0639\u0627\u0631\u0641 \u06a9\u0631\u0627\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0633\u0645\u062c\u06be\u06cc\u06ba\u06d4<\/p>\n<p>\u062a\u0645\u0627\u0645 \u06a9\u0648\u0688\u060c \u0645\u06cc\u0646\u06cc \u0641\u06cc\u0633\u0679\u0633\u060c \u0627\u0633\u06a9\u0631\u067e\u0679\u0633\u060c \u0627\u0648\u0631 \u0645\u0631\u062d\u0644\u06c1 \u0648\u0627\u0631 READMEs \u0633\u0627\u062a\u06be \u0648\u0627\u0644\u06d2 \u0630\u062e\u06cc\u0631\u06d2 \u0645\u06cc\u06ba \u06c1\u06cc\u06ba\u06d4 \u0634\u0631\u0648\u0639 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06a9\u0644\u0648\u0646 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">git clone https:\/\/github.com\/Osomudeya\/clearledger.git\ncd clearledger\n<\/code><\/pre>\n<p>\u0627\u0633 \u06a9\u062a\u0627\u0628 \u06a9\u06cc \u06c1\u0631 \u0686\u06cc\u0632 \u0627\u0633 \u0630\u062e\u06cc\u0631\u06c1 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0645\u0648\u062c\u0648\u062f \u0641\u0627\u0626\u0644\u0648\u06ba \u06a9\u0627 \u062d\u0648\u0627\u0644\u06c1 \u062f\u06cc\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-prerequisites\">\u0634\u0631\u0637\u06cc\u06ba<\/h2>\n<p>\u0645\u0631\u062d\u0644\u06c1 0 \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u060c \u0622\u067e \u06a9\u0648 \u0627\u067e\u0646\u06d2 \u06a9\u0645\u067e\u06cc\u0648\u0679\u0631 \u067e\u0631 \u062f\u0631\u062c \u0630\u06cc\u0644 \u0679\u0648\u0644\u0632 \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u0646\u0627 \u06c1\u0648\u06ba \u06af\u06d2\u06d4<\/p>\n<ul>\n<li>\n<p><strong>\u0645\u0644\u0679\u06cc \u067e\u0627\u0633:<\/strong> \u0627\u06cc\u06a9 \u06c1\u0644\u06a9\u0627 \u067e\u06be\u0644\u06a9\u0627 Ubuntu VM \u0628\u0646\u0627\u0626\u06cc\u06ba \u062a\u0627\u06a9\u06c1 \u06cc\u06c1 \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u06d2 \u06a9\u06c1 Kubernetes \u06a9\u06d2 \u067e\u0627\u0633 \u06a9\u0627\u0641\u06cc \u0648\u0633\u0627\u0626\u0644 \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>kubectl:<\/strong> \u0679\u0631\u0645\u06cc\u0646\u0644 \u0633\u06d2 \u0627\u067e\u0646\u06d2 Kubernetes \u06a9\u0644\u0633\u0679\u0631 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0628\u0627\u062a \u0686\u06cc\u062a \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u06a9\u0646\u0679\u0631\u0648\u0644:<\/strong> Kubernetes \u067e\u0631 \u0627\u06cc\u067e \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0688\u0627\u06a9\u0631 \u0688\u06cc\u0633\u06a9 \u0679\u0627\u067e:<\/strong> \u06a9\u0646\u0679\u06cc\u0646\u0631 \u06a9\u06cc \u062a\u0635\u0648\u06cc\u0631 \u0628\u0646\u0627\u0626\u06cc\u06ba<\/p>\n<\/li>\n<li>\n<p><strong>jq:<\/strong> JSON \u0622\u0624\u0679 \u067e\u0679 \u06a9\u0648 \u0641\u0627\u0631\u0645\u06cc\u0679 \u06a9\u0631\u06cc\u06ba \u062a\u0627\u06a9\u06c1 \u06cc\u06c1 \u067e\u0691\u06be\u0646\u06d2 \u06a9\u06d2 \u0642\u0627\u0628\u0644 \u06c1\u0648\u06d4<\/p>\n<\/li>\n<\/ul>\n<p>GitHub \u0627\u0648\u0631 Docker Hub \u06a9\u0648 \u0628\u06be\u06cc \u0645\u0641\u062a \u0627\u06a9\u0627\u0624\u0646\u0679\u0633 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u0622\u067e \u06a9\u0648 \u062f\u0631\u062c \u0630\u06cc\u0644 \u0639\u0644\u0645 \u0627\u0648\u0631 \u06c1\u0646\u0631 \u0645\u06cc\u06ba \u0628\u06be\u06cc \u0645\u0627\u06c1\u0631 \u06c1\u0648\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2:<\/p>\n<ul>\n<li>\n<p><strong>\u0628\u0646\u06cc\u0627\u062f\u06cc \u0644\u06cc\u0646\u06a9\u0633 \u06a9\u0645\u0627\u0646\u0688 \u0644\u0627\u0626\u0646:<\/strong> \u0688\u0627\u0626\u0631\u06cc\u06a9\u0679\u0631\u06cc\u0632 \u0628\u0631\u0627\u0624\u0632 \u06a9\u0631\u06cc\u06ba\u060c \u0641\u0627\u0626\u0644\u06cc\u06ba \u067e\u0691\u06be\u06cc\u06ba\u060c \u0633\u06a9\u0631\u067e\u0679 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u062e\u0648\u0634 \u06c1\u0648\u0646\u0627:<\/strong> \u06a9\u0644\u0648\u0646\u060c \u06a9\u0645\u0679\u060c \u067e\u0634<\/p>\n<\/li>\n<li>\n<p>\u06a9\u0646\u0679\u06cc\u0646\u0631\u0632 \u06a9\u06cc\u0627 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0688\u0648\u06a9\u0631 \u0627\u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u0633\u06d2 \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u061f<\/p>\n<\/li>\n<\/ul>\n<p>\u06a9\u0648\u0626\u06cc \u0633\u0627\u0628\u0642\u06c1 \u200b\u200bKubernetes\u060c \u0633\u06cc\u06a9\u0648\u0631\u0679\u06cc\u060c \u06cc\u0627 \u06a9\u0644\u0627\u0624\u0688 \u062a\u062c\u0631\u0628\u06c1 \u062f\u0631\u06a9\u0627\u0631 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u06cc\u06c1 \u06af\u0627\u0626\u06cc\u0688 \u0627\u0633\u06d2 \u0627\u0633\u0679\u06cc\u062c 0 \u0633\u06d2 \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0622\u067e \u06a9\u06cc \u0645\u0634\u06cc\u0646 \u06a9\u0648 \u06a9\u0645 \u0627\u0632 \u06a9\u0645 24 GB RAM\u060c 6 CPU \u06a9\u0648\u0631\u060c \u0627\u0648\u0631 80 GB \u0645\u0641\u062a \u0688\u0633\u06a9 \u06a9\u06cc \u062c\u06af\u06c1 \u062f\u0631\u06a9\u0627\u0631 \u06c1\u06d2\u06d4 \u062a\u0646\u0635\u06cc\u0628 \u06a9\u06cc \u062f\u0631\u0633\u062a \u06c1\u062f\u0627\u06cc\u0627\u062a \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u0627\u067e\u0646\u06d2 \u06a9\u0645\u067e\u06cc\u0648\u0679\u0631 \u06a9\u0648 \u0633\u06cc\u0679 \u0627\u067e \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0637\u0631\u06cc\u0642\u06c1 \u062f\u06cc\u06a9\u06be\u06cc\u06ba\u06d4<\/p>\n<p>\u0633\u0627\u062a\u06be\u06cc \u0630\u062e\u06cc\u0631\u06c1 github.com\/Osomudeya\/clearledger \u067e\u0631 \u06c1\u06d2\u06d4 \u0627\u0633\u06d2 \u0633\u062a\u0627\u0631\u06c1 \u0628\u0646\u0627\u0626\u06cc\u06ba\u060c \u0627\u0633\u06d2 \u0646\u0642\u0644 \u06a9\u0631\u06cc\u06ba\u060c \u0627\u0648\u0631 \u062c\u0627\u0631\u06cc \u0631\u06a9\u06be\u06cc\u06ba\u06d4<\/p>\n<h2 id=\"heading-table-of-contents\">\u0627\u0646\u0688\u06cc\u06a9\u0633<\/h2>\n<h2 id=\"heading-what-you-are-building\">\u0622\u067e \u06a9\u06cc\u0627 \u0628\u0646\u0627 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba<\/h2>\n<p>ClearLedger \u0627\u06cc\u06a9 \u0641\u0646\u0679\u06cc\u06a9 \u0679\u0631\u0627\u0646\u0632\u06cc\u06a9\u0634\u0646 \u0644\u06cc\u062c\u0631 \u06c1\u06d2 \u062c\u0648 \u062a\u06cc\u0646 FastAPI \u0645\u0627\u0626\u06cc\u06a9\u0631\u0648 \u0633\u0631\u0648\u0633\u0632\u060c PostgreSQL\u060c Redis\u060c \u0627\u0648\u0631 \u0627\u06cc\u06a9 \u0648\u06cc\u0628 \u0641\u0631\u0646\u0679 \u0627\u06cc\u0646\u0688 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0628\u0646\u0627\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0635\u0627\u0631\u0641 \u0631\u062c\u0633\u0679\u0631 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0644\u0627\u06af \u0627\u0646 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u06a9\u0631\u06cc\u0688\u0679 \u0627\u0648\u0631 \u0688\u06cc\u0628\u0679 \u0644\u06cc\u0646 \u062f\u06cc\u0646 \u06a9\u0648 \u0631\u06cc\u06a9\u0627\u0631\u0688 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u06a9\u0627\u0624\u0646\u0679 \u0628\u06cc\u0644\u0646\u0633 \u062f\u06cc\u06a9\u06be \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u0648\u0631 \u062c\u0628 \u0628\u06be\u06cc \u0644\u06cc\u0646 \u062f\u06cc\u0646 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0637\u06d2 \u0634\u062f\u06c1 \u062d\u062f \u0633\u06d2 \u062a\u062c\u0627\u0648\u0632 \u06a9\u0631 \u062c\u0627\u0626\u06d2 \u062a\u0648 \u062a\u0639\u0645\u06cc\u0644 \u06a9\u06cc \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0645\u0648\u0635\u0648\u0644 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u062f\u0631\u062e\u0648\u0627\u0633\u062a \u062c\u0627\u0646 \u0628\u0648\u062c\u06be \u06a9\u0631 \u0622\u0633\u0627\u0646 \u06c1\u06d2\u06d4 \u0645\u0642\u0635\u062f \u0641\u0646\u0679\u06cc\u06a9 \u06a9\u0648 \u067e\u0691\u06be\u0627\u0646\u0627 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0627\u06cc\u06a9 \u062d\u0642\u06cc\u0642\u062a \u067e\u0633\u0646\u062f\u0627\u0646\u06c1 \u0646\u0638\u0627\u0645 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0633\u06d2 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u067e\u0644\u06cc\u0679 \u0641\u0627\u0631\u0645 \u06a9\u06cc \u0637\u0631\u062d \u0645\u062d\u0641\u0648\u0638 \u0627\u0648\u0631 \u0686\u0644\u0627\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06cc\u06c1 \u0645\u0646\u0635\u0648\u0628\u06c1 \u0686\u0627\u0631 \u0627\u062c\u0632\u0627\u0621 \u067e\u0631 \u0645\u0634\u062a\u0645\u0644 \u06c1\u06d2:<\/p>\n<ul>\n<li>\n<p><strong>\u062a\u0635\u062f\u06cc\u0642 \u06a9\u06cc \u062e\u062f\u0645\u0627\u062a:<\/strong> \u0635\u0627\u0631\u0641 \u06a9\u06cc \u0631\u062c\u0633\u0679\u0631\u06cc\u0634\u0646\u060c \u0644\u0627\u06af \u0627\u0646\u060c \u0627\u0648\u0631 JWT \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0648 \u06c1\u06cc\u0646\u0688\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0644\u06cc\u062c\u0631 \u062e\u062f\u0645\u0627\u062a:<\/strong> \u0644\u06cc\u0646 \u062f\u06cc\u0646 \u067e\u0631 \u06a9\u0627\u0631\u0631\u0648\u0627\u0626\u06cc \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0627\u06a9\u0627\u0624\u0646\u0679 \u06a9\u06d2 \u0628\u06cc\u0644\u0646\u0633 \u06a9\u0648 \u0628\u0631\u0642\u0631\u0627\u0631 \u0631\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0644\u06cc\u0646 \u062f\u06cc\u0646 \u06a9\u06cc \u062a\u0627\u0631\u06cc\u062e \u06a9\u0648 \u0627\u0633\u0679\u0648\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0627\u0637\u0644\u0627\u0639 \u06a9\u06cc \u062e\u062f\u0645\u062a:<\/strong> Redis \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0628\u0691\u06d2 \u0644\u06cc\u0646 \u062f\u06cc\u0646 \u062d\u0627\u0635\u0644 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u062a\u0639\u0645\u06cc\u0644 \u06a9\u06d2 \u0627\u0646\u062a\u0628\u0627\u06c1\u0627\u062a \u062a\u06cc\u0627\u0631 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0641\u0631\u0646\u0679 \u0627\u06cc\u0646\u0688:<\/strong> \u0644\u0627\u06af \u0627\u0646 \u06a9\u0631\u0646\u06d2\u060c \u0628\u06cc\u0644\u0646\u0633 \u062f\u06cc\u06a9\u06be\u0646\u06d2\u060c \u0644\u06cc\u0646 \u062f\u06cc\u0646 \u062c\u0645\u0639 \u06a9\u0631\u0627\u0646\u06d2 \u0627\u0648\u0631 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u06a9\u0627 \u062c\u0627\u0626\u0632\u06c1 \u0644\u06cc\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0648\u06cc\u0628 \u0627\u0646\u0679\u0631\u0641\u06cc\u0633\u06d4<\/p>\n<\/li>\n<\/ul>\n<p>\u0627\u0633 \u06a9\u062a\u0627\u0628 \u06a9\u06d2 \u0627\u062e\u062a\u062a\u0627\u0645 \u062a\u06a9\u060c \u06cc\u06c1 \u062a\u0645\u0627\u0645 \u062e\u062f\u0645\u0627\u062a \u0627\u0628 \u0628\u06be\u06cc \u0645\u0648\u062c\u0648\u062f \u0631\u06c1\u06cc\u06ba \u06af\u06cc\u06d4 \u062c\u0648 \u062a\u0628\u062f\u06cc\u0644\u06cc \u0622\u0626\u06cc \u06c1\u06d2 \u0648\u06c1 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u06c1\u0645 \u06a9\u0633 \u0637\u0631\u062d \u062a\u0639\u0645\u06cc\u0631\u060c \u062a\u0639\u06cc\u0646\u0627\u062a\u060c \u0645\u062d\u0641\u0648\u0638 \u0627\u0648\u0631 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0635\u0631\u0641 \u0627\u06cc\u06a9 \u06af\u0627\u0691\u06cc \u06c1\u06d2\u06d4 DevSecOps \u0645\u0646\u0632\u0644 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-how-the-platform-evolves\">\u067e\u0644\u06cc\u0679 \u0641\u0627\u0631\u0645 \u06a9\u06cc\u0633\u06d2 \u062a\u06cc\u0627\u0631 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/h3>\n<p>\u06c1\u0645 \u067e\u06c1\u0644\u06d2 \u062f\u0646 \u062a\u0645\u0627\u0645 \u0679\u0648\u0644\u0632 \u0627\u0646\u0633\u0679\u0627\u0644 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u0633 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2\u060c \u067e\u0644\u06cc\u0679 \u0641\u0627\u0631\u0645 \u0639\u0627\u0645 \u0637\u0648\u0631 \u067e\u0631 \u0627\u0633\u06cc \u0637\u0631\u062d \u0628\u0691\u06be\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u06cc\u0633\u06d2 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u0633\u0633\u0679\u0645\u06d4 \u06cc\u0639\u0646\u06cc \u0645\u0633\u0626\u0644\u06c1 \u067e\u06c1\u0644\u06d2 \u0638\u0627\u06c1\u0631 \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u067e\u06be\u0631 \u062d\u0644 \u067e\u06cc\u0634 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u062f\u0633\u062a\u06cc \u0637\u0648\u0631 \u067e\u0631 \u062a\u0639\u06cc\u0646\u0627\u062a Kubernetes \u0627\u06cc\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba\u06d4 \u0648\u06c1\u0627\u06ba \u0633\u06d2\u060c \u06c1\u0631 \u0642\u062f\u0645 \u0627\u06cc\u06a9 \u062d\u0642\u06cc\u0642\u06cc \u0622\u067e\u0631\u06cc\u0634\u0646\u0644 \u0645\u0633\u0626\u0644\u06c1 \u062d\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u0645\u0631\u062d\u0644\u06c1 0: \u062e\u0627\u0645 \u06a9\u0628\u0631\u0646\u06cc\u0679\u0633<\/strong><\/p>\n<p>\u0627\u067e\u0646\u06cc \u0627\u06cc\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646\u0632 \u06a9\u0648 \u062f\u0633\u062a\u06cc \u0637\u0648\u0631 \u067e\u0631 \u062a\u0639\u06cc\u0646\u0627\u062a \u0627\u0648\u0631 \u0686\u0644\u0627\u0626\u06cc\u06ba \u062a\u0627\u06a9\u06c1 \u0622\u067e \u0622\u0679\u0648\u0645\u06cc\u0634\u0646 \u0645\u062a\u0639\u0627\u0631\u0641 \u06a9\u0631\u0627\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0633\u0633\u0679\u0645 \u06a9\u0648 \u0633\u0645\u062c\u06be \u0633\u06a9\u06cc\u06ba\u06d4<\/p>\n<p><strong>\u0645\u0631\u062d\u0644\u06c1 1: \u0645\u0633\u0644\u0633\u0644 \u0627\u0646\u0636\u0645\u0627\u0645<\/strong><\/p>\n<p>\u06a9\u0646\u0679\u06cc\u0646\u0631 \u0627\u0645\u06cc\u062c \u0628\u0644\u0688\u0646\u06af \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u06c1\u0648\u062a\u06cc \u06c1\u06d2 \u062c\u0628 \u0628\u06be\u06cc \u06a9\u0648\u0688 \u06a9\u0648 \u0622\u06af\u06d2 \u0628\u0691\u06be\u0627\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u062f\u0633\u062a\u06cc \u062a\u0639\u0645\u06cc\u0631\u0627\u062a\u06cc \u0645\u0631\u0627\u062d\u0644 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06a9\u0648 \u062e\u062a\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u0645\u0631\u062d\u0644\u06c1 2: GitOps<\/strong><\/p>\n<p>\u062a\u0639\u06cc\u0646\u0627\u062a\u06cc\u0627\u06ba \u0627\u0628 kubectl \u06a9\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u0633\u06d2 \u0646\u06c1\u06cc\u06ba \u06a9\u06cc \u062c\u0627\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 \u06af\u0679 \u0633\u0686\u0627\u0626\u06cc \u06a9\u0627 \u0648\u0627\u062d\u062f \u0630\u0631\u06cc\u0639\u06c1 \u0628\u0646 \u06a9\u0631 \u062a\u0631\u062a\u06cc\u0628 \u06a9\u06d2 \u0628\u0691\u06be\u0646\u06d2 \u06a9\u0648 \u0631\u0648\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u0645\u0631\u062d\u0644\u06c1 3: \u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u06af\u06cc\u0679<\/strong><\/p>\n<p>\u06c1\u0631 \u06a9\u0645\u0679 \u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u0686\u06cc\u06a9 \u067e\u0627\u0633 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0644\u06c1\u0630\u0627 \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06a9\u0645\u0632\u0648\u0631 \u06a9\u0648\u0688\u060c \u0631\u0627\u0632 \u0627\u0648\u0631 \u063a\u0644\u0637 \u06a9\u0646\u0641\u06cc\u06af\u0631\u06cc\u0634\u0646\u0632 \u06a9\u0648 \u0631\u0648\u06a9 \u062f\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u0645\u0631\u062d\u0644\u06c1 4: \u062f\u0627\u062e\u0644\u06c1 \u06a9\u0646\u0679\u0631\u0648\u0644<\/strong><\/p>\n<p>\u06cc\u06c1\u0627\u06ba \u062a\u06a9 \u06a9\u06c1 \u0627\u06af\u0631 \u0622\u067e \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06a9\u0648 \u0646\u0638\u0631\u0627\u0646\u062f\u0627\u0632 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 Kubernetes \u06a9\u06cc \u067e\u0627\u0644\u06cc\u0633\u06cc\u0627\u06ba \u063a\u06cc\u0631 \u0645\u062d\u0641\u0648\u0638 \u06a9\u0627\u0645 \u06a9\u06d2 \u0628\u0648\u062c\u06be \u06a9\u0648 \u0622\u067e \u06a9\u06d2 \u06a9\u0644\u0633\u0679\u0631 \u0645\u06cc\u06ba \u062f\u0627\u062e\u0644 \u06c1\u0648\u0646\u06d2 \u0633\u06d2 \u0631\u0648\u06a9\u062a\u06cc \u06c1\u06cc\u06ba\u06d4<\/p>\n<p><strong>\u0645\u0631\u062d\u0644\u06c1 5: \u062e\u0641\u06cc\u06c1 \u0627\u0646\u062a\u0638\u0627\u0645<\/strong><\/p>\n<p>Git \u0627\u0648\u0631 \u06a9\u0644\u0633\u0679\u0631 \u0627\u0633\u0679\u0648\u0631\u06cc\u062c \u0633\u06d2 \u062d\u0633\u0627\u0633 \u0688\u06cc\u0679\u0627 \u06a9\u0648 \u06c1\u0679\u0627\u062a\u06d2 \u06c1\u0648\u0626\u06d2\u060c \u0627\u06cc\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u06a9\u06cc \u0627\u0633\u0646\u0627\u062f \u06a9\u0648\u0628\u0631\u0646\u06cc\u0679\u0633 \u0633\u06cc\u06a9\u0631\u0679\u0633 \u0633\u06d2 \u0648\u0627\u0644\u0679 \u0645\u06cc\u06ba \u0645\u0646\u062a\u0642\u0644 \u06a9\u0631 \u062f\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u0645\u0631\u062d\u0644\u06c1 6: \u0631\u0646 \u0679\u0627\u0626\u0645 \u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc<\/strong><\/p>\n<p>Falco \u0686\u0644\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u06a9\u0646\u0679\u06cc\u0646\u0631\u0632 \u06a9\u06cc \u0645\u0633\u0644\u0633\u0644 \u0646\u06af\u0631\u0627\u0646\u06cc \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u06a9\u06d2 \u0628\u0639\u062f \u0645\u0634\u06a9\u0648\u06a9 \u0631\u0648\u06cc\u06d2 \u06a9\u0627 \u067e\u062a\u06c1 \u0644\u06af\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u0645\u0631\u062d\u0644\u06c1 6.5 (\u0627\u062e\u062a\u06cc\u0627\u0631\u06cc): \u0627\u0641\u0631\u0627\u062a\u0641\u0631\u06cc \u0627\u0646\u062c\u06cc\u0646\u0626\u0631\u0646\u06af<\/strong><\/p>\n<p>\u0635\u0631\u0641 \u0645\u0633\u0627\u0626\u0644 \u06a9\u0627 \u067e\u062a\u06c1 \u0644\u06af\u0627\u0646\u06d2 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2\u060c \u06c1\u0645 \u062c\u0627\u0646 \u0628\u0648\u062c\u06be \u06a9\u0631 \u063a\u0644\u0637\u06cc\u0627\u06ba \u0645\u062a\u0639\u0627\u0631\u0641 \u06a9\u0631\u0627\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0627\u06a9\u06c1 \u06cc\u06c1 \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u06d2 \u06a9\u06c1 \u067e\u0644\u06cc\u0679 \u0641\u0627\u0631\u0645 \u0679\u06be\u06cc\u06a9 \u06c1\u0648 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u0645\u0631\u062d\u0644\u06c1 7: \u0645\u0634\u0627\u06c1\u062f\u06c1<\/strong><\/p>\n<p>\u0645\u06cc\u0679\u0631\u06a9\u0633\u060c \u0644\u0627\u06af\u0632\u060c \u0627\u0648\u0631 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688\u0632 \u0622\u067e \u06a9\u06d2 \u067e\u0644\u06cc\u0679 \u0641\u0627\u0631\u0645 \u06a9\u06cc \u0635\u062d\u062a\u060c \u06a9\u0627\u0631\u06a9\u0631\u062f\u06af\u06cc\u060c \u0627\u0648\u0631 \u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u0645\u06cc\u06ba \u0645\u0631\u0626\u06cc\u062a \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p><strong>\u0645\u0631\u062d\u0644\u06c1 7.5 (\u0627\u062e\u062a\u06cc\u0627\u0631\u06cc): OpenTelemetry<\/strong><\/p>\n<p>\u062a\u0642\u0633\u06cc\u0645 \u0634\u062f\u06c1 \u0679\u0631\u06cc\u0633\u0646\u06af \u062a\u0645\u0627\u0645 \u0633\u0631\u0648\u0633\u0632 \u0633\u06d2 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba \u06a9\u0648 \u0679\u0631\u06cc\u06a9 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u062c\u0633 \u0633\u06d2 \u06cc\u06c1 \u0638\u0627\u06c1\u0631 \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0633\u0633\u0679\u0645 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0627\u06cc\u06a9 \u06c1\u06cc \u0644\u06cc\u0646 \u062f\u06cc\u0646 \u06a9\u06cc\u0633\u06d2 \u0686\u0644\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u0645\u0631\u062d\u0644\u06c1 8: AWS \u0645\u0627\u0626\u06cc\u06af\u0631\u06cc\u0634\u0646<\/strong><\/p>\n<p>\u0627\u0633\u06cc \u0641\u0646 \u062a\u0639\u0645\u06cc\u0631 \u06a9\u0648 AWS \u067e\u0631 EKS, ECR, RDS\u060c \u0627\u0648\u0631 \u0627\u06cc\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0644\u0648\u0688 \u0628\u06cc\u0644\u0646\u0633\u0631 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u0628\u063a\u06cc\u0631 \u06cc\u06c1 \u06a9\u06c1 \u0627\u06cc\u067e\u0644\u06cc \u06a9\u06cc\u0634\u0646 \u062e\u0648\u062f \u06a9\u06cc\u0633\u06d2 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u06af\u0631 \u0622\u067e Kubernetes \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0635\u0631\u0641 \u0627\u06cc\u067e\u0644\u06cc \u06a9\u06cc\u0634\u0646\u0632 \u06a9\u0648 \u062a\u0644\u0627\u0634 \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u062e\u062a\u06cc\u0627\u0631\u06cc Docker Compose stack \u0622\u067e \u06a9\u0648 \u0627\u067e\u0646\u06d2 \u06a9\u0645\u067e\u06cc\u0648\u0679\u0631 \u067e\u0631 \u06c1\u0631 \u0686\u06cc\u0632 \u06a9\u0648 \u0645\u0642\u0627\u0645\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0686\u0644\u0627\u0646\u06d2 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0633 \u06a9\u062a\u0627\u0628 \u06a9\u06d2 \u0628\u0646\u06cc\u0627\u062f\u06cc \u0627\u0635\u0648\u0644 \u0633\u0627\u062f\u06c1 \u06c1\u06cc\u06ba\u06d4 \u06c1\u0631 \u0642\u062f\u0645 \u067e\u0631\u060c \u0622\u067e \u06a9\u0648 \u0627\u0633 \u0645\u0633\u0626\u0644\u06d2 \u06a9\u0627 \u0627\u062d\u0633\u0627\u0633 \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u0627\u0633 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06a9\u06c1 \u0622\u067e \u0627\u0633\u06d2 \u062d\u0644 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0679\u0648\u0644\u0632 \u0633\u06d2 \u0645\u062a\u0639\u0627\u0631\u0641 \u06a9\u0631\u0627\u0626\u06d2 \u062c\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<h2 id=\"heading-how-to-work-through-this-lab\">\u0627\u0633 \u0644\u06cc\u0628 \u06a9\u0648 \u06a9\u06cc\u0633\u06d2 \u06a9\u0631\u0646\u0627 \u06c1\u06d2\u06d4<\/h2>\n<p>\u06c1\u0631 \u0645\u0633\u0626\u0644\u06d2 \u06a9\u0648 \u062d\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0627\u0648\u0632\u0627\u0631 \u0645\u062a\u0639\u0627\u0631\u0641 \u06a9\u0631\u0627\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0627\u0633\u06d2 \u0633\u0645\u062c\u06be\u0646\u06d2 \u06a9\u06d2 \u067e\u0648\u0631\u06d2 \u0639\u0645\u0644 \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646\u060c \u062a\u06cc\u0646 \u0639\u0627\u062f\u0627\u062a \u0622\u067e \u06a9\u0648 \u06c1\u0631 \u0642\u062f\u0645 \u067e\u0631 \u062d\u0627\u0635\u0644 \u06a9\u0631\u06cc\u06ba \u06af\u06cc\u06d4<\/p>\n<ol>\n<li>\n<p><strong>\u0627\u06cc\u0633\u0627 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0627\u0633\u06d2 \u067e\u0691\u06be\u06cc\u06ba\u06d4<\/strong> \u06c1\u0631 \u06a9\u0645\u0627\u0646\u0688 \u06a9\u06cc \u0648\u0636\u0627\u062d\u062a \u0627\u0633 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0648\u0627\u0644\u06d2 \u067e\u06cc\u0631\u0627\u06af\u0631\u0627\u0641 \u0645\u06cc\u06ba \u06a9\u06cc \u06af\u0626\u06cc \u06c1\u06d2\u06d4 <em>\u06a9\u06cc\u0648\u06ba<\/em> \u0622\u067e \u0627\u0633\u06d2 \u0686\u0644\u0627 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u0633 \u06a9\u0648 \u0686\u06be\u0648\u0691\u0646\u06d2 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 \u0622\u067e \u0627\u0642\u062f\u0627\u0645\u0627\u062a \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u067e\u06cc\u0634 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u0644\u06cc\u06a9\u0646 \u0627\u0646 \u06a9\u06cc \u0648\u0636\u0627\u062d\u062a \u0646\u06c1\u06cc\u06ba \u06a9\u0631 \u0633\u06a9\u062a\u06d2\u060c \u0627\u0648\u0631 \u0627\u06af\u0631 \u0622\u067e \u0627\u0646 \u06a9\u06cc \u0648\u0636\u0627\u062d\u062a \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0648 \u0622\u067e \u06a9\u0648 \u0645\u0644\u0627\u0632\u0645\u062a \u067e\u0631 \u0631\u06a9\u06be\u0627 \u062c\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u062d\u06a9\u0627\u0645 \u0627\u0633 \u0628\u0627\u062a \u06a9\u0627 \u062b\u0628\u0648\u062a \u06c1\u06cc\u06ba \u06a9\u06c1 \u0622\u067e \u0633\u0645\u062c\u06be\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0628\u0631\u0627\u06c1 \u06a9\u0631\u0645 \u0627\u06cc\u06a9 \u0648\u062c\u06c1 \u0645\u0646\u062a\u062e\u0628 \u06a9\u0631\u06cc\u06ba:<\/strong> \u06cc\u06c1\u0627\u06ba \u06c1\u0631 \u0679\u0648\u0644 \u0627\u06cc\u06a9 \u0645\u062e\u0635\u0648\u0635 \u0645\u0633\u0626\u0644\u06c1 \u062d\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u06a9\u0628\u0631\u0646\u06cc\u0679\u0633 \u0633\u06cc\u06a9\u0631\u06cc\u0679 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0648\u0627\u0644\u0679 \u06a9\u06cc\u0648\u06ba \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u061f \u0627\u067e\u0646\u06d2 \u06a9\u0648\u0688 \u0627\u0648\u0631 \u0645\u06cc\u0646\u06cc \u0641\u06cc\u0633\u0679 \u06a9\u0648 \u062f\u0648 \u0630\u062e\u06cc\u0631\u0648\u06ba \u0645\u06cc\u06ba \u06a9\u06cc\u0648\u06ba \u062a\u0642\u0633\u06cc\u0645 \u06a9\u0631\u06cc\u06ba\u061f \u0635\u0631\u0641 \u0627\u0646 \u0627\u0642\u062f\u0627\u0645\u0627\u062a \u067e\u0631 \u0639\u0645\u0644 \u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u060c \u067e\u0648\u0686\u06be\u06cc\u06ba\u06d4 <em>\u0627\u06af\u0631 \u0645\u06cc\u06ba \u0627\u0633\u06d2 \u0686\u06be\u0648\u0691 \u062f\u0648\u06ba \u062a\u0648 \u06a9\u06cc\u0627 \u06c1\u0648\u06af\u0627\u061f<\/em> \u0645\u0633\u0626\u0644\u06c1 \u06a9\u0648 \u0633\u0645\u062c\u06be\u0646\u06d2 \u0633\u06d2 \u0622\u067e \u06a9\u0648 \u062d\u0644 \u06cc\u0627\u062f \u0631\u06a9\u06be\u0646\u06d2 \u0645\u06cc\u06ba \u0645\u062f\u062f \u0645\u0644\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u062a\u0631\u062a\u06cc\u0628 \u0633\u06d2 \u0627\u0646 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u062c\u0627\u0626\u06cc\u06ba \u0627\u0648\u0631 \u062a\u0645\u0627\u0645 \u0686\u0648\u06a9\u06cc\u0648\u06ba \u06a9\u0648 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/strong> \u06c1\u0631 \u0642\u062f\u0645 \u067e\u0686\u06be\u0644\u06d2 \u0645\u0631\u062d\u0644\u06d2 \u067e\u0631 \u0645\u0646\u062d\u0635\u0631 \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0622\u067e \u06a9\u0648 \u0645\u0633\u0627\u0626\u0644 \u062f\u0631\u067e\u06cc\u0634 \u06c1\u06cc\u06ba \u062a\u0648 \u063a\u0644\u0637\u06cc\u0627\u06ba \u067e\u0691\u06be\u06cc\u06ba\u06d4 \u067e\u06be\u0646\u0633 \u062c\u0627\u0646\u0627 \u0627\u0648\u0631 \u0688\u06cc\u0628\u06af \u06a9\u0631\u0646\u0627 \u0633\u06cc\u06a9\u06be\u0646\u06d2 \u06a9\u0627 \u062d\u0635\u06c1 \u06c1\u06d2\u06d4 \u0622\u062c\u0631 \u0633\u0646\u0646\u0627 \u0686\u0627\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba\u060c &quot;X \u06a9\u06cc \u062e\u0631\u0627\u0628\u06cc \u067e\u06cc\u0634 \u0622 \u06af\u0626\u06cc \u0627\u0648\u0631 \u06c1\u0645 \u0646\u06d2 \u0627\u0633\u06d2 Y \u06a9\u0631 \u06a9\u06d2 \u0679\u06be\u06cc\u06a9 \u06a9\u0631 \u062f\u06cc\u0627\u06d4&#8221;<\/p>\n<\/li>\n<\/ol>\n<p>\u06c1\u0631  \u067e\u0631\u06cc\u06a9\u0679\u0633 \u0686\u06cc\u06a9 \u067e\u0648\u0627\u0626\u0646\u0679 \u067e\u0631:<\/p>\n<ol>\n<li>\n<p>\u06a9\u0645\u0627\u0646\u0688 \u0686\u0644\u0627\u0626\u06cc\u06ba:<\/p>\n<\/li>\n<li>\n<p>\u0627\u067e\u0646\u06cc \u062a\u0648\u0642\u0639\u0627\u062a \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0622\u0624\u0679 \u067e\u0679 \u06a9\u0627 \u0645\u0648\u0627\u0632\u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0627\u06af\u0631 \u0648\u06c1 \u0645\u0645\u0627\u062b\u0644 \u0646\u06c1\u06cc\u06ba \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u062c\u0627\u0631\u06cc \u0631\u06a9\u06be\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0627\u0646\u06c1\u06cc\u06ba \u062f\u0631\u0633\u062a \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u062c\u0628 <code>make check-N<\/code> \u06af\u0632\u0631\u0646\u0627: <code>make snapshot STAGE=N && make snapshots<\/code>. \u062f\u06cc\u06a9\u06be\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f \u06c1\u06cc \u062c\u0627\u0631\u06cc \u0631\u06a9\u06be\u06cc\u06ba\u06d4 <code>clearledger.stageN<\/code>.<\/p>\n<\/li>\n<\/ol>\n<p>\u0627\u0646 \u063a\u0644\u0637\u06cc\u0648\u06ba \u0633\u06d2 \u0628\u0686\u06cc\u06ba:<\/p>\n<ul>\n<li>\n<p>\u06a9\u0633\u06cc \u0686\u0648\u06a9\u06cc \u06a9\u0648 \u0635\u0631\u0641 \u0627\u0633 \u0644\u06cc\u06d2 \u0646\u06c1 \u0686\u06be\u0648\u0691\u06cc\u06ba \u06a9\u06c1 \u0622\u067e \u0627\u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06af\u0632\u0631 \u0686\u06a9\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0645\u062a \u0628\u06be\u0627\u06af\u0648 <code>make restore<\/code> \u067e\u06c1\u0644\u06d2 \u062f\u0633\u062a\u06cc\u0627\u0628 \u0633\u0646\u06cc\u067e \u0634\u0627\u0679\u0633 \u06a9\u06cc \u062c\u0627\u0646\u0686 \u06a9\u06cc\u06d2 \u0628\u063a\u06cc\u0631<\/p>\n<\/li>\n<li>\n<p>\u062a\u0628\u062f\u06cc\u0644\u06cc <code>your-username<\/code> \u0627\u067e\u0646\u0627 \u0627\u0635\u0644 Docker Hub \u06cc\u0627 GitHub \u0635\u0627\u0631\u0641 \u0646\u0627\u0645 \u062c\u06c1\u0627\u06ba \u0628\u06be\u06cc \u0638\u0627\u06c1\u0631 \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>VM \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0644\u0627\u0646\u0686\u0631 \u06a9\u0645\u0627\u0646\u0688 \u0686\u0644\u0627\u0626\u06cc\u06ba (\u0688\u0633\u067e\u0644\u06d2 \u067e\u0631\u0627\u0645\u067e\u0679) <code>ubuntu@clearledger<\/code>)\u060c \u0645\u06cc\u06a9 \u067e\u0631 \u0646\u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ul>\n<p>\u06c1\u0631 \u0627\u06cc\u06a9 \u06a9\u0627 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679 \u0644\u06cc\u06ba\u06d4 <strong>\u067e\u0648\u0631\u0679 \u0641\u0648\u0644\u06cc\u0648 \u0686\u06cc\u06a9 \u067e\u0648\u0627\u0626\u0646\u0679\u0633<\/strong>. \u06cc\u06c1 \u0644\u0645\u062d\u0627\u062a \u062b\u0628\u0648\u062a \u06c1\u06cc\u06ba\u06d4 \u0627\u0633 \u0628\u0627\u062a \u06a9\u0627 \u062b\u0628\u0648\u062a \u06a9\u06c1 \u067e\u0644\u06cc\u0679 \u0641\u0627\u0631\u0645 \u062d\u0642\u06cc\u0642\u06cc \u062f\u0646\u06cc\u0627 \u06a9\u06cc \u0633\u0631\u06af\u0631\u0645\u06cc\u0648\u06ba \u06a9\u0648 \u0627\u0646\u062c\u0627\u0645 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u060c \u067e\u062a\u06c1 \u0644\u06af\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0628\u0644\u0627\u06a9 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u06c1\u0645 \u0622\u06c1\u0646\u06af\u06cc \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0645\u0634\u0627\u06c1\u062f\u06c1 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u06af\u0631 \u0622\u067e \u06a9\u0648 \u06a9\u0648\u0626\u06cc \u0646\u06cc\u0627 \u0646\u0627\u0645 \u0646\u0638\u0631 \u0622\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u062a\u062c\u0633\u0633 \u067e\u06cc\u062f\u0627 \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u062a\u0648 \u0646\u06cc\u0686\u06d2 \u062f\u06cc\u06d2 \u06af\u0626\u06d2 \u0679\u06cc\u0628\u0644 \u067e\u0631 \u0648\u0627\u067e\u0633 \u0622\u0626\u06cc\u06ba\u06d4 <em>\u0627\u0628 \u06a9\u06cc\u0648\u06ba\u061f<\/em>. \u06c1\u0631 \u0622\u0626\u0679\u0645 \u06a9\u06cc \u0627\u06cc\u06a9 \u0644\u0627\u0626\u0646 \u06c1\u0648\u062a\u06cc \u06c1\u06d2 \u062c\u0648 \u0628\u062a\u0627\u062a\u06cc \u06c1\u06d2 \u06a9\u06c1 \u06cc\u06c1 \u06a9\u06cc\u0627 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u06a9\u0628 \u0638\u0627\u06c1\u0631 \u06c1\u0648\u06af\u0627\u06d4<\/p>\n<p><strong>\u0622\u067e \u06a9\u06d2 \u0644\u06cc\u067e \u0679\u0627\u067e \u067e\u0631:<\/strong><\/p>\n<ul>\n<li>\n<p>\u0645\u0644\u0679\u06cc \u067e\u0627\u0633 \u0627\u06cc\u06a9 Ubuntu VM \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0688\u0648\u06a9\u0631 \u062a\u0635\u0648\u06cc\u0631 \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><code>make<\/code> \u0644\u0645\u0628\u06d2 \u062d\u06a9\u0645\u0648\u06ba \u06a9\u0648 \u0627\u0633 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0644\u067e\u06cc\u0679\u06cc\u06ba: <code>make setup<\/code> \/ <code>make check-N<\/code>.<\/p>\n<\/li>\n<li>\n<p><code>\/etc\/hosts<\/code> \u0627\u0634\u06cc\u0627\u0621 \u062c\u06cc\u0633\u06d2 <code>clearledger.local<\/code> \u0627\u067e\u0646\u06d2 \u0628\u0631\u0627\u0624\u0632\u0631 \u06a9\u0648 \u0627\u067e\u0646\u06d2 \u06a9\u0644\u0633\u0679\u0631 \u062a\u06a9 \u067e\u06c1\u0646\u0686\u0646\u06d2 \u062f\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u0627\u06cc\u067e:<\/strong><\/p>\n<ul>\n<li>\n<p>\u062a\u06cc\u0646 Python APIs (\u062a\u0635\u062f\u06cc\u0642\u060c \u0644\u06cc\u062c\u0631\u060c \u0627\u0637\u0644\u0627\u0639) + \u0648\u06cc\u0628 \u0641\u0631\u0646\u0679 \u0627\u06cc\u0646\u0688\u06d4<\/p>\n<\/li>\n<li>\n<p>\u067e\u0648\u0633\u0679\u06af\u0631\u06cc\u0633 \u0688\u06cc\u0679\u0627 \u0627\u0633\u0679\u0648\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0631\u06cc\u0688\u06cc\u0633 \u0644\u06cc\u062c\u0631 \u06a9\u0648 \u0646\u0648\u0679\u06cc\u0641\u06cc\u06a9\u06cc\u0634\u0646 \u06a9\u0648 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0637\u0644\u0628 \u06a9\u06cc\u06d2 \u0628\u063a\u06cc\u0631 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0634\u0627\u0626\u0639 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>nginx ingress \u0628\u0631\u0627\u0624\u0632\u0631 \u0679\u0631\u06cc\u0641\u06a9 \u06a9\u0648 \u062f\u0631\u0633\u062a \u0633\u0631\u0648\u0633 \u06a9\u06cc \u0637\u0631\u0641 \u0644\u06d2 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<\/ul>\n<table>\n<thead>\n<tr>\n<th>\u0633\u0627\u0645\u0627\u0646<\/th>\n<th>\u0627\u06cc\u06a9 \u0644\u0627\u0626\u0646 \u06a9\u0631\u062f\u0627\u0631<\/th>\n<th>\u0642\u062f\u0645<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>MicroK8s\/kubectl<\/td>\n<td>VM \u06a9\u06d2 \u0627\u0646\u062f\u0631 Kubernetes \u06a9\u0644\u0633\u0679\u0631: <code>kubectl<\/code> \u0627\u0633 \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u0628\u0627\u062a \u06a9\u0631\u06cc\u06ba\u06d4<\/td>\n<td>0<\/td>\n<\/tr>\n<tr>\n<td><code>clearledger<\/code> (\u0631\u06cc\u067e\u0648)<\/td>\n<td>\u0627\u06cc\u067e \u06a9\u0648\u0688 + CI \u0648\u0631\u06a9 \u0641\u0644\u0648: \u0622\u067e \u06a9\u06cc\u0627 \u0628\u0646\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/td>\n<td>1<\/td>\n<\/tr>\n<tr>\n<td><code>clearledger-infra<\/code> (\u0631\u06cc\u067e\u0648)<\/td>\n<td>Kubernetes YAML \u0635\u0631\u0641: \u06a9\u0644\u0633\u0679\u0631 \u06a9\u0648 \u0686\u0644\u0627\u0646\u06d2 \u06a9\u06cc \u06a9\u06cc\u0627 \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4 CI \u0627\u0633\u06d2 \u0627\u067e \u0688\u06cc\u0679 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 ArgoCD \u0627\u0633\u06d2 \u062a\u0642\u0633\u06cc\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/td>\n<td>1<\/td>\n<\/tr>\n<tr>\n<td>GitHub \u0627\u06cc\u06a9\u0634\u0646\u0632 + \u062e\u0648\u062f \u0645\u06cc\u0632\u0628\u0627\u0646 \u0644\u0627\u0646\u0686\u0631<\/td>\n<td>\u06c1\u0631 \u062f\u06be\u06a9\u0627 \u0627\u0645\u06cc\u062c \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0646\u0641\u0631\u0627\u0633\u0679\u0631\u06a9\u0686\u0631 \u0631\u06cc\u067e\u0648\u0632\u0679\u0631\u06cc \u06a9\u0648 \u0627\u067e \u0688\u06cc\u0679 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u062f\u0648\u0691\u0646\u06d2 \u0648\u0627\u0644\u06d2 VMs \u067e\u0631 \u0631\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0645\u0642\u0627\u0645\u06cc \u06a9\u0644\u0633\u0679\u0631 \u062a\u06a9 \u067e\u06c1\u0646\u0686\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/td>\n<td>1<\/td>\n<\/tr>\n<tr>\n<td>\u0622\u0631\u06af\u0648 \u0633\u06cc \u0688\u06cc<\/td>\n<td>\u06af\u06be\u0691\u06cc <code>clearledger-infra<\/code>\u0627\u067e\u0646\u06d2 \u06a9\u0644\u0633\u0679\u0631 \u06a9\u0648 Git \u0633\u06d2 \u0645\u0644\u0646\u06d2 \u0627\u0648\u0631 \u063a\u06cc\u0631 \u0645\u062c\u0627\u0632 \u062a\u0628\u062f\u06cc\u0644\u06cc\u0648\u06ba \u06a9\u0648 \u0648\u0627\u067e\u0633 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631 \u0628\u0646\u0627\u0626\u06cc\u06ba\u06d4<\/td>\n<td>2<\/td>\n<\/tr>\n<tr>\n<td>\u06af\u0679\u0644\u06cc\u06a9\u0633<\/td>\n<td>\u0631\u0627\u0632\u0648\u06ba \u067e\u0631 \u0645\u0634\u062a\u0645\u0644 \u06a9\u0645\u0679 \u06a9\u0648 \u0628\u0644\u0627\u06a9 \u06a9\u0631\u06cc\u06ba (API \u06a9\u06cc\u0632\u060c \u0679\u0648\u06a9\u0646\u0632)\u06d4<\/td>\n<td>3<\/td>\n<\/tr>\n<tr>\n<td>\u0634\u06cc\u0645\u06af\u0631\u06cc\u0628<\/td>\n<td>SAST: Python \u06a9\u06d2 \u063a\u06cc\u0631 \u0645\u062d\u0641\u0648\u0638 \u0646\u0645\u0648\u0646\u0648\u06ba \u06a9\u0648 \u067e\u06a9\u0691\u062a\u0627 \u06c1\u06d2 (\u0627\u06cc\u0645\u0628\u06cc\u0688\u0688\u060c \u06c1\u0627\u0631\u0688 \u06a9\u0648\u0688 \u0634\u062f\u06c1 \u0627\u0633\u0646\u0627\u062f)\u06d4<\/td>\n<td>3<\/td>\n<\/tr>\n<tr>\n<td>\u0686\u06cc\u06a9\u0631<\/td>\n<td>IaC \u0627\u0633\u06a9\u06cc\u0646\u0646\u06af: Dockerfiles \u0627\u0648\u0631 Kubernetes YAML \u06a9\u06cc \u063a\u0644\u0637 \u06a9\u0646\u0641\u06cc\u06af\u0631\u06cc\u0634\u0646\u06d4<\/td>\n<td>3<\/td>\n<\/tr>\n<tr>\n<td>\u06a9\u0648\u0626\u0632<\/td>\n<td>\u062a\u0635\u0648\u06cc\u0631\u06cc \u0627\u0633\u06a9\u06cc\u0646\u0646\u06af: \u067e\u0627\u0626\u067e\/npm \u067e\u06cc\u06a9\u062c\u0648\u06ba \u0627\u0648\u0631 \u0628\u0644\u0679 \u06a9\u0646\u0679\u06cc\u0646\u0631\u0632 \u0645\u06cc\u06ba \u0645\u0639\u0644\u0648\u0645 CVEs\u06d4<\/td>\n<td>3<\/td>\n<\/tr>\n<tr>\n<td>\u0633\u06cc\u0641\u0679 + \u06af\u0631\u067e<\/td>\n<td>SBOM \u062a\u06cc\u0627\u0631 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0646\u0645\u0648\u0646\u06d2 \u0645\u06cc\u06ba \u06c1\u06cc \u06a9\u0645\u0632\u0648\u0631\u06cc\u0648\u06ba \u06a9\u06cc \u062c\u0627\u0646\u0686 \u06a9\u0631\u06cc\u06ba\u06d4<\/td>\n<td>3<\/td>\n<\/tr>\n<tr>\n<td>\u0645\u0634\u062a\u0631\u06a9\u06c1 \u0646\u0634\u0627\u0646<\/td>\n<td>\u06a9\u0646\u0679\u06cc\u0646\u0631 \u06a9\u06cc \u062a\u0635\u0627\u0648\u06cc\u0631 \u067e\u0631 \u062f\u0633\u062a\u062e\u0637 \u06a9\u0631\u06cc\u06ba: \u0645\u0631\u062d\u0644\u06c1 4 \u062a\u0639\u06cc\u0646\u0627\u062a \u06c1\u0648\u0646\u06d2 \u067e\u0631 \u063a\u06cc\u0631 \u062f\u0633\u062a\u062e\u0637 \u0634\u062f\u06c1 \u062a\u0635\u0627\u0648\u06cc\u0631 \u06a9\u0648 \u0645\u0633\u062a\u0631\u062f \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/td>\n<td>3<\/td>\n<\/tr>\n<tr>\n<td>\u06a9\u06cc\u0628\u0631\u0646\u0648<\/td>\n<td>\u062f\u0627\u062e\u0644\u06c1 \u06a9\u0646\u0679\u0631\u0648\u0644: \u06a9\u0644\u0633\u0679\u0631 \u06af\u06cc\u0679 \u067e\u0631 \u0646\u0627\u0646 \u06a9\u0645\u067e\u0644\u0627\u0626\u0646\u0679 \u067e\u0648\u0688\u0632 \u06a9\u0648 \u0628\u0644\u0627\u06a9 \u06a9\u0631\u06cc\u06ba (\u0631\u0648\u0679 \u06a9\u0646\u0679\u06cc\u0646\u0631\u060c \u06af\u0645\u0634\u062f\u06c1 \u067e\u0627\u0628\u0646\u062f\u06cc\u0627\u06ba\u060c \u063a\u06cc\u0631 \u062f\u0633\u062a\u062e\u0637 \u0634\u062f\u06c1 \u062a\u0635\u0627\u0648\u06cc\u0631)\u06d4<\/td>\n<td>4<\/td>\n<\/tr>\n<tr>\n<td>\u0648\u0627\u0644\u0679<\/td>\n<td>Git \u0627\u0648\u0631 etcd \u06a9\u06d2 \u0628\u0627\u06c1\u0631 \u0627\u0633\u0646\u0627\u062f \u06a9\u0648 \u0627\u0633\u0679\u0648\u0631 \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u0633\u0646\u0627\u062f \u06a9\u0648 \u0633\u0679\u0627\u0631\u0679 \u0627\u067e \u067e\u0631 \u0633\u0627\u0626\u0688 \u06a9\u0627\u0631 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u067e\u0648\u0688 \u0645\u06cc\u06ba \u062f\u0627\u062e\u0644 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/td>\n<td>5<\/td>\n<\/tr>\n<tr>\n<td>\u0641\u0627\u0644\u06a9\u0648<\/td>\n<td>\u0627\u06cc \u0628\u06cc \u067e\u06cc \u0627\u06cc\u0641 \u0631\u0646 \u0679\u0627\u0626\u0645 \u06a9\u0627 \u067e\u062a\u06c1 \u0644\u06af\u0627\u0646\u0627: \u062c\u0628 \u06a9\u0648\u0626\u06cc \u0634\u06cc\u0644 \u0686\u0644\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u06a9\u0646\u0679\u06cc\u0646\u0631 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u062d\u0633\u0627\u0633 \u0641\u0627\u0626\u0644\u0648\u06ba \u06a9\u0648 \u0634\u0631\u0648\u0639 \u06cc\u0627 \u067e\u0691\u06be\u062a\u0627 \u06c1\u06d2 \u062a\u0648 \u0627\u0644\u0631\u0679\u06d4<\/td>\n<td>6<\/td>\n<\/tr>\n<tr>\n<td>\u0646\u06cc\u0679 \u0648\u0631\u06a9 \u06a9\u06cc \u067e\u0627\u0644\u06cc\u0633\u06cc<\/td>\n<td>\u0627\u0646\u0679\u0631 \u067e\u0648\u0688 \u06a9\u0628\u0631\u0646\u06cc\u0679\u0633 \u0641\u0627\u0626\u0631 \u0648\u0627\u0644: \u0627\u06af\u0631 \u0627\u06cc\u06a9 \u0633\u0631\u0648\u0633 \u0633\u06d2 \u0633\u0645\u062c\u06be\u0648\u062a\u06c1 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u062a\u0648 \u062f\u06be\u0645\u0627\u06a9\u06d2 \u06a9\u06d2 \u0631\u062f\u0627\u0633 \u06a9\u0648 \u0645\u062d\u062f\u0648\u062f \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/td>\n<td>6<\/td>\n<\/tr>\n<tr>\n<td>LitmusChaos<\/td>\n<td>\u06cc\u06c1 \u062b\u0627\u0628\u062a \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u067e\u0648\u0688 \u06a9\u0648 \u062c\u0627\u0646 \u0628\u0648\u062c\u06be \u06a9\u0631 \u062e\u062a\u0645 \u06a9\u0631 \u062f\u06cc\u06ba \u06a9\u06c1 \u0627\u06cc\u067e \u0628\u0627\u0632\u06cc\u0627\u0641\u062a \u06c1\u0648 \u06af\u0626\u06cc \u06c1\u06d2 (\u0627\u062e\u062a\u06cc\u0627\u0631\u06cc)\u06d4<\/td>\n<td>6.5<\/td>\n<\/tr>\n<tr>\n<td>\u067e\u0631\u0648\u0645\u06cc\u062a\u06be\u06cc\u0633\/\u06af\u0631\u0627\u0641\u0627\u0646\u0627\/\u0644\u0648\u06a9\u06cc<\/td>\n<td>\u0645\u06cc\u0679\u0631\u06a9\u0633\u060c \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688\u0632\u060c \u0627\u0648\u0631 \u0644\u0627\u06af \u0633\u0631\u0686\u0632: \u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u0627\u06cc\u0648\u0646\u0679\u0633 \u06a9\u0648 \u062b\u0628\u0648\u062a \u0645\u06cc\u06ba \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/td>\n<td>7<\/td>\n<\/tr>\n<tr>\n<td>\u0627\u0648\u067e\u0646 \u0679\u06cc\u0644\u06cc \u0645\u06cc\u0679\u0631\u06cc + \u0679\u06cc\u0645\u067e\u0648<\/td>\n<td>\u062a\u0642\u0633\u06cc\u0645 \u0634\u062f\u06c1 \u0679\u0631\u06cc\u06a9\u0646\u06af: \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2 \u062c\u06c1\u0627\u06ba \u0627\u06cc\u06a9 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0627\u067e\u0646\u0627 \u0648\u0642\u062a \u062a\u0645\u0627\u0645 \u0633\u0631\u0648\u0633\u0632 \u0645\u06cc\u06ba \u0635\u0631\u0641 \u06a9\u0631\u062a\u06cc \u06c1\u06d2 (\u0627\u062e\u062a\u06cc\u0627\u0631\u06cc)\u06d4<\/td>\n<td>7.5<\/td>\n<\/tr>\n<tr>\n<td>Terraform\/EKS\/ECR\/RDS<\/td>\n<td>AWS \u0645\u0646\u062a\u0642\u0644\u06cc \u06a9\u06d2 \u0644\u06cc\u06d2 \u0628\u0646\u06cc\u0627\u062f\u06cc \u0688\u06be\u0627\u0646\u0686\u06c1 \u0628\u0637\u0648\u0631 \u06a9\u0648\u0688: \u0648\u06c1\u06cc \u0627\u06cc\u067e\u0633\u060c \u06a9\u0644\u0627\u0624\u0688 \u0645\u06cc\u0646\u062c\u0645\u0646\u0679 \u0633\u067e\u0648\u0631\u0679 \u0633\u0631\u0648\u0633\u0632\u06d4<\/td>\n<td>8<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u06c1\u0631 \u0642\u062f\u0645 \u0633\u06cc\u06a9\u0648\u0631\u0679\u06cc \u06a9\u06cc \u0627\u06cc\u06a9 \u0646\u0626\u06cc \u067e\u0631\u062a \u06a9\u0627 \u0627\u0636\u0627\u0641\u06c1 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0648\u0632\u0627\u0631 \u0642\u0627\u0628\u0644 \u062a\u0628\u0627\u062f\u0644\u06c1 \u0646\u06c1\u06cc\u06ba \u06c1\u06cc\u06ba\u06d4 \u0633\u06a9\u06cc\u0646\u0631 \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06a9\u0648\u0688 \u0627\u0648\u0631 \u0627\u0645\u06cc\u062c\u0632 \u06a9\u0648 \u0686\u06cc\u06a9 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c ArgoCD \u06a9\u0644\u0633\u0679\u0631\u0632 \u06a9\u0648 Git \u0633\u06d2 \u06c1\u0645 \u0622\u06c1\u0646\u06af \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c Vault \u0631\u0627\u0632\u0648\u06ba \u06a9\u0648 \u0633\u0646\u0628\u06be\u0627\u0644\u062a\u0627 \u06c1\u06d2\u060c Kyverno \u063a\u06cc\u0631 \u0645\u062d\u0641\u0648\u0638 \u06a9\u0627\u0645 \u06a9\u06d2 \u0628\u0648\u062c\u06be \u06a9\u0648 \u0686\u0644\u0627\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0631\u0648\u06a9\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 Falco \u0639\u0645\u0644\u062f\u0631\u0622\u0645\u062f \u06a9\u06d2 \u0628\u0639\u062f \u0645\u0634\u06a9\u0648\u06a9 \u0631\u0648\u06cc\u06d2 \u067e\u0631 \u0646\u0638\u0631 \u0631\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0633 \u0644\u06cc\u06d2 \u0622\u0631\u0688\u0631 \u0627\u06c1\u0645 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0627\u06cc\u06a9 \u0648\u0642\u062a \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u062a\u06c1\u06c1 \u06a9\u06cc \u06af\u06c1\u0631\u0627\u0626\u06cc \u0645\u06cc\u06ba \u062f\u0641\u0627\u0639 \u06a9\u06cc \u062a\u0639\u0645\u06cc\u0631 \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-how-to-choose-your-path\">\u0631\u0627\u0633\u062a\u06d2 \u06a9\u0627 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u06cc\u0633\u06d2 \u06a9\u0631\u06cc\u06ba\u06d4<\/h2>\n<p>\u06a9\u0644\u0633\u0679\u0631 \u06a9\u06cc \u0641\u0631\u0627\u06c1\u0645\u06cc \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0645\u06cc\u0632\u0628\u0627\u0646 RAM \u0633\u06d2 \u0627\u06cc\u06a9 \u0631\u0627\u0633\u062a\u06c1 \u0645\u0646\u062a\u062e\u0628 \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u06af\u0631 OOM \u06a9\u06d2 \u062e\u0627\u062a\u0645\u06d2 \u06cc\u0627 \u0688\u0633\u06a9 \u06a9\u06d2 \u062f\u0628\u0627\u0624 \u06a9\u06cc \u0648\u062c\u06c1 \u0633\u06d2 \u0627\u06cc\u06a9 \u062f\u0646 \u0636\u0627\u0626\u0639 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u06c1\u0645 \u0644\u06cc\u0628\u0632 \u06a9\u0648 \u062f\u0631\u0645\u06cc\u0627\u0646 \u0645\u06cc\u06ba \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631 \u062f\u06cc\u06ba \u06af\u06d2\u060c \u0627\u0633 \u0644\u06cc\u06d2 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<table>\n<thead>\n<tr>\n<th>\u0622\u067e \u06a9\u06cc \u062d\u0627\u0644\u062a<\/th>\n<th>\u0633\u0691\u06a9<\/th>\n<th>\u0622\u067e \u06a9\u0648 \u06a9\u06cc\u0627 \u0645\u0644\u062a\u0627 \u06c1\u06d2<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>8 \u062c\u06cc \u0628\u06cc \u0631\u06cc\u0645<\/strong>\u06cc\u0627\u060c \u0645\u062c\u06be\u06d2 \u06cc\u0642\u06cc\u0646 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2 \u06a9\u06c1 \u0622\u06cc\u0627 \u06cc\u06c1 \u0644\u06cc\u067e \u0679\u0627\u067e \u0644\u06cc\u0628 \u0644\u06d2 \u062c\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/td>\n<td><strong>\u067e\u06c1\u0644\u06d2 \u0688\u0648\u06a9\u0631 \u06a9\u0645\u067e\u0648\u0632 \u06a9\u0631\u06cc\u06ba\u06d4<\/strong><\/td>\n<td>\u0627\u0635\u0644\u06cc \u0627\u06cc\u067e: \u0631\u062c\u0633\u0679\u0631\u06cc\u0634\u0646\u060c \u067e\u0648\u0633\u0679 \u0644\u06cc\u0646 \u062f\u06cc\u0646\u060c \u0627\u0648\u0631 \u062a\u0639\u0645\u06cc\u0644 \u06a9\u06d2 \u0627\u0644\u0631\u0679\u0633 \u06a9\u0648 \u0645\u062a\u062d\u0631\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 \u067e\u06be\u0631 \u06a9\u0644\u0633\u0679\u0631 \u06a9\u0627 \u0641\u06cc\u0635\u0644\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4 <code>make integration-up<\/code> \u00b7 \u0645\u0642\u0627\u0645\u06cc \u0627\u0646\u0636\u0645\u0627\u0645 \u0627\u0633\u0679\u06cc\u06a9<\/td>\n<\/tr>\n<tr>\n<td><strong>16 \u062c\u06cc \u0628\u06cc \u0631\u06cc\u0645<\/strong> \u0645\u06cc\u0632\u0628\u0627\u0646 \u0633\u06d2<\/td>\n<td><strong>\u06c1\u0644\u06a9\u0627 \u0645\u0642\u0627\u0645\u06cc \u06a9\u0644\u0633\u0679\u0631<\/strong> (\u0633\u0637\u062d 0~5)<\/td>\n<td><strong>\u0627\u06cc\u06a9 VM \u067e\u0631 \u0686\u0644 \u0631\u06c1\u0627 \u06c1\u06d2:<\/strong> \u0627\u0633 \u0633\u06cc\u0679 \u0627\u067e \u0645\u06cc\u06ba Kubernetes\u060c CI\/CD\u060c GitOps\u060c \u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u0686\u06cc\u06a9\u060c \u062f\u0627\u062e\u0644\u06c1 \u06a9\u0646\u0679\u0631\u0648\u0644\u060c \u0627\u0648\u0631 \u0648\u0627\u0644\u0679 \u0634\u0627\u0645\u0644 \u06c1\u06cc\u06ba\u06d4 \u06a9\u0645 \u0648\u0633\u0627\u0626\u0644 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062a\u0631\u0645\u06cc\u0645 \u06a9\u0631\u06cc\u06ba\u06d4 <code>scripts\/setup-cluster.local.env<\/code> \u0686\u0644\u0627\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 <code>make setup<\/code>.<\/td>\n<\/tr>\n<tr>\n<td><strong>16GB \u0633\u06d2 \u06a9\u0645<\/strong> \u0627\u06af\u0631 \u0622\u067e RAM \u06a9\u06cc \u0645\u06cc\u0632\u0628\u0627\u0646\u06cc \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0622\u067e \u06a9\u0648 Kubernetes \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2 \u06cc\u0627 \u0622\u067e \u062a\u0645\u0627\u0645 8 \u0645\u0631\u0627\u062d\u0644 \u0686\u0627\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/td>\n<td><strong>\u06a9\u0644\u0627\u0624\u0688 VM<\/strong><\/td>\n<td>\u0627\u06cc\u06a9 \u0631\u06cc\u0645\u0648\u0679 \u0645\u0634\u06cc\u0646 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u06cc\u06ba (4-8 vCPU\u060c 16-32 GB RAM)\u060c \u0627\u0633\u0679\u0648\u0631\u06cc\u062c \u06a9\u0648 \u06a9\u0644\u0648\u0646 \u06a9\u0631\u06cc\u06ba\u060c \u0627\u0648\u0631 \u0648\u06c1\u0627\u06ba \u0644\u06cc\u0628 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4 <code>make teardown<\/code> \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u0645\u06a9\u0645\u0644\u06d4 \u0645\u0631\u0627\u062d\u0644 6.5\/7\/7.5 (Chaos + \u0645\u06a9\u0645\u0644 \u0645\u0634\u0627\u06c1\u062f\u0627\u062a\u06cc) \u0645\u06cc\u0632\u0628\u0627\u0646 \u067e\u0631 24GB \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0622\u067e \u06a9\u0627 \u0644\u06cc\u067e \u0679\u0627\u067e \u0627\u0633 \u06a9\u0627 \u0645\u062a\u062d\u0645\u0644 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2 \u062a\u0648 \u0627\u0633 \u0631\u0627\u0633\u062a\u06d2 \u067e\u0631 \u062c\u0627\u0626\u06cc\u06ba\u06d4<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u0627\u0633 \u06af\u0627\u0626\u06cc\u0688 \u0645\u06cc\u06ba \u0637\u06d2 \u0634\u062f\u06c1 \u0631\u0627\u0633\u062a\u06c1 \u06a9\u0645 \u0627\u0632 \u06a9\u0645 24 GB RAM \u0627\u0648\u0631 \u0645\u06a9\u0645\u0644 \u0637\u0648\u0631 \u067e\u0631 \u0645\u0642\u0627\u0645\u06cc VM (\u0622\u067e \u06a9\u06d2 \u0634\u0631\u0648\u0639 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2) \u0641\u0631\u0636 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u06cc\u06c1 \u0622\u067e \u0646\u06c1\u06cc\u06ba \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0627\u0633 \u0644\u0627\u0626\u0646 \u0633\u06d2 \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba \u062c\u0648 \u0622\u067e \u06a9\u06d2 \u06a9\u0645\u067e\u06cc\u0648\u0679\u0631 \u0633\u06d2 \u0645\u0644\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-how-to-save-your-progress\">\u0627\u067e\u0646\u06cc \u062a\u0631\u0642\u06cc \u06a9\u0648 \u06a9\u06cc\u0633\u06d2 \u0628\u0686\u0627\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4<\/h2>\n<p><strong>\u0635\u0631\u0641 \u0645\u06cc\u06a9 + \u0645\u0644\u0679\u06cc \u067e\u0627\u0633:<\/strong> <code>make snapshot<\/code> \u0627\u0648\u0631 <code>make restore<\/code> \u0645\u0644\u0679\u06cc \u067e\u0627\u0633 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0622\u067e \u0645\u0644\u0679\u06cc \u067e\u0627\u062a\u06be \u06a9\u06d2 \u0628\u063a\u06cc\u0631 \u0644\u06cc\u0646\u06a9\u0633 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0633\u0646\u06cc\u067e \u0634\u0627\u0679 \u06a9\u0648 \u0686\u06be\u0648\u0691 \u062f\u06cc\u06ba \u0627\u0648\u0631 \u0627\u06af\u0631 \u0622\u067e \u06a9\u0648 \u067e\u0631\u06cc\u0634\u0627\u0646\u06cc \u06c1\u0648 \u062a\u0648 \u067e\u0627\u062a\u06be B \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u0633 \u0644\u06cc\u0628 \u06a9\u0648 \u0645\u06a9\u0645\u0644 \u06c1\u0648\u0646\u06d2 \u0645\u06cc\u06ba \u06a9\u0626\u06cc \u062f\u0646 \u0644\u06af\u06cc\u06ba \u06af\u06d2\u06d4<\/p>\n<p>\u0686\u0648\u0646\u06a9\u06c1 \u0633\u0648\u0631\u0633 \u06a9\u0648\u0688 \u0622\u067e \u06a9\u06d2 \u06a9\u0645\u067e\u06cc\u0648\u0679\u0631 \u067e\u0631 \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2\u060c \u0627\u0633 \u0644\u06cc\u06d2 VM \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0628\u0646\u0627\u0646\u06d2 \u06cc\u0627 \u062d\u0630\u0641 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u0622\u067e \u06a9\u06d2 Git \u0630\u062e\u06cc\u0631\u06c1\u060c \u06a9\u0645\u0679\u060c \u0645\u06cc\u0646\u06cc \u0641\u06cc\u0633\u0679\u060c \u06cc\u0627 \u06a9\u0646\u0641\u06cc\u06af\u0631\u06cc\u0634\u0646 \u0641\u0627\u0626\u0644\u06cc\u06ba \u062d\u0630\u0641 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u06cc \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>VM \u0639\u0645\u0644\u062f\u0631\u0622\u0645\u062f \u06a9\u06d2 \u0645\u0627\u062d\u0648\u0644 \u06a9\u0648 \u0630\u062e\u06cc\u0631\u06c1 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0628\u0634\u0645\u0648\u0644 \u062a\u0639\u06cc\u0646\u0627\u062a \u067e\u0648\u0688\u0632\u060c \u0648\u0627\u0644\u0679 \u0633\u06cc\u06a9\u0631\u0679\u0633\u060c \u067e\u0648\u0633\u0679\u06af\u0631\u06cc\u0633 \u0688\u06cc\u0679\u0627\u060c \u0627\u0648\u0631 \u06af\u0631\u0627\u0641\u0627\u0646\u0627 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688\u0632\u06d4<\/p>\n<h3 id=\"heading-save-your-progress\">\u0627\u067e\u0646\u06cc \u062a\u0631\u0642\u06cc \u06a9\u0648 \u0628\u0686\u0627\u0626\u06cc\u06ba\u06d4<\/h3>\n<p>\u06c1\u0631 \u0645\u0631\u062d\u0644\u06c1 \u0645\u06a9\u0645\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f\u060c \u062c\u0627\u0631\u06cc \u0631\u06a9\u06be\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0627\u0633\u0646\u06cc\u067e \u0634\u0627\u0679 \u0628\u0646\u0627\u0626\u06cc\u06ba\u06d4 \u0645\u062b\u0627\u0644 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631:<\/p>\n<pre><code class=\"language-bash\">make snapshot STAGE=7\nmake snapshots\n<\/code><\/pre>\n<p>\u06c1\u0645\u06cc\u0634\u06c1 \u0686\u0644\u0627\u0626\u06cc\u06ba <code>make snapshots<\/code> \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u0633\u0646\u06cc\u067e \u0634\u0627\u0679 \u0628\u0646 \u06af\u06cc\u0627 \u062a\u06be\u0627\u06d4<\/p>\n<h3 id=\"heading-restore-your-progress\">\u0627\u067e\u0646\u06cc \u062a\u0631\u0642\u06cc \u06a9\u0648 \u0628\u062d\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/h3>\n<p>\u0627\u06af\u0631 \u0622\u067e \u06a9\u0627 VM \u062a\u06be\u0648\u0691\u06cc \u062f\u06cc\u0631 \u06a9\u06d2 \u0628\u0639\u062f \u062f\u0633\u062a\u06cc\u0627\u0628 \u0646\u06c1 \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u062a\u0648 \u062a\u0627\u0632\u06c1 \u062a\u0631\u06cc\u0646 \u0648\u0631\u06a9\u0646\u06af \u0627\u0633\u0646\u06cc\u067e \u0634\u0627\u0679 \u06a9\u0648 \u0628\u062d\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">make snapshots\nmake restore STAGE=7\n\nexport KUBECONFIG=~\/.kube\/clearledger-config\nmake check-7\n<\/code><\/pre>\n<h3 id=\"heading-what-happens-if-the-vm-breaks\">\u0627\u06af\u0631 VM \u0646\u06cc\u0686\u06d2 \u0686\u0644\u0627 \u062c\u0627\u0626\u06d2 \u062a\u0648 \u06a9\u06cc\u0627 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u061f<\/h3>\n<p>\u0622\u067e \u0628\u0631\u0642\u0631\u0627\u0631 \u0631\u06a9\u06be\u062a\u06d2 \u06c1\u06cc\u06ba:<\/p>\n<p>\u0622\u067e \u0622\u062e\u0631\u06cc \u0627\u0633\u0646\u06cc\u067e \u0634\u0627\u0679 \u06a9\u06d2 \u0628\u0639\u062f \u0633\u06d2 VM \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0630\u062e\u06cc\u0631\u06c1 \u06a9\u0631\u062f\u06c1 \u06c1\u0631 \u0686\u06cc\u0632 \u06a9\u0648 \u06a9\u06be\u0648 \u062f\u06cc\u06ba \u06af\u06d2\u060c \u0628\u0634\u0645\u0648\u0644:<\/p>\n<ul>\n<li>\n<p>\u0686\u0644\u0646\u06d2 \u0648\u0627\u0644\u06cc \u067e\u06be\u0644\u06cc<\/p>\n<\/li>\n<li>\n<p>\u0648\u0627\u0644\u0679 \u0633\u06cc\u06a9\u0631\u06cc\u0679<\/p>\n<\/li>\n<li>\n<p>\u067e\u0648\u0633\u0679\u06af\u0631\u06cc\u0633 \u0688\u06cc\u0679\u0627<\/p>\n<\/li>\n<li>\n<p>\u06af\u0631\u0627\u0641\u0627\u0646\u0627 \u0627\u0648\u0631 \u0688\u06cc\u0679\u0627 \u0631\u0648\u0645<\/p>\n<\/li>\n<\/ul>\n<p>\u0627\u0633 \u0644\u06cc\u06d2 \u06c1\u0631 \u0642\u062f\u0645 \u0645\u06a9\u0645\u0644 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f \u0627\u0633\u0646\u06cc\u067e \u0634\u0627\u0679 \u0628\u0646\u0627\u0646\u0627 \u0627\u0686\u06be\u0627 \u062e\u06cc\u0627\u0644 \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-path-a-you-have-a-snapshot-recommended\">\u0631\u0627\u0633\u062a\u06c1 A: \u0627\u0633\u0646\u06cc\u067e \u0634\u0627\u0679 \u0644\u06cc\u06ba (\u062a\u062c\u0648\u06cc\u0632 \u06a9\u0631\u062f\u06c1)<\/h4>\n<p>\u062a\u0627\u0632\u06c1 \u062a\u0631\u06cc\u0646 \u0648\u0631\u06a9\u0646\u06af \u0627\u0633\u0646\u06cc\u067e \u0634\u0627\u0679 \u06a9\u0648 \u0628\u062d\u0627\u0644 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0633 \u0645\u0631\u062d\u0644\u06d2 \u0633\u06d2 \u062c\u0627\u0631\u06cc \u0631\u06a9\u06be\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">make snapshots\nmake restore STAGE=6\n\nexport KUBECONFIG=~\/.kube\/clearledger-config\nmake check-6\n<\/code><\/pre>\n<h4 id=\"heading-path-b-no-snapshot\">\u067e\u0627\u062a\u06be \u0628\u06cc: \u06a9\u0648\u0626\u06cc \u0633\u0646\u06cc\u067e \u0634\u0627\u0679 \u0646\u06c1\u06cc\u06ba\u06d4<\/h4>\n<p>\u0627\u067e\u0646\u06cc \u0644\u06cc\u0628\u0627\u0631\u0679\u0631\u06cc \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0628\u0646\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">make teardown\nmake setup\n\nexport KUBECONFIG=~\/.kube\/clearledger-config\n<\/code><\/pre>\n<p>\u0622\u067e \u06a9\u0627 Git \u0630\u062e\u06cc\u0631\u06c1 \u0628\u0631\u0642\u0631\u0627\u0631 \u0631\u06c1\u06d2 \u06af\u0627\u060c \u0644\u06cc\u06a9\u0646 \u0622\u067e \u06a9\u0627 Kubernetes \u06a9\u0644\u0633\u0679\u0631 \u062e\u0627\u0644\u06cc \u06c1\u0648\u0646\u0627 \u0634\u0631\u0648\u0639 \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4 \u06a9\u062a\u0627\u0628 \u06a9\u0648 \u0627\u0633 \u0633\u0637\u062d \u0633\u06d2 \u062c\u0627\u0631\u06cc \u0631\u06a9\u06be\u06cc\u06ba \u062c\u0633 \u0633\u0637\u062d \u067e\u0631 \u0622\u067e \u067e\u06c1\u0646\u0686\u06d2 \u0627\u0648\u0631 \u0648\u06c1\u0627\u06ba \u0633\u06d2 \u0627\u067e\u0646\u0627 \u067e\u0644\u06cc\u0679 \u0641\u0627\u0631\u0645 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0628\u0646\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u06af\u0631 \u0622\u067e \u06a9\u0648 \u0688\u0633\u06a9 \u06a9\u06cc \u062c\u06af\u06c1 \u06a9\u06d2 \u0645\u0633\u0627\u0626\u0644\u060c \u0627\u0633\u0646\u06cc\u067e \u0634\u0627\u0679 \u06a9\u06cc \u0646\u0627\u06a9\u0627\u0645\u06cc\u060c \u0645\u06cc\u06a9 \u0633\u0644\u06cc\u067e\u0646\u06af \u06cc\u0627 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0634\u0631\u0648\u0639 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0645\u0633\u0627\u0626\u0644\u060c \u0648\u0627\u0644\u0679 \u06a9\u06cc \u062a\u0648\u062b\u06cc\u0642 \u06a9\u06cc \u062e\u0631\u0627\u0628\u06cc\u0627\u06ba\u060c \u06cc\u0627 CrashLoopBackOff \u0645\u06cc\u06ba \u067e\u06be\u0646\u0633\u06d2 \u06c1\u0648\u0626\u06d2 Pods \u062c\u06cc\u0633\u06d2 \u0645\u0633\u0627\u0626\u0644 \u06a9\u0627 \u0633\u0627\u0645\u0646\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u062a\u0641\u0635\u06cc\u0644\u06cc \u0628\u062d\u0627\u0644\u06cc \u06a9\u06d2 \u0627\u0642\u062f\u0627\u0645\u0627\u062a \u06a9\u06d2 \u0644\u06cc\u06d2 Troubleshooting.md \u062f\u06cc\u06a9\u06be\u06cc\u06ba\u06d4<\/p>\n<h2 id=\"heading-who-this-is-for\">\u06cc\u06c1 \u06a9\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06c1\u06d2\u061f<\/h2>\n<p><strong>\u062c\u0648\u0646\u06cc\u0626\u0631 \u0688\u06cc \u0627\u0648 \u0627\u0648\u067e\u0633 (0-2 \u0633\u0627\u0644):<\/strong> \u062a\u0631\u062a\u06cc\u0628 \u0645\u06cc\u06ba \u062a\u0645\u0627\u0645 \u0645\u0631\u0627\u062d\u0644 \u067e\u0631 \u0639\u0645\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 \u0645\u0633\u0627\u0626\u0644 \u06a9\u06d2 \u0633\u06cc\u06a9\u0634\u0646 \u06a9\u0648 \u0645\u062a \u0686\u06be\u0648\u0691\u06cc\u06ba\u06d4 \u0644\u06cc\u0648\u0644 0 \u0633\u06d2 2 \u0645\u06cc\u06ba \u06c1\u0631 \u0627\u06cc\u06a9 \u06a9\u0648 \u067e\u0648\u0631\u0627 \u062f\u0646 \u0644\u06af\u0646\u06d2 \u06a9\u06cc \u0627\u0645\u06cc\u062f \u06c1\u06d2\u060c \u0644\u06cc\u0648\u0644 3 \u0633\u06d2 7 \u0645\u06cc\u06ba \u06c1\u0631 \u0627\u06cc\u06a9 \u06a9\u0648 \u0622\u062f\u06be\u0627 \u062f\u0646 \u0644\u06af\u0646\u06d2 \u06a9\u06cc \u0627\u0645\u06cc\u062f \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0644\u06cc\u0648\u0644 8 \u0645\u06cc\u06ba \u06a9\u0626\u06cc \u06af\u06be\u0646\u0679\u06d2 \u0644\u06af\u0646\u06d2 \u06a9\u06cc \u0627\u0645\u06cc\u062f \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0639\u0627\u0645 \u0628\u0627\u062a \u06c1\u06d2\u060c \u0627\u0633 \u0644\u06cc\u06d2 \u062c\u0644\u062f\u06cc \u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p><strong>\u0645\u0688 \u0644\u06cc\u0648\u0644 \u0688\u06cc \u0627\u0648\u067e\u0633 (2-4 \u0633\u0627\u0644):<\/strong> \u0627\u06cc\u067e \u06a9\u0648 \u0633\u0645\u062c\u06be\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 0-2 \u06a9\u06d2 \u0645\u0631\u0627\u062d\u0644 \u06a9\u0648 \u062e\u062a\u0645 \u06a9\u0631\u06cc\u06ba\u060c \u067e\u06be\u0631 3-7 \u0645\u0631\u0627\u062d\u0644 \u067e\u0631 \u062a\u0648\u062c\u06c1 \u0645\u0631\u06a9\u0648\u0632 \u06a9\u0631\u06cc\u06ba \u062c\u06c1\u0627\u06ba \u062d\u0641\u0627\u0638\u062a\u06cc \u067e\u0631\u062a\u06cc\u06ba \u0648\u0627\u0642\u0639 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p><strong>\u0627\u0646\u0679\u0631\u0648\u06cc\u0648 \u06a9\u06cc \u062a\u06cc\u0627\u0631\u06cc:<\/strong> \u0645\u0631\u062d\u0644\u06c1 4 \u0645\u06a9\u0645\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f \u067e\u0691\u06be\u06cc\u06ba\u06d4 <code>docs\/interview-prep.md<\/code>. \u0633\u0648\u0627\u0644\u0627\u062a \u0628\u0627\u0644\u06a9\u0644 \u0627\u0633 \u0644\u06cc\u0628 \u06a9\u06d2 \u0645\u0648\u0627\u062f \u067e\u0631 \u0645\u0628\u0646\u06cc \u06c1\u06cc\u06ba\u06d4<\/p>\n<h2 id=\"heading-how-to-set-up-your-machine\">\u0627\u067e\u0646\u06d2 \u0622\u0644\u06d2 \u06a9\u0648 \u06a9\u06cc\u0633\u06d2 \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc\u06ba\u06d4<\/h2>\n<p>\u0636\u0631\u0648\u0631\u06cc\u0627\u062a \u0627\u0648\u067e\u0631 \u062f\u06cc \u06af\u0626\u06cc \u0634\u0631\u0627\u0626\u0637 \u0645\u06cc\u06ba \u06c1\u06cc\u06ba\u06d4 \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u060c \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u0626\u06cc\u06ba \u06a9\u06c1 \u0622\u067e \u06a9\u06d2 \u067e\u0627\u0633 24 \u062c\u06cc \u0628\u06cc \u0631\u06cc\u0645\u060c 6 \u0633\u06cc \u067e\u06cc \u06cc\u0648 \u06a9\u0648\u0631\u060c \u0627\u0648\u0631 80 \u062c\u06cc \u0628\u06cc \u0641\u0631\u06cc \u0688\u0633\u06a9 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-install-the-required-tools\">\u0645\u0637\u0644\u0648\u0628\u06c1 \u0679\u0648\u0644\u0632 \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/h3>\n<table>\n<thead>\n<tr>\n<th>\u0633\u0627\u0645\u0627\u0646<\/th>\n<th>\u0641\u0646\u06a9\u0634\u0646<\/th>\n<th>macOS<\/th>\n<th>\u0644\u06cc\u0646\u06a9\u0633<\/th>\n<th>\u06a9\u06be\u0691\u06a9\u06cc\u0627\u06ba<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>\u06a9\u062b\u06cc\u0631 \u067e\u0627\u0633<\/td>\n<td>\u0627\u067e\u0646\u06d2 \u0644\u06cc\u067e \u0679\u0627\u067e \u067e\u0631 \u06c1\u0644\u06a9\u0627 \u067e\u06be\u0644\u06a9\u0627 Ubuntu VM \u0628\u0646\u0627\u0626\u06cc\u06ba\u06d4<\/td>\n<td><code>brew install --cask multipass<\/code><\/td>\n<td><code>sudo snap install multipass<\/code><\/td>\n<td>\u0645\u0644\u0679\u06cc \u067e\u0627\u0633\u06d4 \u0686\u0644\u0627\u0626\u06cc\u06ba\/\u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/td>\n<\/tr>\n<tr>\n<td>\u06a9\u06cc\u0648\u0628\u06cc\u06a9\u0679\u0644<\/td>\n<td>\u0679\u0631\u0645\u06cc\u0646\u0644 \u0633\u06d2 \u0627\u067e\u0646\u06d2 Kubernetes \u06a9\u0644\u0633\u0679\u0631 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0628\u0627\u062a \u0686\u06cc\u062a \u06a9\u0631\u06cc\u06ba\u06d4<\/td>\n<td><code>brew install kubectl<\/code><\/td>\n<td><code>sudo snap install kubectl --classic<\/code><\/td>\n<td><code>winget install Kubernetes.kubectl<\/code><\/td>\n<\/tr>\n<tr>\n<td>\u06a9\u0646\u0679\u0631\u0648\u0644<\/td>\n<td>\u06a9\u0628\u0631\u0646\u06cc\u0679\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2 \u067e\u06cc\u06a9\u06cc\u062c \u0645\u06cc\u0646\u06cc\u062c\u0631 (\u0627\u067e\u0679\/\u0628\u0631\u06cc\u0648 \u06a9\u06cc \u0637\u0631\u062d\u060c \u0644\u06cc\u06a9\u0646 \u06a9\u0644\u0633\u0679\u0631 \u0627\u06cc\u067e\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2)<\/td>\n<td><code>brew install helm<\/code><\/td>\n<td><code>sudo snap install helm --classic<\/code><\/td>\n<td><code>winget install Helm.Helm<\/code><\/td>\n<\/tr>\n<tr>\n<td>\u0688\u0627\u06a9\u0631 \u0688\u06cc\u0633\u06a9 \u0679\u0627\u067e<\/td>\n<td>\u0627\u067e\u0646\u06cc \u0645\u0634\u06cc\u0646 \u067e\u0631 \u06a9\u0646\u0679\u06cc\u0646\u0631 \u06a9\u06cc \u062a\u0635\u0648\u06cc\u0631 \u0628\u0646\u0627\u0626\u06cc\u06ba\u06d4<\/td>\n<td>docker.com<\/td>\n<td>docker.com<\/td>\n<td>docker.com<\/td>\n<\/tr>\n<tr>\n<td>jq<\/td>\n<td>JSON \u0622\u0624\u0679 \u067e\u0679 \u06a9\u0648 \u0641\u0627\u0631\u0645\u06cc\u0679 \u06a9\u0631\u06cc\u06ba \u062a\u0627\u06a9\u06c1 \u06cc\u06c1 \u067e\u0691\u06be\u0646\u06d2 \u06a9\u06d2 \u0642\u0627\u0628\u0644 \u06c1\u0648\u06d4<\/td>\n<td><code>brew install jq<\/code><\/td>\n<td><code>sudo apt install jq<\/code><\/td>\n<td><code>winget install jqlang.jq<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><strong>\u0648\u0646\u0688\u0648\u0632 \u0635\u0627\u0631\u0641\u06cc\u0646:<\/strong> WSL2 Ubuntu \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0633\u06d2 \u062a\u0645\u0627\u0645 \u06a9\u0645\u0627\u0646\u0688\u0632 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4 \u0633\u06cc\u0679 \u0627\u067e \u067e\u0627\u0648\u0631 \u0634\u06cc\u0644 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0644\u06c1\u0630\u0627 \u0627\u0633 \u0644\u06cc\u0628 \u0645\u06cc\u06ba \u067e\u0627\u0648\u0631 \u0634\u06cc\u0644 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4 <code>make<\/code> \u0627\u0648\u0631 \u0627\u06cc\u06a9 \u0628\u0627\u0634 \u0627\u0633\u06a9\u0631\u067e\u0679\u06d4<\/p>\n<p>\u062c\u0627\u0631\u06cc \u0631\u06a9\u06be\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0633\u0628 \u06a9\u0686\u06be \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">multipass --version\nkubectl version --client\nhelm version\ndocker --version\njq --version\n<\/code><\/pre>\n<p>\u0627\u06af\u0631 \u06a9\u0645\u0627\u0646\u0688 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648 \u062c\u0627\u062a\u06cc \u06c1\u06d2 \u062a\u0648 \u062c\u0627\u0631\u06cc \u0631\u06a9\u06be\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06a9\u0648\u0626\u06cc \u06af\u0645\u0634\u062f\u06c1 \u0679\u0648\u0644\u0632 \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<h2 id=\"heading-how-to-start-the-lab\">\u067e\u0631\u06cc\u06a9\u0679\u0633 \u06a9\u06cc\u0633\u06d2 \u0634\u0631\u0648\u0639 \u06a9\u06cc \u062c\u0627\u0626\u06d2\u06d4<\/h2>\n<p>\u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0637\u06d2 \u0634\u062f\u06c1 \u0644\u06cc\u0628 \u06a9\u0627 \u0631\u0627\u0633\u062a\u06c1 \u0645\u0631\u062d\u0644\u06c1 0 \u0633\u06d2 \u0634\u0631\u0648\u0639 \u06c1\u0648\u062a\u0627 \u06c1\u06d2: \u0631\u0646\u0646\u06af \u0633\u0633\u0679\u0645\u06d4<\/p>\n<p>\u0627\u06cc\u06a9 \u0628\u0627\u0631 \u0645\u0631\u062d\u0644\u06c1 \u0648\u0627\u0631 \u0633\u06cc\u0679 \u0627\u067e \u0686\u0644\u0627\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f\u060c \u0622\u067e \u0627\u06af\u0644\u06cc \u0628\u0627\u0631 \u0627\u0633 \u0634\u0627\u0631\u0679 \u06a9\u0679 \u06a9\u0648 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">make setup\nexport KUBECONFIG=~\/.kube\/clearledger-config\nkubectl get nodes\n<\/code><\/pre>\n<p>\u0645\u062a\u0648\u0642\u0639: 1 \u0646\u0627\u0645\u0632\u062f \u0646\u0648\u0688 <code>clearledger<\/code> STATUS \u067e\u0631 \u0645\u0634\u062a\u0645\u0644 \u06c1\u06d2\u06d4 <code>Ready<\/code>.<\/p>\n<p><code>make setup<\/code> \u0645\u0644\u0679\u06cc \u067e\u0627\u0633 VMs \u06a9\u06cc \u0641\u0631\u0627\u06c1\u0645\u06cc\u060c MicroK8s \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u060c \u0688\u0633\u06a9 \u06a9\u06cc \u062d\u0641\u0627\u0638\u062a \u06a9\u06cc \u067e\u0627\u0628\u0646\u062f\u06cc\u0648\u06ba \u06a9\u0648 \u0646\u0627\u0641\u0630 \u0627\u0648\u0631 \u0627\u067e \u0688\u06cc\u0679 \u06a9\u0631\u06cc\u06ba <code>\/etc\/hosts<\/code>. \u0627\u0633 \u0645\u06cc\u06ba \u062a\u0642\u0631\u06cc\u0628\u0627\u064b 3 \u0633\u06d2 5 \u0645\u0646\u0679 \u0644\u06af\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h2 id=\"heading-how-to-manage-disk-space\">\u0688\u0633\u06a9 \u06a9\u06cc \u062c\u06af\u06c1 \u06a9\u0627 \u0627\u0646\u062a\u0638\u0627\u0645 \u06a9\u06cc\u0633\u06d2 \u06a9\u0631\u06cc\u06ba\u06d4<\/h2>\n<p>\u0644\u06cc\u0628 \u0627\u06cc\u06a9 \u0641\u06a9\u0633\u0688 \u0688\u0633\u06a9 (80GB \u0628\u0630\u0631\u06cc\u0639\u06c1 \u0688\u06cc\u0641\u0627\u0644\u0679) \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0633\u0646\u06af\u0644 \u0646\u0648\u0688 MicroK8s VM \u067e\u0631 \u0686\u0644\u062a\u06cc \u06c1\u06d2\u06d4 \u06a9\u0646\u0679\u06cc\u0646\u0631 \u06a9\u06cc \u062a\u0635\u0627\u0648\u06cc\u0631\u060c \u0644\u0627\u06af\u0632\u060c \u0627\u0648\u0631 \u062c\u0631\u0627\u0626\u062f \u0631\u0648\u0679 \u0641\u0627\u0626\u0644 \u0633\u0633\u0679\u0645 \u06a9\u0648 \u06a9\u0626\u06cc \u062f\u0646\u0648\u06ba \u06cc\u0627 \u06c1\u0641\u062a\u0648\u06ba \u062a\u06a9 \u0628\u06be\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba (\u062e\u0627\u0635 \u0637\u0648\u0631 \u067e\u0631 CI \u06a9\u06cc \u062a\u0639\u0645\u06cc\u0631\u060c \u06c1\u06cc\u0644\u0645 \u0627\u067e \u06af\u0631\u06cc\u0688\u060c \u0627\u0648\u0631 \u0645\u0631\u062d\u0644\u06c1 7 \u06a9\u0627 \u0645\u0634\u0627\u06c1\u062f\u06c1 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f)\u06d4 \u067e\u06be\u0631 \u067e\u0648\u0688 \u0627\u0633 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u062c\u0627\u062a\u0627 \u06c1\u06d2: <code>Evicted<\/code>, <code>ImagePullBackOff<\/code>\u06cc\u0627 \u067e\u0631\u0627\u0633\u0631\u0627\u0631\u061f <code>Pending<\/code> \u0635\u0648\u0631\u062a \u062d\u0627\u0644<\/p>\n<p><code>make setup<\/code> \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u0631\u0648\u06a9 \u062a\u06be\u0627\u0645 \u06a9\u06cc \u062d\u062f\u0648\u062f (\u0644\u0627\u06af \u0631\u0648\u0679\u06cc\u0634\u0646\u060c \u0627\u0645\u06cc\u062c \u062c\u06cc \u0633\u06cc \u062a\u06be\u0631\u06cc\u0634\u0648\u0644\u0688\u060c \u062c\u0631\u0646\u0644\u0646\u06af \u06a9\u06cc \u062d\u062f\u0648\u062f) \u06a9\u0648 \u0646\u0627\u0641\u0630 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0645\u06a9\u0645\u0644 \u062c\u062f\u0648\u0644 \u0627\u0648\u0631 \u0628\u062d\u0627\u0644\u06cc \u06a9\u06d2 \u0627\u0642\u062f\u0627\u0645\u0627\u062a \u06a9\u06d2 \u0644\u06cc\u06d2\u060c Disk Health in Troubleshooting.md \u062f\u06cc\u06a9\u06be\u06cc\u06ba\u06d4<\/p>\n<p><strong>\u0688\u0633\u06a9 \u06a9\u06cc \u062d\u06cc\u062b\u06cc\u062a \u06a9\u0648 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/strong><\/p>\n<pre><code class=\"language-bash\">make doctor    # PASS \/ WARN \/ FAIL + PVC and Prometheus TSDB sizes\n<\/code><\/pre>\n<p><strong>\u0627\u06cc\u067e \u0688\u06cc\u0679\u0627 \u06a9\u0648 \u062d\u0630\u0641 \u06a9\u06cc\u06d2 \u0628\u063a\u06cc\u0631 VM \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u063a\u06cc\u0631 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u0634\u062f\u06c1 \u0641\u0627\u0626\u0644\u0648\u06ba \u06a9\u0648 \u0635\u0627\u0641 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/strong><\/p>\n<pre><code class=\"language-bash\">make reclaim\n<\/code><\/pre>\n<p>\u0627\u06af\u0631 <code>make doctor<\/code> \u06cc\u06c1 \u0636\u0631\u0648\u0631\u06cc \u06c1\u0648 \u0633\u06a9\u062a\u0627 \u06c1\u06d2 \u0627\u06af\u0631 \u06cc\u06c1 \u06cc\u0627\u062f \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f \u0628\u06be\u06cc FAIL \u06a9\u06cc \u0627\u0637\u0644\u0627\u0639 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4 <code>make teardown && make setup<\/code> \u0633\u0646\u06cc\u067e \u0634\u0627\u0679 \u0633\u06d2 \u0628\u062d\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 \u0645\u06a9\u0645\u0644 \u06c1\u062f\u0627\u06cc\u0627\u062a: Troubleshooting.md. VM \u0688\u0633\u06a9 \u0628\u06be\u0631\u06cc \u06c1\u0648\u0626\u06cc \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-how-to-try-the-app-without-kubernetes\">\u06a9\u0628\u0631\u0646\u06cc\u0679\u0633 \u06a9\u06d2 \u0628\u063a\u06cc\u0631 \u0627\u06cc\u067e \u06a9\u0648 \u0622\u0632\u0645\u0627\u0646\u06d2 \u06a9\u0627 \u0637\u0631\u06cc\u0642\u06c1<\/h2>\n<p>\u0627\u06af\u0631 \u0622\u067e \u06a9\u06cc \u0645\u0634\u06cc\u0646 \u0645\u06cc\u06ba Kubernetes \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0627\u0641\u06cc \u0648\u0633\u0627\u0626\u0644 \u0646\u06c1\u06cc\u06ba \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0622\u067e Docker Compose \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06a9\u06d2 ClearLedger \u0686\u0644\u0627 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">docker compose -f docker-compose.integration.yml up --build -d\n<\/code><\/pre>\n<p>http:\/\/localhost:3000 \u06a9\u06be\u0648\u0644\u06cc\u06ba\u06d4<\/p>\n<p>\u062c\u0628 \u0622\u067e \u062a\u06cc\u0627\u0631 \u06c1\u0648\u06ba \u062a\u0648 \u0627\u0633\u0679\u06cc\u06a9 \u06a9\u0648 \u0631\u0648\u06a9\u06cc\u06ba \u0627\u0648\u0631 \u0645\u0631\u062d\u0644\u06c1 0 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062c\u0627\u0631\u06cc \u0631\u06a9\u06be\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">docker compose -f docker-compose.integration.yml down\n<\/code><\/pre>\n<h3 id=\"heading-how-to-sign-in-for-the-first-time\">\u067e\u06c1\u0644\u06cc \u0628\u0627\u0631 \u0644\u0627\u06af \u0627\u0646 \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0637\u0631\u06cc\u0642\u06c1<\/h3>\n<p>\u0633\u0628 \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u060c \u0622\u067e \u06a9\u0648 \u0631\u062c\u0633\u0679\u0631 \u06a9\u0631\u0646\u0627 \u06c1\u0648\u06af\u0627. \u062c\u0628 \u0628\u06be\u06cc \u0645\u06cc\u06ba \u0631\u06cc\u0641\u0631\u06cc\u0634 \u06a9\u0631\u062a\u0627 \u06c1\u0648\u06ba\u060c \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u062e\u0627\u0644\u06cc \u06c1\u0648\u0646\u0627 \u0634\u0631\u0648\u0639 \u06c1\u0648 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 <code>up<\/code> (\u06cc\u0627 <code>down -v<\/code>)\u06d4 \u0627\u06cc\u06a9 \u0627\u06cc\u0633\u0627 \u0627\u06cc \u0645\u06cc\u0644 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba \u062c\u0648 \u062d\u0642\u06cc\u0642\u06cc \u0646\u0638\u0631 \u0622\u0626\u06d2 (Pydantic \u0627\u0633\u06d2 \u0645\u0633\u062a\u0631\u062f \u06a9\u0631\u062a\u0627 \u06c1\u06d2) <code>@*.local<\/code>)\u060c \u0645\u062b\u0627\u0644 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 <code>test@clearledger.io<\/code> \u0627\u06cc \u0645\u06cc\u0644 \u0627\u0648\u0631 <code>SecurePass123<\/code> \u067e\u0627\u0633 \u0648\u0631\u0688 \u06a9\u06d2 \u0644\u06cc\u06d2\u06d4<\/p>\n<p>\u067e\u06be\u0631 \u0627\u0646\u06c1\u06cc \u0627\u0633\u0646\u0627\u062f \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0644\u0627\u06af \u0627\u0646 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u063a\u0644\u0637 \u067e\u0627\u0633 \u0648\u0631\u0688 \u0638\u0627\u06c1\u0631 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 <em>\u063a\u0644\u0637 \u0627\u06cc \u0645\u06cc\u0644 \u06cc\u0627 \u067e\u0627\u0633 \u0648\u0631\u0688<\/em>. \u0627\u06af\u0631 \u0622\u067e \u06a9\u0648 \u067e\u0631\u0627\u0646\u06cc \u063a\u0644\u0637\u06cc\u0627\u06ba \u0646\u0638\u0631 \u0622\u062a\u06cc \u06c1\u06cc\u06ba \u062a\u0648 \u0631\u06cc\u0641\u0631\u06cc\u0634 \u06a9\u0631\u06cc\u06ba \u06cc\u0627 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4 <code>localStorage.removeItem('cl_token')<\/code> \u0628\u0631\u0627\u0624\u0632\u0631 \u06a9\u0646\u0633\u0648\u0644 \u0645\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-how-to-run-the-demo-flow\">\u0688\u06cc\u0645\u0648 \u0641\u0644\u0648 \u06a9\u0648 \u06a9\u06cc\u0633\u06d2 \u0686\u0644\u0627\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4<\/h3>\n<p>\u067e\u06c1\u0644\u06d2\u060c http:\/\/localhost:3000 \u067e\u0631 \u0631\u062c\u0633\u0679\u0631 \u06c1\u0648\u06ba \u0627\u0648\u0631 \u0644\u0627\u06af \u0627\u0646 \u06a9\u0631\u06cc\u06ba\u06d4 \u0686\u0646\u062f \u06a9\u0631\u06cc\u0688\u0679 \u0627\u0648\u0631 \u0688\u06cc\u0628\u0679 \u062c\u0645\u0639 \u06a9\u0631\u0648\u0627\u0626\u06cc\u06ba (\u062c\u06cc\u0633\u06d2 \u062a\u0646\u062e\u0648\u0627\u06c1 +$5000\u060c \u06a9\u0631\u0627\u06cc\u06c1 \u2212$1200)\u06d4<\/p>\n<p>\u067e\u06be\u0631 \u0628\u06cc\u0644\u0646\u0633 \u0627\u067e \u0688\u06cc\u0679\u0633 \u0627\u0648\u0631 \u06c1\u0633\u0679\u0631\u06cc \u0644\u0633\u0679 \u0622\u0626\u0679\u0645\u0632 \u06a9\u06cc \u062c\u0627\u0646\u0686 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u067e\u0646\u0627 \u0644\u06cc\u0646 \u062f\u06cc\u0646 \u0627\u0628\u06be\u06cc \u062c\u0645\u0639 \u06a9\u0631\u0648\u0627\u0626\u06cc\u06ba\u06d4 <strong>\u2265 $10,000<\/strong>: \u0627\u06cc\u06a9 \u0627\u0646\u062a\u0628\u0627\u06c1\u06cc \u067e\u06cc\u0646\u0644 \u0638\u0627\u06c1\u0631 \u06c1\u0648\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4 <code>LARGE_TRANSACTION<\/code>.<\/p>\n<p>\u06cc\u06c1\u0627\u06ba \u0627\u0633\u06cc \u0628\u0646\u06cc\u0627\u062f\u06cc URL \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0627\u062e\u062a\u06cc\u0627\u0631\u06cc \u062f\u06be\u0648\u0627\u06ba \u0679\u06cc\u0633\u0679 \u06c1\u06d2:<\/p>\n<pre><code class=\"language-bash\">BASE_URL=http:\/\/localhost:3000 bash scripts\/dast\/smoke.sh\n<\/code><\/pre>\n<h2 id=\"heading-how-to-configure-local-domain-names\">\u0645\u0642\u0627\u0645\u06cc \u0688\u0648\u0645\u06cc\u0646 \u0646\u0627\u0645 \u06a9\u06cc \u062a\u0634\u06a9\u06cc\u0644 \u06a9\u06cc\u0633\u06d2 \u06a9\u0631\u06cc\u06ba\u06d4<\/h2>\n<p>ClearLedger \u0645\u06cc\u0632\u0628\u0627\u0646 \u0646\u0627\u0645 \u06a9\u0648 \u0645\u06cc\u0632\u0628\u0627\u0646 \u0641\u0627\u0626\u0644 \u0645\u06cc\u06ba \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-macos-or-linux-with-multipass\">\u0645\u0644\u0679\u06cc \u067e\u0627\u062a\u06be \u0633\u067e\u0648\u0631\u0679 \u06a9\u06d2 \u0633\u0627\u062a\u06be macOS \u06cc\u0627 Linux<\/h3>\n<p>\u0686\u0644\u0627\u0626\u06cc\u06ba:<\/p>\n<pre><code class=\"language-bash\">sudo bash scripts\/setup-hosts.sh\n<\/code><\/pre>\n<p>\u06cc\u0627 \u0627\u0633\u06d2 \u062f\u0633\u062a\u06cc \u0637\u0648\u0631 \u067e\u0631 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">VMIP=$(multipass info clearledger | grep IPv4 | awk '{print $2}')\n\necho \"$VMIP  clearledger.local argocd.local grafana.local vault.local falco.local litmus.local\" | sudo tee -a \/etc\/hosts\n<\/code><\/pre>\n<p>\u0645\u0631\u062d\u0644\u06c1 0 \u06a9\u06d2 \u0628\u0639\u062f \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba:<\/p>\n<pre><code class=\"language-bash\">curl -s -o \/dev\/null -w \"%{http_code}n\" http:\/\/clearledger.local\/auth\/health\n<\/code><\/pre>\n<p>\u0645\u062a\u0648\u0642\u0639: <code>200<\/code>.<\/p>\n<h3 id=\"heading-wsl2\">\u0688\u0628\u0644\u06cc\u0648 \u0627\u06cc\u0633 \u0627\u06cc\u0644 2<\/h3>\n<p>\u0627\u067e\u0646\u0627 WSL IP \u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">ip -4 addr show eth0 | grep inet\n<\/code><\/pre>\n<p>\u062f\u06a9\u06be\u0627\u06cc\u0627 \u06af\u06cc\u0627 IP \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba (\u06cc\u0627 <code>127.0.0.1<\/code> (\u0627\u06af\u0631 \u06cc\u06c1 \u0622\u067e \u06a9\u06d2 \u06a9\u0645\u067e\u06cc\u0648\u0679\u0631 \u067e\u0631 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2)\u06d4 <code>\/etc\/hosts<\/code>:<\/p>\n<pre><code class=\"language-bash\">LAB_IP=<your_ip>\n\necho \"$LAB_IP  clearledger.local argocd.local grafana.local vault.local falco.local litmus.local\" | sudo tee -a \/etc\/hosts\n<\/your_ip><\/code><\/pre>\n<p>\u0627\u06af\u0631 \u0622\u067e WSL \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0648\u0646\u0688\u0648\u0632 \u067e\u0631 \u06a9\u0631\u0648\u0645 \u06cc\u0627 \u0627\u06cc\u062c \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0627\u0633\u06cc \u0644\u0627\u0626\u0646 \u0645\u06cc\u06ba \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba:<\/p>\n<p><code>C:WindowsSystem32driversetchosts<\/code><\/p>\n<p>\u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba:<\/p>\n<pre><code class=\"language-bash\">curl http:\/\/clearledger.local\/auth\/health\n<\/code><\/pre>\n<h2 id=\"heading-stage-0-the-running-system\">\u0645\u0631\u062d\u0644\u06c1 0 &#8211; \u0639\u0645\u0644 \u062f\u0631\u0622\u0645\u062f \u06a9\u0627 \u0646\u0638\u0627\u0645<\/h2>\n<p><strong>\u0646\u0642\u0637\u06c1 \u0622\u063a\u0627\u0632:<\/strong> \u0686\u0648\u0646\u06a9\u06c1 \u06c1\u0645\u0627\u0631\u06d2 \u067e\u0627\u0633 \u0627\u0628\u06be\u06cc \u062a\u06a9 \u06a9\u0686\u06be \u0628\u06be\u06cc \u062a\u0639\u06cc\u0646\u0627\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u060c \u06c1\u0645 \u0627\u06cc\u06a9 Kubernetes \u06a9\u0644\u0633\u0679\u0631 \u0628\u0646\u0627\u0646\u06d2 \u062c\u0627 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 ClearLedger \u06a9\u0648 \u062f\u0633\u062a\u06cc \u0637\u0648\u0631 \u067e\u0631 \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631\u06cc\u06ba \u06af\u06d2\u06d4<\/p>\n<p><strong>\u06c1\u062f\u0641:<\/strong> \u0627\u0646 \u0627\u0642\u062f\u0627\u0645\u0627\u062a \u06a9\u06d2 \u0628\u0639\u062f\u060c ClearLedger Kubernetes \u067e\u0631 \u0686\u0644\u0627\u0626\u06d2 \u06af\u0627\u06d4 \u0622\u067e \u0635\u0627\u0631\u0641\u06cc\u0646 \u06a9\u0648 \u0631\u062c\u0633\u0679\u0631 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0644\u06cc\u0646 \u062f\u06cc\u0646 \u062c\u0645\u0639 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u0648\u0631 \u062a\u0639\u0645\u06cc\u0644 \u06a9\u06cc \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0633\u0628 \u06a9\u0648 \u0628\u063a\u06cc\u0631 \u0622\u0679\u0648\u0645\u06cc\u0634\u0646 \u06a9\u06d2 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u062a\u0642\u0633\u06cc\u0645 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u062a\u0645\u0627\u0645 \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc\u0627\u06ba\u060c \u0627\u067e \u0688\u06cc\u0679\u0633\u060c \u0627\u0648\u0631 \u062a\u0631\u0645\u06cc\u0645 \u062f\u0633\u062a\u06cc \u0637\u0648\u0631 \u067e\u0631 \u06a9\u06cc \u062c\u0627\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1 \u062c\u0627\u0646 \u0628\u0648\u062c\u06be \u06a9\u0631 \u06c1\u06d2\u06d4 \u0627\u067e\u0646\u06d2 \u067e\u0644\u06cc\u0679 \u0641\u0627\u0631\u0645 \u06a9\u0648 \u062e\u0648\u062f\u06a9\u0627\u0631 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u060c \u0622\u067e \u06a9\u0648 \u06cc\u06c1 \u0633\u0645\u062c\u06be\u0646\u0627 \u06c1\u0648\u06af\u0627 \u06a9\u06c1 \u06cc\u06c1 \u0622\u0679\u0648\u0645\u06cc\u0634\u0646 \u06a9\u06d2 \u0628\u063a\u06cc\u0631 \u06a9\u06cc\u0633\u06d2 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-01-provision-the-cluster\">0.1: \u06a9\u0644\u0633\u0679\u0631 \u067e\u0631\u0648\u0648\u06cc\u0698\u0646\u0646\u06af<\/h3>\n<p>\u0627\u06af\u0644\u0627\u060c \u06c1\u0645 \u0627\u067e\u0646\u06d2 \u0644\u06cc\u067e \u0679\u0627\u067e \u067e\u0631 \u0627\u06cc\u06a9 \u0648\u0631\u0686\u0648\u0626\u0644 \u0645\u0634\u06cc\u0646 \u0628\u0646\u0627\u0626\u06cc\u06ba \u06af\u06d2 \u062c\u0648 \u06c1\u0645\u0627\u0631\u0627 \u0627\u067e\u0646\u0627 Kubernetes \u06a9\u0644\u0633\u0679\u0631 \u0686\u0644\u0627 \u0631\u06c1\u06cc \u06c1\u06d2\u06d4 \u0627\u0633\u06d2 \u0627\u067e\u0646\u06d2 \u06a9\u0645\u067e\u06cc\u0648\u0679\u0631 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0627\u06cc\u06a9 \u0645\u0646\u06cc \u0688\u06cc\u0679\u0627 \u0633\u06cc\u0646\u0679\u0631 \u0633\u0645\u062c\u06be\u06cc\u06ba\u06d4<\/p>\n<p>\u0645\u0644\u0679\u06cc \u067e\u0627\u0633 \u0627\u06cc\u06a9 \u06c1\u0644\u06a9\u0627 \u067e\u06be\u0644\u06a9\u0627 Ubuntu VM \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u06d4 MicroK8s \u0627\u06cc\u06a9 \u06a9\u0645 \u0633\u06d2 \u06a9\u0645 Kubernetes \u0688\u0633\u0679\u0631\u06cc \u0628\u06cc\u0648\u0634\u0646 \u06c1\u06d2 \u062c\u0648 \u0627\u0633 VM \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0686\u0644\u062a\u06cc \u06c1\u06d2\u06d4 \u0648\u06c1 \u0627\u06cc\u06a9 \u0633\u0627\u062a\u06be \u0645\u0644 \u06a9\u0631 \u06a9\u0644\u0627\u0624\u0688 \u0648\u0633\u0627\u0626\u0644 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06a9\u06d2 \u0628\u063a\u06cc\u0631 \u0627\u06cc\u06a9 \u0641\u0632\u06cc\u06a9\u0644 \u06a9\u0644\u0633\u0679\u0631 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p><strong>\u062a\u062c\u0648\u06cc\u0632: \u0627\u06cc\u06a9 \u062d\u06a9\u0645 (\u06cc\u06c1 \u06a9\u0631\u06cc\u06ba):<\/strong><\/p>\n<pre><code class=\"language-bash\">make setup\nexport KUBECONFIG=~\/.kube\/clearledger-config\nkubectl get nodes\n<\/code><\/pre>\n<p>\u0645\u062a\u0648\u0642\u0639:<\/p>\n<pre><code class=\"language-plaintext\">NAME          STATUS   ROLES    AGE   VERSION\nclearledger   Ready    <none>   2m    v1.29.x\n<\/none><\/code><\/pre>\n<p><code>make setup<\/code> \u0686\u0644\u0627\u0626\u06cc\u06ba <code>scripts\/setup-cluster.sh<\/code> (VM + MicroK8s + \u0688\u0633\u06a9 \u0633\u06cc\u0641\u0679\u06cc \u06a9\u06cc\u067e) \u0627\u0648\u0631 <code>scripts\/setup-hosts.sh<\/code> (<code>\/etc\/hosts<\/code> \u0622\u0626\u0679\u0645)\u06d4 \u0627\u0633 \u0645\u06cc\u06ba \u062a\u0642\u0631\u06cc\u0628\u0627\u064b 3 \u0633\u06d2 5 \u0645\u0646\u0679 \u0644\u06af\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0688\u0633\u06a9 \u06a9\u06cc \u062d\u0641\u0627\u0638\u062a (\u0644\u0627\u06af \u0631\u0648\u0679\u06cc\u0634\u0646\u060c \u0627\u0645\u06cc\u062c \u062c\u06cc \u0633\u06cc \u062a\u06be\u0631\u06cc\u0634\u0648\u0644\u0688\u060c \u062c\u0631\u0646\u0644\u0646\u06af \u06a9\u06cc\u067e) \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u06a9\u0646\u0641\u06cc\u06af\u0631 \u06c1\u0648 \u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4 \u0645\u0632\u06cc\u062f \u0645\u0639\u0644\u0648\u0645\u0627\u062a \u06a9\u06d2 \u0644\u06cc\u06d2\u060c Disk Health in Troubleshooting.md \u062f\u06cc\u06a9\u06be\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u06af\u0631 \u062d\u06cc\u062b\u06cc\u062a \u06c1\u06d2: <code>NotReady<\/code>\u0628\u0631\u0627\u06c1 \u06a9\u0631\u0645 60 \u0633\u06cc\u06a9\u0646\u0688 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u062f\u0648\u0628\u0627\u0631\u06c1 \u06a9\u0648\u0634\u0634 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u062f\u0633\u062a\u06cc \u062a\u0631\u062a\u06cc\u0628\u0627\u062a \u0645\u0646\u062f\u0631\u062c\u06c1 \u0630\u06cc\u0644 \u06c1\u06cc\u06ba: <code>make setup<\/code> \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u0627 \u0627\u0648\u0631 \u0645\u0631\u062d\u0644\u06c1 \u0648\u0627\u0631 \u0688\u06cc\u0628\u06af \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2):<\/p>\n<pre><code class=\"language-bash\">multipass launch \n  --name clearledger \n  --cpus 6 --memory 12G --disk 80G \n  22.04\n<\/code><\/pre>\n<p>VM IP \u062d\u0627\u0635\u0644 \u06a9\u0631\u06cc\u06ba (\u0627\u06af\u0644\u0627 \u062f\u0631\u06a9\u0627\u0631 \u06c1\u06d2) <code>\/etc\/hosts<\/code>):<\/p>\n<pre><code class=\"language-bash\">multipass info clearledger | grep IPv4\n<\/code><\/pre>\n<p>\u0645\u06cc\u0632\u0628\u0627\u0646 \u0627\u0646\u062f\u0631\u0627\u062c \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u0648\u067e\u0631 \u0688\u0648\u0645\u06cc\u0646 \u0646\u0627\u0645 \u06a9\u0627 \u0633\u06cc\u06a9\u0634\u0646 \u062f\u06cc\u06a9\u06be\u06cc\u06ba\u060c \u06cc\u0627 \u0686\u0644\u0627\u0626\u06cc\u06ba: <code>sudo bash scripts\/setup-hosts.sh<\/code>.<\/p>\n<pre><code class=\"language-bash\">multipass shell clearledger\n<\/code><\/pre>\n<p>VM \u06a9\u06d2 \u0627\u0646\u062f\u0631:<\/p>\n<pre><code class=\"language-bash\">sudo snap install microk8s --classic --channel=1.29\/stable\nsudo usermod -aG microk8s ubuntu && newgrp microk8s\nmicrok8s enable dns ingress storage helm3 rbac\necho \"alias kubectl=\"microk8s kubectl\"\" >> ~\/.bashrc\necho \"alias helm='microk8s helm3'\" >> ~\/.bashrc\nsource ~\/.bashrc\nkubectl get nodes\nexit   # back to your host machine\n<\/code><\/pre>\n<p>\u0645\u06cc\u0632\u0628\u0627\u0646 \u0633\u06d2 kubectl \u06a9\u0648 \u062c\u0648\u0691\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">multipass exec clearledger -- microk8s config > ~\/.kube\/clearledger-config\nexport KUBECONFIG=~\/.kube\/clearledger-config\nkubectl get nodes\n<\/code><\/pre>\n<h3 id=\"heading-02-understand-the-application-before-deploying-it\">0.2: \u0627\u067e\u0646\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u0648 \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0627\u0633\u06d2 \u0633\u0645\u062c\u06be\u06cc\u06ba\u06d4<\/h3>\n<p>\u0627\u0633 \u0641\u0627\u0626\u0644 \u06a9\u0648 \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u0686\u0644\u0627\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06a9\u06be\u0648\u0644\u06cc\u06ba\u06d4 <code>kubectl<\/code> \u062d\u06a9\u0645 \u0633\u0628 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06a9\u0648\u0688 \u06a9\u0648 \u067e\u0691\u06be\u0646\u0627 \u06c1\u0631 \u0686\u06cc\u0632 \u06a9\u0648 \u0633\u0645\u062c\u06be\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0633\u06cc\u0627\u0642 \u0648 \u0633\u0628\u0627\u0642 \u062a\u06cc\u0627\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06c1\u0631 \u0688\u0627\u06a9\u0631 \u0641\u0627\u0626\u0644 \u0645\u06cc\u06ba \u062f\u0631\u062c \u0630\u06cc\u0644 \u0644\u0627\u0626\u0646\u0648\u06ba \u06a9\u0648 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba: <code>USER appuser<\/code>. \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 \u062a\u0635\u0648\u06cc\u0631 \u06a9\u0648 \u0631\u0648\u0679 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0639\u0627\u0645 \u0635\u0627\u0631\u0641 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0686\u0644\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0688\u06cc\u0632\u0627\u0626\u0646 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4 Kubernetes \u0645\u06cc\u0646\u06cc \u0641\u06cc\u0633\u0679 \u0628\u06be\u06cc \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4 <code>runAsNonRoot: true<\/code>. \u0628\u0639\u062f \u0645\u06cc\u06ba\u060c \u0645\u0631\u062d\u0644\u06c1 4 \u0645\u06cc\u06ba\u060c Kyverno \u0627\u0633 \u0627\u0635\u0648\u0644 \u06a9\u0648 \u0646\u0627\u0641\u0630 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 Pods \u06a9\u0648 \u0645\u0633\u062a\u0631\u062f \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0648 \u063a\u06cc\u0631 \u062c\u0691 \u0635\u0627\u0631\u0641 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0686\u0644\u0627\u0646\u06d2 \u06a9\u0627 \u0627\u0639\u0644\u0627\u0646 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0686\u0648\u0646\u06a9\u06c1 \u0622\u067e \u06a9\u06cc \u0627\u06cc\u067e \u062c\u0644\u062f \u062a\u06cc\u0627\u0631 \u06c1\u06d2\u060c \u06cc\u06c1 \u0627\u0633 \u067e\u0627\u0644\u06cc\u0633\u06cc \u06a9\u0648 \u0628\u0639\u062f \u0645\u06cc\u06ba \u067e\u0627\u0633 \u06a9\u0631 \u062f\u06d2 \u06af\u06cc\u06d4<\/p>\n<p>\u06cc\u06c1 \u0628\u06be\u06cc \u062f\u06cc\u06a9\u06be\u06cc\u06ba <code>infra\/manifests\/auth-service\/secret.yaml<\/code>. \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u0627 \u067e\u0627\u0633 \u0648\u0631\u0688 \u06c1\u06d2\u06d4 <code>changeme-stage0<\/code> \u0628\u06cc\u0633 64 \u06a9\u0648 \u0627\u0646\u06a9\u0648\u0688 \u06a9\u06cc\u0627 \u06af\u06cc\u0627\u06d4 \u0636\u0627\u0628\u0637\u06c1 \u06a9\u0634\u0627\u0626\u06cc:<\/p>\n<pre><code class=\"language-bash\">echo \"Y2hhbmdlbWUtc3RhZ2Uw\" | base64 -d\n# changeme-stage0\n<\/code><\/pre>\n<p>\u0648\u06c1 \u067e\u0627\u0633 \u0648\u0631\u0688 YAML \u0641\u0627\u0626\u0644 \u0645\u06cc\u06ba \u06c1\u06d2 \u062c\u0633\u06d2 \u0627\u0633\u0679\u0648\u0631\u06cc\u062c \u062a\u06a9 \u0631\u0633\u0627\u0626\u06cc \u0631\u06a9\u06be\u0646\u06d2 \u0648\u0627\u0644\u0627 \u06a9\u0648\u0626\u06cc \u0628\u06be\u06cc \u0634\u062e\u0635 \u067e\u0691\u06be \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 base64 \u0627\u0646\u06a9\u0648\u0688\u0646\u06af \u06c1\u06d2\u060c \u0627\u0646\u06a9\u0631\u067e\u0634\u0646 \u0646\u06c1\u06cc\u06ba\u06d4 \u0627\u0633\u06d2 \u0622\u0633\u0627\u0646\u06cc \u0633\u06d2 \u067e\u0644\u0679\u0627 \u062c\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0633 \u0644\u0645\u062d\u06d2 \u06a9\u0648 \u06cc\u0627\u062f \u0631\u06a9\u06be\u06cc\u06ba\u06d4 \u06cc\u06c1\u06cc \u0648\u062c\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u0645\u0631\u062d\u0644\u06c1 5 \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-03-docker-hub-setup\">0.3: \u0688\u0648\u06a9\u0631 \u06c1\u0628 \u0633\u06cc\u0679 \u0627\u067e<\/h3>\n<p>\u0622\u067e \u06a9\u0648 \u0627\u06cc\u06a9 \u06a9\u0646\u0679\u06cc\u0646\u0631 \u0631\u062c\u0633\u0679\u0631\u06cc \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u060c \u062a\u0639\u0645\u06cc\u0631 \u0634\u062f\u06c1 \u062a\u0635\u0627\u0648\u06cc\u0631 \u06a9\u0648 \u0630\u062e\u06cc\u0631\u06c1 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u062c\u06af\u06c1 \u062a\u0627\u06a9\u06c1 \u0622\u067e \u06a9\u0627 \u06a9\u0644\u0633\u0679\u0631 \u0627\u0646\u06c1\u06cc\u06ba \u06a9\u06be\u06cc\u0646\u0686 \u0633\u06a9\u06d2\u06d4 Docker Hub \u0633\u0628 \u0633\u06d2 \u0622\u0633\u0627\u0646 \u0622\u067e\u0634\u0646 \u06c1\u06d2\u06d4 \u0645\u0631\u062d\u0644\u06c1 8 \u0627\u0633\u06d2 \u067e\u0631\u0627\u0626\u06cc\u0648\u06cc\u0679 \u0631\u062c\u0633\u0679\u0631\u06cc (ECR) \u0633\u06d2 \u0628\u062f\u0644 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>Docker Hub (\u0645\u0641\u062a \u0627\u06a9\u0627\u0624\u0646\u0679\u060c hub.docker.com) \u067e\u0631 \u0686\u0627\u0631 \u0639\u0648\u0627\u0645\u06cc \u0630\u062e\u06cc\u0631\u06d2 \u0628\u0646\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<ol>\n<li>\n<p>\u062a\u062d\u0631\u06cc\u06a9 <code>hub.docker.com<\/code><\/p>\n<\/li>\n<li>\n<p>\u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba <strong>\u0627\u06cc\u06a9 \u0630\u062e\u06cc\u0631\u06c1 \u0628\u0646\u0627\u0626\u06cc\u06ba<\/strong><\/p>\n<\/li>\n<li>\n<p>\u0646\u0627\u0645 \u06a9\u06cc \u062c\u06af\u06c1 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0627\u067e\u0646\u0627 Docker Hub \u0635\u0627\u0631\u0641 \u0646\u0627\u0645 \u0645\u0646\u062a\u062e\u0628 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0628\u0631\u0627\u06c1 \u06a9\u0631\u0645 \u0630\u06cc\u0644 \u06a9\u06cc \u0641\u06c1\u0631\u0633\u062a \u0645\u06cc\u06ba \u0633\u06d2 \u0627\u06cc\u06a9 \u0645\u062e\u0632\u0646 \u06a9\u0627 \u0646\u0627\u0645 \u062f\u0631\u062c \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0645\u0631\u0626\u06cc\u062a \u06a9\u0648 \u0627\u0633 \u067e\u0631 \u0633\u06cc\u0679 \u06a9\u0631\u06cc\u06ba\u06d4 <strong>\u0639\u0648\u0627\u0645\u06cc<\/strong><\/p>\n<\/li>\n<li>\n<p>\u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba <strong>\u0628\u0646\u0627\u0646\u0627<\/strong><\/p>\n<\/li>\n<li>\n<p>\u0686\u0627\u0631\u0648\u06ba \u062e\u062f\u0645\u0627\u062a \u06a9\u06d2 \u0644\u06cc\u06d2 \u062f\u06c1\u0631\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"language-plaintext\">YOUR_USERNAME\/clearledger-auth-service\nYOUR_USERNAME\/clearledger-ledger-service\nYOUR_USERNAME\/clearledger-notification-service\nYOUR_USERNAME\/clearledger-frontend\n<\/code><\/pre>\n<p>\u0627\u06af\u0644\u0627\u060c \u0627\u06cc\u06a9 \u0631\u0633\u0627\u0626\u06cc \u0679\u0648\u06a9\u0646 \u062a\u06cc\u0627\u0631 \u06a9\u0631\u06cc\u06ba\u06d4 hub.docker.com \u067e\u0631 \u062c\u0627\u0626\u06cc\u06ba\u060c \u067e\u06be\u0631 \u0627\u06a9\u0627\u0624\u0646\u0679 \u06a9\u06cc \u062a\u0631\u062a\u06cc\u0628\u0627\u062a\u060c \u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc\u060c \u0646\u06cc\u0627 \u0631\u0633\u0627\u0626\u06cc \u0679\u0648\u06a9\u0646 (\u067e\u0691\u06be\u06cc\u06ba\/\u0644\u06a9\u06be\u06cc\u06ba\/\u062d\u0630\u0641 \u06a9\u0631\u06cc\u06ba)\u06d4 \u0627\u0633\u06d2 \u0645\u062d\u0641\u0648\u0638 \u06a9\u0631\u06cc\u06ba\u06d4 \u0622\u067e \u0627\u0633\u06d2 \u062f\u0648\u0628\u0627\u0631\u06c1 \u06a9\u0628\u06be\u06cc \u0646\u06c1\u06cc\u06ba \u062f\u06cc\u06a9\u06be\u06cc\u06ba \u06af\u06d2\u06d4<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/07\/1785194531_672_Homelab-\u0633\u06d2-AWS-\u062a\u06a9-\u067e\u0631\u0648\u0688\u06a9\u0634\u0646-\u06a9\u06d2-\u0644\u06cc\u06d2-\u062a\u06cc\u0627\u0631-DevSecOps-\u067e\u0644\u06cc\u0679.png\" alt=\"\u062a\u0635\u0648\u06cc\u0631\u06cc \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679 \u062f\u06a9\u06be\u0627 \u0631\u06c1\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0631\u0633\u0627\u0626\u06cc \u0679\u0648\u06a9\u0646 \u06a9\u06cc\u0633\u06d2 \u0628\u0646\u0627\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4\" style=\"display:block;margin:0 auto\" width=\"1039\" height=\"593\" loading=\"lazy\" title=\"\"><\/p>\n<pre><code class=\"language-bash\">docker login\n# Username: your Docker Hub username\n# Password: the access token (NOT your account password)\n<\/code><\/pre>\n<p>\u0686\u0627\u0631\u0648\u06ba \u062e\u062f\u0645\u0627\u062a \u06a9\u0648 \u0628\u0646\u0627\u0626\u06cc\u06ba \u0627\u0648\u0631 \u0622\u06af\u06d2 \u0628\u0691\u06be\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\"># Replace your-username with your Docker Hub username, the same string everywhere in this lab\nexport DOCKER_USERNAME=your-username\necho \"Using DOCKER_USERNAME=$DOCKER_USERNAME\"\n<\/code><\/pre>\n<p><strong> \u0644\u06cc\u0628 \u0686\u06cc\u06a9 \u067e\u0648\u0627\u0626\u0646\u0679: Docker Hub \u0635\u0627\u0631\u0641 \u0646\u0627\u0645<\/strong><\/p>\n<pre><code class=\"language-bash\"># Must print your real username, not the literal text \"your-username\"\necho \"$DOCKER_USERNAME\"\n<\/code><\/pre>\n<p>\u0645\u062a\u0648\u0642\u0639: \u0627\u06cc\u06a9 \u0644\u0627\u0626\u0646 \u062c\u0633 \u0645\u06cc\u06ba Docker Hub \u06a9\u0627 \u0646\u0627\u0645 \u06c1\u06d2\u060c \u062c\u06cc\u0633\u06d2 <code>veeno-demo<\/code>)\u06d4 \u0627\u06af\u0631 \u0622\u067e \u062f\u06cc\u06a9\u06be\u062a\u06d2 \u06c1\u06cc\u06ba <code>your-username<\/code> \u0627\u0633 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0627\u0633\u06d2 \u0631\u0648\u06a9\u06cc\u06ba \u0627\u0648\u0631 \u0679\u06be\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 <code>export<\/code> \u062a\u0639\u0645\u06cc\u0631 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u06d4<\/p>\n<p>\u0686\u0627\u0631\u0648\u06ba \u062e\u062f\u0645\u0627\u062a \u06a9\u0648 \u0628\u0646\u0627\u0626\u06cc\u06ba \u0627\u0648\u0631 \u0622\u06af\u06d2 \u0628\u0691\u06be\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">docker build -t $DOCKER_USERNAME\/clearledger-auth-service:v0.1.0 .\/app\/auth-service\ndocker build -t $DOCKER_USERNAME\/clearledger-ledger-service:v0.1.0 .\/app\/ledger-service\ndocker build -t $DOCKER_USERNAME\/clearledger-notification-service:v0.1.0 .\/app\/notification-service\ndocker build -t $DOCKER_USERNAME\/clearledger-frontend:v0.1.0 .\/app\/frontend\n\n# Push\n\ndocker push $DOCKER_USERNAME\/clearledger-auth-service:v0.1.0\ndocker push $DOCKER_USERNAME\/clearledger-ledger-service:v0.1.0\ndocker push $DOCKER_USERNAME\/clearledger-notification-service:v0.1.0\ndocker push $DOCKER_USERNAME\/clearledger-frontend:v0.1.0\n<\/code><\/pre>\n<p><strong> \u0644\u06cc\u0628 \u0686\u06cc\u06a9 \u067e\u0648\u0627\u0626\u0646\u0679: \u0688\u0648\u06a9\u0631 \u06c1\u0628 \u06a9\u06cc \u062a\u0635\u0627\u0648\u06cc\u0631<\/strong><\/p>\n<p>hub.docker.com \u06a9\u06be\u0648\u0644\u06cc\u06ba\u060c \u0627\u067e\u0646\u06d2 \u067e\u0631\u0648\u0641\u0627\u0626\u0644 \u067e\u0631 \u062c\u0627\u0626\u06cc\u06ba\u060c \u0627\u0648\u0631 \u067e\u06be\u0631 <strong>\u0630\u062e\u06cc\u0631\u06c1<\/strong>. \u067e\u06be\u0631 \u0686\u0627\u0631\u0648\u06ba \u06a9\u0648 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 <code>clearledger-*<\/code> \u0630\u062e\u06cc\u0631\u06d2 \u0645\u0648\u062c\u0648\u062f \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u06c1\u0631 \u0630\u062e\u06cc\u0631\u06c1 \u06a9\u0648 \u0679\u06cc\u06af \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4 <code>v0.1.0<\/code>.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/07\/1785194531_279_Homelab-\u0633\u06d2-AWS-\u062a\u06a9-\u067e\u0631\u0648\u0688\u06a9\u0634\u0646-\u06a9\u06d2-\u0644\u06cc\u06d2-\u062a\u06cc\u0627\u0631-DevSecOps-\u067e\u0644\u06cc\u0679.png\" alt=\"\u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679 \u06a9\u06cc \u062a\u0635\u0648\u06cc\u0631 \u06cc\u06c1 \u062f\u06cc\u06a9\u06be\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u06c1 \u0688\u0648\u06a9\u0631 \u0627\u0645\u06cc\u062c \u0631\u06cc\u067e\u0648\u0632\u0679\u0631\u06cc \u0645\u06a9\u0645\u0644 \u06c1\u0648\u0646\u06d2 \u067e\u0631 \u06a9\u06cc\u0633\u06cc \u0646\u0638\u0631 \u0622\u0626\u06d2 \u06af\u06cc\u06d4\" style=\"display:block;margin:0 auto\" width=\"776\" height=\"397\" loading=\"lazy\" title=\"\"><\/p>\n<p>\u0627\u067e\u0646\u06d2 \u0644\u06cc\u067e \u0679\u0627\u067e \u067e\u0631 \u0686\u0644\u0627\u0626\u06cc\u06ba:<\/p>\n<pre><code class=\"language-bash\">docker pull $DOCKER_USERNAME\/clearledger-auth-service:v0.1.0\n<\/code><\/pre>\n<p>\u0645\u062a\u0648\u0642\u0639: <code>Status: Downloaded newer image<\/code> \u06cc\u0627 <code>Image is up to date<\/code>\u0646\u06c1\u06cc\u06ba <code>repository does not exist<\/code> \u06cc\u0627 <code>denied<\/code>.<\/p>\n<h3 id=\"heading-04-look-at-the-manifests-before-applying-them\">0.4: \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u062f\u06cc\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0645\u06cc\u0646\u06cc \u0641\u06cc\u0633\u0679 \u067e\u0631 \u0627\u06cc\u06a9 \u0646\u0638\u0631 \u0688\u0627\u0644\u06cc\u06ba\u06d4<\/h3>\n<p>Kubernetes \u06c1\u06d2 <strong>\u0638\u0627\u06c1\u0631<\/strong> \u0627\u06cc\u06a9 \u0641\u0627\u0626\u0644 (YAML) \u062c\u0648 \u0627\u0646 \u0648\u0633\u0627\u0626\u0644 \u06a9\u06cc \u0648\u0636\u0627\u062d\u062a \u06a9\u0631\u062a\u06cc \u06c1\u06d2 \u062c\u0646\u06c1\u06cc\u06ba \u062a\u062e\u0644\u06cc\u0642 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4 \u0628\u0679\u0646 \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2\u060c \u0622\u067e \u0627\u067e\u0646\u06cc \u0645\u0637\u0644\u0648\u0628\u06c1 \u062d\u0627\u0644\u062a \u06a9\u0627 \u0627\u0639\u0644\u0627\u0646 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 Kubernetes \u0627\u0633\u06d2 \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>ClearLedger \u06a9\u0648 \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u060c \u062f\u0631\u062c \u0630\u06cc\u0644 \u0645\u06cc\u0646\u06cc \u0641\u06cc\u0633\u0679 \u067e\u0631 \u0627\u06cc\u06a9 \u0633\u0631\u0633\u0631\u06cc \u0646\u0638\u0631 \u0688\u0627\u0644\u06cc\u06ba:<\/p>\n<ul>\n<li>\n<p><code>infra\/manifests\/namespace.yaml<\/code>: \u062a\u062e\u0644\u06cc\u0642 \u06a9\u0631\u0646\u0627 <code>clearledger<\/code> \u0646\u0627\u0645 \u06a9\u06cc \u062c\u06af\u06c1\u06d4<\/p>\n<\/li>\n<li>\n<p><code>infra\/manifests\/postgres\/<\/code>: PostgreSQL \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><code>infra\/manifests\/redis\/redis.yaml<\/code>: Redis \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><code>infra\/manifests\/auth-service\/<\/code>: \u062a\u0648\u062b\u06cc\u0642 \u06a9\u06cc \u062e\u062f\u0645\u062a \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><code>infra\/manifests\/ledger-service\/<\/code>: \u0644\u06cc\u062c\u0631 \u0633\u0631\u0648\u0633 \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><code>infra\/manifests\/notification-service\/<\/code>: \u0646\u0648\u0679\u06cc\u0641\u06a9\u06cc\u0634\u0646 \u0633\u0631\u0648\u0633 \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><code>infra\/manifests\/frontend\/<\/code>: \u0648\u06cc\u0628 \u0627\u06cc\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><code>infra\/manifests\/ingress.yaml<\/code>: \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u0648 \u062f\u0633\u062a\u06cc\u0627\u0628 \u06a9\u0631\u062a\u0627 \u06c1\u06d2: <code>clearledger.local<\/code>.<\/p>\n<\/li>\n<li>\n<p><code>infra\/manifests\/rbac\/rbac.yaml<\/code>: \u0627\u0633 \u0628\u0627\u062a \u06a9\u06cc \u0648\u0636\u0627\u062d\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u06a9\u0644\u0633\u0679\u0631 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u06a9\u0648\u0646 \u06a9\u06cc\u0627 \u06a9\u0631\u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<\/ul>\n<p>\u0622\u067e \u06a9\u0648 \u0627\u0628\u06be\u06cc \u062a\u06a9 \u062a\u0645\u0627\u0645 \u0634\u0639\u0628\u0648\u06ba \u06a9\u0648 \u0633\u0645\u062c\u06be\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0645\u0642\u0635\u062f \u0635\u0631\u0641 \u06cc\u06c1 \u062f\u06cc\u06a9\u06be\u0646\u0627 \u06c1\u06d2 \u06a9\u06c1 \u06a9\u0628\u0631\u0646\u06cc\u0679\u0633 \u06a9\u06d2 \u062a\u062e\u0644\u06cc\u0642 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0622\u067e \u06a9\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u06cc \u0648\u0636\u0627\u062d\u062a \u06a9\u06cc\u0633\u06d2 \u06a9\u06cc \u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u00a70.6 \u06a9\u06d2 \u0628\u0639\u062f \u06a9\u06d2 \u062f\u0648 \u0627\u062e\u062a\u06cc\u0627\u0631\u06cc \u062d\u0635\u0648\u06ba \u0645\u06cc\u06ba\u060c \u0622\u067e \u0633\u0645\u062c\u06be \u062c\u0627\u0626\u06cc\u06ba \u06af\u06d2 \u06a9\u06c1 \u0627\u0646\u06af\u0631\u06cc\u0633 \u0631\u0648\u0679\u0646\u06af \u0627\u0648\u0631 RBAC \u06a9\u06cc\u0633\u06d2 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u0628\u06be\u06cc \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u0622\u0626\u06cc\u06d2 \u062f\u06cc\u06a9\u06be\u062a\u06d2 \u06c1\u06cc\u06ba \u06a9\u06c1 \u06a9\u0628\u0631\u0646\u06cc\u0679\u0633 \u06a9\u06d2 \u062a\u062e\u0644\u06cc\u0642 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06a9\u0633\u06cc \u0627\u06cc\u067e \u06a9\u0648 \u06a9\u06cc\u0633\u06d2 \u0628\u06cc\u0627\u0646 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-05-deploy-clearledger-layer-by-layer\">0.5: ClearLedger \u06a9\u06cc \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc (\u062f\u0631\u062c\u06c1 \u0648\u0627\u0631)<\/h3>\n<p>\u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u06a9\u0627 \u0645\u0642\u0627\u0645 <strong>6 \u0645\u0646\u0632\u0644\u06cc\u06ba\u06d4<\/strong>. \u0627\u06af\u0644\u06cc \u067e\u0631\u062a \u0634\u0631\u0648\u0639 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06c1\u0631 \u067e\u0631\u062a \u06a9\u0648 \u0645\u06a9\u0645\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 \u0686\u0644\u0627\u0626\u06cc\u06ba <code>kubectl get pods -n clearledger<\/code> \u062a\u06c1\u0648\u06ba 2\u060c 3\u060c \u0627\u0648\u0631 6 \u06a9\u06d2 \u0628\u0639\u062f \u062a\u0631\u0642\u06cc \u06a9\u06cc \u062c\u0627\u0646\u0686 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u0645\u062e\u062a\u0635\u0631 \u0631\u0627\u0633\u062a\u06c1 \u0645\u062a\u063a\u06cc\u0631 \u0633\u06cc\u0679 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u0626\u06cc\u06ba \u06a9\u06c1 \u0635\u0627\u0631\u0641 \u0646\u0627\u0645 \u0627\u0628\u06be\u06cc \u0628\u06be\u06cc \u0633\u06cc\u0679 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\">export DOCKER_USERNAME=your-username   # skip if already set in \u00a70.3\nSTAGE0=stages\/stage-0-raw-kubernetes\/infra\/manifests\n<\/code><\/pre>\n<h4 id=\"heading-051-layer-1-namespace-and-rbac\">0.5.1 \u2014 \u067e\u0631\u062a 1: \u0646\u0627\u0645 \u06a9\u06cc \u062c\u06af\u06c1\u06cc\u06ba \u0627\u0648\u0631 RBAC<\/h4>\n<p>\u062c\u0628 \u062a\u06a9 \u0646\u0627\u0645 \u06a9\u06cc \u062c\u06af\u06c1 \u0645\u0648\u062c\u0648\u062f \u0646\u06c1 \u06c1\u0648 \u06a9\u0648\u0626\u06cc \u0627\u0648\u0631 \u0686\u06cc\u0632 \u0646\u06c1\u06cc\u06ba \u0628\u0646 \u0633\u06a9\u062a\u06cc\u06d4 \u0645\u0632\u06cc\u062f \u0628\u0631\u0622\u06ba\u060c RBAC \u06a9\u0627 \u0645\u0648\u062c\u0648\u062f \u06c1\u0648\u0646\u0627 \u0636\u0631\u0648\u0631\u06cc \u06c1\u06d2 \u0627\u0633 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06a9\u06c1 \u06a9\u0627\u0645 \u06a9\u0627 \u0628\u0648\u062c\u06be \u06a9\u0633\u06cc ServiceAccount \u06a9\u0627 \u062d\u0648\u0627\u0644\u06c1 \u062f\u06d2 \u0633\u06a9\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\">kubectl apply -f infra\/manifests\/namespace.yaml\nkubectl apply -f infra\/manifests\/rbac\/rbac.yaml\n<\/code><\/pre>\n<p><strong>\u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba:<\/strong><\/p>\n<pre><code class=\"language-bash\">kubectl get namespace clearledger\nkubectl get serviceaccount -n clearledger\n# Expected: auth-service, ledger-service, notification-service, clearledger-viewer\n<\/code><\/pre>\n<h4 id=\"heading-052-layer-2-postgresql\">0.5.2 \u2014 \u067e\u0631\u062a 2: PostgreSQL<\/h4>\n<p>auth-service \u06cc\u0627 ledger-service \u0634\u0631\u0648\u0639 \u06c1\u0648\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u0627 \u0686\u0644\u0646\u0627 \u0636\u0631\u0648\u0631\u06cc \u06c1\u06d2\u06d4 \u062f\u0648\u0646\u0648\u06ba \u0633\u0631\u0648\u0633\u0632 \u06c1\u062c\u0631\u062a \u06a9\u0648 \u0686\u0644\u0627\u0646\u06d2 \u0627\u0648\u0631 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba \u067e\u0631 \u06a9\u0627\u0631\u0631\u0648\u0627\u0626\u06cc \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0633\u0679\u0627\u0631\u0679 \u0627\u067e \u067e\u0631 \u067e\u0648\u0633\u0679\u06af\u0631\u06cc\u0633 \u0633\u06d2 \u0645\u0646\u0633\u0644\u06a9 \u06c1\u0648\u062a\u06cc \u06c1\u06cc\u06ba\u060c \u0627\u0648\u0631 \u0627\u06af\u0631 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0645\u0648\u062c\u0648\u062f \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u060c \u062a\u0648 \u06a9\u0631\u06cc\u0634 \u0644\u0648\u067e \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\">kubectl apply -f infra\/manifests\/postgres\/postgres-secret.yaml\nkubectl apply -f infra\/manifests\/postgres\/postgres.yaml\n\nkubectl wait --for=condition=ready pod -l app=postgres \n  -n clearledger --timeout=120s\n<\/code><\/pre>\n<p>\u06a9\u06d2 \u0628\u0639\u062f \u0645\u062a\u0648\u0642\u0639 <code>kubectl apply<\/code>:<\/p>\n<pre><code class=\"language-plaintext\">secret\/postgres-secret created\npersistentvolumeclaim\/postgres-pvc created\nstatefulset.apps\/postgres created\nservice\/postgres created\n<\/code><\/pre>\n<p>\u0645\u06cc\u06ba \u06a9\u0628 \u0627\u0633 \u06a9\u06cc \u062a\u0648\u0642\u0639 \u06a9\u0631 \u0633\u06a9\u062a\u0627 \u06c1\u0648\u06ba\u061f <code>kubectl wait<\/code> \u06a9\u0627\u0645\u06cc\u0627\u0628\u06cc: \u06a9\u0645\u0627\u0646\u0688 \u0622\u0624\u0679 \u067e\u0679 \u06a9\u06d2 \u0628\u063a\u06cc\u0631 \u0646\u06a9\u0644\u062a\u06cc \u06c1\u06d2 (\u0627\u06cc\u06af\u0632\u0679 \u06a9\u0648\u0688 0)\u06d4 \u0627\u06af\u0631 \u0648\u0642\u062a \u062e\u062a\u0645 \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u062a\u0648 \u062f\u06cc\u06a9\u06be\u06cc\u06ba: <strong>\u0627\u06af\u0631 \u067e\u0648\u0633\u0679\u06af\u0631\u06cc\u0633 \u0632\u06cc\u0631 \u0627\u0644\u062a\u0648\u0627\u0621 \u06c1\u06d2\u06d4<\/strong> \u062c\u0627\u0631\u06cc \u0631\u06a9\u06be\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0627\u0633\u06d2 \u0646\u06cc\u0686\u06d2 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p><strong>\u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba:<\/strong><\/p>\n<pre><code class=\"language-bash\">kubectl get pods -n clearledger -l app=postgres\nkubectl get pvc -n clearledger\n<\/code><\/pre>\n<p>\u0645\u062a\u0648\u0642\u0639:<\/p>\n<pre><code class=\"language-plaintext\">NAME         READY   STATUS    RESTARTS   AGE\npostgres-0   1\/1     Running   0          45s\n\nNAME           STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS        AGE\npostgres-pvc   Bound    pvc-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx   5Gi        RWO            microk8s-hostpath   45s\n<\/code><\/pre>\n<p><strong>\u0627\u06af\u0631 \u067e\u0648\u0633\u0679\u06af\u0631\u06cc\u0633 \u0632\u06cc\u0631 \u0627\u0644\u062a\u0648\u0627\u0621 \u06c1\u06d2\u06d4<\/strong> (<code>kubectl wait<\/code> \u0679\u0627\u0626\u0645 \u0622\u0624\u0679\u060c \u0641\u0648\u0631\u0688 \u0634\u0648 <code>0\/1 Pending<\/code>\u067e\u06cc\u0648\u06cc\u0633\u06cc \u0634\u0648 <code>Pending<\/code>):<\/p>\n<p>\u067e\u0648\u0633\u0679\u06af\u0631\u06cc\u0633 \u0645\u06cc\u06ba <strong>\u0645\u0633\u062a\u0642\u0644 \u062d\u062c\u0645 \u06a9\u0627 \u062f\u0639\u0648\u06cc<\/strong>: \u06a9\u0644\u0633\u0679\u0631 \u0645\u06cc\u06ba \u0688\u0633\u06a9 \u06a9\u06cc \u062c\u06af\u06c1\u06d4 MicroK8s \u0627\u0633\u06d2 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2: <code>hostpath-storage<\/code> \u0627\u06cc\u0688 \u0622\u0646\u06d4 \u0627\u06af\u0631 <code>make setup<\/code> \u062f\u0633\u062a\u06cc \u0633\u06cc\u0679 \u0627\u067e \u0628\u063a\u06cc\u0631 \u06a9\u0633\u06cc \u0631\u06a9\u0627\u0648\u0679 \u06a9\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u062a\u06be\u0627\u06d4 <code>microk8s enable storage<\/code>\u067e\u06cc\u0648\u06cc\u0633\u06cc \u06a9\u06d2 \u067e\u0627\u0633 \u067e\u0627\u0628\u0646\u062f \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0686\u06be \u0646\u06c1\u06cc\u06ba \u06c1\u06d2 \u0627\u0648\u0631 \u067e\u0648\u0688\u0632 \u0634\u06cc\u0688\u0648\u0644 \u0646\u06c1\u06cc\u06ba \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u062a\u0642\u0631\u06cc\u0628 \u06a9\u0648 \u062f\u06cc\u06a9\u06be\u06cc\u06ba\u06d4 \u0639\u0627\u0645 \u0637\u0648\u0631 \u067e\u0631 \u0622\u067e \u06a9\u0648 \u06a9\u0686\u06be \u0627\u0633 \u0637\u0631\u062d \u0646\u0638\u0631 \u0622\u0626\u06d2 \u06af\u0627:<\/p>\n<pre><code class=\"language-plaintext\">Warning  FailedScheduling  ...  pod has unbound immediate PersistentVolumeClaims\nNormal   FailedBinding     ...  no persistent volumes available for this claim and no storage class is set\n<\/code><\/pre>\n<p>VM \u067e\u0631 \u0645\u0633\u0626\u0644\u06c1 \u062d\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f\u060c \u067e\u0648\u0633\u0679\u06af\u0631\u06cc\u0633 \u067e\u0648\u0688 \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0686\u0644\u0627\u0626\u06cc\u06ba <strong>\u0645\u06cc\u0632\u0628\u0627\u0646 \u0633\u06d2<\/strong>: macOS\u060c Linux\u060c \u06cc\u0627 Windows PowerShell \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u06c1\u06cc \u06a9\u0645\u0627\u0646\u0688 (\u0645\u0644\u0679\u06cc \u067e\u0627\u0633 \u0645\u06cc\u0632\u0628\u0627\u0646 \u067e\u0631 \u0627\u0646\u0633\u0679\u0627\u0644 \u06c1\u06d2 \u0627\u0648\u0631 VM \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0686\u0644\u062a\u0627 \u06c1\u06d2):<\/p>\n<pre><code class=\"language-bash\"># Enable storage (and ingress\/rbac if make setup skipped them)\nmultipass exec clearledger -- microk8s enable storage ingress rbac\n\n# Confirm a default StorageClass exists\nkubectl get storageclass\n# Expected: microk8s-hostpath (default)\n\n# Kick the pod so it reschedules against the new storage class\nkubectl delete pod postgres-0 -n clearledger\n\nkubectl wait --for=condition=ready pod -l app=postgres \n  -n clearledger --timeout=120s\nkubectl get pods -n clearledger -l app=postgres\n# Expected: postgres-0   1\/1   Running\n<\/code><\/pre>\n<p>\u067e\u0648\u0633\u0679\u06af\u0631\u06cc\u0633 \u0645\u06a9\u0645\u0644 \u06c1\u0648\u0646\u06d2 \u062a\u06a9 \u062a\u0648\u062b\u06cc\u0642 \u06a9\u06cc \u062e\u062f\u0645\u062a \u06cc\u0627 \u0644\u06cc\u062c\u0631 \u0633\u0631\u0648\u0633 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062c\u0627\u0631\u06cc \u0646\u06c1 \u0631\u06a9\u06be\u06cc\u06ba\u06d4 <code>Running<\/code>. \u0627\u06af\u0631 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0645\u0648\u062c\u0648\u062f \u0646\u06c1\u06cc\u06ba \u06c1\u06d2 \u062a\u0648 \u06a9\u0631\u06cc\u0634 \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4<\/p>\n<h4 id=\"heading-053-layer-3-redis\">0.5.3 \u2014 \u067e\u0631\u062a 3: \u0631\u06cc\u0688\u06cc\u0633<\/h4>\n<p><strong>Redis \u06a9\u06cc\u0648\u06ba \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2 (\u0641\u0648\u0631\u06cc \u0645\u0646\u0638\u0631\u0646\u0627\u0645\u06c1):<\/strong> \u0641\u0631\u0636 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u0627\u06cc\u06a9 \u06af\u0627\u06c1\u06a9 $15,000 \u06a9\u06cc \u0688\u06cc\u0628\u0679 \u0631\u0642\u0645 \u062c\u0645\u0639 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0644\u06cc\u062c\u0631 \u0633\u0631\u0648\u0633 \u0627\u0633\u06d2 \u067e\u0648\u0633\u0679\u06af\u0631\u06cc\u0633 \u0645\u06cc\u06ba \u0627\u0633\u0679\u0648\u0631 \u06a9\u0631\u062a\u06cc \u06c1\u06d2 \u0627\u0648\u0631 \u067e\u06be\u0631 \u0627\u0633 \u067e\u06cc\u063a\u0627\u0645 \u06a9\u0648 \u0631\u06cc\u0688\u06cc\u0633 \u06a9\u0648 \u0634\u0627\u0626\u0639 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 <em>&quot;\u0628\u0691\u0627 \u0679\u0631\u0627\u0646\u0632\u06cc\u06a9\u0634\u0646\u060c \u0635\u0627\u0631\u0641 X\u060c \u0631\u0642\u0645 15000\u06d4&#8221;<\/em> \u0646\u0648\u0679\u06cc\u0641\u06a9\u06cc\u0634\u0646 \u0633\u0631\u0648\u0633 \u0627\u0633 \u0686\u06cc\u0646\u0644 \u06a9\u0648 \u0633\u0646 \u0631\u06c1\u06cc \u06c1\u06d2\u06d4 \u067e\u06cc\u063a\u0627\u0645 \u06a9\u0648 \u0645\u0646\u062a\u062e\u0628 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u062a\u0639\u0645\u06cc\u0644 \u06a9\u0627 \u0627\u0646\u062a\u0628\u0627\u06c1 \u0644\u0627\u06af \u0627\u0646 \u06a9\u0631\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0627\u0646\u062a\u0628\u0627\u06c1 \u0628\u0639\u062f \u0645\u06cc\u06ba UI \u0645\u06cc\u06ba \u0638\u0627\u06c1\u0631 \u06c1\u0648\u06af\u0627 \u062c\u0628 \u0622\u067e \u06a9\u0631\u0644 \u06a9\u0631\u06cc\u06ba \u06af\u06d2\u06d4 <code>\/notifications\/alerts<\/code>.<\/p>\n<p>\u0644\u06cc\u062c\u0631 \u0633\u0631\u0648\u0633 \u0627\u0648\u0631 \u0646\u0648\u0679\u06cc\u0641\u06a9\u06cc\u0634\u0646 \u0633\u0631\u0648\u0633 \u0627\u06cc\u06a9 \u062f\u0648\u0633\u0631\u06d2 \u06a9\u0648 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u06a9\u0627\u0644 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0631\u06cc\u0688\u06cc\u0633 \u0645\u0631\u06a9\u0632\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0648\u0627\u0642\u0639 \u06c1\u06d2\u06d4 <strong>\u067e\u06cc\u063a\u0627\u0645 \u0628\u0633<\/strong>: \u0644\u06cc\u062c\u0631 \u0634\u0627\u0626\u0639 \u06c1\u0648 \u06af\u06cc\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0633\u0628\u0633\u06a9\u0631\u0627\u0626\u0628 \u06c1\u0648 \u06af\u0626\u06cc \u06c1\u06cc\u06ba\u06d4 \u0627\u0633\u06cc \u0644\u06cc\u06d2 \u0622\u067e \u06a9\u0648 \u0646\u0648\u0679\u06cc\u0641\u06a9\u06cc\u0634\u0646 \u0633\u0631\u0648\u0633 \u06a9\u0648 \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 Redis \u06a9\u0648 \u0686\u0644\u0627\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2 (\u0627\u0648\u0631 \u0627\u0628 \u0622\u067e \u0627\u0633\u06d2 \u067e\u0648\u0633\u0679\u06af\u0631\u06cc\u0633 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u06cc\u067e \u0644\u06cc\u0626\u0631 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06a9\u06cc\u0648\u06ba \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba)\u06d4<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/07\/1785194531_842_Homelab-\u0633\u06d2-AWS-\u062a\u06a9-\u067e\u0631\u0648\u0688\u06a9\u0634\u0646-\u06a9\u06d2-\u0644\u06cc\u06d2-\u062a\u06cc\u0627\u0631-DevSecOps-\u067e\u0644\u06cc\u0679.png\" alt=\"\u0641\u0644\u0648 \u0688\u0627\u06cc\u0627\u06af\u0631\u0627\u0645 \u062a\u0635\u0648\u06cc\u0631 \u06cc\u06c1 \u0628\u062a\u0627\u062a\u06cc \u06c1\u06d2 \u06a9\u06c1 Redis \u06a9\u06cc\u0633\u06d2 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4\" style=\"display:block;margin:0 auto\" width=\"1536\" height=\"1024\" loading=\"lazy\" title=\"\"><\/p>\n<pre><code class=\"language-bash\">kubectl apply -f infra\/manifests\/redis\/redis.yaml\n<\/code><\/pre>\n<p><strong>\u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba:<\/strong><\/p>\n<pre><code class=\"language-bash\">kubectl get pods -n clearledger -l app=redis\n<\/code><\/pre>\n<p>\u0645\u062a\u0648\u0642\u0639:<\/p>\n<pre><code class=\"language-plaintext\">NAME                     READY   STATUS    RESTARTS   AGE\nredis-xxxxxxxxxx-xxxxx   1\/1     Running   0          30s\n<\/code><\/pre>\n<h4 id=\"heading-054-layer-4-application-secrets\">0.5.4 \u2014 \u067e\u0631\u062a 4: \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u06d2 \u0631\u0627\u0632<\/h4>\n<p>\u0627\u0633\u0646\u0627\u062f \u0645\u0631\u062d\u0644\u06c1 0 \u0645\u06cc\u06ba Kubernetes Secrets \u0645\u06cc\u06ba \u06c1\u06cc\u06ba (\u0645\u0631\u062d\u0644\u06c1 5 \u0627\u0633\u0646\u0627\u062f \u06a9\u0648 \u0648\u0627\u0644\u0679 \u0645\u06cc\u06ba \u0644\u06d2 \u062c\u0627\u062a\u0627 \u06c1\u06d2)\u06d4<\/p>\n<pre><code class=\"language-bash\">kubectl apply -f infra\/manifests\/auth-service\/secret.yaml\nkubectl apply -f infra\/manifests\/ledger-service\/secret.yaml\n<\/code><\/pre>\n<p><strong>\u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba:<\/strong><\/p>\n<pre><code class=\"language-bash\">kubectl get secrets -n clearledger | grep -E 'auth-service|ledger-service'\n<\/code><\/pre>\n<p>\u0645\u062a\u0648\u0642\u0639 (\u0639\u0645\u0631 \u0645\u062e\u062a\u0644\u0641 \u06c1\u0648 \u0633\u06a9\u062a\u06cc \u06c1\u06d2\u061b <strong>\u0688\u06cc\u0679\u0627<\/strong> (\u0634\u0645\u0627\u0631 \u200b\u200b\u0645\u0644\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2):<\/p>\n<pre><code class=\"language-plaintext\">auth-service-secret     Opaque   2      64s\nledger-service-secret   Opaque   1      8s\n<\/code><\/pre>\n<p><code>auth-service-secret<\/code> \u0627\u0633 \u0645\u06cc\u06ba \u062f\u0648 \u0686\u0627\u0628\u06cc\u0627\u06ba \u06c1\u06cc\u06ba (<code>database_url<\/code>, <code>jwt_secret<\/code>)\u06d4 <code>ledger-service-secret<\/code> \u0627\u06cc\u06a9 \u067e\u06a9\u0691\u0648 (<code>database_url<\/code>)\u06d4 \u0645\u0631\u062d\u0644\u06c1 5 \u0627\u0633\u06d2 Vault \u0633\u06d2 \u0628\u062f\u0644 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0641\u06cc \u0627\u0644\u062d\u0627\u0644 \u06a9\u0644\u0633\u0679\u0631 \u0645\u06cc\u06ba \u06a9\u0628\u0631\u0646\u06cc\u0679\u0633 \u0633\u06cc\u06a9\u0631\u06cc\u0679 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-055-layer-5-application-workloads\">0.5.5 &#8211; \u067e\u0631\u062a 5: \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u06d2 \u06a9\u0627\u0645 \u06a9\u0627 \u0628\u0648\u062c\u06be<\/h4>\n<p>\u06c1\u0645 \u0686\u0627\u0631 \u0627\u06cc\u067e \u0633\u0631\u0648\u0633\u0632 \u0634\u0631\u0648\u0639 \u06a9\u0631\u0646\u06d2 \u062c\u0627 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba: \u062a\u0635\u062f\u06cc\u0642\u060c \u0644\u06cc\u062c\u0631\u060c \u0646\u0648\u0679\u06cc\u0641\u06a9\u06cc\u0634\u0646\u060c \u0627\u0648\u0631 \u0641\u0631\u0646\u0679 \u0627\u06cc\u0646\u0688\u06d4 \u067e\u0648\u0633\u0679\u06af\u0631\u06cc\u0633\u060c \u0631\u06cc\u0688\u06cc\u0633\u060c \u0627\u0648\u0631 \u0622\u062e\u0631\u06cc \u062f\u0648 \u067e\u0631\u062a\u0648\u06ba \u06a9\u06d2 \u0631\u0627\u0632 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0645\u0648\u062c\u0648\u062f \u06c1\u06cc\u06ba\u06d4 \u06a9\u0648\u0628\u0631\u0646\u06cc\u0679\u0633 \u06a9\u0648 \u0627\u0628 \u0688\u0648\u06a9\u0631 \u06c1\u0628 \u06a9\u06cc \u062a\u0635\u0648\u06cc\u0631 \u06a9\u06be\u06cc\u0646\u0686\u0646\u06d2 \u0627\u0648\u0631 \u0627\u0633\u06d2 \u067e\u0648\u0688 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0686\u0644\u0627\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4<\/p>\n<p><strong>2 \u0641\u0627\u0626\u0644\u06cc\u06ba \u0641\u06cc \u062e\u062f\u0645\u062a (\u0632\u06cc\u0627\u062f\u06c1 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1):<\/strong> \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc Kubernetes \u06a9\u0648 \u0628\u062a\u0627\u062a\u06cc \u06c1\u06d2\u06d4 <em>\u0686\u0644\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0646\u0679\u06cc\u0646\u0631 \u06a9\u06cc \u062a\u0635\u0648\u06cc\u0631<\/em> \u0627\u0648\u0631 <em>\u06a9\u062a\u0646\u06cc \u06a9\u0627\u067e\u06cc\u0627\u06ba\u061f<\/em>. \u06a9\u0648\u0626\u06cc \u0631\u0627\u0633\u062a\u06c1 \u0646\u06c1\u06cc\u06ba <strong>\u0633\u0631\u0648\u0633<\/strong> \u06a9\u0644\u0633\u0679\u0631 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0627\u0633 \u0627\u06cc\u067e \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0645\u0633\u062a\u062d\u06a9\u0645 \u0646\u0627\u0645 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u06cc\u06ba\u060c \u062c\u06cc\u0633\u06d2 <code>auth-service<\/code> \u0644\u06c1\u0630\u0627\u060c \u0644\u06cc\u062c\u0631 \u067e\u0648\u0688 \u0622\u0626\u06cc \u067e\u06cc \u0627\u06cc\u0688\u0631\u06cc\u0633 \u06a9\u0648 \u062c\u0627\u0646\u06d2 \u0628\u063a\u06cc\u0631 \u0633\u0631\u0679\u06cc\u0641\u06a9\u06cc\u0679 \u062a\u0644\u0627\u0634 \u06a9\u0631\u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u067e\u06c1\u0644\u06d2 \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc\u0648\u06ba \u06a9\u0627 \u0627\u0637\u0644\u0627\u0642 \u06a9\u0631\u06cc\u06ba\u060c \u067e\u06be\u0631 \u062e\u062f\u0645\u0627\u062a\u06d4<\/p>\n<p>\u067e\u06be\u0631 \u06c1\u0645 \u06a9\u06cc\u0648\u06ba <code>sed<\/code> \u0646\u06cc\u0686\u06d2 \u06a9\u0645\u0627\u0646\u0688\u061f Git \u06a9\u06cc \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc YAML \u0641\u0627\u0626\u0644 \u067e\u0644\u06cc\u0633 \u06c1\u0648\u0644\u0688\u0631\u0632 \u067e\u0631 \u0645\u0634\u062a\u0645\u0644 \u06c1\u06d2\u06d4 <code>DOCKER_USERNAME<\/code>\u0627\u0633 \u06a9\u06cc \u0648\u062c\u06c1 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u06c1\u0631 \u0627\u06cc\u06a9 \u06a9\u0627 Docker Hub \u0635\u0627\u0631\u0641 \u0646\u0627\u0645 \u0645\u062e\u062a\u0644\u0641 \u06c1\u06d2\u06d4 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u06c1\u06cc \u00a70.3 \u0645\u06cc\u06ba<code>export DOCKER_USERNAME=YOUR_DOCKERHUB_USERNAME<\/code>)\u06d4 \u06a9\u06c1 <code>sed<\/code> \u062c\u0628 \u0645\u06cc\u0646\u06cc \u0641\u06cc\u0633\u0679 \u06a9\u0648\u0628\u0631\u0646\u06cc\u0679\u0633 \u06a9\u0648 \u0628\u06be\u06cc\u062c\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u0644\u0627\u0626\u0646 \u0641\u0648\u0631\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0627\u0646 \u067e\u0644\u06cc\u0633 \u06c1\u0648\u0644\u0688\u0631\u0632 \u06a9\u0648 \u0627\u0635\u0644 \u0635\u0627\u0631\u0641 \u0646\u0627\u0645 \u0633\u06d2 \u0628\u062f\u0644 \u062f\u06cc\u062a\u06cc \u06c1\u06d2\u06d4 \u06af\u0679 \u0641\u0627\u0626\u0644\u0648\u06ba \u0645\u06cc\u06ba \u062a\u0631\u0645\u06cc\u0645 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0622\u067e \u0627\u0633\u06d2 \u0686\u06be\u0648\u0691 \u062f\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>sed<\/code> \u062e\u0627\u0645 \u0641\u0627\u0626\u0644 \u06a9\u0648 \u0644\u0627\u06af\u0648 \u06a9\u0631\u0646\u0627 Kubernetes \u06a9\u0627 \u0633\u0628\u0628 \u0628\u0646\u062a\u0627 \u06c1\u06d2\u06d4 <code>DOCKER_USERNAME\/clearledger-auth-service<\/code>\u06cc\u06c1 \u0645\u0648\u062c\u0648\u062f \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0633\u0679\u06cc\u062c 0 \u0641\u0648\u0644\u0688\u0631 \u06a9\u06cc\u0648\u06ba \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u061f \u06cc\u06c1 \u0630\u062e\u06cc\u0631\u06c1 Kubernetes \u0645\u06cc\u0646\u06cc \u0641\u06cc\u0633\u0679 \u06a9\u06cc \u0627\u06cc\u06a9 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u06a9\u0627\u067e\u06cc\u0648\u06ba \u067e\u0631 \u0645\u0634\u062a\u0645\u0644 \u06c1\u06d2\u06d4 \u0627\u0633 \u062f\u0633\u062a\u06cc \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba: <code>stages\/stage-0-raw-kubernetes\/infra\/manifests\/<\/code>. \u0641\u0627\u0626\u0644 \u0627\u0633\u0679\u06cc\u062c 0 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062a\u06cc\u0627\u0631 \u06a9\u06cc \u06af\u0626\u06cc \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0633 \u0645\u06cc\u06ba \u0634\u0627\u0645\u0644 \u06c1\u06cc\u06ba: <code>DOCKER_USERNAME<\/code> \u06cc\u06c1 \u067e\u0644\u06cc\u0633 \u06c1\u0648\u0644\u0688\u0631\u0632 \u06c1\u06cc\u06ba \u062c\u0648 \u0646\u06cc\u0686\u06d2 \u062f\u06cc\u06d2 \u06af\u0626\u06d2 \u06a9\u0645\u0627\u0646\u0688\u0632 \u06a9\u0648 \u0628\u062f\u0644 \u062f\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u0646\u06c1 \u06a9\u0631\u06cc\u06ba <code>infra\/manifests\/<\/code> \u062a\u0627\u06c1\u0645\u060c \u0648\u06c1 \u0641\u0627\u0626\u0644 \u0628\u0639\u062f \u06a9\u06d2 GitOps \u0627\u0642\u062f\u0627\u0645\u0627\u062a \u06a9\u06d2 \u0644\u06cc\u06d2 \u06c1\u06d2\u06d4<\/p>\n<p>\u06c1\u0631 \u0627\u06cc\u06a9 \u0633\u0631\u0648\u0633 \u06a9\u0648 \u062a\u0631\u062a\u06cc\u0628 \u0633\u06d2 \u0644\u06af\u0627\u0626\u06cc\u06ba\u06d4 \u0627\u0633\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0631\u06cc\u067e\u0648 \u0631\u0648\u0679 \u0633\u06d2 \u0686\u0644\u0627\u0626\u06cc\u06ba: <code>DOCKER_USERNAME<\/code> \u0627\u0628\u06be\u06cc \u062a\u06a9 \u0628\u0631\u0622\u0645\u062f \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u0627:<\/p>\n<p><strong>1. \u062a\u0635\u062f\u06cc\u0642 \u06a9\u06cc \u062e\u062f\u0645\u062a<\/strong>: \u0644\u0627\u06af \u0627\u0646 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0631\u062c\u0633\u0679\u0631 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">sed \"s|DOCKER_USERNAME|${DOCKER_USERNAME}|g\" \n  \"$STAGE0\/auth-service\/deployment.yaml\" | kubectl apply -f -\nkubectl apply -f infra\/manifests\/auth-service\/service.yaml\n<\/code><\/pre>\n<p><strong>2. \u0644\u06cc\u062c\u0631 \u0633\u0631\u0648\u0633<\/strong>: \u0644\u06cc\u0646 \u062f\u06cc\u0646 \u0627\u0648\u0631 \u0628\u06cc\u0644\u0646\u0633 (\u067e\u0648\u0633\u0679\u06af\u0631\u06cc\u0633 + \u00a70.5.4 \u0645\u06cc\u06ba \u062a\u062e\u0644\u06cc\u0642 \u06a9\u0631\u062f\u06c1 \u0631\u0627\u0632 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2)<\/p>\n<pre><code class=\"language-bash\">sed \"s|DOCKER_USERNAME|${DOCKER_USERNAME}|g\" \n  \"$STAGE0\/ledger-service\/deployment.yaml\" | kubectl apply -f -\nkubectl apply -f infra\/manifests\/ledger-service\/service.yaml\n<\/code><\/pre>\n<p><strong>3. \u0627\u0637\u0644\u0627\u0639 \u06a9\u06cc \u062e\u062f\u0645\u062a<\/strong>: Redis \u0633\u06d2 \u0628\u0691\u06d2 \u0644\u06cc\u0646 \u062f\u06cc\u0646 \u06a9\u06cc \u0648\u0627\u0631\u0646\u0646\u06af \u0648\u0635\u0648\u0644 \u06a9\u0631\u06cc\u06ba (\u0627\u0633 \u0645\u0639\u0627\u0645\u0644\u06d2 \u0645\u06cc\u06ba \u06a9\u0648\u0626\u06cc \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u062e\u0641\u06cc\u06c1 \u0646\u06c1\u06cc\u06ba)\u06d4<\/p>\n<pre><code class=\"language-bash\">sed \"s|DOCKER_USERNAME|${DOCKER_USERNAME}|g\" \n  \"$STAGE0\/notification-service\/deployment.yaml\" | kubectl apply -f -\nkubectl apply -f infra\/manifests\/notification-service\/service.yaml\n<\/code><\/pre>\n<p><strong>4. \u0641\u0631\u0646\u0679 \u0627\u06cc\u0646\u0688<\/strong>: \u0648\u06cc\u0628 UI (\u06cc\u06c1\u0627\u06ba \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u0627\u0648\u0631 \u0633\u0631\u0648\u0633 \u0627\u06cc\u06a9 \u0641\u0627\u0626\u0644 \u0645\u06cc\u06ba \u06c1\u06cc\u06ba)<\/p>\n<pre><code class=\"language-bash\">sed \"s|DOCKER_USERNAME|${DOCKER_USERNAME}|g\" \n  \"$STAGE0\/frontend\/deployment.yaml\" | kubectl apply -f -\n<\/code><\/pre>\n<p><strong>\u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba<\/strong> (\u062a\u0645\u0627\u0645 \u0627\u06cc\u067e \u067e\u0648\u0688\u0632 <code>Running<\/code>: \u062a\u0648\u062b\u06cc\u0642 \u0627\u0648\u0631 \u0644\u06cc\u062c\u0631 \u06a9\u0648 \u067e\u0648\u0633\u0679\u06af\u0631\u06cc\u0633 \u0633\u06d2 \u0645\u0646\u0633\u0644\u06a9 \u06c1\u0648\u0646\u06d2 \u0645\u06cc\u06ba 30 \u0633\u06cc\u06a9\u0646\u0688 \u062a\u06a9 \u0644\u06af \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba):<\/p>\n<pre><code class=\"language-bash\">kubectl get pods -n clearledger\n<\/code><\/pre>\n<p>\u0645\u062a\u0648\u0642\u0639 \u0622\u067e \u06a9\u0648 \u067e\u0686\u06be\u0644\u06cc \u067e\u0631\u062a \u0633\u06d2 \u067e\u0648\u0633\u0679\u06af\u0631\u06cc\u0633 \u0627\u0648\u0631 \u0631\u06cc\u0688\u06cc\u0633 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0633\u0627\u062a\u06be \u06c1\u0631 \u0627\u06cc\u067e \u06a9\u06d2 \u0644\u0626\u06d2 \u0646\u0626\u06d2 \u067e\u0648\u0688\u0632 \u062f\u06cc\u06a9\u06be\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2 (\u067e\u0648\u0688 \u06a9\u06d2 \u0635\u062d\u06cc\u062d \u0646\u0627\u0645 \u0645\u062e\u062a\u0644\u0641 \u06c1\u0648\u06ba \u06af\u06d2)\u06d4<\/p>\n<pre><code class=\"language-plaintext\">NAME                                      READY   STATUS    RESTARTS   AGE\npostgres-0                                1\/1     Running   0          15m\nredis-xxxxxxxxxx-xxxxx                    1\/1     Running   0          10m\nauth-service-xxxxxxxxxx-xxxxx             1\/1     Running   0          45s\nauth-service-xxxxxxxxxx-xxxxx             1\/1     Running   0          45s\nledger-service-xxxxxxxxxx-xxxxx           1\/1     Running   0          40s\nledger-service-xxxxxxxxxx-xxxxx           1\/1     Running   0          40s\nnotification-service-xxxxxxxxxx-xxxxx     1\/1     Running   0          35s\nfrontend-xxxxxxxxxx-xxxxx                 1\/1     Running   0          30s\n<\/code><\/pre>\n<p>\u0627\u06af\u0631 \u0622\u067e \u06a9\u06cc \u062a\u0635\u062f\u06cc\u0642 \u06a9\u06cc \u062e\u062f\u0645\u062a \u06cc\u0627 \u0644\u06cc\u062c\u0631 \u0633\u0631\u0648\u0633 \u06cc\u06c1 \u06c1\u06d2: <code>CrashLoopBackOff<\/code>\u0644\u0627\u06af \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">kubectl logs -n clearledger deploy\/auth-service --tail=20\n<\/code><\/pre>\n<p><strong>\u0639\u0627\u0645 \u0648\u062c\u0648\u06c1\u0627\u062a:<\/strong> \u0622\u067e \u0646\u06d2 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u062f\u06cc <code>infra\/manifests\/*\/deployment.yaml<\/code> \u0627\u0648\u067e\u0631 \u062f\u06cc \u06af\u0626\u06cc \u0627\u0633\u0679\u06cc\u062c 0 \u0641\u0627\u0626\u0644 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2\u060c \u0622\u067e \u062f\u06cc\u06a9\u06be \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba: \u0644\u0627\u06af\u0632\u06d4 <code>DATABASE_URL is not set<\/code>. \u062f\u0648\u0628\u0627\u0631\u06c1 \u0686\u0644\u0627\u0626\u06cc\u06ba <code>sed<\/code> + <code>kubectl apply<\/code> \u0627\u0633 \u0633\u06cc\u06a9\u0634\u0646 \u0645\u06cc\u06ba \u0627\u062d\u06a9\u0627\u0645\u0627\u062a\u06d4<\/p>\n<p><strong> \u0686\u06cc\u06a9 \u067e\u0648\u0627\u0626\u0646\u0679 \u067e\u0631 \u0639\u0645\u0644 \u06a9\u0631\u06cc\u06ba: \u0631\u0633\u06cc\u062f \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06a9\u0627\u0645 \u06a9\u0627 \u0628\u0648\u062c\u06be<\/strong><\/p>\n<pre><code class=\"language-bash\">kubectl get deployment -n clearledger\nkubectl get pods -n clearledger --field-selector=status.phase!=Running\n<\/code><\/pre>\n<p>\u0645\u062a\u0648\u0642\u0639: 4 \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc\u0627\u06ba (<code>auth-service<\/code>, <code>ledger-service<\/code>, <code>notification-service<\/code>, <code>frontend<\/code>) \u06a9\u06d2 \u0633\u0627\u062a\u06be <code>READY<\/code> \u0645\u0637\u0644\u0648\u0628\u06c1 \u0646\u0642\u0644 \u0633\u06d2 \u0645\u0644\u0627\u0626\u06cc\u06ba (\u062a\u0635\u062f\u06cc\u0642 \u0627\u0648\u0631 \u0644\u06cc\u062c\u0631 \u0645\u0627\u0631\u06a9\u0646\u06af) <code>2\/2<\/code>)\u06d4 \u062f\u0648\u0633\u0631\u06cc \u06a9\u0645\u0627\u0646\u0688 \u067e\u0631\u0646\u0679 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 <strong>\u06a9\u0686\u06be \u0646\u06c1\u06cc\u06ba<\/strong>: \u06a9\u0648\u0626\u06cc \u067e\u0648\u0688 \u0632\u06cc\u0631 \u0627\u0644\u062a\u0648\u0627\u0621 \u06cc\u0627 CrashLoopBackOff \u062d\u0627\u0644\u062a \u0645\u06cc\u06ba \u0646\u06c1\u06cc\u06ba \u067e\u06be\u0646\u0633\u0627 \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-056-layer-6-ingress\">0.5.6 \u2014 \u067e\u0631\u062a 6: \u062f\u0627\u062e\u0644<\/h4>\n<p>\u0627\u067e\u0646\u06d2 \u06a9\u0644\u0633\u0679\u0631 \u06a9\u0648 \u0627\u0633 \u067e\u0631 \u0638\u0627\u06c1\u0631 \u06a9\u0631\u06cc\u06ba: <code>http:\/\/clearledger.local<\/code>.<\/p>\n<pre><code class=\"language-bash\">kubectl apply -f infra\/manifests\/ingress.yaml\n<\/code><\/pre>\n<p><strong>\u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba:<\/strong><\/p>\n<pre><code class=\"language-bash\">kubectl get ingress -n clearledger\ncurl -s -o \/dev\/null -w \"%{http_code}n\" http:\/\/clearledger.local\/\n# Expected: 200\n<\/code><\/pre>\n<h4 id=\"heading-057-watch-until-stable\">0.5.7: \u0645\u0633\u062a\u062d\u06a9\u0645 \u06c1\u0648\u0646\u06d2 \u062a\u06a9 \u0645\u0634\u0627\u06c1\u062f\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4<\/h4>\n<pre><code class=\"language-bash\">kubectl get pods -n clearledger -w\n<\/code><\/pre>\n<p>\u0645\u062a\u0648\u0642\u0639 \u062d\u062a\u0645\u06cc \u062d\u0627\u0644\u062a (\u062c\u0628 \u062a\u0645\u0627\u0645 \u067e\u0648\u0688\u0632 \u0646\u0638\u0631 \u0622\u0626\u06cc\u06ba \u062a\u0648 \u062f\u06cc\u06a9\u06be\u0646\u0627 \u0628\u0646\u062f \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 Ctrl+C \u062f\u0628\u0627\u0626\u06cc\u06ba) <code>Running<\/code>):<\/p>\n<pre><code class=\"language-plaintext\">NAME                                  READY   STATUS    RESTARTS\nauth-service-xxx                      1\/1     Running   0\nauth-service-yyy                      1\/1     Running   0\nfrontend-xxx                          1\/1     Running   0\nledger-service-xxx                    1\/1     Running   0\nledger-service-yyy                    1\/1     Running   0\nnotification-service-xxx              1\/1     Running   0\npostgres-0                            1\/1     Running   0\nredis-xxx                             1\/1     Running   0\n<\/code><\/pre>\n<p>\u067e\u0648\u0688 \u067e\u06be\u0646\u0633 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4 <code>Pending<\/code> \u06cc\u0627 <code>CrashLoopBackOff<\/code>? \u062f\u0631\u062c \u0630\u06cc\u0644 \u062f\u0648 \u06a9\u0645\u0627\u0646\u0688\u0632 \u0638\u0627\u06c1\u0631 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u06a9\u06c1 \u06a9\u06cc\u0627 \u063a\u0644\u0637 \u06c1\u06d2:<\/p>\n<pre><code class=\"language-bash\">kubectl describe pod POD_NAME -n clearledger\nkubectl logs POD_NAME -n clearledger --previous\n<\/code><\/pre>\n<h3 id=\"heading-06-verify-the-running-system\">0.6: \u0686\u0644\u0627\u0646\u06d2 \u06a9\u06d2 \u0646\u0638\u0627\u0645 \u06a9\u0648 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/h3>\n<p>\u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba <strong>1 \u0679\u06cc\u0633\u0679 \u0627\u06a9\u0627\u0624\u0646\u0679<\/strong> \u0628\u0631\u0627\u0624\u0632\u0631 \u0627\u0648\u0631 \u06a9\u0631\u0644 \u062f\u0648\u0646\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0648\u0626\u06cc \u062a\u0646\u0627\u0632\u0639\u0627\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06cc\u06ba\u06d4<\/p>\n<table>\n<thead>\n<tr>\n<th>\u0645\u06cc\u062f\u0627\u0646<\/th>\n<th>\u0642\u062f\u0631<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>\u0627\u06cc \u0645\u06cc\u0644<\/td>\n<td><code>test@clearledger.io<\/code><\/td>\n<\/tr>\n<tr>\n<td>\u067e\u0627\u0633 \u0648\u0631\u0688<\/td>\n<td><code>SecurePass123<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u0627\u06af\u0631 \u0622\u067e \u067e\u06c1\u0644\u06d2 \u06c1\u06cc \u0627\u067e\u0646\u06d2 \u0628\u0631\u0627\u0624\u0632\u0631 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0631\u062c\u0633\u0679\u0631\u0688 \u06c1\u06cc\u06ba\u06d4 <strong>\u0645\u062e\u062a\u0644\u0641<\/strong> \u0627\u067e\u0646\u0627 \u067e\u0627\u0633 \u0648\u0631\u0688 \u062f\u0631\u062c \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u0627\u0633 \u067e\u0627\u0633 \u0648\u0631\u0688 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0644\u0627\u06af \u0627\u0646 \u06a9\u0631\u06cc\u06ba \u06cc\u0627 \u0627\u06cc\u06a9 \u0646\u06cc\u0627 \u0627\u06cc \u0645\u06cc\u0644 \u0645\u0646\u062a\u062e\u0628 \u06a9\u0631\u06cc\u06ba\u06d4 \u0630\u06cc\u0644 \u0645\u06cc\u06ba curl \u06a9\u0645\u0627\u0646\u0688 \u06c1\u06d2\u06d4 <strong>\u0627\u06cc\u06a9 \u06c1\u06cc<\/strong> \u0627\u06cc \u0645\u06cc\u0644 \u0627\u0648\u0631 \u067e\u0627\u0633 \u0648\u0631\u0688 \u062c\u0633 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0622\u067e \u0646\u06d2 \u0627\u0635\u0644 \u0645\u06cc\u06ba \u0631\u062c\u0633\u0679\u0631 \u06a9\u06cc\u0627 \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-browser-verification-recommended\">\u0627\u067e\u0646\u0627 \u0628\u0631\u0627\u0624\u0632\u0631 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba (\u062a\u062c\u0648\u06cc\u0632 \u06a9\u0631\u062f\u06c1):<\/h4>\n<p>\u06a9\u06be\u0644\u0627 <code>http:\/\/clearledger.local<\/code> \u0622\u067e \u06a9\u06d2 \u0628\u0631\u0627\u0624\u0632\u0631 \u0645\u06cc\u06ba\u06d4 ClearLedger \u0644\u0627\u06af \u0627\u0646 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0638\u0627\u06c1\u0631 \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/07\/1785194531_161_Homelab-\u0633\u06d2-AWS-\u062a\u06a9-\u067e\u0631\u0648\u0688\u06a9\u0634\u0646-\u06a9\u06d2-\u0644\u06cc\u06d2-\u062a\u06cc\u0627\u0631-DevSecOps-\u067e\u0644\u06cc\u0679.png\" alt=\"Clearledger \u0644\u0627\u06af \u0627\u0646 \u0627\u0633\u06a9\u0631\u06cc\u0646 UI \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679\" style=\"display:block;margin:0 auto\" width=\"1140\" height=\"1106\" loading=\"lazy\" title=\"\"><\/p>\n<p>\u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba <strong>\u0631\u062c\u0633\u0679\u0631 \u06a9\u0631\u06cc\u06ba<\/strong> \u067e\u06be\u0631 \u0627\u0633 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u06cc\u06a9 \u0627\u06a9\u0627\u0624\u0646\u0679 \u0628\u0646\u0627\u0626\u06cc\u06ba <code>test@clearledger.io<\/code> \/ <code>SecurePass123<\/code> (\u0646\u06cc\u0686\u06d2 \u062f\u06cc\u06d2 \u06af\u0626\u06d2 \u06a9\u0631\u0644 \u0628\u0644\u0627\u06a9 \u06a9\u06cc \u0637\u0631\u062d\u06d4 Pydantic \u0648\u0627\u0636\u062d \u0637\u0648\u0631 \u067e\u0631 \u0627\u0633 \u0637\u0631\u062d \u06a9\u06cc \u062c\u0639\u0644\u06cc \u0627\u06cc \u0645\u06cc\u0644\u0632 \u06a9\u0648 \u0645\u0633\u062a\u0631\u062f \u06a9\u0631 \u062f\u06d2 \u06af\u0627: <code>test@test.com<\/code>)\u06d4<\/p>\n<p>\u0627\u067e\u0646\u06d2 \u0627\u06cc \u0645\u06cc\u0644 \u0627\u0648\u0631 \u067e\u0627\u0633 \u0648\u0631\u0688 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0644\u0627\u06af \u0627\u0646 \u06a9\u0631\u06cc\u06ba\u06d4 \u062c\u0628 \u0622\u067e \u067e\u06c1\u0644\u06cc \u0628\u0627\u0631 \u0644\u0627\u06af \u0627\u0650\u0646 \u06c1\u0648\u06ba \u06af\u06d2\u060c \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u0688\u06cc\u0645\u0648 \u0679\u0631\u0627\u0646\u0632\u06cc\u06a9\u0634\u0646 \u0633\u06cc\u0688 \u06a9\u0631 \u062f\u06d2 \u06af\u0627\u06d4 \u0627\u0633 \u06a9\u06d2 \u0638\u0627\u06c1\u0631 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0686\u0646\u062f \u0633\u06cc\u06a9\u0646\u0688 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/07\/1785194531_19_Homelab-\u0633\u06d2-AWS-\u062a\u06a9-\u067e\u0631\u0648\u0688\u06a9\u0634\u0646-\u06a9\u06d2-\u0644\u06cc\u06d2-\u062a\u06cc\u0627\u0631-DevSecOps-\u067e\u0644\u06cc\u0679.png\" alt=\"\u0644\u0627\u06af \u0627\u0646 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f Clearledger UI \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679\" style=\"display:block;margin:0 auto\" width=\"1141\" height=\"933\" loading=\"lazy\" title=\"\"><\/p>\n<p>\u062f\u06cc\u06a9\u06be\u0648 <strong>\u0645\u0648\u062c\u0648\u062f\u06c1 \u062a\u0648\u0627\u0632\u0646<\/strong> \u06a9\u0627\u0631\u0688 \u0627\u0633\u067e\u0627\u0631\u06a9 \u0644\u0627\u0626\u0646 \u0686\u0627\u0631\u0679 \u0645\u06cc\u06ba \u0688\u0627\u0644\u0631 \u06a9\u06cc \u0645\u0642\u062f\u0627\u0631 \u0638\u0627\u06c1\u0631 \u06c1\u0648\u0646\u06cc \u0686\u0627\u06c1\u06cc\u06d2\u06d4<\/p>\n<p>\u062f\u06cc\u06a9\u06be\u0648 <strong>\u0644\u06cc\u0646 \u062f\u06cc\u0646 \u06a9\u06cc \u062a\u0627\u0631\u06cc\u062e<\/strong>. \u0622\u067e \u06a9\u0648 &quot;\u062a\u0646\u062e\u0648\u0627\u06c1\u06cc\u06ba (Acme Corp&#8221;)\u060c &quot;\u0644\u06cc\u0632 \u0645\u0626\u06cc 2026&#8221; \u062c\u06cc\u0633\u06cc \u0686\u06cc\u0632\u06cc\u06ba \u0646\u0638\u0631 \u0622\u0626\u06cc\u06ba \u06af\u06cc\u06d4<\/p>\n<p>\u0627\u0648\u0631 \u062f\u06cc\u06a9\u06be\u06cc\u06ba <strong>\u0627\u0646\u062a\u0628\u0627\u06c1<\/strong> \u0646\u06cc\u0686\u06d2 \u0648\u0627\u0644\u0627 \u067e\u06cc\u0646\u0644\u06d4 \u0622\u067e \u06a9\u0648 \u062f\u06cc\u06a9\u06be\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2 <code>LARGE_TRANSACTION<\/code> \u0633\u0631\u062e \u0628\u06cc\u062c\u0632 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u0637\u0644\u0627\u0639\u0627\u062a\u06d4 \u0622\u067e \u06a9\u06d2 \u062f\u0648 \u0688\u06cc\u0645\u0648 \u0679\u0631\u06cc\u0688\u0632 $10,000 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u06c1\u0648\u0646\u06d2 \u067e\u0631 \u062a\u0639\u0645\u06cc\u0644 \u06a9\u0627 \u0627\u0646\u062a\u0628\u0627\u06c1 \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u0645\u062a\u062d\u0631\u06a9 \u06c1\u0648 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u067e\u06be\u0631 $10,000 \u06cc\u0627 \u0627\u0633 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u06a9\u06cc \u062a\u062c\u0627\u0631\u062a \u062c\u0645\u0639 \u06a9\u0631\u0648\u0627\u0626\u06cc\u06ba \u0627\u0648\u0631 \u062d\u0642\u06cc\u0642\u06cc \u0648\u0642\u062a \u0645\u06cc\u06ba \u0627\u0644\u0631\u0679\u0633 \u06a9\u06cc \u062a\u0639\u062f\u0627\u062f \u0645\u06cc\u06ba \u0627\u0636\u0627\u0641\u06c1 \u062f\u06cc\u06a9\u06be\u06cc\u06ba\u06d4<\/p>\n<p><strong>\u06a9\u06cc\u0627 \u062a\u0644\u0627\u0634 \u06a9\u0631\u0646\u0627 \u06c1\u06d2:<\/strong><\/p>\n<ul>\n<li>\n<p>\u06c1\u0631 \u0679\u0631\u0627\u0646\u0632\u06cc\u06a9\u0634\u0646 \u06a9\u06d2 \u0641\u0648\u0631\u0627\u064b \u0628\u0639\u062f \u0628\u06cc\u0644\u0646\u0633 \u0627\u067e\u0688\u06cc\u0679\u0633<\/p>\n<\/li>\n<li>\n<p>\u06a9\u0631\u06cc\u0688\u0679 \u0633\u0628\u0632 \u0631\u0646\u06af \u0645\u06cc\u06ba \u0638\u0627\u06c1\u0631 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>+$<\/code> \u0631\u0642\u0645 \u0627\u0648\u0631 \u0688\u06cc\u0628\u0679 \u0633\u0631\u062e \u0631\u0646\u06af \u0645\u06cc\u06ba \u062f\u06a9\u06be\u0627\u0626\u06d2 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>\u2212$<\/code> \u0631\u0642\u0645<\/p>\n<\/li>\n<li>\n<p>\u062c\u0628 \u0622\u067e $10,000 \u06cc\u0627 \u0627\u0633 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u06a9\u06cc \u0679\u0631\u0627\u0646\u0632\u06cc\u06a9\u0634\u0646\u0632 \u062c\u0645\u0639 \u06a9\u0631\u0627\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0648 \u0646\u0648\u0679\u06cc\u0641\u06a9\u06cc\u0634\u0646 \u0628\u06cc\u062c\u0632 \u06a9\u06cc \u062a\u0639\u062f\u0627\u062f \u0628\u0691\u06be \u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u06c1\u0631 \u0627\u0637\u0644\u0627\u0639 \u0627\u06cc\u06a9 \u0631\u0642\u0645\u060c \u0633\u0645\u062a \u0627\u0648\u0631 \u0679\u0627\u0626\u0645 \u0627\u0633\u0679\u06cc\u0645\u067e \u062f\u06a9\u06be\u0627\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<\/ul>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/07\/1785194531_562_Homelab-\u0633\u06d2-AWS-\u062a\u06a9-\u067e\u0631\u0648\u0688\u06a9\u0634\u0646-\u06a9\u06d2-\u0644\u06cc\u06d2-\u062a\u06cc\u0627\u0631-DevSecOps-\u067e\u0644\u06cc\u0679.png\" alt=\"\u0644\u0627\u06af \u0627\u0646 \u06a9\u0631\u0646\u06d2 \u0627\u0648\u0631 \u0644\u06cc\u0646 \u062f\u06cc\u0646 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f Clearledger UI \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679\" style=\"display:block;margin:0 auto\" width=\"1473\" height=\"1269\" loading=\"lazy\" title=\"\"><\/p>\n<p><strong>\u0627\u067e\u0646\u06d2 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u06a9\u0627 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679 \u0644\u06cc\u06ba \u062c\u0648 \u0622\u067e \u06a9\u06d2 \u0644\u06cc\u0646 \u062f\u06cc\u0646 \u0627\u0648\u0631 \u0627\u06cc\u06a9 \u06cc\u0627 \u0632\u06cc\u0627\u062f\u06c1 \u0627\u0644\u0631\u0679\u0633 \u06a9\u0648 \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/strong> \u06cc\u06c1 \u0622\u067e \u06a9\u06d2 \u067e\u0648\u0631\u0679 \u0641\u0648\u0644\u06cc\u0648 \u0645\u06cc\u06ba \u067e\u06c1\u0644\u0627 \u0679\u06a9\u0691\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u06cc\u0627 curl \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2<\/strong> (\u0627\u06cc\u06a9 \u06c1\u06cc \u0627\u06a9\u0627\u0624\u0646\u0679: \u0645\u0641\u06cc\u062f \u06c1\u06d2 \u0627\u06af\u0631 \u0628\u0631\u0627\u0624\u0632\u0631 \u062a\u0639\u0627\u0648\u0646 \u0646\u06c1 \u06a9\u0631\u06cc\u06ba):<\/p>\n<pre><code class=\"language-bash\"># Register (skip if you already registered in the browser with the same email)\ncurl -s -X POST http:\/\/clearledger.local\/auth\/register \n  -H \"Content-Type: application\/json\" \n  -d '{\"email\":\"test@clearledger.io\",\"password\":\"SecurePass123\"}' | jq .\n<\/code><\/pre>\n<p>\u0645\u062a\u0648\u0642\u0639: <code>{\"user_id\":\"...\",\"email\":\"test@clearledger.io\"}<\/code>\u06cc\u0627 \u06cc\u06c1 \u06a9\u06c1\u0646\u06d2 \u0645\u06cc\u06ba \u063a\u0644\u0637\u06cc \u06a9\u06c1 \u0622\u067e \u06a9\u0627 \u0627\u06cc \u0645\u06cc\u0644 \u067e\u06c1\u0644\u06d2 \u06c1\u06cc \u0631\u062c\u0633\u0679\u0631\u0688 \u06c1\u06d2 (\u0627\u06af\u0631 \u0622\u067e \u0646\u06d2 \u067e\u06c1\u0644\u06d2 \u0628\u0631\u0627\u0624\u0632\u0631 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0627 \u062a\u0648 \u06cc\u06c1 \u0679\u06be\u06cc\u06a9 \u06c1\u06d2)\u06d4<\/p>\n<pre><code class=\"language-bash\"># Login \u2014 save the token (must match the password you registered with)\nTOKEN=$(curl -s -X POST http:\/\/clearledger.local\/auth\/login \n  -H \"Content-Type: application\/json\" \n  -d '{\"email\":\"test@clearledger.io\",\"password\":\"SecurePass123\"}' \n  | jq -r .access_token)\necho \"Token: ${TOKEN:0:30}...\"\n<\/code><\/pre>\n<p>\u0627\u06af\u0631 <code>TOKEN<\/code> \u062e\u0627\u0644\u06cc \u06cc\u0627 \u0644\u0627\u06af \u0627\u0646 \u0644\u0648\u0679\u0627\u062a\u0627 \u06c1\u06d2\u06d4 <code>401<\/code>\u0628\u0631\u0627\u0624\u0632\u0631 \u06a9\u06d2 \u067e\u0627\u0633 \u0648\u0631\u0688 \u0645\u0645\u0627\u062b\u0644 \u0646\u06c1\u06cc\u06ba \u06c1\u06cc\u06ba\u06d4 \u0628\u0631\u0627\u06c1 \u06a9\u0631\u0645 \u0627\u0648\u067e\u0631 \u0648\u0627\u0644\u06d2 \u062c\u062f\u0648\u0644 \u0645\u06cc\u06ba \u062f\u0648\u0628\u0627\u0631\u06c1 \u0631\u062c\u0633\u0679\u0631 \u06c1\u0648\u06ba \u06cc\u0627 \u0646\u06cc\u0686\u06d2 \u0627\u067e\u0646\u0627 \u0627\u0635\u0644 \u067e\u0627\u0633 \u0648\u0631\u0688 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 <code>-d<\/code> JSON.<\/p>\n<pre><code class=\"language-bash\"># Create a large transaction (triggers notification alert)\ncurl -s -X POST http:\/\/clearledger.local\/ledger\/transactions \n  -H \"Authorization: Bearer $TOKEN\" \n  -H \"Content-Type: application\/json\" \n  -d '{\"amount\":15000,\"direction\":\"debit\",\"description\":\"Property payment\"}' | jq .\n<\/code><\/pre>\n<p>\u0645\u062a\u0648\u0642\u0639: \u0679\u0631\u0627\u0646\u0632\u06cc\u06a9\u0634\u0646 \u0622\u0628\u062c\u06cc\u06a9\u0679 \u067e\u0631 \u0645\u0634\u062a\u0645\u0644 \u06c1\u06d2: <code>id<\/code>, <code>amount: 15000<\/code>, <code>direction: \"debit\"<\/code>:<\/p>\n<pre><code class=\"language-bash\"># Check balance\ncurl -s http:\/\/clearledger.local\/ledger\/balance \n  -H \"Authorization: Bearer $TOKEN\" | jq .\n<\/code><\/pre>\n<pre><code class=\"language-bash\"># Confirm the notification alert fired\ncurl -s http:\/\/clearledger.local\/notifications\/alerts | jq .\n<\/code><\/pre>\n<p>\u0645\u062a\u0648\u0642\u0639 (\u0635\u0631\u0641 \u06a9\u0631\u0644 \u0631\u0648\u0679\u060c \u06a9\u0648\u0626\u06cc \u0628\u0631\u0627\u0624\u0632\u0631 \u0688\u06cc\u0645\u0648 \u0633\u06cc\u0688 \u0646\u06c1\u06cc\u06ba): $15,000 \u0679\u0631\u0627\u0646\u0632\u06cc\u06a9\u0634\u0646 \u067e\u0631 \u06a9\u0645 \u0627\u0632 \u06a9\u0645 \u0627\u06cc\u06a9 \u0627\u0646\u062a\u0628\u0627\u06c1 \u06c1\u06d2\u06d4 \u0645\u062b\u0627\u0644 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631: <code>{\"total\":1,\"alerts\":[{\"type\":\"LARGE_TRANSACTION\",\"amount\":15000,...}]}<\/code>. \u0627\u06af\u0631 \u0622\u067e \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u06c1\u06cc \u0628\u0631\u0627\u0624\u0632\u0631 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u060c <code>total<\/code> \u0634\u0627\u06cc\u062f <strong>3 \u06cc\u0627 \u0627\u0633 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1<\/strong> (\u062f\u0648 \u0688\u06cc\u0645\u0648 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0627\u0648\u0631 \u0622\u067e \u06a9\u06cc)\u060c \u06cc\u06c1 \u0628\u06be\u06cc \u062f\u0631\u0633\u062a \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u0627\u06af\u0631 \u0622\u067e \u062f\u06cc\u06a9\u06be\u062a\u06d2 \u06c1\u06cc\u06ba<\/strong> <code>{\"detail\":\"Unauthorized\"}<\/code><strong>:<\/strong> \u0622\u067e \u06a9\u06d2 \u0679\u0648\u06a9\u0646 \u06a9\u06cc \u0645\u06cc\u0639\u0627\u062f \u062e\u062a\u0645 \u06c1\u0648 \u06af\u0626\u06cc \u06c1\u06d2\u06d4 \u0633\u06cc\u06a9\u0648\u0631\u0679\u06cc \u0648\u062c\u0648\u06c1\u0627\u062a \u06a9\u06cc \u0628\u0646\u0627 \u067e\u0631 JWT \u0645\u062e\u062a\u0635\u0631 \u0645\u062f\u062a \u06a9\u06d2 \u0644\u06cc\u06d2 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u062c\u0627\u0646 \u0628\u0648\u062c\u06be \u06a9\u0631 \u06c1\u06d2\u06d4 \u0646\u06cc\u0627 \u0679\u0648\u06a9\u0646 \u062d\u0627\u0635\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u0646\u062f\u0631\u062c\u06c1 \u0628\u0627\u0644\u0627 \u0644\u0627\u06af \u0627\u0646 \u06a9\u0645\u0627\u0646\u0688 \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0686\u0644\u0627\u0626\u06cc\u06ba \u0627\u0648\u0631 \u067e\u06be\u0631 \u0646\u0627\u06a9\u0627\u0645 \u06a9\u0645\u0627\u0646\u0688 \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0622\u0632\u0645\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<p>\u06cc\u06c1 \u0635\u0631\u0641 \u0645\u062a\u0627\u062b\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2: <code>$TOKEN<\/code> \u0645\u0648\u062c\u0648\u062f\u06c1 \u0679\u0631\u0645\u06cc\u0646\u0644 \u0633\u06cc\u0634\u0646 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u062a\u063a\u06cc\u0631\u06d4 \u0627\u06af\u0631 \u0622\u067e \u0646\u06cc\u0627 \u0679\u0631\u0645\u06cc\u0646\u0644 \u06a9\u06be\u0648\u0644\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0622\u067e \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0644\u0627\u06af \u0627\u0646 \u06a9\u0645\u0627\u0646\u0688 \u0686\u0644\u0627\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u06af\u06cc\u06d4 <code>$TOKEN<\/code> \u06cc\u06c1 \u062a\u0645\u0627\u0645 \u0633\u06cc\u0634\u0646\u0648\u06ba \u0645\u06cc\u06ba \u0628\u0631\u0642\u0631\u0627\u0631 \u0646\u06c1\u06cc\u06ba \u0631\u06c1\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\">make check-0\n<\/code><\/pre>\n<h3 id=\"heading-understanding-ingress-optional\">\u0627\u0633\u062a\u0642\u0628\u0627\u0644 \u06a9\u0648 \u0633\u0645\u062c\u06be\u06cc\u06ba (\u0627\u062e\u062a\u06cc\u0627\u0631\u06cc)<\/h3>\n<p>\u06cc\u06c1 \u0633\u0645\u062c\u06be\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u00a70.6 \u06a9\u06d2 \u0628\u0639\u062f \u067e\u0691\u06be\u06cc\u06ba\u06d4 <code>clearledger.local<\/code> \u067e\u06be\u0644\u06cc \u062a\u06a9 \u067e\u06c1\u0646\u0686\u06cc\u06ba\u06d4<\/p>\n<p>\u06a9\u0644\u0633\u0679\u0631 \u0686\u0627\u0631 \u0627\u06cc\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0633\u0631\u0648\u0633\u0632 \u0686\u0644\u0627\u062a\u0627 \u06c1\u06d2: \u0641\u0631\u0646\u0679 \u0627\u06cc\u0646\u0688\u060c \u062a\u0635\u062f\u06cc\u0642 \u06a9\u06cc \u062e\u062f\u0645\u062a\u060c \u0644\u06cc\u062c\u0631 \u0633\u0631\u0648\u0633\u060c \u0627\u0648\u0631 \u0646\u0648\u0679\u06cc\u0641\u06a9\u06cc\u0634\u0646 \u0633\u0631\u0648\u0633\u06d4 \u06c1\u0631 \u0627\u06cc\u06a9 \u0627\u0646\u062f\u0631 <strong>\u0633\u0631\u0648\u0633<\/strong> \u06a9\u0644\u0633\u0679\u0631 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u067e\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0644\u06cc\u06a9\u0646 \u0627\u0646 \u0645\u06cc\u06ba \u0633\u06d2 \u06a9\u0648\u0626\u06cc \u0628\u06be\u06cc \u0628\u0631\u0627\u0624\u0632\u0631 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0642\u0627\u0628\u0644 \u0631\u0633\u0627\u0626\u06cc \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 <strong>\u062f\u0627\u062e\u0644\u06c1<\/strong> \u0628\u06cc\u0631\u0648\u0646\u06cc \u0679\u0631\u06cc\u0641\u06a9 \u06a9\u0627 \u0631\u0627\u0633\u062a\u06c1\u06d4<\/p>\n<p>\u062f\u0627\u062e\u0644 \u06c1\u0648\u0646\u0627 \u0622\u067e \u06a9\u0627 \u0633\u0627\u0645\u0646\u06d2 \u06a9\u0627 \u062f\u0631\u0648\u0627\u0632\u06c1 \u06c1\u06d2\u06d4 \u062c\u0628 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0645\u0627\u0631\u06cc \u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4 <code>clearledger.local<\/code>Kubernetes URL \u06a9\u06d2 \u0631\u0627\u0633\u062a\u06d2 \u06a9\u0648 \u062d\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0633\u06d2 \u062f\u0631\u0633\u062a \u0633\u0631\u0648\u0633 \u067e\u0631 \u0628\u06be\u06cc\u062c \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4 \u062f\u0631\u062e\u0648\u0627\u0633\u062a <code>\/auth<\/code> \u062a\u0648\u062b\u06cc\u0642 \u06a9\u06cc \u062e\u062f\u0645\u0627\u062a \u067e\u0631 \u062c\u0627\u0626\u06cc\u06ba\u06d4 <code>\/ledger<\/code> \u0644\u06cc\u062c\u0631 \u062e\u062f\u0645\u0627\u062a \u06a9\u06d2 \u0644\u06cc\u06d2\u060c <code>\/notifications<\/code> \u0646\u0648\u0679\u06cc\u0641\u06a9\u06cc\u0634\u0646 \u0633\u0631\u0648\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2 <code>\/<\/code> \u0633\u0627\u0645\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0633\u0631\u06d2 \u067e\u0631\u06d4<\/p>\n<p>\u06a9\u06be\u0644\u0627 <code>infra\/manifests\/ingress.yaml<\/code> \u0627\u0648\u0631 \u06a9\u0645\u0646\u0679\u0633 \u067e\u0691\u06be\u06cc\u06ba\u06d4 API \u06a9\u0627 \u0631\u0627\u0633\u062a\u06c1 \u06c1\u06d2\u06d4 <strong>\u062f\u0648\u0628\u0627\u0631\u06c1 \u0644\u06a9\u06be\u0646\u0627:<\/strong> <code>\/auth\/login<\/code> \u0628\u0646 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 <code>\/login<\/code> \u062a\u0648\u062b\u06cc\u0642 \u06a9\u06cc \u062e\u062f\u0645\u062a \u062a\u06a9 \u067e\u06c1\u0646\u0686\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u067e\u0633\u062f\u06cc\u062f \u06a9\u0627 \u0631\u0627\u0633\u062a\u06c1 \u0633\u0627\u062f\u06c1 \u0631\u06a9\u06be\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0622\u067e \u0628\u0639\u062f \u0645\u06cc\u06ba \u0645\u0632\u06cc\u062f \u0645\u06cc\u0632\u0628\u0627\u0646 \u0646\u0627\u0645 \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba \u06af\u06d2 (<code>grafana.local<\/code>, <code>argocd.local<\/code>\u0648\u063a\u06cc\u0631\u06c1): \u06c1\u0631 \u0627\u06cc\u06a9 \u06a9\u0648 \u0628\u0639\u062f \u06a9\u06d2 \u0645\u0631\u0627\u062d\u0644 \u0645\u06cc\u06ba \u0627\u067e\u0646\u0627 \u0627\u0646\u06af\u0631\u06cc\u0633 \u0638\u0627\u06c1\u0631 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0641\u0627\u0626\u0644 \u0635\u0631\u0641 ClearLedger \u0627\u06cc\u067e \u06a9\u06d2 \u0644\u06cc\u06d2 \u06c1\u06d2\u06d4<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/07\/1785194531_535_Homelab-\u0633\u06d2-AWS-\u062a\u06a9-\u067e\u0631\u0648\u0688\u06a9\u0634\u0646-\u06a9\u06d2-\u0644\u06cc\u06d2-\u062a\u06cc\u0627\u0631-DevSecOps-\u067e\u0644\u06cc\u0679.png\" alt=\"\u0627\u0633\u062a\u0642\u0628\u0627\u0644\u06cc\u06c1 \u0627\u0648\u0631 \u06cc\u06c1 \u06a9\u06cc\u0633\u06d2 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u06a9\u06cc \u0648\u0636\u0627\u062d\u062a \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u0627 \u0641\u0644\u0648 \u0686\u0627\u0631\u0679\u06d4\" style=\"display:block;margin:0 auto\" width=\"1677\" height=\"938\" loading=\"lazy\" title=\"\"><\/p>\n<h3 id=\"heading-understanding-rbac-optional\">RBAC \u06a9\u0648 \u0633\u0645\u062c\u06be\u06cc\u06ba (\u0627\u062e\u062a\u06cc\u0627\u0631\u06cc)<\/h3>\n<p>\u0627\u0646\u062f\u0631\u0627\u062c \u06a9\u0644\u0633\u0679\u0631 \u06a9\u06d2 \u0628\u0627\u06c1\u0631 \u0633\u06d2 \u0622\u0646\u06d2 \u0648\u0627\u0644\u06cc \u0679\u0631\u06cc\u0641\u06a9 \u06a9\u0648 \u06a9\u0646\u0679\u0631\u0648\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 RBAC \u06a9\u0644\u0633\u0679\u0631 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0627\u062c\u0627\u0632\u062a\u0648\u06ba \u06a9\u0648 \u06a9\u0646\u0679\u0631\u0648\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06cc\u06c1 \u0641\u0627\u0626\u0644 \u0627\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2 IDs \u0627\u0648\u0631 \u0627\u062c\u0627\u0632\u062a\u06cc\u06ba \u0628\u0646\u0627\u062a\u06cc \u06c1\u06d2: <code>clearledger<\/code> \u0646\u0627\u0645 \u06a9\u06cc \u062c\u06af\u06c1\u06d4<\/p>\n<p>\u06a9\u06be\u0644\u0627 <code>infra\/manifests\/rbac\/rbac.yaml<\/code>. \u0627\u0648\u067e\u0631 \u06a9\u06cc \u062a\u0641\u0635\u06cc\u0644 \u0627\u0633 \u0645\u0634\u0642 \u06a9\u06cc \u0639\u06a9\u0627\u0633\u06cc \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u06a9\u0648\u0626\u06cc \u0631\u0627\u0633\u062a\u06c1 \u0646\u06c1\u06cc\u06ba <strong>\u0633\u0631\u0648\u0633 \u0627\u06a9\u0627\u0624\u0646\u0679<\/strong> \u067e\u0648\u0688 \u06a9\u06cc \u0634\u0646\u0627\u062e\u062a\u06d4 \u0645\u062b\u0627\u0644 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631\u060c <code>auth-service<\/code>, <code>ledger-service<\/code>\u0627\u0648\u0631 <code>notification-service<\/code> \u06c1\u0631 \u0634\u062e\u0635 \u06a9\u0648 \u0627\u067e\u0646\u06cc \u0634\u0646\u0627\u062e\u062a \u0645\u0644\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u06a9\u0648\u0626\u06cc \u0631\u0627\u0633\u062a\u06c1 \u0646\u06c1\u06cc\u06ba <strong>\u06a9\u0631\u062f\u0627\u0631<\/strong> \u0627\u0633 \u0633\u06d2 \u0645\u0631\u0627\u062f \u06c1\u06d2 \u06a9\u06c1 \u0622\u067e \u0627\u0633 \u0634\u0646\u0627\u062e\u062a \u06a9\u06d2 \u0633\u0627\u062a\u06be \u06a9\u06cc\u0627 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0631\u06cc\u067e\u0648\u0632\u0679\u0631\u06cc \u0645\u06cc\u06ba \u0627\u06cc\u067e \u06a9\u0627 \u06a9\u0631\u062f\u0627\u0631 \u0628\u06c1\u062a \u0645\u062d\u062f\u0648\u062f \u06c1\u06d2\u06d4 <code>get<\/code> \u0627\u0648\u0631 <code>list<\/code> Kubernetes \u0627\u062e\u062a\u062a\u0627\u0645\u06cc \u0646\u0642\u0637\u06c1\u06d4 \u0622\u067e \u0631\u0627\u0632 \u0646\u06c1\u06cc\u06ba \u067e\u0691\u06be \u0633\u06a9\u062a\u06d2\u060c \u067e\u0648\u0688\u0632 \u06a9\u0648 \u062d\u0630\u0641 \u0646\u06c1\u06cc\u06ba \u06a9\u0631 \u0633\u06a9\u062a\u06d2\u060c \u0648\u0633\u0627\u0626\u0644 \u0646\u06c1\u06cc\u06ba \u0628\u0646\u0627 \u0633\u06a9\u062a\u06d2\u060c \u06cc\u0627 \u062f\u06cc\u06af\u0631 \u0646\u0627\u0645 \u06a9\u06cc \u062c\u06af\u06c1\u0648\u06ba \u062a\u06a9 \u0631\u0633\u0627\u0626\u06cc \u062d\u0627\u0635\u0644 \u0646\u06c1\u06cc\u06ba \u06a9\u0631 \u0633\u06a9\u062a\u06d2\u06d4<\/p>\n<p>\u06a9\u0648\u0626\u06cc \u0631\u0627\u0633\u062a\u06c1 \u0646\u06c1\u06cc\u06ba <strong>\u0631\u0648\u0644 \u0628\u0627\u0626\u0646\u0688\u0646\u06af<\/strong> \u0634\u0646\u0627\u062e\u062a \u06a9\u0648 \u0627\u062c\u0627\u0632\u062a\u0648\u06ba \u0633\u06d2 \u062c\u0648\u0691\u06cc\u06ba\u06d4 \u0631\u0648\u0644 \u0628\u0627\u0626\u0646\u0688\u0646\u06af \u06a9\u06d2 \u0628\u063a\u06cc\u0631\u060c \u0631\u0648\u0644 \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2 \u0644\u06cc\u06a9\u0646 \u06a9\u0633\u06cc \u067e\u0648\u0688 \u06a9\u0648 \u0627\u0633 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u0646\u06c1\u06cc\u06ba \u0645\u0644\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u06a9\u06c1 <code>clearledger-viewer<\/code> \u0633\u0631\u0648\u0633 \u0627\u06a9\u0627\u0624\u0646\u0679 \u0635\u0631\u0641 \u067e\u0691\u06be\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0688\u06cc\u0628\u06af\u0646\u06af \u06a9\u06d2 \u0644\u06cc\u06d2 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u067e\u0648\u0688\u0632\u060c \u0633\u0631\u0648\u0633\u0632\u060c \u0627\u06cc\u0646\u0688 \u067e\u0648\u0627\u0626\u0646\u0679\u0633\u060c \u0627\u06cc\u0648\u0646\u0679\u0633\u060c \u0627\u0648\u0631 \u06a9\u0646\u0641\u06cc\u06af \u0645\u06cc\u067e\u0633 \u06a9\u0627 \u0645\u0639\u0627\u0626\u0646\u06c1 \u06a9\u0631 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u0631\u0627\u0632 \u0646\u06c1\u06cc\u06ba \u067e\u0691\u06be \u0633\u06a9\u062a\u0627\u06d4<\/p>\n<p>\u0688\u06cc\u0641\u0627\u0644\u0679 \u0633\u0631\u0648\u0633 \u0627\u06a9\u0627\u0624\u0646\u0679 \u063a\u06cc\u0631 \u0645\u0631\u0627\u0639\u0627\u062a \u06cc\u0627\u0641\u062a\u06c1 \u06a9\u0631\u062f\u0627\u0631 \u06a9\u0627 \u067e\u0627\u0628\u0646\u062f \u06c1\u06d2\u06d4 \u0627\u0633 \u0637\u0631\u062d\u060c \u0627\u06af\u0631 \u067e\u06be\u0644\u06cc \u0633\u06cc\u0679 \u06a9\u0631\u0646\u0627 \u0628\u06be\u0648\u0644 \u062c\u0627\u0626\u06d2\u06d4 <code>serviceAccountName<\/code>\u06cc\u06c1 \u0627\u06cc\u06a9 \u0627\u06cc\u0633\u06cc \u0634\u0646\u0627\u062e\u062a \u06a9\u06cc \u0637\u0631\u0641 \u0644\u0648\u0679\u062a\u0627 \u06c1\u06d2 \u062c\u0633 \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u0622\u067e \u06a9\u0686\u06be \u0646\u06c1\u06cc\u06ba \u06a9\u0631 \u0633\u06a9\u062a\u06d2\u06d4<\/p>\n<p>\u0646\u0642\u0637\u06c1 \u06a9\u0645 \u0627\u0632 \u06a9\u0645 \u0627\u0633\u062a\u062d\u0642\u0627\u0642 \u06c1\u06d2\u06d4 \u06cc\u06c1\u0627\u06ba \u062a\u06a9 \u06a9\u06c1 \u0627\u06af\u0631 \u06a9\u0633\u06cc \u067e\u0648\u0688 \u0633\u06d2 \u0633\u0645\u062c\u06be\u0648\u062a\u06c1 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 Kubernetes \u0648\u0633\u06cc\u0639 \u06a9\u0644\u0633\u0679\u0631 \u0631\u0633\u0627\u0626\u06cc \u0641\u0631\u0627\u06c1\u0645 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-07-why-manual-deploys-cant-be-trusted\">0.7: \u0622\u067e \u062f\u0633\u062a\u06cc \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u067e\u0631 \u06a9\u06cc\u0648\u06ba \u0627\u0639\u062a\u0645\u0627\u062f \u0646\u06c1\u06cc\u06ba \u06a9\u0631 \u0633\u06a9\u062a\u06d2<\/h3>\n<p>\u0641\u06cc\u0632 0 \u0645\u06cc\u06ba\u060c \u0622\u067e \u0646\u06d2 \u0627\u06cc\u067e \u06a9\u0648 \u062e\u0648\u062f \u0628\u0646\u0627\u06cc\u0627 \u0627\u0648\u0631 \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u06cc\u0627\u06d4 \u0627\u0628 \u0622\u0626\u06cc\u06d2 \u06a9\u0648\u0688 \u06a9\u06d2 \u0627\u06cc\u06a9 \u0686\u06be\u0648\u0679\u06d2 \u0633\u06d2 \u0679\u06a9\u0691\u06d2 \u06a9\u0648 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u062f\u0648\u0628\u0627\u0631\u06c1 \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631\u06cc\u06ba\u06d4 \u06cc\u06c1 \u062f\u0633\u062a\u06cc \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0645\u0633\u0626\u0644\u06c1 \u06a9\u0648 \u0638\u0627\u06c1\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0679\u0631\u06cc\u06a9 \u06a9\u0631\u0646\u0627 \u0645\u0634\u06a9\u0644\u060c \u067e\u06cc\u0686\u06be\u06d2 \u06c1\u0679\u0646\u0627 \u0645\u0634\u06a9\u0644\u060c \u062b\u0627\u0628\u062a \u06a9\u0631\u0646\u0627 \u0645\u0634\u06a9\u0644\u06d4 \u0641\u06cc\u0632 1 \u0627\u0648\u0631 2 CI \u0627\u0648\u0631 GitOps \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0627\u0633 \u0645\u0633\u0626\u0644\u06d2 \u06a9\u0648 \u062d\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-step-1-make-a-visible-change\">\u0645\u0631\u062d\u0644\u06c1 1: \u0642\u0627\u0628\u0644 \u062a\u0648\u062c\u06c1 \u062a\u0628\u062f\u06cc\u0644\u06cc\u0627\u06ba \u06a9\u0631\u06cc\u06ba\u06d4<\/h4>\n<p>\u06a9\u06be\u0644\u0627 <code>app\/auth-service\/main.py<\/code> \u0627\u0648\u0631 \u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba <code>\/health<\/code> \u0627\u062e\u062a\u062a\u0627\u0645\u06cc \u0646\u0642\u0637\u06c1 \u0622\u067e \u06a9\u0648 \u06cc\u06c1 \u0628\u062a\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0648\u0627\u067e\u0633\u06cc \u06a9\u06cc \u0642\u062f\u0631 \u06a9\u0648 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u0646\u06cc\u0627 \u0648\u0631\u0698\u0646 \u0686\u0644 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-python\"># Before\nreturn {\"status\": \"ok\", \"service\": settings.service_name}\n\n# After \u2014 add a version field\nreturn {\"status\": \"ok\", \"service\": settings.service_name, \"version\": \"0.2.0\"}\n<\/code><\/pre>\n<p>\u0641\u0627\u0626\u0644 \u06a9\u0648 \u0645\u062d\u0641\u0648\u0638 \u06a9\u0631\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0686\u06be\u0648\u0679\u06d2 \u0627\u0635\u0644\u0627\u062d\u0627\u062a \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0627\u06cc\u06a9 \u0688\u0648\u06cc\u0644\u067e\u0631 \u06a9\u06cc \u0646\u0642\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-step-2-build-push-and-deploy-by-hand\">\u0645\u0631\u062d\u0644\u06c1 2: \u062f\u0633\u062a\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0628\u0646\u0627\u0626\u06cc\u06ba\u060c \u062f\u06be\u06a9\u06cc\u0644\u06cc\u06ba \u0627\u0648\u0631 \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631\u06cc\u06ba\u06d4<\/h4>\n<pre><code class=\"language-bash\">docker build -t $DOCKER_USERNAME\/clearledger-auth-service:v0.2.0 .\/app\/auth-service\n\ndocker push $DOCKER_USERNAME\/clearledger-auth-service:v0.2.0\nkubectl set image deployment\/auth-service \n  auth-service=$DOCKER_USERNAME\/clearledger-auth-service:v0.2.0 \n  -n clearledger\n<\/code><\/pre>\n<p>\u0646\u0626\u06cc \u062a\u0635\u0648\u06cc\u0631 \u06a9\u06be\u06cc\u0646\u0686\u0646\u06d2 \u0627\u0648\u0631 Pod \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0634\u0631\u0648\u0639 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 Kubernetes \u06a9\u06d2 \u0644\u06cc\u06d2 \u062a\u0642\u0631\u06cc\u0628\u0627\u064b 30 \u0633\u06cc\u06a9\u0646\u0688 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">kubectl rollout status deployment\/auth-service -n clearledger\n<\/code><\/pre>\n<h4 id=\"heading-step-3-verify-your-change-is-live\">\u0645\u0631\u062d\u0644\u06c1 3: \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u0622\u067e \u06a9\u06cc \u062a\u0628\u062f\u06cc\u0644\u06cc\u0627\u06ba \u0644\u0627\u06af\u0648 \u06c1\u0648 \u06af\u0626\u06cc \u06c1\u06cc\u06ba\u06d4<\/h4>\n<pre><code class=\"language-bash\">curl -s http:\/\/clearledger.local\/auth\/health | jq .\n<\/code><\/pre>\n<p>\u0645\u062a\u0648\u0642\u0639: <code>{\"status\":\"ok\",\"service\":\"auth-service\",\"version\":\"0.2.0\"}<\/code><\/p>\n<p>\u0627\u06af\u0631 \u0622\u067e \u0627\u0628 \u0628\u06be\u06cc \u067e\u0631\u0627\u0646\u0627 \u062c\u0648\u0627\u0628 \u062f\u06cc\u06a9\u06be\u06cc\u06ba <code>\"version\"<\/code>\u0628\u0631\u0627\u06c1 \u06a9\u0631\u0645 \u06a9\u0686\u06be \u0627\u0648\u0631 \u0633\u06cc\u06a9\u0646\u0688 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u062f\u0648\u0628\u0627\u0631\u06c1 \u06a9\u0648\u0634\u0634 \u06a9\u0631\u06cc\u06ba\u06d4 Kubernetes \u0627\u0628 \u0628\u06be\u06cc \u0646\u0626\u06d2 pods \u062c\u0627\u0631\u06cc \u06a9\u0631 \u0631\u06c1\u0627 \u06c1\u06d2.<\/p>\n<h4 id=\"heading-step-4-notice-what-manual-deploy-doesnt-give-you\">\u0645\u0631\u062d\u0644\u06c1 4: \u0627\u0633 \u0628\u0627\u062a \u06a9\u0627 \u062a\u0639\u06cc\u0646 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u06a9\u0648\u0646 \u0633\u06cc \u062f\u0633\u062a\u06cc \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u067e\u06cc\u0634 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4<\/h4>\n<p>\u0622\u067e \u0646\u06d2 \u0627\u067e\u0646\u06cc \u062a\u0628\u062f\u06cc\u0644\u06cc\u0627\u06ba \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631 \u062f\u06cc \u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0644\u06cc\u06a9\u0646 \u0633\u0648\u0686\u0648 \u06a9\u06c1 \u0627\u0628\u06be\u06cc \u06a9\u06cc\u0627 \u06c1\u0648\u0627 \u06c1\u06d2\u06d4<\/p>\n<ul>\n<li>\n<p><strong>\u06cc\u06c1 \u06a9\u0633 \u0646\u06d2 \u062a\u0642\u0633\u06cc\u0645 \u06a9\u06cc\u0627\u061f<\/strong> \u06a9\u0648\u0626\u06cc \u0631\u06cc\u06a9\u0627\u0631\u0688 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u062a\u0645 \u0628\u06be\u0627\u06af \u06af\u0626\u06d2 <code>kubectl<\/code> \u0627\u067e\u0646\u06d2 \u0644\u06cc\u067e \u0679\u0627\u067e \u067e\u0631\u06d4 \u0627\u06af\u0631 \u062a\u06cc\u0646 \u0644\u0648\u06af\u0648\u06ba \u06a9\u0648 \u06a9\u0644\u0633\u0679\u0631 \u062a\u06a9 \u0631\u0633\u0627\u0626\u06cc \u062d\u0627\u0635\u0644 \u06c1\u06d2\u060c \u062a\u0648 \u06a9\u0648\u0626\u06cc \u0646\u06c1\u06cc\u06ba \u062c\u0627\u0646 \u0633\u06a9\u06d2 \u06af\u0627 \u06a9\u06c1 \u06a9\u0633 \u0646\u06d2 \u06a9\u06cc\u0627 \u0628\u062f\u0644\u0627\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u06a9\u06cc\u0627 \u0628\u062f\u0644\u0627 \u06c1\u06d2\u061f<\/strong> \u0648\u0627\u062d\u062f \u062b\u0628\u0648\u062a \u0688\u0648\u06a9\u0631 \u06c1\u0628 \u0679\u06cc\u06af \u06c1\u06d2\u06d4 <code>v0.2.0<\/code>. \u0627\u0633 \u0679\u06cc\u06af \u06a9\u0648 \u06a9\u0633\u06cc \u0645\u062e\u0635\u0648\u0635 \u06a9\u0645\u0679 \u06cc\u0627 \u06a9\u0648\u0688 \u06a9\u06d2 \u062c\u0627\u0626\u0632\u06d2 \u0633\u06d2 \u062c\u0648\u0691\u0646\u06d2 \u0648\u0627\u0644\u06cc \u06a9\u0648\u0626\u06cc \u0686\u06cc\u0632 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0627\u06af\u0631<\/strong> <code>v0.2.0<\/code> <strong>\u06a9\u06cc\u0627 \u06cc\u06c1 \u0679\u0648\u0679 \u06af\u06cc\u0627 \u06c1\u06d2\u061f<\/strong> \u0622\u067e \u06a9\u0648 \u067e\u0686\u06be\u0644\u0627 \u0679\u06cc\u06af \u06cc\u0627\u062f \u0631\u06a9\u06be\u0646\u06d2 \u0627\u0648\u0631 \u067e\u06be\u0631 \u0627\u0633 \u067e\u0631 \u0639\u0645\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4 <code>kubectl set image<\/code> \u062f\u0648\u0628\u0627\u0631\u06c1 \u0631\u0648\u0644 \u0628\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u0622\u067e \u06a9\u0648 \u0679\u06cc\u06af \u06cc\u0627\u062f \u0646\u06c1\u06cc\u06ba \u06c1\u06d2 \u062a\u0648 \u06a9\u06cc\u0627 \u06c1\u0648\u06af\u0627\u061f \u0627\u06af\u0631 \u0645\u06cc\u0631\u06cc \u067e\u0631\u0627\u0646\u06cc \u062a\u0635\u0648\u06cc\u0631 \u06a9\u0648 \u062d\u0630\u0641 \u06a9\u0631 \u062f\u06cc\u0627 \u062c\u0627\u0626\u06d2 \u062a\u0648 \u06a9\u06cc\u0627 \u06c1\u0648\u06af\u0627\u061f<\/p>\n<\/li>\n<li>\n<p><strong>\u0627\u06af\u0631 \u06a9\u0648\u0626\u06cc \u0627\u0648\u0631 \u0628\u06be\u0627\u06af\u06d2 \u062a\u0648 \u06a9\u06cc\u0627 \u06c1\u0648\u06af\u0627\u061f<\/strong> <code>kubectl apply<\/code> <strong>\u06a9\u06d2 \u0633\u0627\u062a\u06be<\/strong> <code>v0.1.0<\/code> <strong>\u062c\u0628 \u0622\u067e \u0632\u0648\u0631 \u062f\u06d2 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba\u06d4<\/strong> <code>v0.2.0<\/code><strong>?<\/strong> \u0622\u067e \u06a9\u0627 \u06a9\u0644\u0633\u0679\u0631 \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u067e\u0686\u06be\u0644\u06d2 \u0648\u0631\u0698\u0646 \u067e\u0631 \u0648\u0627\u067e\u0633 \u0622\u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4 \u06a9\u0648\u0626\u06cc \u063a\u0644\u0637\u06cc\u0627\u06ba \u0646\u06c1\u06cc\u06ba \u06c1\u06cc\u06ba\u06d4 \u06a9\u0648\u0626\u06cc \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06cc\u06ba\u06d4 \u0645\u06cc\u06ba \u0646\u06d2 \u0633\u0648\u0686\u0627 \u06a9\u06c1 \u0641\u06a9\u0633 \u0644\u0627\u06af\u0648 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u062a\u06be\u0627\u060c \u0644\u06cc\u06a9\u0646 \u06cc\u06c1 \u0646\u06c1\u06cc\u06ba \u062a\u06be\u0627.<\/p>\n<\/li>\n<li>\n<p><strong>\u0622\u0688\u0679 \u0679\u0631\u06cc\u0644 \u06a9\u06c1\u0627\u06ba \u06c1\u06d2\u061f<\/strong> \u06cc\u06c1 \u06a9\u06c1\u06cc\u06ba \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0631\u06cc\u06af\u0648\u0644\u06cc\u0679\u0688 \u0645\u0627\u062d\u0648\u0644 (\u0628\u06cc\u0646\u06a9\u0646\u06af\u060c \u06c1\u06cc\u0644\u062a\u06be \u06a9\u06cc\u0626\u0631\u060c \u06af\u0648\u0631\u0646\u0645\u0646\u0679) \u06a9\u0648 \u0627\u0633 \u0628\u0627\u062a \u06a9\u0627 \u062b\u0628\u0648\u062a \u062f\u0631\u06a9\u0627\u0631 \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u06a9\u0633 \u0646\u06d2 \u06a9\u06cc\u0627 \u0627\u0648\u0631 \u06a9\u0628 \u062a\u0642\u0633\u06cc\u0645 \u06a9\u06cc\u0627\u06d4 \u0627\u0628 \u06a9\u0686\u06be \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<\/ul>\n<p>\u0688\u06cc\u0645\u0648 \u0645\u06cc\u06ba \u062f\u0633\u062a\u06cc \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u0645\u0645\u06a9\u0646 \u06c1\u06d2\u06d4 \u062a\u0627\u06c1\u0645\u060c \u0648\u06c1 \u0679\u06cc\u0645\u0648\u06ba \u06cc\u0627 \u0631\u06cc\u06af\u0648\u0644\u06cc\u0679\u0688 \u0645\u0627\u062d\u0648\u0644 \u06a9\u0648 \u0628\u0631\u062f\u0627\u0634\u062a \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u0646 \u062e\u0644\u0627 \u06a9\u0648 \u0630\u06c1\u0646 \u0645\u06cc\u06ba \u0631\u06a9\u06be\u06cc\u06ba\u06d4 \u0627\u0633 \u0644\u06cc\u06d2 \u0627\u06af\u0644\u0627 \u0645\u0631\u062d\u0644\u06c1 \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-step-5-revert-your-change-before-continuing\">\u0645\u0631\u062d\u0644\u06c1 5: \u062c\u0627\u0631\u06cc \u0631\u06a9\u06be\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0627\u067e\u0646\u06cc \u062a\u0628\u062f\u06cc\u0644\u06cc\u0627\u06ba \u0648\u0627\u067e\u0633 \u06a9\u0631\u06cc\u06ba\u06d4<\/h4>\n<p>\u0627\u0633\u0679\u06cc\u0679 \u0627\u06cc\u0646\u0688 \u067e\u0648\u0627\u0626\u0646\u0679 \u06a9\u06cc \u062a\u0628\u062f\u06cc\u0644\u06cc\u0648\u06ba \u06a9\u0648 \u06a9\u0627\u0644\u0639\u062f\u0645 \u06a9\u0631\u06cc\u06ba\u06d4 <code>app\/auth-service\/main.py<\/code> (\u06c1\u0679\u0627\u0626\u06cc\u06ba <code>\"version\": \"0.2.0\"<\/code>)\u06d4 \u062f\u0648\u0628\u0627\u0631\u06c1 \u062a\u0639\u0645\u06cc\u0631 \u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4 \u06a9\u0644\u0633\u0679\u0631 \u0686\u0644\u062a\u0627 \u0631\u06c1\u06d2 \u06af\u0627\u06d4 <code>v0.2.0<\/code> \u0627\u0628\u060c \u0645\u06cc\u06ba \u0641\u06cc\u0632 1 \u0645\u06cc\u06ba \u0627\u0645\u06cc\u062c \u0645\u06cc\u0646\u062c\u0645\u0646\u0679 \u06a9\u0627 \u0627\u0646\u0686\u0627\u0631\u062c \u06c1\u0648\u06ba\u06d4<\/p>\n<p>\u0645\u0631\u062d\u0644\u06c1 1 \u062a\u0639\u0645\u06cc\u0631 \u06a9\u0648 \u062e\u0648\u062f\u06a9\u0627\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0645\u0631\u062d\u0644\u06c1 2 \u0645\u06cc\u06ba\u060c \u0622\u067e \u0627\u067e\u0646\u06cc \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u0645\u06cc\u06ba \u062a\u0631\u0645\u06cc\u0645 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-what-you-learned-in-stage-0\">\u06c1\u0645 \u0646\u06d2 \u0645\u0631\u062d\u0644\u06c1 0 \u0645\u06cc\u06ba \u06a9\u06cc\u0627 \u0633\u06cc\u06a9\u06be\u0627\u06d4<\/h3>\n<ul>\n<li>\n<p>\u0645\u0644\u0679\u06cc \u067e\u0627\u0633 \u0627\u0648\u0631 \u0645\u0627\u0626\u06cc\u06a9\u0631\u0648 \u06a9\u06d2 8 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0645\u0642\u0627\u0645\u06cc \u06a9\u0628\u0631\u0646\u06cc\u0679\u0633 \u06a9\u0644\u0633\u0679\u0631 \u06a9\u06cc \u0641\u0631\u0627\u06c1\u0645\u06cc \u06a9\u06cc\u0633\u06d2 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u06a9\u0633 \u0637\u0631\u062d \u0627\u06cc\u06a9 Kubernetes \u0645\u06cc\u0646\u06cc \u0641\u06cc\u0633\u0679 \u0645\u0637\u0644\u0648\u0628\u06c1 \u0646\u0638\u0627\u0645 \u06a9\u06cc \u062d\u0627\u0644\u062a \u06a9\u0648 \u0628\u06cc\u0627\u0646 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u062f\u0627\u062e\u0644\u06cc \u062e\u062f\u0645\u0627\u062a \u06a9\u06cc \u0637\u0631\u0641 \u0628\u06cc\u0631\u0648\u0646\u06cc \u0679\u0631\u06cc\u0641\u06a9 \u06a9\u0648 \u06a9\u06cc\u0633\u06d2 \u062f\u0627\u062e\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u06a9\u0646\u0679\u06cc\u0646\u0631 \u06a9\u06cc \u062a\u0635\u0627\u0648\u06cc\u0631 \u06a9\u0648 \u062f\u0633\u062a\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0628\u0646\u0627\u0646\u06d2\u060c \u062f\u06be\u06a9\u06cc\u0644\u0646\u06d2 \u0627\u0648\u0631 \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0637\u0631\u06cc\u0642\u06c1<\/p>\n<\/li>\n<li>\n<p><strong>\u0622\u067e \u062f\u0633\u062a\u06cc \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u067e\u0631 \u0627\u0639\u062a\u0645\u0627\u062f \u06a9\u06cc\u0648\u06ba \u0646\u06c1\u06cc\u06ba \u06a9\u0631 \u0633\u06a9\u062a\u06d2<\/strong>: \u06a9\u0648\u0626\u06cc \u0622\u0688\u0679 \u0679\u0631\u06cc\u0644 \u0646\u06c1\u06cc\u06ba\u060c \u06a9\u0648\u0626\u06cc \u0631\u0648\u0644 \u0628\u06cc\u06a9 \u0646\u06c1\u06cc\u06ba\u060c \u06a9\u0648\u0626\u06cc \u0645\u0633\u062a\u0642\u0644 \u0645\u0632\u0627\u062c\u06cc \u0646\u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u0627\u0628 \u0622\u067e \u0627\u067e\u0646\u06d2 \u062a\u062c\u0631\u0628\u06d2 \u06a9\u06cc \u0641\u06c1\u0631\u0633\u062a \u0645\u06cc\u06ba \u06a9\u06cc\u0627 \u0688\u0627\u0644 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\/\u0627\u06cc\u06a9 \u0627\u0646\u0679\u0631\u0648\u06cc\u0648 \u0645\u06cc\u06ba \u06a9\u06c1\u06c1 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba:<\/strong><\/p>\n<blockquote>\n<p>\u0622\u067e \u0645\u0644\u0679\u06cc \u0633\u0631\u0648\u0633 \u0627\u06cc\u067e\u0644\u06cc \u06a9\u06cc\u0634\u0646\u0632 \u0628\u0634\u0645\u0648\u0644 \u0646\u06cc\u0645 \u0627\u0633\u067e\u06cc\u0633\u0632\u060c RBAC\u060c StatefulSet \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633\u060c \u0688\u0633\u0679\u0631\u06cc \u0628\u06cc\u0648\u0634\u0646\u0632\u060c \u0633\u0631\u0648\u0633\u0632\u060c \u0627\u0648\u0631 \u067e\u0627\u062a\u06be \u067e\u0631 \u0645\u0628\u0646\u06cc \u0627\u0646\u06af\u0631\u06cc\u0633 \u0631\u0648\u0679\u0646\u06af \u06a9\u0648 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a Kubernetes \u067e\u0631 \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0648\u0636\u0627\u062d\u062a \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u06a9\u06c1 \u06c1\u0631 \u067e\u0631\u062a \u06a9\u0648 \u0627\u0633 \u062a\u0631\u062a\u06cc\u0628 \u0645\u06cc\u06ba \u06a9\u06cc\u0648\u06ba \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/blockquote>\n<p><code>make snapshot STAGE=0 && make snapshots<\/code>. \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba <code>clearledger.stage0<\/code>. \u062f\u06cc\u06a9\u06be\u06cc\u06ba \u06a9\u06c1 \u0627\u067e\u0646\u06cc \u062a\u0631\u0642\u06cc \u06a9\u0648 \u06a9\u06cc\u0633\u06d2 \u0628\u0686\u0627\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4<\/p>\n<h2 id=\"heading-stage-1-ci-pipeline-github-actions-self-hosted-runner\">\u0645\u0631\u062d\u0644\u06c1 1 \u2014 CI \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 (GitHub \u0627\u06cc\u06a9\u0634\u0646\u0632 + \u062e\u0648\u062f \u0645\u06cc\u0632\u0628\u0627\u0646\u06cc \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u0627)<\/h2>\n<p>\u0645\u0631\u062d\u0644\u06c1 0 \u0645\u06cc\u06ba\u060c \u06c1\u0645 \u0646\u06d2 \u0627\u0633\u06d2 \u062e\u0648\u062f \u0628\u0646\u0627\u06cc\u0627 \u0627\u0648\u0631 \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u06cc\u0627\u06d4 \u0645\u0631\u062d\u0644\u06c1 1 \u062a\u0639\u0645\u06cc\u0631 \u06a9\u0648 \u062e\u0648\u062f\u06a9\u0627\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <code>git push<\/code> \u0627\u06cc\u06a9 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u0686\u0644\u0627\u0626\u06cc\u06ba \u062c\u0648 \u0627\u0645\u06cc\u062c \u0628\u0646\u0627\u062a\u06cc \u06c1\u06d2\u060c \u0627\u0633\u06d2 \u0627\u0633\u06a9\u06cc\u0646 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u060c \u0627\u0633\u06d2 Docker Hub \u0645\u06cc\u06ba \u062f\u06be\u06a9\u06cc\u0644\u062a\u06cc \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0646\u0626\u06d2 \u0679\u06cc\u06af\u0632 \u0631\u06cc\u06a9\u0627\u0631\u0688 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 <code>clearledger-infra<\/code>.<\/p>\n<p><strong>\u06c1\u062f\u0641:<\/strong> \u06c1\u0631 \u0628\u0627\u0631 \u062c\u0628 \u0622\u067e GitHub \u06a9\u06cc \u0637\u0631\u0641 \u062f\u06be\u06a9\u06cc\u0644\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u06cc\u06a9 \u062a\u0635\u0648\u06cc\u0631 \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u0628\u0646 \u062c\u0627\u062a\u06cc \u06c1\u06d2 \u0627\u0648\u0631 Docker Hub \u06a9\u06cc \u0637\u0631\u0641 \u062f\u06be\u06a9\u06cc\u0644 \u062c\u0627\u062a\u06cc \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0627\u0645\u06cc\u062c \u0679\u06cc\u06af \u06a9\u0648 \u0627\u067e \u0688\u06cc\u0679 \u06a9\u0631 \u062f\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 <code>clearledger-infra<\/code>.<\/p>\n<p><strong>\u06a9\u06cc\u0627 \u0645\u06cc\u06ba \u0645\u0631\u062d\u0644\u06c1 1 \u0644\u06cc\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062a\u06cc\u0627\u0631 \u06c1\u0648\u06ba\u061f<\/strong><\/p>\n<p>\u06cc\u06c1 \u0686\u0644\u0627\u0626\u06cc\u06ba <strong>\u0627\u067e\u0646\u06d2 \u0622\u067e \u06a9\u0648<\/strong> \u00a71.1 \u0633\u06d2 \u067e\u06c1\u0644\u06d2:<\/p>\n<pre><code class=\"language-plaintext\">make check-0\necho \"$DOCKER_USERNAME\"    # must not be empty or \"your-username\"\ncurl -s -o \/dev\/null -w \"%{http_code}\" http:\/\/clearledger.local\/auth\/health\n<\/code><\/pre>\n<p>\u0645\u062a\u0648\u0642\u0639: \u0635\u062d\u062a \u06a9\u06cc \u062c\u0627\u0646\u0686 \u0633\u0628\u0632\u061b <code>echo<\/code> Docker Hub \u0635\u0627\u0631\u0641 \u06a9\u0648 \u067e\u0631\u0646\u0679 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u067e\u0631\u0646\u0679 \u06a9\u0648 \u062e\u062a\u0645 \u06a9\u0631\u06cc\u06ba\u06d4 <code>200<\/code>.<\/p>\n<p>\u0627\u0633 \u0633\u06cc\u06a9\u0634\u0646 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0622\u067e \u06a9\u0648 \u06a9\u06cc\u0627 \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2:<\/p>\n<ul>\n<li>\n<p>\u0627\u06cc\u06a9 Docker Hub \u0627\u06a9\u0627\u0624\u0646\u0679 \u062c\u0633 \u0645\u06cc\u06ba \u0686\u0627\u0631 Clearledger repositories \u06c1\u06cc\u06ba (\u062f\u06cc\u06a9\u06be\u06cc\u06ba QuickSTART.md \u00a71b)<\/p>\n<\/li>\n<li>\n<p>GitHub \u0627\u06a9\u0627\u0624\u0646\u0679: \u0622\u067e \u06a9\u0648 \u0627\u06cc\u06a9 \u0630\u062e\u06cc\u0631\u06c1 \u0627\u0648\u0631 \u0630\u0627\u062a\u06cc \u0631\u0633\u0627\u0626\u06cc \u0679\u0648\u06a9\u0646 \u0628\u0646\u0627\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u067e\u06c1\u0644\u06cc \u06af\u0631\u06cc\u0646 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0631\u0646\u0631 \u06a9\u06cc \u062a\u0646\u0635\u06cc\u0628 + ~ 2-4 \u06af\u06be\u0646\u0679\u06d2 (\u0627\u0628\u062a\u062f\u0627\u0626\u06cc \u0627\u0641\u0631\u0627\u062f \u06a9\u06d2 \u0644\u06cc\u06d2 \u0633\u0628 \u0633\u06d2 \u0645\u0634\u06a9\u0644 \u0645\u0631\u062d\u0644\u06c1)<\/p>\n<\/li>\n<li>\n<p>\u0645\u06a9\u0645\u0644 \u06c1\u0648\u0646\u06d2 \u067e\u0631: \u0686\u06cc\u06a9 1 \u067e\u0627\u0633 \u06a9\u06cc\u0627 \u0627\u0648\u0631 \u0646\u06cc\u0686\u06d2 \u00a71.7 \u0645\u06cc\u06ba 5 \u0622\u0626\u0679\u0645\u0632 \u06a9\u0648 \u062f\u0633\u062a\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0686\u06cc\u06a9 \u06a9\u06cc\u0627\u06d4 \u067e\u06be\u0631 \u0645\u062d\u0641\u0648\u0638 \u06a9\u0631\u06cc\u06ba: \u0627\u0633\u0646\u06cc\u067e \u0634\u0627\u0679 \u0628\u0646\u0627\u0626\u06cc\u06ba STAGE=1 \u2192 \u0627\u0633\u0646\u06cc\u067e \u0634\u0627\u0679 \u0628\u0646\u0627\u0626\u06cc\u06ba (clearledger.stage1 \u06a9\u0648 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba)\u06d4<\/p>\n<\/li>\n<\/ul>\n<h3 id=\"heading-what-you-need-to-know-first\">\u0622\u067e \u06a9\u0648 \u067e\u06c1\u0644\u06d2 \u06a9\u06cc\u0627 \u062c\u0627\u0646\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4<\/h3>\n<p>\u0641\u06cc\u0632 0 \u0645\u06cc\u06ba\u060c \u0627\u06cc\u06a9 \u0644\u06cc\u067e \u0679\u0627\u067e \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u06a9\u0627 \u0646\u0638\u0627\u0645 \u062a\u06be\u0627\u06d4<\/p>\n<p>\u0622\u067e \u0646\u06d2 \u062f\u0627\u062e\u0644 \u06a9\u06cc\u0627 <code>docker build<\/code>, <code>docker push<\/code>\u0627\u0648\u0631 <code>kubectl set image<\/code> \u0627\u067e\u0646\u06d2 \u0622\u067e \u06a9\u0648 \u0627\u0633 \u0646\u06d2 \u0688\u06cc\u0645\u0648 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0627\u0645 \u06a9\u06cc\u0627\u060c \u0644\u06cc\u06a9\u0646 \u06cc\u06c1 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2 \u06a9\u06c1 \u0679\u06cc\u0645 \u06a9\u0633 \u0637\u0631\u062d \u0633\u0627\u0641\u0679 \u0648\u06cc\u0626\u0631 \u062c\u0627\u0631\u06cc \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u062f\u0633\u062a\u06cc \u062a\u0639\u0645\u06cc\u0631\u0627\u062a \u0628\u06c1\u062a \u0633\u0627\u0631\u06d2 \u062c\u0648\u0627\u0628 \u0637\u0644\u0628 \u0633\u0648\u0627\u0644\u0627\u062a \u067e\u06cc\u062f\u0627 \u06a9\u0631\u062a\u06cc \u06c1\u06cc\u06ba\u06d4<\/p>\n<ul>\n<li>\n<p>\u06a9\u06cc\u0627 \u06cc\u06c1 \u062a\u0635\u0648\u06cc\u0631 \u062a\u0627\u0632\u06c1 \u062a\u0631\u06cc\u0646 \u06a9\u0648\u0688 \u0633\u06d2 \u06c1\u06d2\u061f<\/p>\n<\/li>\n<li>\n<p>\u06a9\u06cc\u0627 \u06a9\u0633\u06cc \u0646\u06d2 \u0627\u0633\u06d2 \u06af\u0646\u062f\u06cc \u0648\u0631\u06a9\u0634\u0627\u067e \u06a9\u06cc \u0644\u06a9\u0691\u06cc \u0633\u06d2 \u0628\u0646\u0627\u06cc\u0627 \u06c1\u06d2\u061f<\/p>\n<\/li>\n<li>\n<p>\u06a9\u06cc\u0627 \u062a\u0639\u0645\u06cc\u0631 \u062f\u0648\u0633\u0631\u06d2 \u06a9\u0645\u067e\u06cc\u0648\u0679\u0631\u0632 \u067e\u0631 \u0628\u06be\u06cc \u0627\u0633\u06cc \u0637\u0631\u062d \u06a9\u0627\u0645 \u06a9\u0631\u062a\u06cc \u062a\u06be\u06cc\u061f<\/p>\n<\/li>\n<li>\n<p>\u0641\u06cc \u0627\u0644\u062d\u0627\u0644 \u0686\u0644 \u0631\u06c1\u06cc \u0627\u0645\u06cc\u062c \u06a9\u0648 \u06a9\u0633 \u0639\u06c1\u062f \u0646\u06d2 \u0628\u0646\u0627\u06cc\u0627\u061f<\/p>\n<\/li>\n<li>\n<p>\u062a\u0635\u0648\u06cc\u0631 \u06a9\u0648 \u06a9\u0633 \u0646\u06d2 \u0627\u0648\u0631 \u06a9\u0628 \u062f\u06be\u06a9\u06cc\u0644 \u062f\u06cc\u0627\u061f<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u0645\u0633\u0644\u0633\u0644 \u0627\u0646\u0636\u0645\u0627\u0645 (CI)<\/strong> \u0645\u0633\u0626\u0644\u06d2 \u06a9\u06d2 \u062a\u0639\u0645\u06cc\u0631\u0627\u062a\u06cc \u067e\u06c1\u0644\u0648 \u06a9\u0648 \u062f\u0631\u0633\u062a \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u062c\u0628 \u0628\u06be\u06cc \u06a9\u0648\u0688 \u06a9\u0648 \u0622\u06af\u06d2 \u0628\u0691\u06be\u0627\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u062e\u0648\u062f\u06a9\u0627\u0631 \u0646\u0638\u0627\u0645 \u0627\u0633\u06d2 \u0627\u0633\u06cc \u0637\u0631\u062d \u0628\u0646\u0627\u062a\u06d2\u060c \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631\u062a\u06d2 \u0627\u0648\u0631 \u067e\u06cc\u06a9 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>CI \u06a9\u0648 \u0641\u06cc\u06a9\u0679\u0631\u06cc \u0644\u0627\u0626\u0646 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0633\u0648\u0686\u06cc\u06ba\u06d4<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/07\/1785194531_336_Homelab-\u0633\u06d2-AWS-\u062a\u06a9-\u067e\u0631\u0648\u0688\u06a9\u0634\u0646-\u06a9\u06d2-\u0644\u06cc\u06d2-\u062a\u06cc\u0627\u0631-DevSecOps-\u067e\u0644\u06cc\u0679.png\" alt=\"\u0641\u0644\u0648 \u0686\u0627\u0631\u0679 gihub ci \u0628\u06c1\u0627\u0624 \u06a9\u06cc \u062a\u0641\u0635\u06cc\u0644\" style=\"display:block;margin:0 auto\" width=\"1024\" height=\"1536\" loading=\"lazy\" title=\"\"><\/p>\n<pre><code class=\"language-text\">Developer pushes code\n        \u2193\nGitHub detects the push\n        \u2193\nGitHub Actions starts the pipeline\n        \u2193\nRunner executes the jobs\n        \u2193\nDocker images are built and pushed\n        \u2193\nInfra manifests are updated with the new image tags  (in clearledger-infra \u2014 \u00a71.3)\n<\/code><\/pre>\n<p>\u0627\u06c1\u0645 \u062e\u06cc\u0627\u0644 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u0622\u067e \u06a9\u06cc \u062a\u0639\u0645\u06cc\u0631 \u0627\u0628 \u0622\u067e \u06a9\u06d2 \u0644\u06cc\u067e \u0679\u0627\u067e \u067e\u0631 \u0645\u0646\u062d\u0635\u0631 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0646\u0648\u0679 \u0628\u06a9 \u06a9\u0648\u0688 \u0644\u06a9\u06be\u062a\u06cc \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646\u06cc\u06ba \u0631\u06cc\u0644\u06cc\u0632 \u06a9\u06d2 \u0646\u0645\u0648\u0646\u06d2 \u062a\u06cc\u0627\u0631 \u06a9\u0631\u062a\u06cc \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>CI \u0646\u0638\u0627\u0645 \u062a\u06cc\u0646 \u062d\u0635\u0648\u06ba \u067e\u0631 \u0645\u0634\u062a\u0645\u0644 \u06c1\u06d2:<\/p>\n<ol>\n<li>\n<p><strong>\u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u0645\u06cc\u0632\u0628\u0627\u0646<\/strong>: \u06a9\u0646\u0679\u0631\u0648\u0644 \u0637\u06cc\u0627\u0631\u06c1\u06d4 \u0627\u06cc\u06a9 \u067e\u0634 \u06a9\u0627 \u067e\u062a\u06c1 \u0644\u06af\u0627\u0626\u06cc\u06ba \u0627\u0648\u0631 \u0641\u06cc\u0635\u0644\u06c1 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u06a9\u0648\u0646 \u0633\u0627 \u0648\u0631\u06a9 \u0641\u0644\u0648 \u0639\u0645\u0644 \u0645\u06cc\u06ba \u0644\u0627\u0646\u0627 \u06c1\u06d2\u06d4 \u0627\u0633 \u0644\u06cc\u0628 \u0645\u06cc\u06ba <strong>\u06af\u0679 \u06c1\u0628 \u0622\u067e\u0631\u06cc\u0634\u0646\u0632<\/strong>.<\/p>\n<\/li>\n<li>\n<p><strong>\u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u0641\u0627\u0626\u0644<\/strong>: \u0631\u06c1\u0646\u0645\u0627 \u062e\u0637\u0648\u0637 YAML \u0641\u0627\u0626\u0644 \u06cc\u06c1\u0627\u06ba \u0648\u0627\u0642\u0639 \u06c1\u06d2: <code>.github\/workflows\/ci.yaml<\/code> \u06cc\u06c1 \u0622\u067e \u06a9\u0648 \u0628\u062a\u0627\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u06a9\u0648\u0646 \u0633\u0627 \u0639\u0645\u0644 \u0686\u0644\u0627\u0646\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0631\u0646\u0631<\/strong>: \u0648\u0631\u06a9\u0631 \u0645\u0634\u06cc\u0646\u06d4 \u062f\u0631\u0627\u0635\u0644 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u0645\u06cc\u06ba \u06a9\u0645\u0627\u0646\u0688 \u067e\u0631 \u0639\u0645\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<\/ol>\n<p>GitHub \u0627\u06cc\u06a9\u0634\u0646\u0632 \u0639\u0627\u0645 \u0637\u0648\u0631 \u067e\u0631 \u06a9\u0644\u0627\u0624\u0688 \u0645\u06cc\u06ba GitHub \u06a9\u06cc \u0645\u06cc\u0632\u0628\u0627\u0646\u06cc \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0631\u0646\u0631\u0632 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 \u0627\u0633 \u0644\u06cc\u0628 \u0645\u06cc\u06ba\u060c \u06cc\u06c1 \u06a9\u0627\u0641\u06cc \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 Kubernetes \u06a9\u0644\u0633\u0679\u0631 \u0645\u0642\u0627\u0645\u06cc Multipass VM \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u06c1\u06d2\u060c \u0627\u0648\u0631 GitHub \u06a9\u0627 \u06a9\u0644\u0627\u0624\u0688 \u0631\u0646\u0631 \u0627\u0633 \u062a\u06a9 \u0646\u06c1\u06cc\u06ba \u067e\u06c1\u0646\u0686 \u0633\u06a9\u062a\u0627\u06d4 \u0645\u0632\u06cc\u062f \u0628\u0631\u0622\u06ba\u060c \u0627\u06af\u0631 \u0622\u067e \u0645\u0642\u0627\u0645\u06cc \u0688\u0648\u06a9\u0631 \u0688\u06cc\u0645\u0648\u0646 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0688\u0648\u06a9\u0631 \u0627\u0645\u06cc\u062c\u0632 \u0628\u0646\u0627\u0646\u0627 \u0686\u0627\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0622\u067e \u06a9\u0648 VM \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0644\u0627\u0646\u0686\u0631 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u06af\u06cc\u06d4<\/p>\n<p>\u0644\u06c1\u0630\u0627\u060c \u06c1\u0645 VM \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0627\u06cc\u06a9 \u062e\u0648\u062f \u0645\u06cc\u0632\u0628\u0627\u0646 \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0679\u0631 \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0622\u0624\u0679 \u0628\u0627\u0624\u0646\u0688 \u06a9\u0648 GitHub \u0633\u06d2 \u062c\u0648\u0691\u06cc\u06ba\u060c \u0646\u0648\u06a9\u0631\u06cc \u06a9\u0627 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u06cc\u06ba\u060c \u0627\u0648\u0631 \u067e\u06be\u0631 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06a9\u0627 \u06a9\u0627\u0645 \u0645\u0642\u0627\u0645\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0686\u0644\u0627\u0626\u06cc\u06ba \u062c\u06c1\u0627\u06ba \u06c1\u0631 \u0686\u06cc\u0632 \u067e\u06c1\u0646\u0686 \u0633\u06a9\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u062f\u0648 \u0630\u062e\u06cc\u0631\u06d2\u060c <code>clearledger<\/code> (\u06a9\u0648\u0688 + CI) \u0627\u0648\u0631 <code>clearledger-infra<\/code> (\u0635\u0631\u0641 Kubernetes YAML) \u00a71.3 \u0645\u06cc\u06ba \u062f\u0648\u0633\u0631\u06cc \u0627\u0646\u062f\u0631\u0627\u062c \u0628\u0646\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/07\/1785194531_328_Homelab-\u0633\u06d2-AWS-\u062a\u06a9-\u067e\u0631\u0648\u0688\u06a9\u0634\u0646-\u06a9\u06d2-\u0644\u06cc\u06d2-\u062a\u06cc\u0627\u0631-DevSecOps-\u067e\u0644\u06cc\u0679.png\" alt=\"\u0641\u0644\u0648 \u0686\u0627\u0631\u0679 \u062e\u0648\u062f \u0645\u06cc\u0632\u0628\u0627\u0646 \u06af\u06cc\u062a\u06be\u0628 \u0628\u06c1\u0627\u0624 \u062f\u06a9\u06be\u0627 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4\" style=\"display:block;margin:0 auto\" width=\"1024\" height=\"1536\" loading=\"lazy\" title=\"\"><\/p>\n<pre><code class=\"language-text\">GitHub \u2014 clearledger (app repo)\n  stores your code\n  starts the workflow on git push\n        \u2193\nSelf-hosted runner (inside Multipass VM)\n  builds Docker images\n  pushes images to Docker Hub\n  updates image tags in clearledger-infra  \u2190 you create this in \u00a71.3\n        \u2193\nGitHub \u2014 clearledger-infra (infra repo)\n  stores Kubernetes YAML with the new image tags\n  ArgoCD watches this repo in Stage 2 (not yet)\n<\/code><\/pre>\n<p>\u0645\u0631\u0627\u062d\u0644 1-7 \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u0644\u06cc\u0628 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06cc \u06c1\u06d2: <code>.github\/workflows\/ci.yaml<\/code> \u062e\u0648\u062f \u0645\u06cc\u0632\u0628\u0627\u0646 \u0631\u0646\u0631 \u06a9\u06d2 \u0633\u0627\u062a\u06be\u06d4 \u062a\u0635\u0648\u06cc\u0631 \u0628\u0646\u0627\u0626\u06cc\u06ba\u060c \u0627\u0633\u06d2 Docker Hub \u067e\u0631 \u067e\u0634 \u06a9\u0631\u06cc\u06ba\u060c \u0627\u0648\u0631 \u0627\u0633\u06d2 \u0627\u067e \u0688\u06cc\u0679 \u06a9\u0631\u06cc\u06ba\u06d4 <code>clearledger-infra<\/code>. \u0645\u0631\u062d\u0644\u06c1 8 \u0627\u06cc\u06a9 \u0639\u0644\u06cc\u062d\u062f\u06c1 AWS \u0648\u0631\u06a9 \u0641\u0644\u0648 \u0634\u0627\u0645\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <code>.github\/workflows\/ci-aws.yaml<\/code>\u0627\u0633 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2\u060c \u0627\u0633\u06d2 ECR \u067e\u0631 \u062f\u06be\u06a9\u06cc\u0644 \u062f\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0622\u067e \u06a9\u0648 AWS \u0648\u0631\u06a9 \u0641\u0644\u0648 \u06a9\u0648 \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2 \u062c\u0628 \u062a\u06a9 \u06a9\u06c1 \u0622\u067e \u0645\u0631\u062d\u0644\u06c1 8 \u062a\u06a9 \u0646\u06c1 \u067e\u06c1\u0646\u0686 \u062c\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-11-push-the-app-repo-to-github-not-clearledger-infra-yet\">1.1: \u0627\u067e\u0646\u06d2 \u0627\u06cc\u067e \u0631\u06cc\u067e\u0648 \u06a9\u0648 GitHub \u067e\u0631 \u067e\u0634 \u06a9\u0631\u06cc\u06ba\u06d4 <code>clearledger-infra<\/code> \u0627\u0628\u06be\u06cc \u062a\u06a9)<\/h3>\n<p>\u06cc\u06c1 \u0645\u0631\u062d\u0644\u06c1 \u06c1\u06d2\u06d4 <strong>\u0630\u062e\u06cc\u0631\u06c1 \u0646\u0645\u0628\u0631 1\u060c<\/strong> <code>clearledger<\/code> (\u0627\u06cc\u067e\u0644\u06cc \u06a9\u06cc\u0634\u0646 \u06a9\u0648\u0688 + CI \u0648\u0631\u06a9 \u0641\u0644\u0648)\u06d4 \u0645\u06cc\u06ba \u0627\u067e\u0646\u06d2 \u0644\u06cc\u067e \u0679\u0627\u067e \u0633\u06d2 \u0627\u06cc\u06a9 \u0646\u0642\u0644 \u0646\u06a9\u0627\u0644 \u0631\u06c1\u0627 \u06c1\u0648\u06ba\u06d4 \u0648\u06c1\u06cc \u0641\u0648\u0644\u0688\u0631 \u062c\u06c1\u0627\u06ba \u0622\u067e \u0646\u06d2 \u0627\u0633\u0679\u06cc\u062c 0 \u0686\u0644\u0627\u06cc\u0627 (<code>make setup<\/code>, <code>kubectl apply<\/code>\u0648\u063a\u06cc\u0631\u06c1)\u06d4<\/p>\n<p><code>clearledger-infra<\/code> \u06cc\u06c1 \u0628\u0639\u062f \u0645\u06cc\u06ba \u00a71.3 \u0645\u06cc\u06ba \u0638\u0627\u06c1\u0631 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 \u062f\u0648\u0633\u0631\u0627 \u0630\u062e\u06cc\u0631\u06c1 \u0635\u0631\u0641 Kubernetes \u0645\u06cc\u0646\u06cc \u0641\u06cc\u0633\u0679 \u0631\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0633\u06d2 \u06cc\u06c1\u0627\u06ba \u0645\u062a \u0628\u0646\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<p>\u0633\u0628 \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u060c \u0627\u067e\u0646\u06cc \u0627\u06cc\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0631\u06cc\u067e\u0648\u0632\u0679\u0631\u06cc \u06a9\u0648 \u0627\u06cc\u0633\u06cc \u062c\u06af\u06c1 \u067e\u0631 \u0631\u06a9\u06be\u06cc\u06ba \u062c\u06c1\u0627\u06ba GitHub \u0627\u06cc\u06a9\u0634\u0646\u0632 \u062f\u06cc\u06a9\u06be \u0633\u06a9\u06cc\u06ba\u06d4<\/p>\n<p>GitHub \u067e\u0631 \u062c\u0627\u0626\u06cc\u06ba \u0627\u0648\u0631 \u067e\u06be\u0631 \u0627\u067e\u0646\u06d2 \u0646\u0626\u06d2 \u0630\u062e\u06cc\u0631\u06d2 \u067e\u0631 \u062c\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<ul>\n<li>\n<p>\u0645\u062e\u0632\u0646 \u06a9\u0627 \u0646\u0627\u0645: <code>clearledger<\/code> (\u06cc\u06c1 \u0635\u062d\u06cc\u062d \u0646\u0627\u0645 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 <code>clearledger-infra<\/code>)<\/p>\n<\/li>\n<li>\n<p>\u06af\u06be\u0691\u06cc: <strong>\u0639\u0648\u0627\u0645\u06cc \u06cc\u0627 \u0646\u062c\u06cc\u061f<\/strong>. \u062f\u0648\u0646\u0648\u06ba \u062e\u0648\u062f \u0645\u06cc\u0632\u0628\u0627\u0646 \u0644\u0627\u0646\u0686\u0631\u0632 \u0627\u0648\u0631 GitHub \u0627\u06cc\u06a9\u0634\u0646\u0632 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u06a9\u0627\u0645 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 ArgoCD \u0627\u0633 \u0630\u062e\u06cc\u0631\u06c1 \u06a9\u0648 \u0646\u06c1\u06cc\u06ba \u067e\u0691\u06be\u062a\u0627 \u06c1\u06d2 (\u0646\u062c\u06cc \u0630\u062e\u06cc\u0631\u06d2: \u00a71.3 \u0645\u06cc\u06ba \u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631\u06cc \u06a9\u06d2 \u0645\u0642\u0627\u0645\u0627\u062a \u062f\u06cc\u06a9\u06be\u06cc\u06ba)\u06d4<\/p>\n<\/li>\n<li>\n<p>\u06a9\u0631\u0648 <strong>~ \u0646\u06c1\u06cc\u06ba<\/strong> README \u06cc\u0627 \u067e\u0631 \u0631\u06cc \u0633\u06cc\u0679 \u06a9\u0631\u06cc\u06ba\u06d4 <code>.gitignore<\/code><\/p>\n<\/li>\n<\/ul>\n<p>\u0631\u06cc\u067e\u0648\u0632\u0679\u0631\u06cc \u0645\u06cc\u06ba \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u06c1\u06cc \u0648\u06c1 \u0641\u0627\u0626\u0644 \u0645\u0642\u0627\u0645\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2\u06d4 \u0627\u06af\u0631 GitHub \u0627\u067e\u0646\u06d2 \u0622\u067e \u06a9\u0648 \u062f\u06be\u06a9\u0627 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u067e\u06c1\u0644\u0627 \u062f\u06be\u06a9\u0627 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648 \u0633\u06a9\u062a\u0627 \u06c1\u06d2 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u0631\u06cc\u06a9\u0627\u0631\u0688\u0632 \u0645\u0645\u0627\u062b\u0644 \u0646\u06c1\u06cc\u06ba \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0622\u067e \u06a9\u0627 <strong>\u0645\u0642\u0627\u0645\u06cc<\/strong> <code>clearledger<\/code> <strong>\u0645\u0646\u0635\u0648\u0628\u06d2 \u06a9\u06cc \u062c\u0691<\/strong> \u0644\u06cc\u067e \u0679\u0627\u067e (\u06a9\u06c1\u0627\u06ba\u061f <code>app\/<\/code>, <code>infra\/<\/code>\u0627\u0648\u0631 <code>.github\/workflows\/ci.yaml<\/code> \u0644\u0627\u0626\u06cc\u0648):<\/p>\n<pre><code class=\"language-bash\">cd ~\/Desktop\/clearledger   # your clone path\ngit remote add origin https:\/\/github.com\/YOUR_USERNAME\/clearledger.git\ngit branch -M main\ngit push -u origin main\n<\/code><\/pre>\n<p>\u0627\u06af\u0631 <code>git remote add<\/code> \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u06cc\u06c1 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 <code>origin<\/code> \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2:<\/p>\n<pre><code class=\"language-bash\">git remote -v\ngit remote set-url origin https:\/\/github.com\/YOUR_USERNAME\/clearledger.git\ngit push -u origin main\n<\/code><\/pre>\n<p>\u0627\u0633\u06d2 \u0627\u067e\u0646\u06d2 \u0628\u0631\u0627\u0624\u0632\u0631 \u0645\u06cc\u06ba \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba: <code>https:\/\/github.com\/YOUR_USERNAME\/clearledger<\/code>.<\/p>\n<p>\u0622\u067e \u06a9\u0648 \u062f\u06cc\u06a9\u06be\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2 <code>app\/<\/code>, <code>infra\/manifests\/<\/code>, <code>docs\/<\/code>\u0627\u0648\u0631 <code>.github\/workflows\/ci.yaml<\/code>. \u06cc\u06c1 \u0627\u0633 \u0628\u0627\u062a \u06a9\u06cc \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u06af\u0679 \u06c1\u0628 \u0627\u06af\u0644\u06d2 \u062f\u06be\u06a9\u06d2 \u067e\u0631 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06a9\u0648 \u0645\u062a\u062d\u0631\u06a9 \u06a9\u0631\u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u062c\u0648 \u0622\u067e \u0646\u06d2 \u062b\u0627\u0628\u062a \u06a9\u06cc\u0627 \u06c1\u06d2:<\/strong> \u06a9\u06c1 <strong>\u0627\u06cc\u067e \u0627\u0633\u0679\u0648\u0631<\/strong> \u06cc\u06c1 GitHub \u067e\u0631 \u06c1\u06d2\u06d4 CI \u06cc\u06c1\u0627\u06ba \u0686\u0644\u062a\u0627 \u06c1\u06d2\u06d4 GitOps \u0632\u0645\u06cc\u0646 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u06a9\u0627 \u0645\u0646\u0634\u0648\u0631 <code>clearledger-infra<\/code> \u00a71.3 \u0645\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-12-install-the-self-hosted-runner-inside-the-vm\">1.2: VM \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0633\u06cc\u0644\u0641 \u06c1\u0648\u0633\u0679\u0688 \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631 \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/h3>\n<p>\u0648\u0631\u06a9 \u0641\u0644\u0648 \u0641\u0627\u0626\u0644 GitHub \u06a9\u0648 \u0645\u0637\u0644\u0639 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 <em>\u06a9\u06cc\u0627<\/em> \u0686\u0644\u0627\u0626\u06cc\u06ba \u0631\u0646\u0631 <em>\u06a9\u06c1\u0627\u06ba<\/em> \u06cc\u06c1 \u0686\u0644\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0686\u0648\u0646\u06a9\u06c1 \u0628\u0646\u06cc\u0627\u062f\u06cc \u0688\u06be\u0627\u0646\u0686\u06c1 \u0645\u0642\u0627\u0645\u06cc \u06c1\u06d2\u060c \u0627\u0633 \u0644\u06cc\u06d2 \u06cc\u06c1 \u0644\u06cc\u0628 \u0627\u06cc\u06a9 \u062e\u0648\u062f \u0645\u06cc\u0632\u0628\u0627\u0646 \u0627\u06cc\u06af\u0632\u06cc\u06a9\u0679\u0648 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 GitHub \u06a9\u06d2 \u06a9\u0644\u0627\u0624\u0688 \u0633\u0631\u0648\u0631\u0632 \u0627\u06cc\u06a9 Multipass VM \u06a9\u06d2 \u0627\u0646\u062f\u0631 MicroK8s \u06a9\u0644\u0633\u0679\u0631 \u06cc\u0627 Docker \u0688\u06cc\u0645\u0648\u0646 \u0633\u06d2 \u0645\u0646\u0633\u0644\u06a9 \u0646\u06c1\u06cc\u06ba \u06c1\u0648 \u0633\u06a9\u062a\u06d2\u06d4 \u0631\u0646\u0631\u0632 VM \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0631\u06c1 \u06a9\u0631 \u0627\u0633 \u0645\u0633\u0626\u0644\u06d2 \u06a9\u0648 \u062d\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 GitHub \u0633\u06d2 \u062c\u0691\u06cc\u06ba\u060c \u06a9\u0627\u0645\u0648\u06ba \u06a9\u0648 \u0645\u0646\u062a\u062e\u0628 \u06a9\u0631\u06cc\u06ba\u060c \u0627\u0648\u0631 \u067e\u06be\u0631 \u06c1\u0631 \u0686\u06cc\u0632 \u06a9\u0648 \u0645\u0642\u0627\u0645\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u06af\u0631 \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631 \u063a\u0627\u0626\u0628 \u06cc\u0627 \u0622\u0641 \u0644\u0627\u0626\u0646 \u06c1\u06d2 \u062a\u0648 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u0646\u06c1\u06cc\u06ba \u0686\u0644 \u0633\u06a9\u062a\u06cc\u06d4 \u0648\u0631\u06a9 \u0641\u0644\u0648 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648 \u0633\u06a9\u062a\u0627 \u06c1\u06d2 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u06cc\u06c1 \u0642\u0637\u0627\u0631 \u0645\u06cc\u06ba \u06c1\u06d2 \u06cc\u0627 \u06a9\u0648\u0626\u06cc \u0645\u0645\u0627\u062b\u0644 \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-step-1-open-githubs-runner-setup-page-keep-this-tab-open\">\u0645\u0631\u062d\u0644\u06c1 1: GitHub \u06a9\u06d2 \u0644\u0627\u0646\u0686\u0631 \u06a9\u06cc \u062a\u0631\u062a\u06cc\u0628\u0627\u062a \u06a9\u0627 \u0635\u0641\u062d\u06c1 \u06a9\u06be\u0648\u0644\u06cc\u06ba (\u0627\u0633 \u0679\u06cc\u0628 \u06a9\u0648 \u06a9\u06be\u0644\u0627 \u0631\u06a9\u06be\u06cc\u06ba)<\/h4>\n<p>GitHub \u0627\u06cc\u06a9 \u0635\u0641\u062d\u06d2 \u067e\u0631 \u06a9\u0627\u067e\u06cc \u067e\u06cc\u0633\u0679 \u0627\u0646\u0633\u0679\u0627\u0644\u06cc\u0634\u0646 \u06af\u0627\u0626\u06cc\u0688 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0633 \u0633\u06d2 \u0641\u0627\u0626\u062f\u06c1 \u0627\u0679\u06be\u0627\u0626\u06cc\u06ba\u06d4 \u06a9\u06c1\u06cc\u06ba \u0627\u0648\u0631 \u06cc\u0648 \u0622\u0631 \u0627\u06cc\u0644 \u06cc\u0627 \u0679\u0648\u06a9\u0646 \u062a\u0644\u0627\u0634 \u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<ol>\n<li>\n<p>\u06a9\u06be\u0644\u0627 <code>https:\/\/github.com\/YOUR_USERNAME\/clearledger<\/code><\/p>\n<\/li>\n<li>\n<p>\u0633\u06cc\u0679\u0646\u06af\u0632\u060c \u0627\u06cc\u06a9\u0634\u0646\u0632\u060c \u0644\u0627\u0646\u0686\u0631\u0632 \u0627\u0648\u0631 \u0646\u0626\u06d2 \u0633\u06cc\u0644\u0641 \u06c1\u0648\u0633\u0679\u0688 \u0644\u0627\u0646\u0686\u0631 \u067e\u0631 \u062c\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0644\u06cc\u0646\u06a9\u0633 \u0627\u0648\u0631 x64 \u06a9\u0627 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ol>\n<p>\u0635\u0641\u062d\u06c1 \u06a9\u0627 \u0639\u0646\u0648\u0627\u0646 \u06c1\u0648\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2: <strong>\u0646\u06cc\u0627 \u062e\u0648\u062f \u0645\u06cc\u0632\u0628\u0627\u0646 \u0644\u0627\u0646\u0686\u0631 YOUR_USERNAME\/clearledger \u0634\u0627\u0645\u0644 \u06a9\u06cc\u0627 \u06af\u06cc\u0627\u06d4<\/strong>.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/07\/1785194531_626_Homelab-\u0633\u06d2-AWS-\u062a\u06a9-\u067e\u0631\u0648\u0688\u06a9\u0634\u0646-\u06a9\u06d2-\u0644\u06cc\u06d2-\u062a\u06cc\u0627\u0631-DevSecOps-\u067e\u0644\u06cc\u0679.png\" alt=\"e0aa537c-a2b2-4ed7-8b48-f686a012ea8d\" style=\"display:block;margin:0 auto\" width=\"1251\" height=\"1267\" loading=\"lazy\" title=\"\"><\/p>\n<p>\u0627\u0633 \u0635\u0641\u062d\u06c1 \u067e\u0631 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062a\u06cc\u0646 \u062d\u0635\u06d2 \u06c1\u06cc\u06ba:<\/p>\n<table>\n<thead>\n<tr>\n<th>\u06af\u0679 \u06c1\u0628 \u0633\u06cc\u06a9\u0634\u0646<\/th>\n<th>\u0627\u0633 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u06a9\u06cc\u0627 \u06a9\u0631\u0646\u0627 \u06c1\u06d2\u061f<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>\u0688\u0627\u0624\u0646 \u0644\u0648\u0688<\/strong><\/td>\n<td>\u06a9\u0627\u067e\u06cc <code>mkdir<\/code>, <code>curl<\/code>\u0627\u0648\u0631 <code>tar<\/code> \u0645\u0631\u062d\u0644\u06c1 4 \u0645\u06cc\u06ba VM \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0645\u0627\u0646\u0688\u0632 (\u0646\u06cc\u0686\u06d2 \u062c\u06cc\u0633\u0627 \u0648\u0631\u0698\u0646)<\/td>\n<\/tr>\n<tr>\n<td><strong>\u0645\u0631\u06a9\u0628<\/strong><\/td>\n<td>\u06a9\u0627\u067e\u06cc <strong>\u0679\u0648\u06a9\u0646<\/strong> \u067e\u0631 <code>.\/config.sh ... --token ...<\/code> line: \u06a9\u0631\u0646\u0627 <strong>~ \u0646\u06c1\u06cc\u06ba<\/strong> GitHub \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4 <code>.\/config.sh<\/code> \u062c\u06cc\u0633\u0627 \u06a9\u06c1 \u06c1\u06d2<\/td>\n<\/tr>\n<tr>\n<td><strong>\u062e\u0648\u062f \u0645\u06cc\u0632\u0628\u0627\u0646 \u0644\u0627\u0646\u0686\u0631 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/strong><\/td>\n<td>\u0627\u0633\u06d2 \u0641\u06cc \u0627\u0644\u062d\u0627\u0644 \u0646\u0638\u0631 \u0627\u0646\u062f\u0627\u0632 \u06a9\u0631\u06cc\u06ba\u06d4 \u0644\u06cc\u0628 \u0648\u0631\u06a9 \u0641\u0644\u0648 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2: <code>clearledger<\/code> \u0644\u06cc\u0628\u0644 (4 \u0645\u0631\u0627\u062d\u0644)<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u0627\u06af\u0644\u06d2 \u067e\u0631 \u0633\u06a9\u0631\u0648\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 <strong>\u0645\u0631\u06a9\u0628<\/strong>. \u0622\u067e \u06a9\u0648 \u06a9\u0686\u06be \u0627\u0633 \u0637\u0631\u062d \u0646\u0638\u0631 \u0622\u0626\u06d2 \u06af\u0627:<\/p>\n<pre><code class=\"language-bash\">.\/config.sh --url https:\/\/github.com\/YOUR_USERNAME\/clearledger --token AXXXXXXXXXXXXXXXXXXXXXXXXX\n.\/run.sh\n<\/code><\/pre>\n<p>\u0627\u06cc\u06a9 \u0679\u0648\u06a9\u0646 \u0627\u06cc\u06a9 \u0644\u0645\u0628\u06cc \u062a\u0627\u0631 \u06c1\u06d2: <code>--token<\/code> (\u06a9\u06d2 \u0633\u0627\u062a\u06be \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba\u06d4 <code>A<\/code>\u062a\u0642\u0631\u06cc\u0628\u0627\u064b 26 \u062d\u0631\u0648\u0641)\u06d4 \u0635\u0631\u0641 \u0627\u0633 \u062a\u0627\u0631 \u06a9\u0648 \u06a9\u0627\u067e\u06cc \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u0645\u0631\u062d\u0644\u06c1 4 \u0645\u06a9\u0645\u0644 \u06c1\u0648\u0646\u06d2 \u062a\u06a9 \u0627\u0633 \u0679\u06cc\u0628 \u06a9\u0648 \u06a9\u06be\u0644\u0627 \u0631\u06a9\u06be\u06cc\u06ba\u06d4 \u0679\u0648\u06a9\u0646 \u06a9\u06cc \u0645\u06cc\u0639\u0627\u062f \u062a\u0642\u0631\u06cc\u0628\u0627\u064b \u062e\u062a\u0645 \u06c1\u0648 \u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4 <strong>1 \u06af\u06be\u0646\u0679\u06c1<\/strong>. \u0627\u0633 \u06a9\u06cc \u0645\u06cc\u0639\u0627\u062f \u062e\u062a\u0645 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f\u060c \u0646\u06cc\u0627 \u0679\u0648\u06a9\u0646 \u062d\u0627\u0635\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0646\u0626\u06d2 \u062e\u0648\u062f \u0645\u06cc\u0632\u0628\u0627\u0646 \u0644\u0627\u0646\u0686\u0631 \u067e\u0631 \u062f\u0648\u0628\u0627\u0631\u06c1 \u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-step-2-enter-the-vm\">\u0645\u0631\u062d\u0644\u06c1 2: VM \u062f\u0631\u062c \u06a9\u0631\u06cc\u06ba\u06d4<\/h4>\n<p><code>multipass shell clearledger<\/code><\/p>\n<p>\u0627\u0633 \u06a9\u0645\u0627\u0646\u0688 \u06a9\u06d2 \u0628\u0639\u062f\u060c \u067e\u0631\u0627\u0645\u067e\u0679 \u0627\u0633 \u0637\u0631\u062d \u0646\u0638\u0631 \u0622\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2: <code>ubuntu@clearledger:~$<\/code>. \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 \u0622\u067e Ubuntu VM \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u06c1\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u067e\u0631\u0627\u0645\u067e\u0679 \u0627\u0628 \u0628\u06be\u06cc \u0622\u067e \u06a9\u0627 \u0645\u06cc\u06a9 \u0635\u0627\u0631\u0641 \u0646\u0627\u0645 \u06cc\u0627 MacBook \u0646\u0627\u0645 \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u0622\u067e \u0627\u0628 \u0628\u06be\u06cc \u0645\u06cc\u0632\u0628\u0627\u0646 \u0633\u0633\u0679\u0645 \u067e\u0631 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0644\u0627\u0646\u0686\u0631 \u0633\u06cc\u0679 \u0627\u067e \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4<\/p>\n<p>\u0627\u0634\u0627\u0631\u06c1 \u06a9\u0631\u0646\u06d2 \u067e\u0631 \u06c1\u06cc \u062c\u0627\u0631\u06cc \u0631\u06a9\u06be\u06cc\u06ba\u06d4 <code>ubuntu@clearledger<\/code>.<\/p>\n<p>\u0645\u0631\u062d\u0644\u06c1 3 \u06a9\u06d2 \u0628\u0639\u062f \u0633\u0628 \u06a9\u0686\u06be VM \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0686\u0644\u062a\u0627 \u06c1\u06d2\u060c \u0622\u067e \u06a9\u06d2 \u0645\u06cc\u06a9 \u067e\u0631 \u0646\u06c1\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-step-3-install-docker-inside-the-vm\">\u0645\u0631\u062d\u0644\u06c1 3: VM \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0688\u0648\u06a9\u0631 \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/h4>\n<p>\u0644\u0627\u0646\u0686\u0631 \u0688\u0648\u06a9\u0631 \u0627\u0645\u06cc\u062c \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u062c\u06c1\u0627\u06ba \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631 \u0686\u0644\u062a\u0627 \u06c1\u06d2 \u0648\u06c1\u0627\u06ba \u0688\u0648\u06a9\u0631 \u06a9\u0627 \u0645\u0648\u062c\u0648\u062f \u06c1\u0648\u0646\u0627 \u0636\u0631\u0648\u0631\u06cc \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\">curl -fsSL https:\/\/get.docker.com | sh\nsudo usermod -aG docker ubuntu\nnewgrp docker\n\ndocker --version\n<\/code><\/pre>\n<p>\u0645\u062a\u0648\u0642\u0639: Docker \u0648\u0631\u0698\u0646 \u0646\u0645\u0628\u0631 \u067e\u0631\u0646\u0679 \u06a9\u0631\u06d2 \u06af\u0627\u060c \u062c\u06cc\u0633\u06d2 <code>Docker version 29.x.x<\/code>)\u06d4<\/p>\n<p><strong>\u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u0626\u06cc\u06ba \u06a9\u06c1 \u0688\u0648\u06a9\u0631 \u0627\u0633 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u06a9\u0627\u0645 \u06a9\u0631 \u0631\u06c1\u0627 \u06c1\u06d2:<\/strong> <code>ubuntu<\/code> <strong>\u0627\u0628 \u0635\u0627\u0631\u0641<\/strong>: \u0631\u0646\u0631 \u0627\u0628\u06be\u06cc \u0645\u0648\u062c\u0648\u062f \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 (\u0645\u0631\u062d\u0644\u06c1 4 \u0645\u06cc\u06ba \u0628\u0646\u0627\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4 <code>~\/actions-runner<\/code>):<\/p>\n<pre><code class=\"language-bash\">docker ps\n<\/code><\/pre>\n<p>\u0645\u062a\u0648\u0642\u0639: \u0679\u06cc\u0628\u0644 \u06c1\u06cc\u0688\u0631 (\u06a9\u0646\u0679\u06cc\u0646\u0631 ID\u060c IMAGE\u060c &#8230;) \u0686\u0627\u06c1\u06d2 \u06a9\u0646\u0679\u06cc\u0646\u0631 \u062f\u0631\u062c \u0646\u06c1 \u06c1\u0648\u06d4 <strong>\u0646\u06c1\u06cc\u06ba<\/strong> <code>permission denied while trying to connect to the Docker API<\/code>.<\/p>\n<p>\u0627\u06af\u0631 <code>docker ps<\/code> \u06cc\u06c1 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u062c\u0627\u062a\u0627 \u06c1\u06d2 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u0627\u062c\u0627\u0632\u062a \u0633\u06d2 \u0627\u0646\u06a9\u0627\u0631 \u06a9\u0631\u062f\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 <code>docker<\/code> \u06af\u0631\u0648\u067e \u0646\u06d2 \u0627\u0628\u06be\u06cc \u062a\u06a9 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0646\u06c1\u06cc\u06ba \u062f\u06cc \u06c1\u06d2\u06d4 \u0686\u0644\u0627\u0626\u06cc\u06ba <code>newgrp docker<\/code> VM \u0633\u06d2 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0686\u0644\u0627\u0626\u06cc\u06ba \u06cc\u0627 \u0644\u0627\u06af \u0622\u0624\u0679 \u06a9\u0631\u06cc\u06ba (<code>exit<\/code>) \u0627\u0648\u0631 <code>multipass shell clearledger<\/code> \u0628\u0631\u0627\u06c1 \u06a9\u0631\u0645 \u062f\u0648\u0628\u0627\u0631\u06c1 \u062f\u0631\u062c \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u062f\u0648\u0628\u0627\u0631\u06c1 \u06a9\u0648\u0634\u0634 \u06a9\u0631\u06cc\u06ba\u06d4 <code>docker ps<\/code>.<\/p>\n<p><strong>\u062c\u0648 \u0622\u067e \u0646\u06d2 \u062b\u0627\u0628\u062a \u06a9\u06cc\u0627 \u06c1\u06d2:<\/strong> VMs \u0645\u06cc\u06a9 \u067e\u0631 \u0688\u0648\u06a9\u0631 \u0688\u06cc\u0633\u06a9 \u0679\u0627\u067e \u06a9\u06d2 \u0628\u063a\u06cc\u0631 \u0688\u0648\u06a9\u0631 \u0686\u0644\u0627 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0631\u0646\u0631 \u06a9\u0648 \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u0631\u062d\u0644\u06c1 4 \u067e\u0631 \u062c\u0627\u0631\u06cc \u0631\u06a9\u06be\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-step-4-install-and-register-the-runner\">\u0645\u0631\u062d\u0644\u06c1 4: \u0644\u0627\u0646\u0686\u0631 \u06a9\u0648 \u0627\u0646\u0633\u0679\u0627\u0644 \u0627\u0648\u0631 \u0631\u062c\u0633\u0679\u0631 \u06a9\u0631\u06cc\u06ba\u06d4<\/h4>\n<p>\u0627\u0628\u06be\u06cc \u0628\u06be\u06cc VM \u06a9\u06d2 \u0627\u0646\u062f\u0631 (<code>ubuntu@clearledger<\/code> \u0641\u0648\u0631\u06cc):<\/p>\n<p><strong>\u0688\u0627\u0624\u0646 \u0644\u0648\u0688 \u06a9\u0631\u06cc\u06ba:<\/strong> \u0622\u067e \u06a9\u0645\u0627\u0646\u0688 \u06a9\u0648 \u06cc\u06c1\u0627\u06ba \u0633\u06d2 \u06a9\u0627\u067e\u06cc \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba: <strong>\u0688\u0627\u0624\u0646 \u0644\u0648\u0688<\/strong> GitHub \u0644\u0627\u0646\u0686\u0631 \u0635\u0641\u062d\u06c1 \u067e\u0631 \u0633\u06cc\u06a9\u0634\u0646 (\u0645\u0631\u062d\u0644\u06c1 1) \u0686\u0644\u0627\u0626\u06cc\u06ba \u06cc\u0627 \u0646\u06cc\u0686\u06d2 \u0628\u0644\u0627\u06a9 \u06a9\u0648 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4 \u0627\u0646\u06c1\u06cc\u06ba \u0645\u06cc\u0686 \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2\u06d4 \u0627\u0633\u06d2 \u0645\u06cc\u06a9 \u0645\u06cc\u06ba \u0646\u06c1\u06cc\u06ba \u0628\u0644\u06a9\u06c1 VM \u0645\u06cc\u06ba \u0686\u0633\u067e\u0627\u06ba \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p><strong>\u062a\u0631\u06a9\u06cc\u0628:<\/strong> \u0628\u0631\u0627\u06c1 \u06a9\u0631\u0645 \u0630\u06cc\u0644 \u0645\u06cc\u06ba \u0644\u06cc\u0628 \u06a9\u0645\u0627\u0646\u0688\u0632 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u060c \u0646\u06c1 \u06a9\u06c1 GitHub \u06a9\u06d2 \u06a9\u0645\u0627\u0646\u0688\u0632\u06d4 <code>.\/config.sh<\/code> \u0644\u0627\u0626\u0646 \u0645\u0631\u062d\u0644\u06c1 1 \u0633\u06d2 \u0679\u0648\u06a9\u0646 \u06a9\u0648 \u0686\u0633\u067e\u0627\u06ba \u0627\u0648\u0631 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 <code>YOUR_USERNAME<\/code>.<\/p>\n<pre><code class=\"language-bash\">mkdir -p ~\/actions-runner && cd ~\/actions-runner\n\ncurl -o actions-runner-linux-x64-2.335.1.tar.gz -L \n  https:\/\/github.com\/actions\/runner\/releases\/download\/v2.335.1\/actions-runner-linux-x64-2.335.1.tar.gz\n\ntar xzf .\/actions-runner-linux-x64-2.335.1.tar.gz\n\n.\/config.sh \n  --url https:\/\/github.com\/YOUR_USERNAME\/clearledger \n  --token YOUR_RUNNER_TOKEN \n  --name clearledger-runner \n  --labels clearledger,self-hosted,linux \n  --work _work \n  --unattended\n\nsudo .\/svc.sh install\nsudo .\/svc.sh start\n<\/code><\/pre>\n<p>\u06a9\u0631\u0648 <strong>~ \u0646\u06c1\u06cc\u06ba<\/strong> GitHub \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4 <code>.\/run.sh<\/code> \u0645\u0639\u0645\u0648\u0644 \u06a9\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06d2 \u0644\u06cc\u06d2: \u0644\u06cc\u0628\u0627\u0631\u0679\u0631\u06cc\u0648\u06ba \u0645\u06cc\u06ba \u06c1\u0645 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba: <code>sudo .\/svc.sh<\/code> \u0644\u06c1\u0630\u0627 \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631 VM \u0631\u06cc\u0628\u0648\u0679\u0633 \u067e\u0631 \u0628\u0631\u0642\u0631\u0627\u0631 \u0631\u06c1\u06d2 \u06af\u0627\u06d4 \u06af\u0679 \u06c1\u0628 \u0634\u0648 <code>.\/run.sh<\/code> \u0635\u0631\u0641 \u0641\u0648\u0631\u06cc \u062c\u0627\u0646\u0686 \u06a9\u06d2 \u0644\u06cc\u06d2\u06d4<\/p>\n<p>\u06a9\u06d2 \u0628\u0639\u062f \u0645\u062a\u0648\u0642\u0639 <code>.\/config.sh<\/code>: <code>Runner successfully added<\/code> (\u06cc\u0627 \u0627\u0633\u06cc \u0637\u0631\u062d). \u0627\u06af\u0631 \u0622\u067e \u06a9\u0648 \u06a9\u0648\u0626\u06cc \u063a\u0644\u0637 \u06cc\u0627 \u062e\u062a\u0645 \u0634\u062f\u06c1 \u0679\u0648\u06a9\u0646 \u0646\u0638\u0631 \u0622\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u0627\u067e\u0646\u06d2 \u0628\u0631\u0627\u0624\u0632\u0631 \u0645\u06cc\u06ba \u0645\u0631\u062d\u0644\u06c1 1 \u067e\u0631 \u0648\u0627\u067e\u0633 \u062c\u0627\u0626\u06cc\u06ba \u0627\u0648\u0631 \u0627\u06cc\u06a9 \u0646\u06cc\u0627 \u0679\u0648\u06a9\u0646 \u06a9\u0627\u067e\u06cc \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u06a9\u06c1 <code>clearledger<\/code> GitHub \u067e\u0631 \u0644\u06cc\u0628\u0644 \u0688\u06cc\u0641\u0627\u0644\u0679 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4 <code>.\/config.sh<\/code> \u0627\u0633\u06d2 \u062a\u0631\u062a\u06cc\u0628\u0627\u062a \u06a9\u06d2 \u0635\u0641\u062d\u06c1 \u0645\u06cc\u06ba \u0634\u0627\u0645\u0644 \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4 \u0648\u0631\u06a9 \u0641\u0644\u0648 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/07\/1785194531_319_Homelab-\u0633\u06d2-AWS-\u062a\u06a9-\u067e\u0631\u0648\u0688\u06a9\u0634\u0646-\u06a9\u06d2-\u0644\u06cc\u06d2-\u062a\u06cc\u0627\u0631-DevSecOps-\u067e\u0644\u06cc\u0679.png\" alt=\"\u0631\u0646\u0631\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06af\u06cc\u062a\u06be\u0628 \u06cc\u0648 \u0622\u0626\u06cc \u0645\u06cc\u06ba \u0644\u06cc\u0628\u0644 \u06a9\u06c1\u0627\u06ba \u0634\u0627\u0645\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u062a\u0635\u0648\u06cc\u0631 \u062f\u06a9\u06be\u0627 \u0631\u06c1\u06cc \u06c1\u06d2\u06d4\" style=\"display:block;margin:0 auto\" width=\"938\" height=\"252\" loading=\"lazy\" title=\"\"><\/p>\n<pre><code class=\"language-yaml\">runs-on: [self-hosted, clearledger]\n<\/code><\/pre>\n<p>GitHub \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631 \u0644\u06cc\u0628\u0644 \u06a9\u06cc \u0628\u0646\u06cc\u0627\u062f \u067e\u0631 \u06a9\u0627\u0645\u0648\u06ba \u06a9\u0648 \u0634\u06cc\u0688\u0648\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631 \u06a9\u06d2 \u0646\u0627\u0645 \u067e\u0631 \u0646\u06c1\u06cc\u06ba\u06d4 \u0627\u06cc\u06a9 \u062f\u0648\u0691\u0646\u06d2 \u0648\u0627\u0644\u0627 \u0646\u0627\u0645 <code>clearledger<\/code> \u0628\u063a\u06cc\u0631 <code>clearledger<\/code> \u0644\u06cc\u0628\u0644 \u0622\u0646 \u0644\u0627\u0626\u0646 \u0631\u06c1\u062a\u0627 \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u06a9\u0627\u0645 \u0642\u0637\u0627\u0631 \u0645\u06cc\u06ba \u0631\u06c1\u062a\u0627 \u06c1\u06d2\u06d4 <code>Waiting for a runner to pick up this job<\/code>.<\/p>\n<p>\u0622\u062e\u0631\u06cc \u062f\u0648 \u0627\u062d\u06a9\u0627\u0645 \u06a9\u0627 \u0645\u0641\u06c1\u0648\u0645 \u06cc\u06c1 \u06c1\u06d2:<\/p>\n<pre><code class=\"language-text\">sudo .\/svc.sh install\n  Registers the runner with systemd inside the VM.\n  Without this, `sudo .\/svc.sh status` says: not installed.\n\nsudo .\/svc.sh start\n  Starts the runner service in the background.\n  After this, it keeps running even when you close the terminal.\n<\/code><\/pre>\n<p>VM \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0627\u0633\u06cc \u0641\u0648\u0644\u0688\u0631 \u0645\u06cc\u06ba \u0627\u0633\u06d2 \u0645\u0642\u0627\u0645\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">cd ~\/actions-runner\nsudo .\/svc.sh status\n<\/code><\/pre>\n<p>\u0645\u062a\u0648\u0642\u0639: \u0633\u0631\u0648\u0633 \u0627\u0646\u0633\u0679\u0627\u0644 \u0627\u0648\u0631 \u0686\u0644 \u0631\u06c1\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u06af\u0631 <code>docker ps<\/code> \u0645\u0631\u062d\u0644\u06c1 3 \u0646\u06d2 \u06a9\u0627\u0645 \u06a9\u06cc\u0627\u060c \u0644\u06cc\u06a9\u0646 \u0628\u0639\u062f \u0645\u06cc\u06ba \u0688\u0648\u06a9\u0631 \u0633\u0627\u06a9\u0679 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u0633\u06d2 \u0627\u0646\u06a9\u0627\u0631 \u06a9\u06d2 \u0633\u0627\u062a\u06be CI \u0622\u067e\u0631\u06cc\u0634\u0646 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u06af\u06cc\u0627\u06d4 \u06cc\u06c1 \u0634\u0627\u06cc\u062f \u0644\u0627\u0646\u0686\u0631 \u06a9\u06d2 \u0634\u0631\u0648\u0639 \u06c1\u0648\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0634\u0631\u0648\u0639 \u06c1\u0648\u0627 \u062a\u06be\u0627\u06d4 <code>docker<\/code> \u06af\u0631\u0648\u067e \u06a9\u0648 \u0627\u067e\u0644\u0627\u0626\u06cc \u06a9\u0631 \u062f\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4 \u0645\u0631\u062d\u0644\u06c1 4 \u06a9\u06d2 \u0628\u0639\u062f \u062f\u0648\u0628\u0627\u0631\u06c1 \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba\u06d4 <code>~\/actions-runner<\/code> \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2):<\/p>\n<pre><code class=\"language-bash\">cd ~\/actions-runner\nsudo .\/svc.sh stop\nsudo .\/svc.sh start\ndocker ps    # must work without sudo\n<\/code><\/pre>\n<p>\u06cc\u0627\u060c \u0627\u06af\u0631 \u0622\u067e \u0646\u06d2 \u0644\u0627\u0646\u0686\u0631 \u06a9\u0648 \u062f\u0633\u062a\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0634\u0631\u0648\u0639 \u06a9\u06cc\u0627 \u06c1\u06d2: <code>.\/run.sh<\/code> \u0633\u0633\u0679\u0645 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2:<\/p>\n<pre><code class=\"language-bash\">cd ~\/actions-runner\npkill -f \"Runner.Listener|Runner.Worker|.\/run.sh\" || true\nnohup .\/run.sh > _diag\/manual-runner.log 2>&1 &\ndocker ps\n<\/code><\/pre>\n<p>\u0627\u06af\u0631 \u0622\u067e \u06cc\u06c1 \u062f\u06cc\u06a9\u06be\u062a\u06d2 \u06c1\u06cc\u06ba:<\/p>\n<pre><code class=\"language-text\">not installed\n<\/code><\/pre>\n<p>\u067e\u06be\u0631 <code>sudo .\/svc.sh install<\/code> \u06cc\u06c1 \u06a9\u0627\u0645\u06cc\u0627\u0628\u06cc \u0633\u06d2 \u0646\u06c1\u06cc\u06ba \u0686\u0644 \u0633\u06a9\u0627\u06d4 \u0686\u0644\u0627\u0626\u06cc\u06ba:<\/p>\n<pre><code class=\"language-bash\">cd ~\/actions-runner\nsudo .\/svc.sh install\nsudo .\/svc.sh start\nsudo .\/svc.sh status\n<\/code><\/pre>\n<p>\u0627\u06af\u0631 <code>install<\/code> \u0646\u0627\u06a9\u0627\u0645\u060c \u062f\u0648\u0628\u0627\u0631\u06c1 \u06a9\u0648\u0634\u0634 \u06a9\u0631\u06cc\u06ba\u06d4 <code>.\/config.sh<\/code> \u0646\u0626\u06d2 GitHub \u0631\u0646\u0631 \u0679\u0648\u06a9\u0646 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 install\/start \u06a9\u0645\u0627\u0646\u0688 \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-step-5-exit-the-vm\">\u0645\u0631\u062d\u0644\u06c1 5: VM \u06a9\u0648 \u0628\u0646\u062f \u06a9\u0631\u06cc\u06ba\u06d4<\/h4>\n<pre><code class=\"language-bash\">exit\n<\/code><\/pre>\n<h4 id=\"heading-step-6-verify-the-runner-is-connected\">\u0645\u0631\u062d\u0644\u06c1 6: \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u0631\u0646\u0631 \u0645\u0646\u0633\u0644\u06a9 \u06c1\u06d2\u06d4<\/h4>\n<p>github.com\/YOUR_USERNAME\/clearledger \u067e\u0631 \u062c\u0627\u0626\u06cc\u06ba \u0627\u0648\u0631 \u067e\u06be\u0631 \u0633\u06cc\u0679\u0646\u06af\u0632\u060c \u0679\u0627\u0633\u06a9\u0633 \u0627\u0648\u0631 \u0644\u0627\u0646\u0686\u0631\u0632 \u067e\u0631 \u062c\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<p>\u0622\u067e \u06a9\u0648 \u062f\u06cc\u06a9\u06be\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2 <code>clearledger-runner<\/code> \u0633\u0628\u0632 \u0646\u0642\u0637\u06c1 \u0627\u0648\u0631 \u062d\u06cc\u062b\u06cc\u062a <strong>\u0633\u0633\u062a<\/strong>. \u0631\u0646\u0631 \u06a9\u06cc \u062a\u0641\u0635\u06cc\u0644\u0627\u062a \u06a9\u06be\u0648\u0644\u06cc\u06ba \u0627\u0648\u0631 \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u0626\u06cc\u06ba \u06a9\u06c1 \u0644\u06cc\u0628\u0644 \u0645\u06cc\u06ba \u0634\u0627\u0645\u0644 \u06c1\u06cc\u06ba:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/07\/1785194532_611_Homelab-\u0633\u06d2-AWS-\u062a\u06a9-\u067e\u0631\u0648\u0688\u06a9\u0634\u0646-\u06a9\u06d2-\u0644\u06cc\u06d2-\u062a\u06cc\u0627\u0631-DevSecOps-\u067e\u0644\u06cc\u0679.png\" alt=\"github ui shpwing \u0631\u0646\u0631 \u0627\u0633\u0679\u06cc\u0679 \u06a9\u06cc \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679 \u062a\u0635\u0648\u06cc\u0631 \" style=\"display:block;margin:0 auto\" width=\"816\" height=\"589\" loading=\"lazy\" title=\"\"><\/p>\n<pre><code class=\"language-text\">self-hosted\nLinux\nX64\nclearledger\n<\/code><\/pre>\n<p>\u0627\u06af\u0631 <code>clearledger<\/code> \u0627\u06af\u0631 \u0622\u067e \u0627\u0633\u06d2 \u06a9\u06be\u0648 \u062f\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0648\u0631\u06a9 \u0641\u0644\u0648 \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0686\u0644\u0627\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0627\u0633\u06d2 \u0627\u067e\u0646\u06d2 \u0644\u0627\u0646\u0686\u0631 \u06a9\u06cc \u062a\u0631\u062a\u06cc\u0628\u0627\u062a \u0645\u06cc\u06ba \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 \u0635\u0631\u0641 \u0631\u0646\u0631 \u06a9\u0627 \u0646\u0627\u0645 \u06a9\u0627\u0641\u06cc \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<p><strong> \u0686\u06cc\u06a9 \u067e\u0648\u0627\u0626\u0646\u0679 \u06a9\u06cc \u0645\u0634\u0642 \u06a9\u0631\u06cc\u06ba: \u0631\u0646\u0631\u0632 \u06a9\u0627\u0631\u0631\u0648\u0627\u0626\u06cc \u06a9\u06d2 \u0644\u06cc\u06d2 \u062a\u06cc\u0627\u0631 \u06c1\u06cc\u06ba\u06d4<\/strong><\/p>\n<p>GitHub\u060c \u062a\u0631\u062a\u06cc\u0628\u0627\u062a\u060c \u06a9\u0627\u0645\u0648\u06ba\u060c \u0627\u0648\u0631 \u0631\u0646\u0631\u0632 \u06a9\u0648 \u0686\u06cc\u06a9 \u06a9\u0631\u0646\u0627 \u062c\u0627\u0631\u06cc \u0631\u06a9\u06be\u06cc\u06ba:<\/p>\n<table>\n<thead>\n<tr>\n<th>\u0645\u06cc\u062f\u0627\u0646<\/th>\n<th>\u0645\u062a\u0648\u0642\u0639<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>\u0635\u0648\u0631\u062a \u062d\u0627\u0644<\/td>\n<td><strong>\u0633\u0633\u062a<\/strong> (\u0633\u0628\u0632)<\/td>\n<\/tr>\n<tr>\n<td>\u0644\u06cc\u0628\u0644<\/td>\n<td>\u0634\u0627\u0645\u0644 <code>self-hosted<\/code> <strong>\u0627\u0648\u0631<\/strong> <code>clearledger<\/code><\/td>\n<\/tr>\n<tr>\n<td>\u0622\u067e\u0631\u06cc\u0679\u0646\u06af \u0633\u0633\u0679\u0645<\/td>\n<td>\u0644\u06cc\u0646\u06a9\u0633<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u067e\u06be\u0631 \u0627\u067e\u0646\u06d2 \u0644\u06cc\u067e \u0679\u0627\u067e \u067e\u0631 \u0679\u06cc\u0633\u0679 \u0631\u0646 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">git commit --allow-empty -m \"test: verify runner picks up jobs\"\ngit push\n<\/code><\/pre>\n<p>\u06a9\u06be\u0644\u0627 <code>https:\/\/github.com\/YOUR_USERNAME\/clearledger\/actions<\/code>. 30 \u0633\u06cc\u06a9\u0646\u0688 \u06a9\u06d2 \u0627\u0646\u062f\u0631\u060c \u0648\u0631\u06a9 \u0641\u0644\u0648 \u067e\u0631 \u0639\u0645\u0644 \u062f\u0631\u0622\u0645\u062f \u0627\u0646\u062a\u0638\u0627\u0631 \u0627\u0648\u0631 \u067e\u06cc\u0634 \u0631\u0641\u062a \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0638\u0627\u06c1\u0631 \u06c1\u0648\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u060c \u0646\u06c1 \u06a9\u06c1 &quot;\u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u06a9\u0627 \u0627\u0646\u062a\u0638\u0627\u0631&#8221;\u06d4 \u0627\u06af\u0631 \u0622\u067e 2 \u0645\u0646\u0679 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0644\u06cc\u0628\u0644 \u063a\u0644\u0637 \u06c1\u06d2\u06d4 GitHub \u067e\u0631 \u0644\u0627\u0646\u0686\u0631\u0632 \u0645\u06cc\u06ba \u062a\u0631\u0645\u06cc\u0645 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 <code>clearledger<\/code>.<\/p>\n<p><strong>\u0627\u06af\u0631 \u06cc\u06c1 \u0622\u0641 \u0644\u0627\u0626\u0646 \u0638\u0627\u06c1\u0631 \u06c1\u0648\u062a\u0627 \u06c1\u06d2:<\/strong><\/p>\n<pre><code class=\"language-bash\">multipass exec clearledger -- sudo systemctl status actions.runner.*.service\nmultipass exec clearledger -- journalctl -u actions.runner.*.service --lines=50\n<\/code><\/pre>\n<p><strong>\u062c\u0648 \u0622\u067e \u0646\u06d2 \u062b\u0627\u0628\u062a \u06a9\u06cc\u0627 \u06c1\u06d2:<\/strong> GitHub \u0627\u0628 \u0622\u067e \u06a9\u06d2 \u0645\u0642\u0627\u0645\u06cc \u0644\u06cc\u0628 \u0645\u0627\u062d\u0648\u0644 \u0645\u06cc\u06ba \u06a9\u0627\u0645 \u0628\u06be\u06cc\u062c \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-13-create-the-infra-repo-on-github\">1.3: GitHub \u067e\u0631 \u0627\u0646\u0641\u0631\u0627 \u0631\u06cc\u067e\u0648 \u0628\u0646\u0627\u0626\u06cc\u06ba<\/h3>\n<p>\u0627\u0628 \u0627\u0644\u06af \u0633\u06d2 <strong>\u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u0648\u0688<\/strong> \u0633\u06d2 <strong>\u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u06a9\u06cc \u062d\u06cc\u062b\u06cc\u062a<\/strong>. \u0645\u0631\u062d\u0644\u06c1 1 \u062f\u0648\u0633\u0631\u0627 GitHub \u0630\u062e\u06cc\u0631\u06c1 \u0645\u062a\u0639\u0627\u0631\u0641 \u06a9\u0631\u0627\u062a\u0627 \u06c1\u06d2\u06d4 <code>clearledger<\/code> \u0627\u06cc\u067e \u0627\u0633\u0679\u0648\u0631 \u06a9\u0648 \u00a71.1 \u0645\u06cc\u06ba \u062f\u06be\u06a9\u06cc\u0644 \u062f\u06cc\u0627 \u06af\u06cc\u0627\u06d4<\/p>\n<p>\u0644\u06cc\u0628 \u06a9\u0627 \u0628\u0627\u0642\u06cc \u062d\u0635\u06c1 \u062f\u0648 \u0630\u062e\u06cc\u0631\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<table>\n<thead>\n<tr>\n<th>\u0631\u06cc\u067e\u0648<\/th>\n<th>\u0648\u06c1\u0627\u06ba \u06a9\u06cc\u0627 \u0631\u06c1\u062a\u0627 \u06c1\u06d2\u061f<\/th>\n<th>\u0627\u0633\u06d2 \u06a9\u0648\u0646 \u0628\u062f\u0644\u062a\u0627 \u06c1\u06d2\u061f<\/th>\n<th>\u06cc\u06c1 \u06a9\u06cc\u0648\u06ba \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>clearledger<\/code><\/td>\n<td>\u0627\u06cc\u067e \u0633\u0648\u0631\u0633 \u06a9\u0648\u0688\u060c \u0688\u0627\u06a9\u0631 \u0641\u0627\u0626\u0644\u060c \u0679\u06cc\u0633\u0679\u0646\u06af\u060c <code>.github\/workflows\/ci.yaml<\/code>\u06c1\u0627\u062a\u06be \u067e\u0631 \u062f\u0633\u062a\u0627\u0648\u06cc\u0632\u0627\u062a<\/td>\n<td>\u0622\u067e\u060c \u0688\u0648\u06cc\u0644\u067e\u0631<\/td>\n<td>\u06cc\u06c1\u06cc\u06ba \u0633\u06d2 \u06a9\u0648\u0688 \u06a9\u06cc \u062a\u0628\u062f\u06cc\u0644\u06cc\u0627\u06ba \u0634\u0631\u0648\u0639 \u06c1\u0648\u062a\u06cc \u06c1\u06cc\u06ba\u06d4<\/td>\n<\/tr>\n<tr>\n<td><code>clearledger-infra<\/code><\/td>\n<td>Kubernetes \u0635\u0631\u0641 \u0638\u0627\u06c1\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2: <code>deployment.yaml<\/code>, <code>service.yaml<\/code>\u0622\u0646\u06d2 \u0648\u0627\u0644\u0627\u060c \u062e\u0641\u06cc\u06c1 \u0679\u06cc\u0645\u067e\u0644\u06cc\u0679<\/td>\n<td>CI \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646\u060c ArgoCD\u060c \u0627\u0633\u06d2 \u067e\u0691\u06be\u062a\u06cc \u06c1\u06d2\u06d4<\/td>\n<td>\u06cc\u06c1 \u06a9\u0644\u0633\u0679\u0631 \u06a9\u06cc \u0645\u0637\u0644\u0648\u0628\u06c1 \u062d\u0627\u0644\u062a \u06c1\u06d2\u06d4<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u0633\u0648\u0686\u0648 <code>clearledger<\/code> \u0627\u06cc\u06a9 \u0633\u0648\u0627\u0644 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 <em>&quot;\u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u06cc\u0627 \u06c1\u06d2\u061f&#8221;<\/em>. \u0627\u0632\u06af\u0631 \u06a9\u06cc \u062e\u062f\u0645\u0627\u062a\u060c \u0688\u0627\u06a9\u0631 \u0641\u0627\u0626\u0644\u0632\u060c \u0679\u06cc\u0633\u0679\u0646\u06af \u0627\u0648\u0631 CI \u0648\u0631\u06a9 \u0641\u0644\u0648\u0632\u06d4 \u0633\u0648\u0686\u0648 <code>clearledger-infra<\/code> \u067e\u0633\u0646\u062f <em>&quot;\u0622\u062c \u0645\u062c\u06be\u06d2 \u06a9\u0628\u0631\u0646\u06cc\u0679\u0633 \u06a9\u0627 \u0628\u0627\u0644\u06a9\u0644 \u06a9\u0648\u0646 \u0633\u0627 \u0648\u0631\u0698\u0646 \u0686\u0644\u0627\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2\u061f&#8221;<\/em>. \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc\u060c \u0633\u0631\u0648\u0633\u060c \u0631\u0633\u06cc\u062f \u06a9\u06d2 \u0642\u0648\u0627\u0639\u062f\u060c \u0627\u0648\u0631 \u062a\u0635\u0648\u06cc\u0631\u06cc \u0679\u06cc\u06af\u0632 \u062c\u0648 Docker Hub \u06a9\u06cc \u0637\u0631\u0641 \u0627\u0634\u0627\u0631\u06c1 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0679\u06cc\u0645 \u0646\u06d2 \u062c\u0627\u0646 \u0628\u0648\u062c\u06be \u06a9\u0631 \u0627\u0633\u06d2 \u0627\u0644\u06af \u06a9\u0631 \u062f\u06cc\u0627\u06d4 \u062a\u0631\u0645\u06cc\u0645 \u06a9\u0631\u062a\u06d2 \u0648\u0642\u062a <code>README.md<\/code> \u06a9\u0648 <code>clearledger<\/code>\u06cc\u06c1 \u062f\u0633\u062a\u0627\u0648\u06cc\u0632 \u06a9\u06cc \u062a\u0628\u062f\u06cc\u0644\u06cc \u06c1\u06d2\u06d4 \u0627\u0633\u06d2 \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u06a9\u0648 \u0645\u062a\u062d\u0631\u06a9 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2\u06d4<br \/>\u0627\u06af\u0631 \u0622\u067e \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba <code>auth-service<\/code> \u062c\u0628 \u0622\u067e \u0627\u067e\u0646\u0627 \u06a9\u0648\u0688 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u0627\u06cc\u06a9 \u0646\u0626\u06cc \u062a\u0635\u0648\u06cc\u0631 \u0628\u0646\u0627\u062a\u06cc \u06c1\u06d2\u060c \u062c\u06cc\u0633\u06d2 \u06a9\u06c1 \u0679\u06cc\u06af <code>abc123<\/code>) \u0627\u0648\u0631 \u0627\u0633\u06a9\u06cc\u0646 \u06af\u0632\u0631 \u062c\u0627\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f \u06c1\u06cc <code>clearledger-infra<\/code>:<\/p>\n<pre><code class=\"language-yaml\">image: $DOCKER_USERNAME\/clearledger-auth-service:abc123\n<\/code><\/pre>\n<p>\u0648\u06c1 \u0644\u0627\u0626\u0646 \u062a\u0642\u0633\u06cc\u0645 \u06a9\u0627 \u0645\u0639\u0627\u06c1\u062f\u06c1 \u06c1\u06d2\u06d4 \u06af\u0679 \u0627\u0628 \u06a9\u0644\u0633\u0679\u0631\u0632 \u0633\u06d2 \u0645\u0631\u0627\u062f \u06c1\u06d2\u06d4 <em>\u0636\u0631\u0648\u0631\u06cc \u06c1\u06d2<\/em> \u0686\u0644\u0627\u0626\u06cc\u06ba <code>abc123<\/code>. \u0645\u0631\u062d\u0644\u06c1 1 \u0645\u06cc\u06ba\u060c \u06a9\u0644\u0633\u0679\u0631\u0632 \u0627\u0628\u06be\u06cc \u062a\u06a9 \u062a\u0628\u062f\u06cc\u0644 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u0626\u06d2 \u06c1\u06cc\u06ba (\u0627\u0648\u0631 \u06c1\u0645 \u0627\u0633\u06d2 \u00a71.6 \u0645\u06cc\u06ba \u062b\u0627\u0628\u062a \u06a9\u0631\u06cc\u06ba \u06af\u06d2)\u06d4<br \/>\u0645\u0631\u062d\u0644\u06c1 2 \u0645\u06cc\u06ba\u060c ArgoCD \u06af\u06be\u0691\u06cc <code>clearledger-infra<\/code>\u062c\u0648 \u0686\u0644 \u0631\u06c1\u0627 \u06c1\u06d2 \u0627\u0633 \u0633\u06d2 \u06af\u0679 \u06a9\u0627 \u0645\u0648\u0627\u0632\u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u060c \u0627\u0648\u0631 \u0627\u06af\u0631 \u0645\u062e\u062a\u0644\u0641 \u06c1\u0648 \u062a\u0648 \u06a9\u0644\u0633\u0679\u0631 \u06a9\u0648 \u06c1\u0645 \u0622\u06c1\u0646\u06af \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u06cc\u067e \u0627\u0633\u0679\u0648\u0631 \u0648\u06c1 \u062c\u06af\u06c1 \u06c1\u06d2 \u062c\u06c1\u0627\u06ba \u06a9\u0627\u0645 \u0634\u0631\u0648\u0639 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0646\u0641\u0631\u0627\u0633\u0679\u0631\u06a9\u0686\u0631 \u0627\u0633\u0679\u0648\u0631\u06cc\u062c \u0648\u06c1\u06cc \u06c1\u06d2 \u062c\u0648 \u067e\u06cc\u062f\u0627\u0648\u0627\u0631 \u06a9\u06cc \u0637\u0631\u062d \u0644\u06af\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-private-repos-what-syncs-where\">\u0646\u062c\u06cc \u0627\u0633\u0679\u0648\u0631\u06cc\u062c: \u0645\u06cc\u06ba \u06a9\u06cc\u0627 \u0627\u0648\u0631 \u06a9\u06c1\u0627\u06ba \u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631 \u06c1\u0648\u06ba\u061f<\/h4>\n<p>\u06cc\u06c1 \u0644\u06cc\u0628 \u062f\u0648 GitHub \u0630\u062e\u06cc\u0631\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 <code>clearledger<\/code> \u06cc\u06c1 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u06a9\u0627 \u0645\u0631\u06a9\u0632\u06cc \u0630\u062e\u06cc\u0631\u06c1 \u06c1\u06d2\u060c \u062c\u0633 \u0645\u06cc\u06ba \u0627\u06cc\u067e \u06a9\u0648\u0688\u060c CI \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646\u060c \u062f\u0633\u062a\u0627\u0648\u06cc\u0632\u0627\u062a\u060c \u067e\u0627\u0644\u06cc\u0633\u06cc\u0627\u06ba\u060c \u0627\u0648\u0631 \u0644\u06cc\u0628 \u0641\u0627\u0626\u0644\u06cc\u06ba \u0634\u0627\u0645\u0644 \u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0630\u062e\u06cc\u0631\u06c1 \u0646\u062c\u06cc \u06c1\u0648 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><code>clearledger-infra<\/code> \u0635\u0631\u0641 Kubernetes \u0645\u06cc\u0646\u06cc \u0641\u06cc\u0633\u0679 \u0634\u0627\u0645\u0644 \u06c1\u06cc\u06ba\u06d4 ArgoCD \u0627\u0633 \u0630\u062e\u06cc\u0631\u06c1 \u06a9\u06cc \u0646\u06af\u0631\u0627\u0646\u06cc \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0633\u06d2 \u0627\u06cc\u067e\u0633 \u06a9\u06cc \u062a\u0642\u0633\u06cc\u0645 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0628\u062a\u062f\u0627\u0626\u06cc\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u0627\u0633 \u0630\u062e\u06cc\u0631\u06c1 \u06a9\u0648 \u0639\u0648\u0627\u0645\u06cc \u0628\u0646\u0627\u0626\u06cc\u06ba \u062a\u0627\u06a9\u06c1 ArgoCD \u0627\u0633\u06d2 \u0628\u063a\u06cc\u0631 \u06a9\u0633\u06cc \u0627\u0636\u0627\u0641\u06cc \u062a\u0635\u062f\u06cc\u0642 \u06a9\u06d2 \u067e\u0691\u06be \u0633\u06a9\u06d2\u06d4<\/p>\n<p>\u0628\u06c1\u0627\u0624 \u0645\u0646\u062f\u0631\u062c\u06c1 \u0630\u06cc\u0644 \u06c1\u06d2:<\/p>\n<pre><code class=\"language-text\">clearledger\napp code + infra\/manifests\/\n        \u2193\nCI copies infra\/manifests\/\n        \u2193\nclearledger-infra\nKubernetes manifests only\n        \u2193\nArgoCD syncs from this repo\n        \u2193\nKubernetes cluster\n<\/code><\/pre>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/07\/1785194532_372_Homelab-\u0633\u06d2-AWS-\u062a\u06a9-\u067e\u0631\u0648\u0688\u06a9\u0634\u0646-\u06a9\u06d2-\u0644\u06cc\u06d2-\u062a\u06cc\u0627\u0631-DevSecOps-\u067e\u0644\u06cc\u0679.png\" alt=\"\u0641\u0644\u0648 \u0686\u0627\u0631\u0679 \u0628\u062a\u0627\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u062f\u0648\u0646\u0648\u06ba \u0631\u06cc\u067e\u0648\u0632 \u06a9\u06cc\u0633\u06d2 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4\" style=\"display:block;margin:0 auto\" width=\"1165\" height=\"1350\" loading=\"lazy\" title=\"\"><\/p>\n<p>ArgoCD \u0645\u0631\u06a9\u0632\u06cc \u0645\u062a\u0646 \u0646\u06c1\u06cc\u06ba \u067e\u0691\u06be \u0633\u06a9\u062a\u0627\u06d4 <code>clearledger<\/code> \u0631\u06cc\u067e\u0648 \u0635\u0631\u0641 \u067e\u0691\u06be\u06cc\u06ba <code>clearledger-infra<\/code>. \u0627\u06af\u0631 <code>clearledger<\/code> \u06cc\u06c1 \u0679\u06be\u06cc\u06a9 \u06c1\u06d2 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u06cc\u06c1 \u0646\u062c\u06cc \u06c1\u06d2\u06d4 \u0627\u06af\u0631 <code>clearledger-infra<\/code> \u0627\u06af\u0631 \u06cc\u06c1 \u0646\u062c\u06cc \u06c1\u06d2\u060c \u062a\u0648 \u0622\u067e \u06a9\u0648 \u0628\u0639\u062f \u0645\u06cc\u06ba \u0627\u067e\u0646\u06d2 ArgoCD GitHub \u06a9\u06cc \u0627\u0633\u0646\u0627\u062f \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u06af\u06cc\u06d4 \u0628\u0635\u0648\u0631\u062a \u062f\u06cc\u06af\u0631\u060c \u0622\u067e ArgoCD \u062f\u06cc\u06a9\u06be \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>ComparisonError<\/code>.<\/p>\n<p>GitHub \u067e\u0631 \u0627\u0646\u0641\u0631\u0627\u0633\u0679\u0631\u06a9\u0686\u0631 \u06a9\u0627 \u0630\u062e\u06cc\u0631\u06c1 \u0628\u0646\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<ol>\n<li>\n<p>GitHub \u067e\u0631 \u062c\u0627\u0626\u06cc\u06ba \u0627\u0648\u0631 \u067e\u06be\u0631 <strong>\u0646\u06cc\u0627 \u0630\u062e\u06cc\u0631\u06c1<\/strong><\/p>\n<\/li>\n<li>\n<p>\u0628\u0631\u0627\u06c1 \u06a9\u0631\u0645 \u0627\u0633 \u06a9\u0627 \u0646\u0627\u0645 \u062f\u06cc\u06ba\u06d4 <code>clearledger-infra<\/code><\/p>\n<\/li>\n<li>\n<p>\u0645\u0646\u062a\u062e\u0628 \u06a9\u0631\u06cc\u06ba <strong>\u0639\u0648\u0627\u0645\u06cc<\/strong><\/p>\n<\/li>\n<li>\n<p>README \u0634\u0627\u0645\u0644 \u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba <strong>\u0628\u0646\u0627\u0646\u0627<\/strong><\/p>\n<\/li>\n<\/ol>\n<p>CI \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06a9\u0648 \u0628\u0639\u062f \u0645\u06cc\u06ba \u0627\u067e \u0688\u06cc\u0679 \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4 <code>clearledger-infra<\/code> \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u0645\u0631\u062d\u0644\u06d2 1 \u0645\u06cc\u06ba \u0646\u06c1\u06cc\u06ba \u0686\u0644\u062a\u06cc \u06c1\u06d2\u06d4 <code>kubectl apply<\/code> &#8211; Git \u06a9\u0648 \u0627\u067e \u0688\u06cc\u0679 \u06a9\u0631\u06cc\u06ba\u06d4 \u0645\u0631\u062d\u0644\u06c1 2 \u0645\u06cc\u06ba\u060c ArgoCD \u0645\u062a\u0639\u0644\u0642\u06c1 Git \u0630\u062e\u06cc\u0631\u06c1 \u06a9\u0648 \u067e\u0691\u06be\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0633\u06d2 \u06a9\u0644\u0633\u0679\u0631 \u067e\u0631 \u0644\u0627\u06af\u0648 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u062f\u0628\u0627\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2:<\/strong> Kustomize \u0645\u06cc\u06ba \u0627\u067e\u0646\u0627 Docker Hub \u0635\u0627\u0631\u0641 \u0646\u0627\u0645 \u0633\u06cc\u0679 \u06a9\u0631\u06cc\u06ba (\u062a\u0635\u0648\u06cc\u0631\u06cc \u0679\u06cc\u06af\u0632 \u06cc\u06c1\u0627\u06ba \u062d\u0644 \u06a9\u06cc\u06d2 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0622\u067e \u06a9\u06cc \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc YAML \u0645\u06cc\u06ba \u0646\u06c1\u06cc\u06ba)\u06d4<\/p>\n<pre><code class=\"language-bash\"># Replace YOUR_DOCKERHUB_USERNAME with the same value as $DOCKER_USERNAME from \u00a70.3\nsed -i.bak \"s\/YOUR_DOCKERHUB_USERNAME\/${DOCKER_USERNAME}\/g\" infra\/manifests\/kustomization.yaml\nrm -f infra\/manifests\/kustomization.yaml.bak\n<\/code><\/pre>\n<p>\u0635\u0631\u0641 Kubernetes \u0645\u06cc\u0646\u06cc \u0641\u06cc\u0633\u0679 \u06a9\u0648 \u067e\u0634 \u06a9\u0631\u06cc\u06ba\u06d4 <code>infra\/manifests\/<\/code> (\u0646\u06cc\u0686\u06d2 \u0633\u0628 \u06a9\u0686\u06be \u0646\u06c1\u06cc\u06ba\u06d4 <code>infra\/<\/code>):<\/p>\n<pre><code class=\"language-bash\">mkdir -p \/tmp\/clearledger-infra\ncp -r infra\/manifests \/tmp\/clearledger-infra\/\ncd \/tmp\/clearledger-infra\ngit init\ngit remote add origin https:\/\/github.com\/YOUR_USERNAME\/clearledger-infra.git\ngit add . && git commit -m \"feat: initial manifests\" && git push -u origin main\ncd -\n<\/code><\/pre>\n<p><strong> \u0644\u06cc\u0628 \u0686\u06cc\u06a9 \u067e\u0648\u0627\u0626\u0646\u0679: GitHub \u067e\u0631 \u0627\u0646\u0641\u0631\u0627\u0633\u0679\u0631\u06a9\u0686\u0631 \u0630\u062e\u06cc\u0631\u06c1 (\u00a71.4 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06a9\u06cc\u0627 \u06af\u06cc\u0627)<\/strong><\/p>\n<p>\u0622\u067e \u06a9\u06d2 \u0644\u06cc\u067e \u0679\u0627\u067e \u067e\u0631:<\/p>\n<pre><code class=\"language-bash\">grep \"docker.io\/${DOCKER_USERNAME}\/\" infra\/manifests\/kustomization.yaml | wc -l\ngrep YOUR_DOCKERHUB_USERNAME infra\/manifests\/kustomization.yaml || echo \"OK: placeholder replaced\"\n<\/code><\/pre>\n<p>\u0645\u062a\u0648\u0642\u0639: \u067e\u06c1\u0644\u0627 \u06a9\u0645\u0627\u0646\u0688 \u067e\u0631\u0646\u0679 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4 <code>4<\/code> (4 \u062a\u0635\u0648\u06cc\u0631\u06cc \u0644\u0627\u0626\u0646\u06cc\u06ba)\u06d4 \u062f\u0648\u0633\u0631\u06cc \u067e\u0631\u0646\u0679\u0646\u06af <code>OK: placeholder replaced<\/code>\u06cc\u06c1 \u0627\u0628\u06be\u06cc \u062a\u06a9 \u0644\u0627\u0626\u0646 4 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u06cc\u06c1 \u06a9\u06c1\u062a\u0627 \u06c1\u06d2: <code>YOUR_DOCKERHUB_USERNAME<\/code>.<\/p>\n<p>\u0627\u067e\u0646\u06d2 \u0628\u0631\u0627\u0624\u0632\u0631 \u0645\u06cc\u06ba\u060c \u06a9\u06be\u0648\u0644\u06cc\u06ba: <code>https:\/\/github.com\/YOUR_USERNAME\/clearledger-infra\/tree\/main\/manifests<\/code> \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 <strong>\u0627\u067e\u0646\u06cc \u0622\u0646\u06a9\u06be\u0648\u06ba \u0633\u06d2<\/strong>:<\/p>\n<table>\n<thead>\n<tr>\n<th>\u0641\u0627\u0626\u0644\/\u0641\u0648\u0644\u0688\u0631<\/th>\n<th>\u0645\u0648\u062c\u0648\u062f \u06c1\u0648\u0646\u0627 \u0636\u0631\u0648\u0631\u06cc \u06c1\u06d2<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>kustomization.yaml<\/code><\/td>\n<td>\u06c1\u0627\u06ba \u0627\u0633\u06d2 \u06a9\u06be\u0648\u0644\u06cc\u06ba: <code>newName:<\/code> \u0644\u0627\u0626\u0646 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba <strong>\u0622\u067e \u06a9\u0627<\/strong> \u0688\u0648\u06a9\u0631 \u06c1\u0628 \u0635\u0627\u0631\u0641<\/td>\n<\/tr>\n<tr>\n<td><code>auth-service\/secret.yaml<\/code><\/td>\n<td>\u06c1\u0627\u06ba \u0644\u06cc\u0648\u0644 2 \u0633\u06d2 4 \u062a\u06a9\u060c \u0622\u067e \u06a9\u0648 \u0644\u06cc\u0648\u0644 5 \u062a\u06a9 \u0627\u0633 \u0622\u0626\u0679\u0645 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u06af\u06cc\u06d4<\/td>\n<\/tr>\n<tr>\n<td><code>ledger-service\/secret.yaml<\/code><\/td>\n<td>\u06c1\u0627\u06ba<\/td>\n<\/tr>\n<tr>\n<td><code>auth-service\/deployment.yaml<\/code><\/td>\n<td>\u06c1\u0627\u06ba \u0627\u0633\u06d2 \u06a9\u06be\u0648\u0644\u06cc\u06ba: \u0627\u0633 \u0645\u06cc\u06ba \u062f\u0631\u062c \u0630\u06cc\u0644 \u0686\u06cc\u0632\u06cc\u06ba \u06c1\u0648\u0646\u06cc \u0686\u0627\u06c1\u0626\u06cc\u06ba\u06d4 <code>secretKeyRef<\/code>, <strong>~ \u0646\u06c1\u06cc\u06ba<\/strong> <code>vault.hashicorp.com<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>netpol\/<\/code><\/td>\n<td><strong>\u0646\u06c1\u06cc\u06ba<\/strong>. \u0627\u06af\u0631 \u0641\u0648\u0644\u0688\u0631 \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2 \u062a\u0648 \u0627\u0633\u06d2 \u0645\u0631\u062d\u0644\u06c1 2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 GitHub \u0633\u06d2 \u062d\u0630\u0641 \u06a9\u0631 \u062f\u06cc\u06ba\u06d4<\/td>\n<\/tr>\n<tr>\n<td><code>vault\/<\/code><\/td>\n<td><strong>\u0646\u06c1\u06cc\u06ba<\/strong>. \u0648\u0627\u0644\u0679 \u06a9\u06cc \u06af\u0631\u062f\u0634 \u0635\u0631\u0641 \u0645\u0631\u062d\u0644\u06c1 5 \u067e\u0631 \u0644\u0627\u06af\u0648 \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><strong>\u06a9\u0648\u0646 \u0633\u06d2 \u0641\u0648\u0644\u0688\u0631\u0632 \u0627\u06c1\u0645 \u06c1\u06cc\u06ba\u061f<\/strong> \u062a\u0645 \u0646\u06d2 \u0635\u0631\u0641 \u062f\u06be\u06a9\u0627 \u062f\u06cc\u0627 <code>infra\/manifests\/<\/code> GitHub \u067e\u0631\u060c \u06cc\u06c1 \u0679\u06be\u06cc\u06a9 \u06c1\u06d2. \u0627\u0633 \u0630\u062e\u06cc\u0631\u06c1 \u0645\u06cc\u06ba \u0628\u0627\u0642\u06cc \u0633\u0628 \u06a9\u0686\u06be \u0641\u06cc \u0627\u0644\u062d\u0627\u0644 \u0645\u0642\u0627\u0645\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u0628\u0639\u062f \u06a9\u06d2 \u0645\u0631\u0627\u062d\u0644 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0686\u06be \u0638\u0627\u06c1\u0631 (\u0646\u06cc\u0679 \u0648\u0631\u06a9 \u06a9\u06cc \u067e\u0627\u0644\u06cc\u0633\u06cc\u0627\u06ba\u060c \u0648\u0627\u0644\u0679 \u0627\u0636\u0627\u0641\u06c1) <code>infra\/deferred-by-stage\/<\/code> \u067e\u0631 <code>clearledger<\/code> \u0631\u06cc\u067e\u0648 \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u062c\u0628 \u0622\u067e \u0627\u0633 \u0645\u0631\u062d\u0644\u06d2 \u067e\u0631 \u067e\u06c1\u0646\u0686 \u062c\u0627\u0626\u06cc\u06ba \u06af\u06d2\u060c \u0622\u067e \u0627\u0633\u06d2 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0644\u0627\u06af\u0648 \u06a9\u0631\u06cc\u06ba \u06af\u06d2\u06d4 \u06a9\u0631\u0648 <strong>~ \u0646\u06c1\u06cc\u06ba<\/strong> \u0648\u06c1 \u0641\u0648\u0644\u0688\u0631 <code>clearledger-infra<\/code>\u06cc\u0627 ArgoCD \u0627\u0633\u06d2 \u0628\u06c1\u062a \u062c\u0644\u062f \u062a\u0642\u0633\u06cc\u0645 \u06a9\u0631\u06d2 \u06af\u0627\u06d4<\/p>\n<p>\u0622\u067e \u0646\u06d2 \u0645\u062d\u0633\u0648\u0633 \u06a9\u06cc\u0627 \u06c1\u0648\u06af\u0627\u06d4 <code>stages\/stage-1-ci-pipeline\/<\/code> \u0645\u06cc\u0646\u06cc \u0641\u06cc\u0633\u0679 \u06a9\u06cc \u06a9\u0648\u0626\u06cc \u06a9\u0627\u067e\u06cc \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0639\u0627\u0645 \u0628\u0627\u062a \u06c1\u06d2\u06d4 \u06c1\u0645\u0627\u0631\u06cc \u0644\u06cc\u0628 \u0645\u06cc\u06ba\u060c \u06c1\u0645 YAML \u06a9\u06cc \u0646\u0642\u0644 \u0646\u06c1\u06cc\u06ba \u0628\u0646\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1\u0627\u06ba \u0645\u06a9\u0645\u0644 \u06a9\u0627\u067e\u06cc \u06c1\u06d2: <code>infra\/manifests\/<\/code> \u06cc\u06c1 \u0627\u0633 \u0630\u062e\u06cc\u0631\u06c1 \u0645\u06cc\u06ba \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0627\u06cc\u06a9 \u0644\u0627\u0626\u06cc\u0648 GitOps \u06a9\u0627\u067e\u06cc \u06cc\u06c1 \u06c1\u06d2: <code>clearledger-infra<\/code> GitHub \u067e\u0631\u06d4<\/p>\n<p><strong>\u062c\u0648 \u0622\u067e \u0646\u06d2 \u062b\u0627\u0628\u062a \u06a9\u06cc\u0627 \u06c1\u06d2:<\/strong> Kubernetes \u06a9\u0646\u0641\u06cc\u06af\u0631\u06cc\u0634\u0646\u0632 \u06a9\u06d2 \u067e\u0627\u0633 \u0627\u0628 \u0622\u067e \u06a9\u06d2 \u0627\u06cc\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u06a9\u0648\u0688 \u0633\u06d2 \u0627\u0644\u06af \u0627\u0646 \u06a9\u06d2 \u0627\u067e\u0646\u06d2 \u0630\u062e\u06cc\u0631\u06d2 \u0627\u0648\u0631 Git \u06a9\u06cc \u062a\u0627\u0631\u06cc\u062e \u06c1\u06d2\u06d4 CI \u06a9\u0648 \u0627\u067e \u0688\u06cc\u0679 \u06a9\u0631 \u062f\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4 <code>clearledger-infra<\/code> \u06c1\u0631 \u062a\u0639\u0645\u06cc\u0631 \u06a9\u06d2 \u0628\u0639\u062f\u060c \u06a9\u0648\u0688 \u0627\u0648\u0631 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u0641\u0627\u0626\u0644\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0627\u06cc\u067e \u0631\u06cc\u067e\u0648\u0632\u0679\u0631\u06cc \u06a9\u0648 \u0628\u0631\u0642\u0631\u0627\u0631 \u0631\u06a9\u06be\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-14-set-up-github-secrets\">1.4: GitHub \u062e\u0641\u06cc\u06c1 \u062a\u0631\u062a\u06cc\u0628\u0627\u062a<\/h3>\n<p>\u062a\u062d\u0631\u06cc\u06a9 <code>github.com\/YOUR_USERNAME\/clearledger<\/code> \u067e\u06be\u0631 Settings, Secrets and Variables, Actions, New Storage Secret \u06a9\u0648 \u0645\u0646\u062a\u062e\u0628 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u0648\u0631\u06a9 \u0641\u0644\u0648 \u06a9\u0648 Docker Hub\u060c GitHub\u060c \u0627\u0648\u0631 \u0627\u0645\u06cc\u062c \u067e\u0631 \u062f\u0633\u062a\u062e\u0637 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633\u0646\u0627\u062f \u062f\u0631\u06a9\u0627\u0631 \u06c1\u06cc\u06ba\u06d4<\/p>\n<ul>\n<li>\n<p>Docker Hub &#8211; \u0622\u067e \u06a9\u0648 \u062a\u0635\u0627\u0648\u06cc\u0631 \u06a9\u0648 \u0622\u06af\u06d2 \u0628\u0691\u06be\u0627\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>GitHub\u060c \u0622\u067e \u06a9\u0648 GitHub \u067e\u0631 \u0627\u0645\u06cc\u062c \u0679\u06cc\u06af \u0627\u067e \u0688\u06cc\u0679\u0633 \u06a9\u0648 \u0622\u06af\u06d2 \u0628\u0691\u06be\u0627\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4 <code>clearledger-infra<\/code>.<\/p>\n<\/li>\n<li>\n<p>Cosign &#8211; \u0622\u067e \u062a\u0635\u0648\u06cc\u0631 \u06a9\u0648 \u062f\u0628\u0627\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f \u0627\u0633 \u067e\u0631 \u062f\u0633\u062a\u062e\u0637 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ul>\n<p>\u06a9\u0631\u0648 <strong>~ \u0646\u06c1\u06cc\u06ba<\/strong> \u0627\u0646 \u0627\u0642\u062f\u0627\u0631 \u06a9\u0648 \u0627\u067e\u0646\u06cc YAML \u0641\u0627\u0626\u0644 \u0645\u06cc\u06ba \u0686\u0633\u067e\u0627\u06ba \u06a9\u0631\u06cc\u06ba\u06d4 GitHub \u0627\u06cc\u06a9\u0634\u0646\u0632 \u06a9\u0648 \u0628\u0637\u0648\u0631 \u062e\u0641\u06cc\u06c1 \u0645\u062d\u0641\u0648\u0638 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-secret-1-dockerusername\">\u0631\u0627\u0632 1\u060c <code>DOCKER_USERNAME<\/code><\/h4>\n<p>\u06cc\u06c1 \u0622\u067e \u06a9\u0627 Docker Hub \u0635\u0627\u0631\u0641 \u0646\u0627\u0645 \u06c1\u06d2\u06d4<\/p>\n<p>\u06c1\u0627\u06ba:<\/p>\n<pre><code class=\"language-text\">veeno-demo\n<\/code><\/pre>\n<p>\u0627\u0633\u06d2 Docker Hub (hub.docker.com\u060c \u067e\u0631\u0648\u0641\u0627\u0626\u0644 \u0645\u06cc\u0646\u0648\u060c \u0627\u06a9\u0627\u0624\u0646\u0679 \u06a9\u06cc \u062a\u0631\u062a\u06cc\u0628\u0627\u062a) \u0633\u06d2 \u062d\u0627\u0635\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-secret-2-dockerpassword\">\u0631\u0627\u0632 2\u060c <code>DOCKER_PASSWORD<\/code><\/h4>\n<p>Docker Hub \u06c1\u0648\u0646\u0627 \u0636\u0631\u0648\u0631\u06cc \u06c1\u06d2\u06d4 <strong>\u0631\u0633\u0627\u0626\u06cc \u0679\u0648\u06a9\u0646<\/strong>\u06cc\u06c1 \u0627\u06cc\u06a9 \u0639\u0627\u0645 Docker Hub \u067e\u0627\u0633 \u0648\u0631\u0688 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0633\u06d2 \u06cc\u06c1\u0627\u06ba \u0628\u0646\u0627\u0626\u06cc\u06ba:<\/p>\n<pre><code class=\"language-text\">hub.docker.com\n\u2192 Account Settings\n\u2192 Security\n\u2192 New Access Token\n\u2192 Description: clearledger-github-actions\n\u2192 Access permissions: Read, Write, Delete or Read\/Write\n\u2192 Generate\n<\/code><\/pre>\n<p>\u0641\u0648\u0631\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0679\u0648\u06a9\u0646 \u06a9\u0627\u067e\u06cc \u06a9\u0631\u06cc\u06ba\u06d4 Docker Hub \u0627\u0633\u06d2 \u0635\u0631\u0641 \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-secret-3-infrarepotoken\">\u0631\u0627\u0632 3\u060c <code>INFRA_REPO_TOKEN<\/code><\/h4>\n<p>\u06cc\u06c1 GitHub \u067e\u0631\u0633\u0646\u0644 \u0627\u06cc\u06a9\u0633\u0633 \u0679\u0648\u06a9\u0646 (PAT) \u06c1\u06d2\u06d4 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u0627\u0633\u06d2 \u062f\u0648\u0633\u0631\u06d2 \u0630\u062e\u06cc\u0631\u06d2 \u0645\u06cc\u06ba \u06a9\u0645\u0679 \u06a9\u0648 \u0622\u06af\u06d2 \u0628\u0691\u06be\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 <code>clearledger-infra<\/code>.<\/p>\n<p>\u0627\u0633\u06d2 \u06cc\u06c1\u0627\u06ba \u0628\u0646\u0627\u0626\u06cc\u06ba:<\/p>\n<pre><code class=\"language-text\">GitHub profile settings\n\u2192 Settings\n\u2192 Developer settings\n\u2192 Personal access tokens\n\u2192 Tokens (classic)\n\u2192 Click \"Generate new token\"\n\u2192 Choose \"Generate new token (classic)\"\n\u2192 If GitHub asks for your password or 2FA, complete it\n\u2192 Note: clearledger-infra-ci\n\u2192 Expiration: choose a lab-friendly value\n\u2192 Select scope: repo\n   This allows the pipeline to push to clearledger-infra.\n\u2192 Generate token\n<\/code><\/pre>\n<p>\u0641\u0648\u0631\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0679\u0648\u06a9\u0646 \u06a9\u0627\u067e\u06cc \u06a9\u0631\u06cc\u06ba\u06d4 GitHub \u0627\u0633\u06d2 \u0635\u0631\u0641 \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0633 \u0644\u06cc\u0628 \u0645\u06cc\u06ba <code>repo<\/code> \u062f\u0627\u0626\u0631\u06c1 \u06a9\u0627\u0631 \u0633\u0628 \u0633\u06d2 \u0622\u0633\u0627\u0646 \u0622\u067e\u0634\u0646 \u06c1\u06d2\u06d4 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u0645\u06cc\u06ba\u060c \u0633\u062e\u062a \u0627\u062c\u0627\u0632\u062a\u0648\u06ba \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba \u062c\u06cc\u0633\u06d2 \u06a9\u06c1 \u0628\u0627\u0631\u06cc\u06a9 \u0679\u0648\u06a9\u0646 \u062a\u06a9 \u0645\u062d\u062f\u0648\u062f: <code>clearledger-infra<\/code>.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/07\/1785194532_512_Homelab-\u0633\u06d2-AWS-\u062a\u06a9-\u067e\u0631\u0648\u0688\u06a9\u0634\u0646-\u06a9\u06d2-\u0644\u06cc\u06d2-\u062a\u06cc\u0627\u0631-DevSecOps-\u067e\u0644\u06cc\u0679.png\" alt=\"docker UI \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679 \u062f\u06a9\u06be\u0627 \u0631\u06c1\u0627 \u06c1\u06d2 \u06a9\u06c1 PAT \u06a9\u0648 \u06a9\u06c1\u0627\u06ba \u0633\u06cc\u0679 \u06a9\u0631\u0646\u0627 \u06c1\u06d2\u06d4\" style=\"display:block;margin:0 auto\" width=\"302\" height=\"888\" loading=\"lazy\" title=\"\"><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/07\/1785194532_135_Homelab-\u0633\u06d2-AWS-\u062a\u06a9-\u067e\u0631\u0648\u0688\u06a9\u0634\u0646-\u06a9\u06d2-\u0644\u06cc\u06d2-\u062a\u06cc\u0627\u0631-DevSecOps-\u067e\u0644\u06cc\u0679.png\" alt=\"Docker UI \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679 \u062f\u06a9\u06be\u0627 \u0631\u06c1\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0679\u0648\u06a9\u0646 \u0627\u0633\u06a9\u0648\u067e \u06a9\u0648 \u06a9\u06c1\u0627\u06ba \u0633\u06cc\u0679 \u06a9\u0631\u0646\u0627 \u06c1\u06d2\u06d4\" style=\"display:block;margin:0 auto\" width=\"1039\" height=\"593\" loading=\"lazy\" title=\"\"><\/p>\n<h4 id=\"heading-secrets-4-and-5-cosignprivatekey-and-cosignpassword\">\u0631\u0627\u0632 4 \u0627\u0648\u0631 5 <code>COSIGN_PRIVATE_KEY<\/code> \u0627\u0648\u0631 <code>COSIGN_PASSWORD<\/code><\/h4>\n<p>\u0622\u067e \u06a9\u06cc \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u0646\u06d2 \u0688\u0648\u06a9\u0631 \u06c1\u0628 \u06a9\u06cc \u0637\u0631\u0641 \u062f\u06be\u06a9\u06cc\u0644\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f \u06a9\u0646\u0679\u06cc\u0646\u0631 \u06a9\u06cc \u062a\u0635\u0627\u0648\u06cc\u0631 \u06a9\u0648 \u0633\u0627\u0626\u0646 \u0633\u0627\u0626\u0646 \u06a9\u0631\u06cc\u06ba\u06d4 \u0628\u0639\u062f \u0645\u06cc\u06ba\u060c \u0645\u0631\u062d\u0644\u06c1 4 \u0645\u06cc\u06ba\u060c \u06c1\u0645 Kyverno \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0639\u0648\u0627\u0645\u06cc \u06a9\u0644\u06cc\u062f \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0627\u06a9\u06c1 \u06a9\u0644\u0633\u0679\u0631 \u0627\u0633 \u0628\u0627\u062a \u06a9\u06cc \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631 \u0633\u06a9\u06d2 \u06a9\u06c1 \u062a\u0635\u0648\u06cc\u0631 \u0642\u0627\u0628\u0644 \u0627\u0639\u062a\u0645\u0627\u062f \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u0633\u06d2 \u06c1\u06d2\u06d4<\/p>\n<p>\u0645\u0644\u0679\u06cc \u067e\u0627\u0633 VM \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0646\u06c1\u06cc\u06ba\u060c \u0645\u06cc\u0632\u0628\u0627\u0646 \u0633\u0633\u0679\u0645 \u067e\u0631 \u06a9\u0644\u06cc\u062f\u06cc \u062c\u0648\u0691\u0627 \u0628\u0646\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\"># macOS: brew install cosign\n# Linux\/WSL2: curl -sSL -o cosign https:\/\/github.com\/sigstore\/cosign\/releases\/latest\/download\/cosign-linux-amd64 && chmod +x cosign && sudo mv cosign \/usr\/local\/bin\/\ncosign generate-key-pair\n<\/code><\/pre>\n<p>\u06cc\u06c1 \u067e\u06cc\u062f\u0627 \u06a9\u0631\u062a\u0627 \u06c1\u06d2:<\/p>\n<pre><code class=\"language-text\">cosign.key   # private key \u2014 never commit this\ncosign.pub   # public key \u2014 keep for later Kyverno verification\n<\/code><\/pre>\n<p>\u062c\u0628 Cosign \u0622\u067e \u0633\u06d2 \u067e\u0627\u0633 \u0648\u0631\u0688 \u0645\u0627\u0646\u06af\u06d2 \u062a\u0648 \u0627\u0633\u06d2 \u062f\u0631\u062c \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0633\u06d2 \u0627\u067e\u0646\u06d2 \u067e\u0627\u0633 \u0648\u0631\u0688 \u0645\u06cc\u0646\u06cc\u062c\u0631 \u0645\u06cc\u06ba \u0645\u062d\u0641\u0648\u0638 \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u0622\u067e \u0646\u06d2 \u067e\u06c1\u0644\u06d2 \u06c1\u06cc \u0628\u063a\u06cc\u0631 \u067e\u0627\u0633 \u0648\u0631\u0688 \u06a9\u06d2 \u06a9\u0644\u06cc\u062f \u0628\u0646\u0627\u0626\u06cc \u06c1\u06d2 \u062a\u0648 \u0627\u0633 \u0645\u0634\u0642 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633\u06d2 \u067e\u0627\u0633 \u0648\u0631\u0688 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062f\u0648\u0628\u0627\u0631\u06c1 \u062a\u062e\u0644\u06cc\u0642 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u06cc\u06c1 \u067e\u0627\u0646\u0686 \u0631\u0627\u0632 <code>clearledger<\/code> \u0631\u06cc\u067e\u0648\u060c \u0646\u06c1\u06cc\u06ba <code>clearledger-infra<\/code>:<\/p>\n<table>\n<thead>\n<tr>\n<th>\u062e\u0641\u06cc\u06c1 \u0646\u0627\u0645<\/th>\n<th>\u0642\u062f\u0631<\/th>\n<th>\u0645\u0642\u0635\u062f<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>DOCKER_USERNAME<\/code><\/td>\n<td>Docker Hub \u0635\u0627\u0631\u0641 \u0646\u0627\u0645<\/td>\n<td>\u062a\u0635\u0627\u0648\u06cc\u0631 \u06a9\u0648 \u0622\u06af\u06d2 \u0628\u0691\u06be\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u067e\u0646\u06cc \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u0645\u06cc\u06ba \u0644\u0627\u06af \u0627\u0646 \u06a9\u0631\u06cc\u06ba\u06d4<\/td>\n<\/tr>\n<tr>\n<td><code>DOCKER_PASSWORD<\/code><\/td>\n<td>\u0688\u0627\u06a9\u0631 \u062d\u0628 \u062a\u06a9 \u0631\u0633\u0627\u0626\u06cc \u06a9\u0627 \u0679\u0648\u06a9\u0646<\/td>\n<td>\u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 Docker Hub \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4<\/td>\n<\/tr>\n<tr>\n<td><code>INFRA_REPO_TOKEN<\/code><\/td>\n<td>GitHub PAT \u0627\u0648\u067e\u0631<\/td>\n<td>\u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u0627\u0645\u06cc\u062c \u0679\u06cc\u06af \u0627\u067e \u0688\u06cc\u0679\u0633 \u06a9\u0648 Clearledger-infra \u067e\u0631 \u062f\u06be\u06a9\u06cc\u0644\u062a\u06cc \u06c1\u06d2\u06d4<\/td>\n<\/tr>\n<tr>\n<td><code>COSIGN_PRIVATE_KEY<\/code><\/td>\n<td>\u062a\u0641\u0635\u06cc\u0644 <code>cosign.key<\/code><\/td>\n<td>\u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06a9\u06cc \u0646\u0645\u0627\u0626\u0646\u062f\u06af\u06cc \u06a9\u06d2 \u0633\u0627\u062a\u06be \u06a9\u0646\u0679\u06cc\u0646\u0631 \u06a9\u06cc \u062a\u0635\u0648\u06cc\u0631 \u06a9\u0648 \u0622\u06af\u06d2 \u0628\u0691\u06be\u0627\u06cc\u0627 \u06af\u06cc\u0627\u06d4<\/td>\n<\/tr>\n<tr>\n<td><code>COSIGN_PASSWORD<\/code><\/td>\n<td>Cosign \u06a9\u0644\u06cc\u062f \u0628\u0646\u0627\u062a\u06d2 \u0648\u0642\u062a \u067e\u0627\u0633 \u0648\u0631\u0688 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/td>\n<td>\u062f\u0633\u062a\u062e\u0637 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646 \u0646\u062c\u06cc \u06a9\u0644\u06cc\u062f \u06a9\u0648 \u063a\u06cc\u0631 \u0645\u0642\u0641\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/07\/1785194532_263_Homelab-\u0633\u06d2-AWS-\u062a\u06a9-\u067e\u0631\u0648\u0688\u06a9\u0634\u0646-\u06a9\u06d2-\u0644\u06cc\u06d2-\u062a\u06cc\u0627\u0631-DevSecOps-\u067e\u0644\u06cc\u0679.png\" alt=\"\u06af\u06cc\u062a\u06be\u0628 UI \u06a9\u0627 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679 \u0645\u06cc\u0631\u06d2 \u0630\u062e\u06cc\u0631\u06d2 \u06a9\u06d2 \u0631\u0627\u0632 \u062f\u06a9\u06be\u0627 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4\" style=\"display:block;margin:0 auto\" width=\"980\" height=\"338\" loading=\"lazy\" title=\"\"><\/p>\n<p><strong>\u0630\u062e\u06cc\u0631\u06c1 \u0645\u062a\u063a\u06cc\u0631 (\u062e\u0641\u06cc\u06c1 \u0646\u06c1\u06cc\u06ba)<\/strong> (\u0627\u062e\u062a\u06cc\u0627\u0631\u06cc) \u0627\u06af\u0644\u06d2 \u0645\u0631\u062d\u0644\u06d2 \u067e\u0631 \u062c\u0627\u0626\u06cc\u06ba\u06d4 \u0630\u06cc\u0644 \u0645\u06cc\u06ba \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba <strong>\u062a\u0631\u062a\u06cc\u0628\u0627\u062a\u060c \u0631\u0627\u0632 \u0627\u0648\u0631 \u0645\u062a\u063a\u06cc\u0631\u0627\u062a\u060c \u0627\u0639\u0645\u0627\u0644\u060c \u0645\u062a\u063a\u06cc\u0631\u0627\u062a<\/strong>:<\/p>\n<table>\n<thead>\n<tr>\n<th>\u0645\u062a\u063a\u06cc\u0631<\/th>\n<th>\u0645\u0631\u062d\u0644\u06c1 1<\/th>\n<th>\u06a9\u0628 \u0686\u0627\u0644\u0648 \u06a9\u0631\u0646\u0627 \u06c1\u06d2\u06d4<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>ENABLE_ARGOCD_SYNC<\/code><\/td>\n<td>\u0686\u06be\u0648\u0691 \u062f\u0648 <strong>\u0645\u0642\u0631\u0631 \u0646\u06c1\u06cc\u06ba<\/strong><\/td>\n<td><strong>\u0645\u0631\u062d\u0644\u06c1 2<\/strong> &#8211; \u0627\u0631\u06af\u0648 \u0633\u06cc \u0688\u06cc \u06a9\u06cc \u067e\u06c1\u0644\u06cc \u06c1\u0645 \u0622\u06c1\u0646\u06af\u06cc \u06a9\u06d2 \u0628\u0639\u062f \u0646\u0627\u0631\u0645\u0644 \u06c1\u06d2 (\u062f\u06cc\u06a9\u06be\u06cc\u06ba CI \u0627\u06cc\u06a9\u0679\u06cc\u0648\u06cc\u0634\u0646 \u2192 ArgoCD \u06c1\u06cc\u0646\u0688 \u0622\u0641)<\/td>\n<\/tr>\n<tr>\n<td><code>ENABLE_DAST<\/code><\/td>\n<td>\u0686\u06be\u0648\u0691 \u062f\u0648 <strong>\u0645\u0642\u0631\u0631 \u0646\u06c1\u06cc\u06ba<\/strong><\/td>\n<td><strong>\u0645\u0631\u062d\u0644\u06c1 3<\/strong> &#8211; \u0627\u06cc\u067e \u06a9\u06d2 \u0641\u0639\u0627\u0644 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f <code>clearledger.local<\/code> (DAST \u0627\u06cc\u06a9\u0679\u06cc\u0648\u06cc\u0634\u0646 \u062f\u06cc\u06a9\u06be\u06cc\u06ba)<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u0645\u0631\u062d\u0644\u06c1 1 \u0645\u06cc\u06ba \u06a9\u0648\u0626\u06cc \u0645\u062a\u063a\u06cc\u0631\u0627\u062a \u0634\u0627\u0645\u0644 \u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u0622\u067e \u0627\u0633\u06d2 \u0627\u0628\u06be\u06cc \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 CI \u0622\u0631\u06af\u0648 \u0633\u06cc \u0688\u06cc \u06a9\u0648 \u0631\u06cc\u0641\u0631\u06cc\u0634 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u06a9\u0648\u0634\u0634 \u06a9\u0631\u06d2 \u06af\u0627 \u06cc\u0627 \u06a9\u0644\u0633\u0679\u0631 \u06a9\u06d2 \u062a\u06cc\u0627\u0631 \u06c1\u0648\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 ZAP \u06a9\u0648 \u0686\u0644\u0627\u0646\u06d2 \u06a9\u06cc \u06a9\u0648\u0634\u0634 \u06a9\u0631\u06d2 \u06af\u0627\u060c \u062c\u0633 \u0633\u06d2 \u0622\u067e \u06a9\u06cc \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u0622\u0624\u0679 \u067e\u0679 \u06a9\u0648 \u067e\u0691\u06be\u0646\u0627 \u0645\u0634\u06a9\u0644 \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4 \u06af\u0627\u0626\u06cc\u0688 \u0622\u067e \u06a9\u0648 \u06c1\u0631 \u0688\u06cc\u0648\u0627\u0626\u0633 \u06a9\u0648 \u0622\u0646 \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0635\u062d\u06cc\u062d \u0644\u0645\u062d\u06c1 \u0628\u062a\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0628\u0633 \u06cc\u0627\u062f \u0631\u06a9\u06be\u06cc\u06ba \u06a9\u06c1 \u062f\u0648\u0646\u0648\u06ba \u0645\u0648\u062c\u0648\u062f \u06c1\u06cc\u06ba\u06d4<\/p>\n<p><strong>\u062c\u0648 \u0622\u067e \u0646\u06d2 \u062b\u0627\u0628\u062a \u06a9\u06cc\u0627 \u06c1\u06d2:<\/strong> \u0631\u06cc\u067e\u0648\u0632\u0679\u0631\u06cc \u0645\u06cc\u06ba \u0627\u0633\u0646\u0627\u062f \u06a9\u0648 \u06c1\u0627\u0631\u0688 \u06a9\u0648\u0688 \u06a9\u06cc\u06d2 \u0628\u063a\u06cc\u0631 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646\u0632 \u0628\u06cc\u0631\u0648\u0646\u06cc \u0633\u0633\u0679\u0645\u0632 \u06a9\u06cc \u062a\u0648\u062b\u06cc\u0642 \u06a9\u0631 \u0633\u06a9\u062a\u06cc \u06c1\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-15-understand-the-pipeline-before-activating-it\">1.5: \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06a9\u0648 \u0686\u0627\u0644\u0648 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0627\u0633\u06d2 \u0633\u0645\u062c\u06be\u0646\u0627<\/h3>\n<p>\u0648\u0631\u06a9 \u0641\u0644\u0648 \u0641\u0627\u0626\u0644\u0648\u06ba \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062c\u0627\u062f\u0648 \u06a9\u06cc \u0637\u0631\u062d \u0633\u0644\u0648\u06a9 \u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4 \u06a9\u06be\u0644\u0627 <code>.github\/workflows\/ci.yaml<\/code> \u0686\u0644\u0627\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u067e\u0691\u06be\u06cc\u06ba\u06d4<\/p>\n<p>\u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646\u0648\u06ba \u06a9\u06cc \u062f\u0648 \u0630\u0645\u06c1 \u062f\u0627\u0631\u06cc\u0627\u06ba \u06c1\u06cc\u06ba:<\/p>\n<ol>\n<li>\n<p>\u062b\u0627\u0628\u062a \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u0622\u067e \u06a9\u0627 \u06a9\u0648\u0688 \u0627\u0648\u0631 \u062a\u0635\u0627\u0648\u06cc\u0631 \u0634\u0627\u0626\u0639 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u062d\u0641\u0648\u0638 \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0646\u0626\u06d2 \u0627\u0645\u06cc\u062c \u0679\u06cc\u06af\u0632 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u067e\u0646\u06d2 \u0627\u0646\u0641\u0631\u0627\u0633\u0679\u0631\u06a9\u0686\u0631 \u0631\u06cc\u067e\u0648\u0632\u0679\u0631\u06cc \u06a9\u0648 \u0627\u067e \u0688\u06cc\u0679 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ol>\n<p>\u0633\u0628 \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u060c \u0633\u06cc\u06a9\u0648\u0631\u0679\u06cc \u06a9\u0627 \u0628\u06c1\u0627\u0624 \u0645\u0646\u062f\u0631\u062c\u06c1 \u0630\u06cc\u0644 \u06c1\u06d2:<\/p>\n<pre><code class=\"language-text\">Developer pushes code to GitHub\n        \u2193\nGitHub Actions starts workflow\n        \u2193\nSelf-hosted runner inside the Multipass VM picks up the job\n        \u2193\n1. Scan secrets (Gitleaks)\n        \u2193\n2. Run code security scans (Semgrep) + IaC scan (Checkov) \u2014 parallel\n        \u2193\n3. Prepare scanners (install Trivy\/Syft\/Grype\/Cosign once; refresh Trivy DB once)\n        \u2193\n4. BUILD: docker build all four services (local tags only; nothing hits Docker Hub yet)\n        \u2193\n5. SCAN: Trivy on all images; Syft + Grype SBOM on auth-service; upload evidence\n        \u2193\n6. PUBLISH: push to Docker Hub + Cosign sign (only if scan passed)\n        \u2193\n7. UPDATE MANIFESTS: commit new image tags to clearledger-infra\n<\/code><\/pre>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/07\/1785194532_948_Homelab-\u0633\u06d2-AWS-\u062a\u06a9-\u067e\u0631\u0648\u0688\u06a9\u0634\u0646-\u06a9\u06d2-\u0644\u06cc\u06d2-\u062a\u06cc\u0627\u0631-DevSecOps-\u067e\u0644\u06cc\u0679.png\" alt=\"cicd \u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u0641\u0644\u0648 \u067e\u06cc\u0679\u0631\u0646 \u06a9\u06cc \u0628\u0635\u0631\u06cc \u062a\u0635\u0648\u06cc\u0631\" style=\"display:block;margin:0 auto\" width=\"1024\" height=\"1536\" loading=\"lazy\" title=\"\"><\/p>\n<h4 id=\"heading-build-scan-publish-prod-style-gates\">\u0628\u0646\u0627\u0626\u06cc\u06ba\u060c \u0627\u0633\u06a9\u06cc\u0646 \u06a9\u0631\u06cc\u06ba\u060c \u0634\u0627\u0626\u0639 \u06a9\u0631\u06cc\u06ba (\u0641\u0631\u0627\u0688 \u0627\u0633\u0679\u0627\u0626\u0644 \u06af\u06cc\u0679)<\/h4>\n<p>\u0627\u0635\u0644\u06cc \u0679\u06cc\u0645\u06cc\u06ba \u067e\u06c1\u0644\u06d2 \u0646\u06c1\u06cc\u06ba \u062f\u06be\u06a9\u06cc\u0644\u062a\u06cc \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0628\u0639\u062f \u0645\u06cc\u06ba \u0627\u0633\u06a9\u06cc\u0646 \u06a9\u0631\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u062a\u06cc\u0646 \u0645\u0633\u0627\u0626\u0644 \u06a9\u0648 \u062a\u06cc\u0646 \u06a9\u0627\u0645\u0648\u06ba \u0645\u06cc\u06ba \u0627\u0644\u06af \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 <code>.github\/workflows\/ci.yaml<\/code>:<\/p>\n<table>\n<thead>\n<tr>\n<th>\u0646\u0648\u06a9\u0631\u06cc<\/th>\n<th>\u0641\u0646\u06a9\u0634\u0646<\/th>\n<th>\u0627\u06af\u0631 \u0622\u067e \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648 \u06af\u0626\u06d2 \u062a\u0648&#8230;<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>build-images<\/code><\/td>\n<td><code>docker build<\/code> \u0679\u06cc\u06af \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062a\u0645\u0627\u0645 \u062e\u062f\u0645\u0627\u062a <code>${{ github.sha }}<\/code><\/td>\n<td>\u0631\u062c\u0633\u0679\u0631\u06cc \u06a9\u06cc \u06a9\u0648\u0626\u06cc \u0622\u0644\u0648\u062f\u06af\u06cc \u0646\u06c1\u06cc\u06ba \u06c1\u06d2 \u0627\u0648\u0631 \u062a\u0635\u0627\u0648\u06cc\u0631 \u06a9\u0628\u06be\u06cc \u0628\u06be\u06cc \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631 \u06a9\u0648 \u0646\u06c1\u06cc\u06ba \u0686\u06be\u0648\u0691\u062a\u06cc \u06c1\u06cc\u06ba\u06d4<\/td>\n<\/tr>\n<tr>\n<td><code>scan-images<\/code><\/td>\n<td>\u0679\u0631\u06cc\u0648\u06cc (\u062a\u0645\u0627\u0645 4 \u062a\u0635\u0627\u0648\u06cc\u0631)\u061b Syft + Grype (\u0635\u0631\u0641 \u062a\u0635\u062f\u06cc\u0642)<\/td>\n<td>\u0634\u0627\u0626\u0639 \u06a9\u0631\u0646\u0627 \u0686\u06be\u0648\u0691\u06cc\u06ba: \u062e\u0631\u0627\u0628 \u062a\u0635\u0627\u0648\u06cc\u0631 \u06a9\u0628\u06be\u06cc \u0628\u06be\u06cc Docker Hub \u062a\u06a9 \u0646\u06c1\u06cc\u06ba \u067e\u06c1\u0646\u0686 \u067e\u0627\u0626\u06cc\u06ba \u06af\u06cc\u06d4<\/td>\n<\/tr>\n<tr>\n<td><code>publish-images<\/code><\/td>\n<td>\u067e\u06be\u0627\u0646\u0633\u06cc <code>scripts\/ci-publish-image.sh<\/code> \u0679\u06cc\u06af \u06a9\u0631\u06cc\u06ba\u060c \u067e\u0634 \u06a9\u0631\u06cc\u06ba\u060c \u06a9\u0648-\u0633\u0627\u0626\u0646 \u06a9\u0631\u06cc\u06ba\u06d4<\/td>\n<td>\u0627\u0633\u06a9\u06cc\u0646 \u06af\u0632\u0631 \u062c\u0627\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f \u06c1\u06cc \u0686\u0644\u062a\u0627 \u06c1\u06d2\u06d4<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u062a\u0645 \u06c1\u0648 <strong>~ \u0646\u06c1\u06cc\u06ba<\/strong> \u0686\u0644\u0627\u0626\u06cc\u06ba <code>scripts\/ci-publish-image.sh<\/code> \u0627\u067e\u0646\u06d2 \u06a9\u0648\u0688 \u06a9\u0648 \u0622\u06af\u06d2 \u0628\u0691\u06be\u0627\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u062e\u0648\u062f \u06a9\u0648 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 GitHub \u0627\u06cc\u06a9\u0634\u0646\u0632 \u0631\u06cc\u067e\u0648\u0632\u0679\u0631\u06cc \u06a9\u0648 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0633\u06d2 \u0627\u0646\u062f\u0631 \u0633\u06d2 \u06a9\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 <code>publish-images<\/code>.<\/p>\n<p><strong>\u0627\u06cc\u0633\u0627 \u06a9\u06cc\u0648\u06ba \u0645\u0645\u06a9\u0646 \u06c1\u06d2\u061f<\/strong> <code>build-images<\/code> <strong>\u0627\u0648\u0631<\/strong> <code>scan-images<\/code> <strong>\u06a9\u06cc\u0627 \u0622\u067e \u06a9\u06d2 \u067e\u0627\u0633 \u06a9\u0648\u0626\u06cc \u0627\u0644\u06af \u06a9\u0627\u0645 \u06c1\u06d2\u061f<\/strong> \u06c1\u0631 \u06a9\u0627\u0645 GitHub \u067e\u0631 \u0645\u06cc\u0632\u0628\u0627\u0646\u06cc \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0631\u0646\u0631 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0646\u06cc\u0627 \u0686\u06cc\u06a9 \u0622\u0624\u0679 \u06c1\u06d2\u06d4 \u0648\u06c1 \u0688\u0633\u06a9 \u06a9\u0627 \u0627\u0634\u062a\u0631\u0627\u06a9 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06a9\u0648 <strong>\u0622\u067e \u06a9\u0627<\/strong> \u062e\u0648\u062f \u0645\u06cc\u0632\u0628\u0627\u0646\u06cc \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u0627 \u062a\u06cc\u0646\u0648\u06ba \u06a9\u0627\u0645 \u0686\u0644\u0627\u062a\u0627 \u06c1\u06d2\u06d4 <strong>\u0627\u06cc\u06a9 \u06c1\u06cc \u0645\u0644\u0679\u06cc \u067e\u0627\u062a\u06be VM<\/strong> \u0627\u0648\u0631 <strong>\u0648\u06c1\u06cc \u0688\u0648\u06a9\u0631 \u0627\u0646\u062c\u0646<\/strong>.<\/p>\n<p>\u0679\u0627\u0633\u06a9 1 \u0631\u0646\u0632\u06d4 <code>docker build<\/code> \u0627\u0633 \u062a\u0635\u0648\u06cc\u0631 \u06a9\u0648 \u06a9\u0645\u067e\u06cc\u0648\u0679\u0631 \u067e\u0631 \u0686\u06be\u0648\u0691 \u062f\u06cc\u06ba\u06d4 \u062c\u0627\u0628 2 \u0627\u0633\u06cc \u0645\u0642\u0627\u0645\u06cc \u062a\u0635\u0648\u06cc\u0631 \u06a9\u06d2 \u062e\u0644\u0627\u0641 \u0679\u0631\u06cc\u0648\u06cc \u0686\u0644\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u06a9\u0648\u0626\u06cc \u0627\u067e \u0644\u0648\u0688 \u06cc\u0627 \u0688\u0627\u0624\u0646 \u0644\u0648\u0688 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0679\u0627\u0633\u06a9 3 \u06a9\u0648 \u0635\u0631\u0641 \u0627\u0633 \u0635\u0648\u0631\u062a \u0645\u06cc\u06ba \u0688\u0648\u06a9\u0631 \u06c1\u0628 \u06a9\u06cc \u0637\u0631\u0641 \u062f\u06be\u06a9\u06cc\u0644 \u062f\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u062c\u0628 \u0627\u0633\u06a9\u06cc\u0646 \u06af\u0632\u0631 \u062c\u0627\u0626\u06d2\u06d4<\/p>\n<p>\u06cc\u06c1 \u0627\u06cc\u06a9 \u0639\u0645\u0644\u06cc \u0644\u06cc\u0628 \u0633\u06cc\u0679 \u0627\u067e \u06c1\u06d2 \u062c\u0633 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0645\u0633\u062a\u0642\u0644 \u062a\u0639\u0645\u06cc\u0631\u0627\u062a\u06cc \u0645\u0634\u06cc\u0646 \u0634\u0627\u0645\u0644 \u06c1\u0648\u062a\u06cc \u06c1\u06d2 \u062c\u0633 \u0645\u06cc\u06ba Docker \u0627\u0646\u0633\u0679\u0627\u0644 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u060c \u062c\u06cc\u0633\u06d2 \u06a9\u0633\u06cc \u0641\u0632\u06cc\u06a9\u0644 \u0622\u0641\u0633 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0633\u0631\u0634\u0627\u0631 CI \u06a9\u0627\u0631\u06a9\u0646\u06d4 \u0645\u06cc\u06ba <strong>\u0645\u0631\u062d\u0644\u06c1 8 (AWS)<\/strong>\u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u0627\u0633 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u06af\u0679 \u06c1\u0628 \u067e\u0631 \u0645\u06cc\u0632\u0628\u0627\u0646 \u0627\u06cc\u06a9 \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 <code>build-images<\/code> \u062a\u0635\u0648\u06cc\u0631 \u06a9\u0648 \u0641\u0627\u0626\u0644 \u0645\u06cc\u06ba \u0645\u062d\u0641\u0648\u0638 \u06a9\u0631\u06cc\u06ba (<code>images.tar<\/code>) \u0627\u0648\u0631 \u0627\u0633 \u0641\u0627\u0626\u0644 \u06a9\u0648 \u0648\u0631\u06a9 \u0641\u0644\u0648 \u0622\u0631\u0679\u0641\u06cc\u06a9\u0679 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0627\u06af\u0644\u06d2 \u06a9\u0627\u0645 \u0645\u06cc\u06ba \u0645\u0646\u062a\u0642\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u0633 \u06a9\u06cc \u0648\u062c\u06c1 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631 \u0627\u06cc\u06a9 \u0688\u0633\u067e\u0648\u0632\u0627\u06cc\u0628\u0644 VM \u06c1\u06d2 \u062c\u0633 \u0645\u06cc\u06ba \u06a9\u0648\u0626\u06cc \u0645\u0634\u062a\u0631\u06a9\u06c1 Docker \u06a9\u06cc\u0634 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<p>\u067e\u06be\u0631 GitOps \u06c1\u06cc\u0646\u0688 \u0622\u0641 \u0622\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-text\">Secure images now exist in Docker Hub\n        \u2193\nRunner checks out clearledger-infra from GitHub\n        \u2193\nDeployment YAML image tags are updated\n        \u2193\nRunner commits and pushes back to clearledger-infra\n        \u2193\nStage 1 ends here\n<\/code><\/pre>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/07\/1785194532_787_Homelab-\u0633\u06d2-AWS-\u062a\u06a9-\u067e\u0631\u0648\u0688\u06a9\u0634\u0646-\u06a9\u06d2-\u0644\u06cc\u06d2-\u062a\u06cc\u0627\u0631-DevSecOps-\u067e\u0644\u06cc\u0679.png\" alt=\"\u0633\u06cc \u0622\u0626\u06cc \u0633\u06cc \u0688\u06cc \u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u0641\u0644\u0648 \u067e\u06cc\u0679\u0631\u0646 \u0627\u0648\u0631 \u06af\u06cc\u062a\u06be\u0628 \u06c1\u06cc\u0646\u0688 \u0622\u0641 \u0633\u0641\u0631 \u06a9\u06cc \u0628\u0635\u0631\u06cc \u062a\u0635\u0648\u06cc\u0631\u06d4\" style=\"display:block;margin:0 auto\" width=\"1024\" height=\"1536\" loading=\"lazy\" title=\"\"><\/p>\n<p><strong>\u06cc\u06c1\u0627\u06ba \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u062a\u0635\u0648\u06cc\u0631 \u06a9\u0627 \u0679\u06cc\u06af \u0622\u067e \u06a9\u06d2 \u06a9\u0648\u0688 \u0633\u06d2 \u06a9\u06cc\u0633\u06d2 \u062c\u0691\u062a\u0627 \u06c1\u06d2:<\/strong> \u062a\u0645\u0627\u0645 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u067e\u0631 \u0639\u0645\u0644\u062f\u0631\u0622\u0645\u062f \u06af\u0679 \u06a9\u0645\u0679 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06c1 \u0634\u0631\u0648\u0639 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 GitHub \u0627\u0633 \u0639\u06c1\u062f \u06a9\u06d2 \u0644\u06cc\u06d2 \u062f\u0631\u062c \u0630\u06cc\u0644 \u0645\u0646\u0641\u0631\u062f ID \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2: <strong>SHA<\/strong> (\u0627\u06cc\u06a9 \u0644\u0645\u0628\u06cc \u06c1\u06cc\u06a9\u0633\u0627\u0688\u06cc\u0633\u06cc\u0645\u0644 \u062a\u0627\u0631 \u062c\u06cc\u0633\u06d2 <code>a1b2c3d4e5f6789\u2026<\/code>)\u06d4 \u0648\u0631\u06a9 \u0641\u0644\u0648 \u0633\u06cc\u0679 <code>IMAGE_TAG<\/code> \u0627\u0633 SHA \u0633\u06d2 \u200b\u200b\u062c\u0691\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0633\u06d2 \u06a9\u06c1\u06cc\u06ba \u0628\u06be\u06cc \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<ol>\n<li>\n<p><strong>\u062a\u062d\u0631\u06cc\u0631:<\/strong> <code>docker build -t clearledger-auth-service:a1b2c3d4\u2026<\/code><\/p>\n<\/li>\n<li>\n<p><strong>\u0645\u06cc\u06ba \u067e\u0648\u0633\u0679 \u06a9\u06cc\u0627 \u06af\u06cc\u0627:<\/strong> \u0688\u0627\u06a9\u0631 \u062d\u0628 \u06a9\u0648 \u0627\u0633 \u0637\u0631\u062d \u062f\u0628\u0627\u0626\u06cc\u06ba: <code>YOUR_DOCKERHUB_USERNAME\/clearledger-auth-service:a1b2c3d4\u2026<\/code><\/p>\n<\/li>\n<li>\n<p><strong>\u0627\u067e \u0688\u06cc\u0679 \u0645\u06cc\u0646\u06cc \u0641\u06cc\u0633\u0679:<\/strong> <code>kustomize edit set image \u2026:a1b2c3d4\u2026<\/code> \u06a9\u0648 <code>clearledger-infra<\/code><\/p>\n<\/li>\n<li>\n<p><strong>\u0639\u06c1\u062f \u06a9\u0627 \u067e\u06cc\u063a\u0627\u0645:<\/strong> <code>ci: deploy a1b2c3d4\u2026 \u2014 all gates passed<\/code><\/p>\n<\/li>\n<\/ol>\n<p>\u0627\u06af\u0631 \u067e\u06cc\u062f\u0627\u0648\u0627\u0631 \u062c\u0627\u0631\u06cc \u06c1\u06d2\u06d4 <code>YOUR_DOCKERHUB_USERNAME\/clearledger-auth-service:a1b2c3d4<\/code>\u0622\u067e \u0627\u0633\u06d2 \u06a9\u0627\u067e\u06cc \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>a1b2c3d4<\/code> \u0628\u0633 \u0627\u0633\u06d2 \u0679\u06cc\u06af \u06a9\u0631\u06cc\u06ba\u060c GitHub \u06a9\u06be\u0648\u0644\u06cc\u06ba\u060c \u0627\u0648\u0631 \u0622\u067e \u06a9\u0648 \u0641\u0648\u0631\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0648\u06c1\u06cc \u06a9\u0645\u0679 \u0645\u0644 \u062c\u0627\u0626\u06d2 \u06af\u0627 \u062c\u0633 \u0646\u06d2 \u0627\u0633 \u062a\u0635\u0648\u06cc\u0631 \u06a9\u0648 \u0628\u0646\u0627\u06cc\u0627 \u062a\u06be\u0627\u06d4 \u0627\u0646\u062f\u0627\u0632\u06c1 \u0644\u06af\u0627\u0646\u06d2 \u06cc\u0627 \u062a\u0639\u062c\u0628 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba\u06d4 <code>latest<\/code> \u06cc\u06c1 \u0628\u062f\u0644 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4 \u06c1\u0631 \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631\u062f\u06c1 \u062a\u0635\u0648\u06cc\u0631 \u0622\u067e \u06a9\u06d2 \u06a9\u0648\u0688 \u06a9\u06d2 \u0645\u062e\u0635\u0648\u0635 \u0648\u0631\u0698\u0646 \u06a9\u06cc \u0637\u0631\u0641 \u0627\u0634\u0627\u0631\u06c1 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u060c \u062c\u0633 \u0633\u06d2 \u0631\u0648\u0644 \u0628\u06cc\u06a9\u0633 \u0627\u0648\u0631 \u0688\u06cc\u0628\u06af\u0646\u06af \u0628\u06c1\u062a \u0622\u0633\u0627\u0646 \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-the-kustomize-placeholder\">\u067e\u0644\u06cc\u0633 \u06c1\u0648\u0644\u0688\u0631 \u06a9\u0648 \u062d\u0633\u0628 \u0636\u0631\u0648\u0631\u062a \u0628\u0646\u0627\u0626\u06cc\u06ba<\/h4>\n<p><code>auth-service\/deployment.yaml<\/code> \u0627\u0635\u0644 \u062a\u0635\u0648\u06cc\u0631\u06cc \u067e\u062a\u0648\u06ba \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0644\u06cc\u0628\u0644 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-yaml\">image: clearledger\/auth-service:gitops\n<\/code><\/pre>\n<p>\u0648\u06c1 \u0644\u06cc\u0628\u0644 Docker Hub \u067e\u0631 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u06a9\u0633\u0679\u0645\u0627\u0626\u0632 \u06a9\u0648 \u0628\u062a\u0627\u0626\u06cc\u06ba \u06a9\u06c1 \u06a9\u06c1\u0627\u06ba \u0641\u0627\u0644 \u0628\u06cc\u06a9 \u06a9\u0631\u0646\u0627 \u06c1\u06d2\u06d4 \u0645\u06cc\u0631\u0627 \u062c\u0633\u0645\u0627\u0646\u06cc \u067e\u062a\u06c1 \u062f\u0631\u062c \u0630\u06cc\u0644 \u067e\u062a\u06d2 \u067e\u0631 \u0631\u06c1\u062a\u0627 \u06c1\u06d2: <code>kustomization.yaml<\/code>:<\/p>\n<pre><code class=\"language-yaml\">images:\n  - name: clearledger\/auth-service          # matches the label above\n    newName: docker.io\/YOUR_DOCKERHUB_USERNAME\/clearledger-auth-service\n    newTag: abc123def456\u2026                   # real commit SHA \u2014 CI writes this\n<\/code><\/pre>\n<p>\u0627\u06cc\u06a9 \u0628\u0627\u0631 \u062c\u0628 ArgoCD \u062a\u0642\u0633\u06cc\u0645 \u06c1\u0648 \u062c\u0627\u0626\u06d2\u060c <code>kustomize build<\/code> \u0644\u06cc\u0628\u0644 \u06a9\u0648 \u067e\u0648\u0631\u06d2 \u067e\u062a\u06d2 \u0633\u06d2 \u0628\u062f\u0644 \u062f\u06cc\u06ba\u06d4<\/p>\n<p>\u0622\u067e \u062a\u0631\u0645\u06cc\u0645 \u06a9\u0631\u06cc\u06ba <code>kustomization.yaml<\/code> \u0627\u067e\u0646\u0627 Docker Hub \u0635\u0627\u0631\u0641 \u0646\u0627\u0645 \u00a71.3 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u0633\u06cc\u0679 \u06a9\u0631\u06cc\u06ba\u06d4 <code>newName:<\/code>. \u0627\u0633 \u06a9\u06d2 \u0628\u0639\u062f\u060c \u0633\u06cc \u0622\u0626\u06cc \u0644\u06a9\u06be\u062a\u0627 \u06c1\u06d2: <code>newTag:<\/code> \u062c\u0628 \u0628\u06be\u06cc \u0622\u067e \u0633\u0628\u0632 \u062f\u0628\u0627\u0626\u06cc\u06ba \u062a\u0648 \u062e\u0648\u062f \u0628\u062e\u0648\u062f\u06d4 \u0627\u0633\u06d2 \u0627\u067e\u0646\u06d2 \u06c1\u0627\u062a\u06be\u0648\u06ba \u0633\u06d2 \u06a9\u0628\u06be\u06cc \u0646\u06c1 \u0686\u06be\u0648\u0626\u06d2\u06d4<\/p>\n<h4 id=\"heading-stage-1-ci-updates-github-not-the-cluster\">\u0645\u0631\u062d\u0644\u06c1 1: CI GitHub \u06a9\u0648 \u0627\u067e \u0688\u06cc\u0679 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u06a9\u0644\u0633\u0679\u0631 \u06a9\u0648 \u0646\u06c1\u06cc\u06ba\u06d4<\/h4>\n<p>\u0627\u06cc\u06a9 \u0628\u0627\u0631 \u062c\u0628 \u0622\u067e \u06a9\u06d2 \u067e\u0627\u0633 \u06af\u0631\u06cc\u0646 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u0686\u0644\u062a\u06cc \u06c1\u06d2\u060c \u062a\u0648 \u062a\u06cc\u0646 \u0686\u06cc\u0632\u06cc\u06ba \u0644\u0627\u06af\u0648 \u06c1\u0648\u062a\u06cc \u06c1\u06cc\u06ba:<\/p>\n<ul>\n<li>\n<p>Docker Hub \u067e\u0631 \u0627\u06cc\u06a9 \u0646\u0626\u06cc \u062a\u0635\u0648\u06cc\u0631 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><code>clearledger-infra<\/code> GitHub \u06a9\u06d2 \u067e\u0627\u0633 \u0627\u06cc\u06a9 \u0646\u06cc\u0627 SHA \u06c1\u06d2\u06d4 <code>kustomization.yaml<\/code><\/p>\n<\/li>\n<li>\n<p>\u0622\u067e \u06a9\u0627 Kubernetes \u06a9\u0644\u0633\u0679\u0631 \u06c1\u06d2\u06d4 <strong>\u063a\u06cc\u0631 \u062a\u0628\u062f\u06cc\u0644 \u0634\u062f\u06c1<\/strong>. \u062c\u0648 \u0645\u0631\u062d\u0644\u06c1 0 \u06a9\u0627 \u0628\u0627\u0642\u06cc \u06c1\u06d2 \u0648\u06c1 \u0627\u0628 \u0628\u06be\u06cc \u0686\u0644 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<\/ul>\n<p>\u0633\u06cc \u0622\u0626\u06cc \u0646\u06c1\u06cc\u06ba \u0686\u0644\u062a\u06cc <code>kubectl apply<\/code>. \u06cc\u06c1 \u0635\u0631\u0641 \u06c1\u06d2 <code>clearledger-infra<\/code>. \u06cc\u06c1 \u067e\u0648\u0631\u0627 \u0645\u0631\u062d\u0644\u06c1 1 \u0633\u0628\u0642 \u06c1\u06d2\u06d4 \u062a\u0639\u0645\u06cc\u0631 \u0627\u0648\u0631 \u0627\u0633\u06a9\u06cc\u0646 \u062e\u0648\u062f\u06a9\u0627\u0631 \u06c1\u06cc\u06ba\u060c \u0644\u06cc\u06a9\u0646 <strong>\u062a\u0642\u0633\u06cc\u0645<\/strong> \u0627\u0628\u06be\u06cc \u062a\u06a9 \u0646\u06c1\u06cc\u06ba\u06d4 \u0645\u0631\u062d\u0644\u06c1 2 ArgoCD \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <code>clearledger-infra<\/code> \u0627\u067e\u0646\u06d2 \u06a9\u0644\u0633\u0679\u0631 \u06a9\u0648 \u0627\u067e \u0688\u06cc\u0679 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p><strong>Kubernetes \u0645\u0639\u0627\u0626\u0646\u06c1<\/strong> \u06cc\u06c1 \u0645\u0631\u062d\u0644\u06c1 1 \u0645\u06cc\u06ba \u0686\u0644\u062a\u0627 \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 <strong>~ \u0646\u06c1\u06cc\u06ba<\/strong> \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06a9\u0648 \u0628\u0644\u0627\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u067e\u0646\u06cc \u0628\u06c1\u062a\u0631\u06cc\u0648\u06ba \u06a9\u0627 \u062c\u0627\u0626\u0632\u06c1 \u0644\u06cc\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u067e\u0646\u06d2 \u0646\u062a\u0627\u0626\u062c \u0627\u067e \u0644\u0648\u0688 \u06a9\u0631\u06cc\u06ba\u06d4 \u0645\u0631\u062d\u0644\u06c1 4 \u0627\u0633 \u0642\u0633\u0645 \u06a9\u06d2 \u0642\u0648\u0627\u0639\u062f \u06a9\u0648 \u06a9\u0644\u0633\u0679\u0631 \u0646\u0641\u0627\u0630 \u0645\u06cc\u06ba \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 Kyverno \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06cc\u06c1 \u06a9\u0627\u0645 \u062e\u0648\u062f \u0645\u06cc\u0632\u0628\u0627\u0646\u06cc \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u067e\u0631 \u0627\u0646\u062c\u0627\u0645 \u062f\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2 (<code>runs-on: [self-hosted, clearledger]<\/code>)\u06d4 \u062f\u0648\u0646\u0648\u06ba <code>ENABLE_ARGOCD_SYNC<\/code> \u0627\u0648\u0631 <code>ENABLE_DAST<\/code> \u0645\u0631\u062d\u0644\u06c1 1 \u0645\u06cc\u06ba \u0633\u06cc\u0679 \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4 \u00a71.4 \u062f\u06cc\u06a9\u06be\u06cc\u06ba \u0627\u0646 \u0635\u0648\u0631\u062a\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 \u062c\u06c1\u0627\u06ba \u06c1\u0631 \u0622\u0626\u0679\u0645 \u06a9\u0648 \u067e\u0644\u0679\u0627\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u0648\u06d4<\/p>\n<p>\u0627\u06af\u0631 \u06a9\u0627\u0645 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u0627\u06af\u0644\u0627 \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba\u06d4 <code>docs\/troubleshooting.md<\/code> \u0648\u0631\u06a9 \u0641\u0644\u0648 \u0645\u06cc\u06ba \u062a\u0631\u0645\u06cc\u0645 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2<\/p>\n<h4 id=\"heading-stage-1-security-posture-what-blocks-vs-what-waits\">\u0644\u06cc\u0648\u0644 1 \u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u06a9\u0631\u0646\u0633\u06cc: \u0628\u0644\u0627\u06a9 \u0628\u0645\u0642\u0627\u0628\u0644\u06c1 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u06cc\u06ba\u06d4<\/h4>\n<p>\u0644\u06cc\u0648\u0644 1 &quot;\u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u0622\u0641&#8221; \u062d\u0627\u0644\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u06a9\u0686\u06be \u062f\u0631\u0648\u0627\u0632\u06d2 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06a9\u0648 \u0631\u0648\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062c\u0628\u06a9\u06c1 \u062f\u06cc\u06af\u0631 \u06a9\u0648 \u062b\u0628\u0648\u062a \u062a\u0644\u0627\u0634 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u067e\u06be\u0627\u0646\u0633\u06cc \u062f\u06cc \u062c\u0627\u062a\u06cc \u06c1\u06d2 \u0627\u0648\u0631 \u0628\u0639\u062f \u06a9\u06d2 \u0645\u0631\u0627\u062d\u0644 \u0645\u06cc\u06ba \u0645\u0636\u0628\u0648\u0637 \u06a9\u06cc\u06d2 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p><strong>\u0622\u062c \u06c1\u06cc \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u0628\u0644\u0627\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/strong><\/p>\n<ul>\n<li>\n<p>Gitleaks (\u06af\u0679 \u06a9\u06d2 \u0631\u0627\u0632)<\/p>\n<\/li>\n<li>\n<p>Semgrep (Python \u0645\u06cc\u06ba SAST)<\/p>\n<\/li>\n<li>\n<p>\u0688\u0627\u06a9\u0631 \u0641\u0627\u0626\u0644 \u0645\u06cc\u06ba \u0686\u06cc\u06a9\u0648\u0641<\/p>\n<\/li>\n<li>\n<p>\u0679\u0631\u06cc\u0648\u06cc (\u06c1\u0627\u0626\u06cc\/\u06a9\u0631\u06cc\u0679\u06cc\u06a9\u0644 CVE \u062a\u0635\u0648\u06cc\u0631 \u0645\u06cc\u06ba \u0642\u0627\u0628\u0644 \u062a\u0631\u0645\u06cc\u0645)<\/p>\n<\/li>\n<li>\n<p>\u06af\u0631\u06cc\u067e \u0628\u0631\u0627\u0626\u06d2 \u062a\u0635\u062f\u06cc\u0642\u06cc \u062e\u062f\u0645\u062a SBOM (\u0686\u067e\u0686\u067e\u0627 \u06c1\u0627\u0626\u06cc +)<\/p>\n<\/li>\n<li>\n<p>\u0645\u06cc\u0646\u06cc \u0641\u06cc\u0633\u0679 \u0627\u067e \u0688\u06cc\u0679 <code>clearledger-infra<\/code> (\u06a9\u0627\u0645\u06cc\u0627\u0628 \u06c1\u0648\u0646\u0627 \u0636\u0631\u0648\u0631\u06cc \u06c1\u06d2)<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u06cc\u06c1 \u0686\u0644\u062a\u0627 \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u0627\u0628\u06be\u06cc \u062a\u06a9 \u0645\u0633\u062f\u0648\u062f \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u0627 \u06c1\u06d2\u06d4<\/strong><\/p>\n<ul>\n<li>\n<p>\u06a9\u0628\u0631\u0646\u06cc\u0679\u0633 \u0645\u06cc\u0646\u06cc \u0641\u06cc\u0633\u0679 \u0645\u06cc\u06ba \u0686\u06cc\u06a9\u0648\u0641 &#8211; \u0646\u0641\u0627\u0630 <strong>\u0645\u0631\u062d\u0644\u06c1 4<\/strong> (\u06a9\u06cc\u0628\u0631\u0646\u0648)<\/p>\n<\/li>\n<li>\n<p>\u0634\u0631\u06cc\u06a9 \u062f\u0633\u062a\u062e\u0637 + SLSA \u062a\u0635\u062f\u06cc\u0642 &#8211; \u0646\u0641\u0627\u0630 <strong>\u0645\u0631\u062d\u0644\u06c1 4<\/strong> (\u063a\u06cc\u0631 \u062f\u0633\u062a\u062e\u0637 \u0634\u062f\u06c1 \u062a\u0635\u0627\u0648\u06cc\u0631 \u06a9\u0648 \u0645\u0633\u062a\u0631\u062f \u06a9\u0631 \u062f\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2)<\/p>\n<\/li>\n<li>\n<p>Syft SBOM \u0628\u0646\u0627\u0646\u0627 &#8211; \u0633\u067e\u0644\u0627\u0626\u06cc \u0686\u06cc\u0646 \u062b\u0628\u0648\u062a\u06d4 \u062a\u0645 \u062c\u0627\u0646 \u0628\u0648\u062c\u06be \u06a9\u0631 \u062f\u0631\u0648\u0627\u0632\u06c1 \u062a\u0648\u0691\u0648 \u06af\u06d2\u06d4 <strong>\u0645\u0631\u062d\u0644\u06c1 3\u06d4<\/strong><\/p>\n<\/li>\n<li>\n<p>ArgoCD \u0631\u06cc\u0641\u0631\u06cc\u0634 \u06a9\u0631\u06cc\u06ba &#8211; <strong>\u0645\u0631\u062d\u0644\u06c1 2<\/strong> (<code>ENABLE_ARGOCD_SYNC=true<\/code>)<\/p>\n<\/li>\n<li>\n<p>DAST\/ZAP &#8211; <strong>\u0645\u0631\u062d\u0644\u06c1 3<\/strong> (<code>ENABLE_DAST=true<\/code>)<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u0627\u06af\u0631 \u0622\u067e \u0628\u06be\u0648\u0644 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba \u06a9\u06c1 \u06a9\u0646 \u0627\u0642\u062f\u0627\u0645\u0627\u062a \u0633\u06d2 \u06a9\u06cc\u0627 \u062d\u0644 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4<\/strong>&quot;\u0644\u06cc\u0648\u0644 1 \u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u06c1\u06cc\u0644\u062a\u06be&#8221; \u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba \u06cc\u0627 \u0627\u0633 \u06af\u0627\u0626\u06cc\u0688 \u0645\u06cc\u06ba \u062f\u0631\u062c \u0645\u0631\u0627\u062d\u0644 \u06a9\u06cc \u062a\u0631\u062a\u06cc\u0628 \u067e\u0631 \u0639\u0645\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 \u0645\u0631\u062d\u0644\u06c1 3 \u062c\u0627\u0646 \u0628\u0648\u062c\u06be \u06a9\u0631 \u06af\u06cc\u0679 \u06a9\u0648 \u062a\u0628\u0627\u06c1 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0645\u0631\u062d\u0644\u06c1 4 \u0686\u06cc\u06a9\u0648\u0641 \u06a9\u06d2 \u0646\u062a\u0627\u0626\u062c \u06a9\u0648 \u06a9\u06cc\u0648\u0631\u0646\u0648 \u0633\u06d2 \u062c\u0648\u0691\u062a\u0627 \u06c1\u06d2\u060c \u0645\u0631\u062d\u0644\u06c1 5 \u06af\u0679 \u0645\u06cc\u06ba \u0631\u0627\u0632\u0648\u06ba \u06a9\u0648 \u0645\u0646\u062a\u0642\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0645\u0631\u062d\u0644\u06c1 6 \u0631\u0646 \u0679\u0627\u0626\u0645 \u06a9\u0627 \u067e\u062a\u06c1 \u0644\u06af\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0645\u0631\u062d\u0644\u06c1 7 \u0627\u06cc\u06a9 \u0645\u0627\u0646\u06cc\u0679\u0631\u0646\u06af \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u06a9\u0627 \u0627\u0636\u0627\u0641\u06c1 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0686\u0644\u0627\u0626\u06cc\u06ba <code>make check-3<\/code> \u0627\u0648\u0631 <code>make check-4<\/code> \u0627\u0633 \u0642\u062f\u0645 \u06a9\u06d2 \u0628\u0639\u062f\u060c \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u0626\u06cc\u06ba \u06a9\u06c1 \u0639\u0644\u0627\u062c \u06c1\u0648\u0627 \u06c1\u06d2.<\/p>\n<p><strong>\u0688\u06cc\u0632\u0627\u0626\u0646 \u06a9\u0627 \u0627\u0631\u0627\u062f\u06c1:<\/strong> \u0641\u06cc\u0632 1 \u06cc\u06c1 \u0638\u0627\u06c1\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0633\u06cc \u0622\u0626\u06cc \u0688\u0648\u06a9\u0631 \u06a9\u0648 \u062f\u0633\u062a\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0686\u06be\u0648\u0626\u06d2 \u0628\u063a\u06cc\u0631 \u06af\u0679 \u06a9\u0648 \u0628\u0646\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0633\u06a9\u06cc\u0646 \u06a9\u0631 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u060c \u067e\u0634 \u0627\u0648\u0631 \u0627\u067e \u0688\u06cc\u0679 \u06a9\u0631 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u0628\u0639\u062f \u06a9\u06d2 \u0645\u0631\u0627\u062d\u0644 \u062b\u0628\u0648\u062a \u06a9\u0648 \u067e\u06be\u0627\u0646\u0633\u06cc \u0645\u06cc\u06ba \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1\u0627\u06ba \u0648\u0642\u0641\u06c1 \u062c\u0627\u0646 \u0628\u0648\u062c\u06be \u06a9\u0631 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-16-activate-the-pipeline\">1.6: \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u0627\u06cc\u06a9\u0679\u06cc\u0648\u06cc\u0634\u0646<\/h3>\n<p><strong>\u06cc\u06c1 \u0686\u0644\u0627\u0626\u06cc\u06ba<\/strong> <code>clearledger<\/code> <strong>\u0627\u06cc\u067e \u0627\u0633\u0679\u0648\u0631 \u0646\u06c1\u06cc\u06ba\u06d4<\/strong> <code>clearledger-infra<\/code><strong>.<\/strong><\/p>\n<p>\u00a71.3 \u0628\u0646\u0627\u06cc\u0627 \u06af\u06cc\u0627\u06d4 <code>clearledger-infra<\/code> \u0635\u0631\u0641 Kubernetes \u0645\u06cc\u0646\u06cc \u0641\u06cc\u0633\u0679 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0648\u06c1\u0627\u06ba \u0646\u06c1\u06cc\u06ba \u06c1\u06d2 <code>.github\/workflows\/<\/code> \u0627\u0648\u0631 \u06a9\u0648\u0626\u06cc \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0622\u067e \u06a9\u06d2 \u067e\u0627\u0633 \u0634\u06cc\u0644 \u067e\u0631\u0627\u0645\u067e\u0679 \u067e\u0631 \u062f\u0631\u062c \u0630\u06cc\u0644 \u06c1\u06cc\u06ba: <code>clearledger-infra<\/code>\u06cc\u0627 \u0622\u067e \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba <code>\/tmp\/clearledger-infra<\/code>\u0622\u067e \u063a\u0644\u0637 \u062c\u06af\u06c1 \u067e\u0631 \u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">cd \/path\/to\/clearledger    # the app repo you pushed in \u00a71.1\n\ngit remote -v              # must show ...\/clearledger.git \u2014 NOT clearledger-infra\n\nls .github\/workflows\/ci.yaml   # must exist before you commit\n<\/code><\/pre>\n<p>\u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u0641\u0627\u0626\u0644\u06cc\u06ba \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0645\u0648\u062c\u0648\u062f \u06c1\u06cc\u06ba: <code>.github\/workflows\/ci.yaml<\/code>. \u0686\u06be\u0648\u0679\u06cc \u062a\u0628\u062f\u06cc\u0644\u06cc\u0648\u06ba \u06a9\u0648 \u0627\u0633 \u067e\u0631 \u062f\u0628\u0627\u0626\u06cc\u06ba: <code>clearledger<\/code> \u06a9\u0648 <code>main<\/code>:<\/p>\n<pre><code class=\"language-bash\">echo \"# Pipeline activated $(date)\" >> README.md\ngit add README.md\ngit commit -m \"ci: activate GitHub Actions pipeline\"\ngit push origin main\n<\/code><\/pre>\n<p>\u0627\u0633\u06d2 \u06cc\u06c1\u0627\u06ba \u0639\u0645\u0644 \u0645\u06cc\u06ba \u062f\u06cc\u06a9\u06be\u06cc\u06ba: <code>https:\/\/github.com\/YOUR_USERNAME\/clearledger\/actions<\/code> (\u0627\u06cc\u067e \u0627\u0633\u0679\u0648\u0631 \u0622\u067e\u0631\u06cc\u0634\u0646\u0632 \u0679\u06cc\u0628\u060c \u0627\u0646\u0641\u0631\u0627\u0633\u0679\u0631\u06a9\u0686\u0631 \u0627\u0633\u0679\u0648\u0631 \u0646\u06c1\u06cc\u06ba)<\/p>\n<p>\u062c\u0628 \u06cc\u06c1 \u06a9\u0627\u0645\u06cc\u0627\u0628 \u06c1\u0648\u062c\u0627\u062a\u06cc \u06c1\u06d2 \u062a\u0648 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06a9\u0648 \u0627\u067e \u0688\u06cc\u0679 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 <code>clearledger-infra<\/code> \u0622\u067e \u06a9\u06d2 \u0644\u06cc\u06d2\u06d4 \u0627\u0633 \u0645\u0631\u062d\u0644\u06d2 \u067e\u0631 \u06a9\u0633\u06cc \u0628\u06be\u06cc \u0686\u06cc\u0632 \u06a9\u0648 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0627\u0646\u0641\u0631\u0627\u0633\u0679\u0631\u06a9\u0686\u0631 \u06a9\u06d2 \u0630\u062e\u06cc\u0631\u06d2 \u0645\u06cc\u06ba \u062f\u06be\u06a9\u06cc\u0644\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<p>\u0645\u062a\u0648\u0642\u0639 \u0622\u0624\u0679 \u067e\u0679: \u0633\u0628 \u06a9\u0686\u06be \u062a\u0642\u0631\u06cc\u0628\u0627\u064b 8 \u0645\u0646\u0679 \u0645\u06cc\u06ba \u0645\u06a9\u0645\u0644 \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4<\/p>\n<pre><code class=\"language-plaintext\">\u2713 Build + Scan auth-service\n\u2713 Build + Scan ledger-service\n\u2713 Build + Scan notification-service\n\u2713 Build + Scan frontend\n\u2713 Update manifests \u2192 GitHub\n<\/code><\/pre>\n<p>DAST \u0627\u0648\u0631 ArgoCD \u0631\u06cc\u0641\u0631\u06cc\u0634 \u06a9\u06d2 \u0645\u0631\u0627\u062d\u0644 \u062f\u0631\u062c \u0630\u06cc\u0644 \u062f\u06a9\u06be\u0627\u0626\u06d2 \u06af\u0626\u06d2 \u06c1\u06cc\u06ba: <strong>\u0686\u06be\u0648\u0691 \u062f\u06cc\u0627<\/strong>: \u06cc\u06c1 \u0627\u06cc\u06a9 \u0645\u062a\u0648\u0642\u0639 \u0631\u062c\u062d\u0627\u0646 \u06c1\u06d2\u06d4 \u0627\u0633 \u06a9\u06cc \u0648\u062c\u06c1 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u062f\u0648\u0646\u0648\u06ba \u0679\u0648\u06af\u0644\u0632 \u06a9\u0648 \u0628\u0639\u062f \u0645\u06cc\u06ba \u0633\u06cc\u0679 \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2 \u06af\u0627 (\u00a71.4 \u062f\u06cc\u06a9\u06be\u06cc\u06ba)\u06d4<\/p>\n<p><strong>\u0645\u06cc\u0645\u0648:<\/strong> \u0627\u0633 \u0644\u06cc\u0628\u0627\u0631\u0679\u0631\u06cc \u0645\u06cc\u06ba \u0634\u0627\u0645\u0644 \u06c1\u06cc\u06ba: <code>.gitleaksignore<\/code> \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u06af\u0679 \u06a9\u06cc \u062a\u0627\u0631\u06cc\u062e \u0645\u06cc\u06ba \u06a9\u0686\u06be \u062c\u0627\u0646 \u0628\u0648\u062c\u06be \u06a9\u0631 \u0688\u06cc\u0645\u0648 \u0631\u0627\u0632 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0645\u0648\u062c\u0648\u062f \u06c1\u06cc\u06ba\u06d4 Gitleaks \u0627\u0628 \u0628\u06be\u06cc \u0639\u0627\u0645 \u0637\u0648\u0631 \u067e\u0631 \u0686\u0644\u062a\u0627 \u06c1\u06d2. \u0646\u0638\u0631 \u0627\u0646\u062f\u0627\u0632 \u0641\u0627\u0626\u0644 \u0635\u0631\u0641 \u0645\u0639\u0631\u0648\u0641 \u0644\u06cc\u0628 \u0641\u0646\u06af\u0631 \u067e\u0631\u0646\u0679\u0633 \u06a9\u0648 \u062f\u0628\u0627\u062a\u06cc \u06c1\u06d2\u06d4 \u0646\u0626\u06d2 \u0646\u062a\u0627\u0626\u062c \u0634\u0627\u0645\u0644 \u0646\u06c1 \u06a9\u0631\u06cc\u06ba \u062c\u0628 \u062a\u06a9 \u06a9\u06c1 \u0622\u067e \u06a9\u0648 \u06cc\u0642\u06cc\u0646 \u0646\u06c1 \u06c1\u0648 \u06a9\u06c1 \u06cc\u06c1 \u062c\u0627\u0646 \u0628\u0648\u062c\u06be \u06a9\u0631 \u0679\u06cc\u0633\u0679 \u0688\u06cc\u0679\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u06cc\u06a9\u0634\u0646 \u0644\u0627\u06af \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0627\u067e\u0646\u06cc \u06a9\u06c1\u0627\u0646\u06cc \u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba\u06d4 \u0633\u0628\u0632 \u06a9\u06d2 \u0628\u0627\u06c1\u0631 \u0622\u0646\u06d2 \u06a9\u0627 \u0627\u0646\u062a\u0638\u0627\u0631 \u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<ul>\n<li>\n<p>\u0688\u0627\u06a9\u0631 \u0644\u0627\u06af \u0627\u0646 \u06a9\u0627\u0645\u06cc\u0627\u0628<\/p>\n<\/li>\n<li>\n<p>\u06c1\u0631 \u0633\u0631\u0648\u0633 \u0627\u0645\u06cc\u062c \u06a9\u0648 \u0688\u0648\u06a9\u0631 \u06c1\u0628 \u0645\u06cc\u06ba \u0628\u0646\u0627\u06cc\u0627 \u0627\u0648\u0631 \u0622\u06af\u06d2 \u0628\u0691\u06be\u0627\u06cc\u0627 \u06af\u06cc\u0627\u06d4<\/p>\n<\/li>\n<li>\n<p><code>clearledger-infra<\/code> \u0686\u06cc\u06a9 \u0622\u0624\u0679 \u06a9\u06cc\u0627\u06d4<\/p>\n<\/li>\n<li>\n<p>\u062a\u0639\u06cc\u0646\u0627\u062a\u06cc YAML \u06a9\u0648 \u0646\u0626\u06d2 SHA \u0679\u06cc\u06af\u0632 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u067e \u0688\u06cc\u0679 \u06a9\u06cc\u0627 \u06af\u06cc\u0627\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0639\u06c1\u062f \u06a9\u0648 \u0622\u06af\u06d2 \u0628\u0691\u06be\u0627\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2: <code>clearledger-infra<\/code><\/p>\n<\/li>\n<\/ul>\n<p>\u0627\u06af\u0631 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06a9\u0627\u0645\u06cc\u0627\u0628 \u06c1\u0648\u062c\u0627\u062a\u06cc \u06c1\u06d2\u060c \u06a9\u06be\u0648\u0644\u06cc\u06ba: <code>https:\/\/github.com\/YOUR_USERNAME\/clearledger-infra<\/code> \u0627\u067e\u0646\u06d2 \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u0645\u06cc\u0646\u06cc \u0641\u06cc\u0633\u0679 \u067e\u0631 \u0627\u06cc\u06a9 \u0646\u0638\u0631 \u0688\u0627\u0644\u06cc\u06ba\u06d4 \u062a\u0635\u0648\u06cc\u0631\u06cc \u0679\u06cc\u06af\u0632 \u06a9\u0648 \u0627\u0628 \u0645\u0648\u062c\u0648\u062f\u06c1 \u06a9\u0645\u0679 SHA \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4<\/p>\n<p>\u0627\u0628 \u0627\u067e\u0646\u06d2 \u06a9\u0644\u0633\u0679\u0631 \u06a9\u0648 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">kubectl get deployment auth-service -n clearledger \n  -o jsonpath=\"{.spec.template.spec.containers[0].image}\" && echo\n<\/code><\/pre>\n<p>\u067e\u0631\u0627\u0646\u06cc \u062a\u0635\u0627\u0648\u06cc\u0631 \u0627\u0628 \u0628\u06be\u06cc \u0638\u0627\u06c1\u0631 \u06c1\u0648 \u0633\u06a9\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 \u0627\u0633 \u06a9\u06cc \u062a\u0648\u0642\u0639 \u06c1\u06d2\u06d4 \u0645\u0631\u062d\u0644\u06c1 1 \u0645\u06cc\u06ba \u0633\u06cc\u06a9\u06be\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0633\u0628 \u0633\u06d2 \u0627\u06c1\u0645 \u0686\u06cc\u0632\u06cc\u06ba \u06cc\u06c1 \u06c1\u06cc\u06ba:<\/p>\n<pre><code class=\"language-text\">GitHub pipeline succeeded.\nDocker Hub has new images.\nclearledger-infra has new image tags.\nThe Kubernetes cluster did not update automatically.\n<\/code><\/pre>\n<p>\u06cc\u06c1 \u0646\u0627\u06a9\u0627\u0645\u06cc \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u062a\u0642\u0633\u06cc\u0645 \u06a9\u0627 \u0641\u0631\u0642 \u06c1\u06d2\u06d4 \u0645\u0631\u062d\u0644\u06c1 1 \u0645\u06cc\u06ba\u060c \u06c1\u0645 \u0646\u06d2 \u062a\u0639\u0645\u06cc\u0631 \u06a9\u0648 \u062e\u0648\u062f\u06a9\u0627\u0631 \u0628\u0646\u0627\u06cc\u0627\u060c \u0644\u06cc\u06a9\u0646 \u06c1\u0645\u0627\u0631\u06d2 \u067e\u0627\u0633 \u0627\u0628\u06be\u06cc \u062a\u06a9 \u0627\u0646\u0641\u0631\u0627\u0633\u0679\u0631\u06a9\u0686\u0631 \u06a9\u06d2 \u0630\u062e\u06cc\u0631\u06d2 \u06a9\u0648 \u062f\u06cc\u06a9\u06be\u0646\u06d2 \u0648\u0627\u0644\u0627 \u06a9\u0648\u0626\u06cc \u06a9\u0646\u0679\u0631\u0648\u0644\u0631 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0645\u0631\u062d\u0644\u06c1 2 ArgoCD \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u06a9\u06d2 \u0627\u0633 \u062e\u0644\u0627 \u06a9\u0648 \u067e\u0648\u0631\u0627 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-17-hands-on-checkpoint-prove-stage-1-is-really-done\">1.7 \u2014 \u067e\u0631\u06cc\u06a9\u0679\u0633 \u0686\u06cc\u06a9 \u067e\u0648\u0627\u0626\u0646\u0679: \u062b\u0627\u0628\u062a \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u0645\u0631\u062d\u0644\u06c1 1 \u0627\u0635\u0644 \u0645\u06cc\u06ba \u0645\u06a9\u0645\u0644 \u06c1\u0648\u0627 \u062a\u06be\u0627\u06d4<\/h3>\n<p>\u0635\u0631\u0641 \u06af\u0631\u06cc\u0646 \u0648\u0631\u06a9 \u0641\u0644\u0648 \u0628\u06cc\u062c \u067e\u0631 \u0627\u0646\u062d\u0635\u0627\u0631 \u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4 \u06c1\u0631 \u0627\u06cc\u06a9 \u0679\u06cc\u0633\u0679 \u062e\u0648\u062f \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-1-infra-repo-still-has-app-secrets-critical-for-stage-2\">1. \u0627\u0646\u0641\u0631\u0627\u0633\u0679\u0631\u06a9\u0686\u0631 \u0627\u0633\u0679\u0648\u0631\u06cc\u062c \u0645\u06cc\u06ba \u0627\u0628\u06be\u06cc \u0628\u06be\u06cc \u0627\u06cc\u067e \u06a9\u06d2 \u0631\u0627\u0632 \u0645\u0648\u062c\u0648\u062f \u06c1\u06cc\u06ba (\u0645\u0631\u062d\u0644\u06c1 2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06c1\u0645)\u06d4<\/h4>\n<p>\u06a9\u06be\u0644\u0627 <code>https:\/\/github.com\/YOUR_USERNAME\/clearledger-infra\/tree\/main\/manifests\/auth-service<\/code>, <code>secret.yaml<\/code> \u0627\u0633\u06d2 \u0638\u0627\u06c1\u0631 \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4<\/p>\n<p>\u0622\u067e \u06a9\u06d2 \u0644\u06cc\u067e \u0679\u0627\u067e \u067e\u0631:<\/p>\n<pre><code class=\"language-bash\">git clone --depth 1 https:\/\/github.com\/YOUR_USERNAME\/clearledger-infra.git \/tmp\/verify-infra\ngrep secretKeyRef \/tmp\/verify-infra\/manifests\/auth-service\/deployment.yaml\ngrep secret.yaml \/tmp\/verify-infra\/manifests\/kustomization.yaml\nrm -rf \/tmp\/verify-infra\n<\/code><\/pre>\n<p>\u0645\u062a\u0648\u0642\u0639: <code>secretKeyRef<\/code> \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u0622\u0624\u0679 \u067e\u0679 \u0633\u06d2\u06d4 \u062d\u0633\u0628 \u0636\u0631\u0648\u0631\u062a \u0641\u06c1\u0631\u0633\u062a <code>auth-service\/secret.yaml<\/code> \u0627\u0648\u0631 <code>ledger-service\/secret.yaml<\/code>. \u0627\u06af\u0631 \u0631\u0627\u0632 \u063a\u0627\u0626\u0628 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0645\u0631\u062d\u0644\u06c1 2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u00a71.3 \u0645\u06cc\u0646\u06cc \u0641\u06cc\u0633\u0679 \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u062f\u0628\u0627 \u062f\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-2-kustomize-image-tags-updated-by-ci\">2. CI \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0627\u067e \u0688\u06cc\u0679 \u06a9\u0631\u062f\u06c1 \u062a\u0635\u0648\u06cc\u0631\u06cc \u0679\u06cc\u06af\u0632 \u06a9\u0648 \u062d\u0633\u0628 \u0636\u0631\u0648\u0631\u062a \u0628\u0646\u0627\u0626\u06cc\u06ba<\/h4>\n<pre><code class=\"language-bash\">git clone --depth 1 https:\/\/github.com\/YOUR_USERNAME\/clearledger-infra.git \/tmp\/verify-infra\ngrep newTag \/tmp\/verify-infra\/manifests\/kustomization.yaml\nrm -rf \/tmp\/verify-infra\n<\/code><\/pre>\n<p>\u0645\u062a\u0648\u0642\u0639: <code>newTag<\/code> \u0627\u06cc\u06a9 40-\u06a9\u0631\u062f\u0627\u0631 \u06af\u0679 SHA (\u06cc\u0627 \u06a9\u0645\u0679 \u06c1\u06cc\u0634)\u06d4 \u0627\u0628\u06be\u06cc \u062a\u06a9 \u0646\u06c1\u06cc\u06ba\u06d4 <code>v0.1.0<\/code> \u0635\u0631\u0641: \u0627\u06af\u0631 \u0622\u067e \u0646\u06d2 \u00a70.3 \u0633\u06d2 \u0622\u06af\u06d2 \u0646\u06c1\u06cc\u06ba \u0628\u0691\u06be\u0627\u06cc\u0627 \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-3-docker-hub-has-signed-images-from-this-pipeline\">3. Docker Hub \u0646\u06d2 \u0627\u0633 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062a\u0635\u0627\u0648\u06cc\u0631 \u067e\u0631 \u062f\u0633\u062a\u062e\u0637 \u06a9\u06cc\u06d2 \u06c1\u06cc\u06ba\u06d4<\/h4>\n<p>\u067e\u06be\u0631 hub.docker.com \u06a9\u06be\u0648\u0644\u06cc\u06ba\u06d4 <code>clearledger-auth-service<\/code> \u067e\u06be\u0631 <strong>\u0679\u06cc\u06af<\/strong>. \u062a\u0627\u0632\u06c1 \u062a\u0631\u06cc\u0646 \u0679\u06cc\u06af \u06a9\u0627 \u0645\u0631\u062d\u0644\u06c1 2 \u0633\u06d2 SHA \u0633\u06d2 \u200b\u200b\u0645\u0645\u0627\u062b\u0644 \u06c1\u0648\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4<\/p>\n<h4 id=\"heading-4-cluster-unchanged-deployment-gap-intentional\">4. (\u06a9\u0648\u0626\u06cc \u06a9\u0644\u0633\u0679\u0631 \u062a\u0628\u062f\u06cc\u0644\u06cc\u0627\u06ba \u0646\u06c1\u06cc\u06ba (\u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u0648\u0642\u0641\u06c1) \u062c\u0627\u0646 \u0628\u0648\u062c\u06be \u06a9\u0631)<\/h4>\n<pre><code class=\"language-bash\">kubectl get deployment auth-service -n clearledger \n  -o jsonpath=\"{.spec.template.spec.containers[0].image}\" && echo\n<\/code><\/pre>\n<p>\u0645\u062a\u0648\u0642\u0639: \u067e\u06be\u0631 \u0628\u06be\u06cc <strong>\u0645\u0631\u062d\u0644\u06c1 0<\/strong> \u0679\u06cc\u06af\u0632\u060c \u062c\u06cc\u0633\u06d2 <code>veeno-demo\/clearledger-auth-service:v0.1.0<\/code>)\u060c \u0646\u06cc\u0627 SHA \u0646\u06c1\u06cc\u06ba\u06d4 \u0627\u0633 \u0633\u06d2 \u062b\u0627\u0628\u062a \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 CI \u0646\u06d2 \u06a9\u0644\u0633\u0679\u0631 \u06a9\u0648 \u0645\u062a\u0627\u062b\u0631 \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u0627\u06d4<\/p>\n<h4 id=\"heading-5-runner-still-idle\">5. \u0631\u0646\u0631 \u0627\u0628\u06be\u06cc \u062a\u06a9 \u0628\u06cc\u06a9\u0627\u0631 \u06c1\u06d2\u06d4<\/h4>\n<p>GitHub\u060c \u062a\u0631\u062a\u06cc\u0628\u0627\u062a\u060c \u06a9\u0627\u0645\u060c \u0644\u0627\u0646\u0686\u0631\u060c <code>clearledger-runner<\/code>, <strong>\u0633\u0633\u062a<\/strong>.<\/p>\n<pre><code class=\"language-bash\">make check-1\n<\/code><\/pre>\n<p>\u0645\u0631\u062d\u0644\u06c1 2 \u0645\u06cc\u06ba \u062f\u0627\u062e\u0644 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u067e\u0627\u0646\u0686\u0648\u06ba \u06a9\u0648 \u067e\u0627\u0633 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-what-you-learned-in-stage-1\">\u0622\u067e \u0646\u06d2 \u0645\u0631\u062d\u0644\u06c1 1 \u0645\u06cc\u06ba \u06a9\u06cc\u0627 \u0633\u06cc\u06a9\u06be\u0627\u06d4<\/h3>\n<ul>\n<li>\n<p><strong>CI \u062a\u0639\u0645\u06cc\u0631\u0627\u062a\u06cc \u0639\u0645\u0644 \u0633\u06d2 \u0646\u0648\u0679 \u0628\u06a9 \u06a9\u0648 \u06c1\u0679\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/strong> \u062a\u0639\u0645\u06cc\u0631\u0627\u062a \u062f\u06c1\u0631\u0627\u0626\u06cc \u062c\u0627 \u0633\u06a9\u062a\u06cc \u06c1\u06cc\u06ba\u060c \u062f\u06a9\u06be\u0627\u0626\u06cc \u062f\u06cc\u062a\u06cc \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u06af\u0679 \u06a9\u0645\u0679 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0645\u0646\u0633\u0644\u06a9 \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0686\u0644\u0627\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u06a9\u0627\u0631\u06a9\u0646 \u06c1\u06cc\u06ba\u060c \u062e\u0648\u062f \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u0646\u06c1\u06cc\u06ba\u06d4<\/strong> GitHub \u06a9\u0627\u0645\u0648\u06ba \u06a9\u0648 \u0634\u06cc\u0688\u0648\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u062e\u0648\u062f \u0645\u06cc\u0632\u0628\u0627\u0646 \u0627\u06cc\u06af\u0632\u06cc\u06a9\u0679\u0648 \u0627\u0646\u06c1\u06cc\u06ba VM \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0686\u0644\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0646\u0645\u0648\u0646\u06d2 \u0627\u0648\u0631 \u0645\u0637\u0644\u0648\u0628\u06c1 \u062d\u0627\u0644\u062a\u06cc\u06ba \u0645\u062e\u062a\u0644\u0641 \u06c1\u06cc\u06ba\u06d4<\/strong> Docker Hub \u0627\u0633\u0679\u0648\u0631\u0632 \u0646\u06d2 \u0628\u0646\u0627\u0626\u06cc \u06c1\u0648\u0626\u06cc \u062a\u0635\u0627\u0648\u06cc\u0631\u06d4 <code>clearledger-infra<\/code> GitHub \u0627\u06cc\u06a9 Kubernetes \u0645\u06cc\u0646\u06cc \u0641\u06cc\u0633\u0679 \u0627\u0633\u0679\u0648\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0648 \u0622\u067e \u06a9\u0648 \u0628\u062a\u0627\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u06a9\u0648\u0646 \u0633\u06cc \u062a\u0635\u0648\u06cc\u0631 \u0686\u0644\u0627\u0646\u06cc \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0627\u06cc\u06a9 \u0627\u0686\u06be\u06cc \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u062e\u0641\u06cc\u06c1 \u0637\u0648\u0631 \u067e\u0631 \u06a9\u0644\u0633\u0679\u0631 \u06a9\u0648 \u062a\u0628\u062f\u06cc\u0644 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4<\/strong> \u06cc\u06c1 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06af\u0679 \u06a9\u0648 \u0686\u0644\u0627\u0646\u06d2 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0627\u067e \u0688\u06cc\u0679 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 <code>kubectl<\/code>.<\/p>\n<\/li>\n<li>\n<p><strong>\u0628\u0627\u0642\u06cc \u062e\u0644\u0627:<\/strong> \u0628\u0646\u06cc\u0627\u062f\u06cc \u0688\u06be\u0627\u0646\u0686\u06d2 \u06a9\u0627 \u0630\u062e\u06cc\u0631\u06c1 \u0628\u062f\u0644 \u06af\u06cc\u0627 \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u06a9\u0644\u0633\u0679\u0631 \u0646\u06c1\u06cc\u06ba \u0628\u062f\u0644\u0627 \u06c1\u06d2\u06d4 \u06a9\u0633\u06cc \u06a9\u0648 \u0627\u0628\u06be\u06cc \u0628\u06be\u06cc \u062a\u0628\u062f\u06cc\u0644\u06cc\u0627\u06ba \u062f\u0633\u062a\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0644\u0627\u06af\u0648 \u06a9\u0631\u0646\u06cc \u06c1\u06cc\u06ba\u06d4 \u0645\u0631\u062d\u0644\u06c1 2 \u0645\u06cc\u06ba\u060c \u0622\u067e \u0627\u0633 \u0645\u0633\u0626\u0644\u06d2 \u06a9\u0648 \u062d\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 GitOps \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba \u06af\u06d2\u06d4<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u0627\u0628 \u0622\u067e \u0627\u067e\u0646\u06d2 \u062a\u062c\u0631\u0628\u06d2 \u06a9\u06cc \u0641\u06c1\u0631\u0633\u062a \u0645\u06cc\u06ba \u06a9\u06cc\u0627 \u0688\u0627\u0644 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\/\u0627\u06cc\u06a9 \u0627\u0646\u0679\u0631\u0648\u06cc\u0648 \u0645\u06cc\u06ba \u06a9\u06c1\u06c1 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba:<\/strong><\/p>\n<blockquote>\n<p>\u06c1\u0645 \u0646\u06d2 \u0633\u06cc\u0644\u0641 \u06c1\u0648\u0633\u0679\u0688 GitHub \u0627\u06cc\u06a9\u0634\u0646 \u0631\u0646\u0631 \u067e\u0631 \u0627\u06cc\u06a9 CI \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u0628\u0646\u0627\u0626\u06cc \u06c1\u06d2 \u062c\u0648 \u06c1\u0631 \u067e\u0634 \u067e\u0631 \u06a9\u0646\u0679\u06cc\u0646\u0631 \u0627\u0645\u06cc\u062c\u0632 \u0628\u0646\u0627\u062a\u06cc \u0627\u0648\u0631 \u062f\u06be\u06a9\u06cc\u0644\u062a\u06cc \u06c1\u06d2 \u0627\u0648\u0631 \u06c1\u0645\u06cc\u06ba \u0646\u0648\u06a9\u0631\u06cc\u0627\u06ba \u067e\u06cc\u062f\u0627 \u06c1\u0648\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0646\u0627\u06a9\u0627\u0645 \u0648\u0631\u06a9 \u0641\u0644\u0648 \u06a9\u0648 \u0688\u06cc\u0628\u06af \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<\/blockquote>\n<p><code>make snapshot STAGE=1 && make snapshots<\/code>. \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba <code>clearledger.stage1<\/code>. \u062f\u06cc\u06a9\u06be\u06cc\u06ba \u06a9\u06c1 \u0627\u067e\u0646\u06cc \u062a\u0631\u0642\u06cc \u06a9\u0648 \u06a9\u06cc\u0633\u06d2 \u0628\u0686\u0627\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4<\/p>\n<h2 id=\"heading-stage-2-gitops-with-argocd\">\u0645\u0631\u062d\u0644\u06c1 2 &#8211; ArgoCD \u06a9\u06d2 \u0633\u0627\u062a\u06be GitOps<\/h2>\n<p>\u0627\u0628 \u0633\u06d2\u060c \u06af\u0679 \u0627\u0646\u0686\u0627\u0631\u062c \u06c1\u06d2\u06d4 \u0627\u0646\u0641\u0631\u0627\u0633\u0679\u0631\u06a9\u0686\u0631 \u0633\u0679\u0648\u0631\u06cc\u062c \u067e\u0631 \u0644\u06a9\u06be\u06cc \u06af\u0626\u06cc \u06c1\u0631 \u0686\u06cc\u0632 \u067e\u0631 \u0639\u0645\u0644 \u062f\u0631\u0622\u0645\u062f \u06c1\u0648\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4 \u062c\u0628 \u06a9\u0648\u0626\u06cc \u062f\u0633\u062a\u06cc \u0637\u0648\u0631 \u067e\u0631 \u06a9\u0644\u0633\u0679\u0631 \u06a9\u0648 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 ArgoCD \u0641\u0631\u0642 \u0645\u062d\u0633\u0648\u0633 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0633\u06d2 \u0648\u0627\u067e\u0633 Git \u0633\u06d2 \u0645\u0644\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u06c1\u062f\u0641:<\/strong> \u062f\u06cc\u06a9\u06be\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 ArgoCD \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 <code>clearledger-infra<\/code> \u0627\u067e\u0646\u06cc \u062a\u0628\u062f\u06cc\u0644\u06cc\u0627\u06ba \u0627\u067e\u0646\u06d2 \u06a9\u0644\u0633\u0679\u0631 \u0645\u06cc\u06ba \u0644\u06af\u0627\u0626\u06cc\u06ba\u06d4 CI \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u0635\u0631\u0641 Git \u0631\u06cc\u067e\u0648\u0632\u0679\u0631\u06cc\u0648\u06ba \u06a9\u0648 \u0627\u067e \u0688\u06cc\u0679 \u06a9\u0631\u062a\u06cc \u06c1\u06d2 \u0627\u0648\u0631 Kubernetes \u0633\u06d2 \u0645\u0646\u0633\u0644\u06a9 \u06cc\u0627 \u0686\u0644\u062a\u06cc \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 <code>kubectl<\/code> \u062d\u06a9\u0645<\/p>\n<p>\u06cc\u06c1\u0627\u06ba \u0627\u06cc\u06a9 \u0632\u06cc\u0627\u062f\u06c1 \u0627\u0646\u0679\u0631\u0627\u06cc\u06a9\u0679\u0648\u060c \u06af\u0627\u0691\u06be\u0627 \u0648\u0631\u0698\u0646 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-am-i-ready-for-stage-2\">\u06a9\u06cc\u0627 \u0645\u06cc\u06ba \u0645\u0631\u062d\u0644\u06c1 2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062a\u06cc\u0627\u0631 \u06c1\u0648\u06ba\u061f<\/h3>\n<p>\u062c\u0627\u0631\u06cc \u0631\u06a9\u06be\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u062e\u062a\u0645 \u06a9\u0631\u06cc\u06ba\u06d4 <strong>\u00a71.6<\/strong>\u0686\u0644\u0627\u0626\u06cc\u06ba:<\/p>\n<pre><code class=\"language-bash\">make check-1\n\ngrep secretKeyRef infra\/manifests\/auth-service\/deployment.yaml\n\ngrep vault.hashicorp infra\/manifests\/auth-service\/deployment.yaml && echo \"STOP: Vault annotations present\" || echo \"OK\"\n<\/code><\/pre>\n<p>\u0622\u067e \u06a9\u0648 \u062f\u0631\u062c \u0630\u06cc\u0644 \u06a9\u0648 \u0686\u06cc\u06a9 \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2:<\/p>\n<p>\u0641\u0648\u0631\u06cc \u0686\u06cc\u06a9 \u0644\u0633\u0679:<\/p>\n<ul>\n<li>\n<p><code>clearledger-infra<\/code> \u0634\u0627\u0645\u0644 <code>auth-service\/secret.yaml<\/code> \u0627\u0648\u0631 <code>ledger-service\/secret.yaml<\/code><\/p>\n<\/li>\n<li>\n<p>\u0622\u067e \u06a9\u0627 \u062e\u0648\u062f \u0645\u06cc\u0632\u0628\u0627\u0646 \u0631\u0646\u0631 <strong>\u0633\u0633\u062a<\/strong> \u06a9\u06d2 \u0633\u0627\u062a\u06be <code>clearledger<\/code> \u0628\u0631\u0627\u0646\u0688<\/p>\n<\/li>\n<li>\n<p><code>ENABLE_ARGOCD_SYNC<\/code> \u06cc\u06c1 \u0627\u0628\u06be\u06cc \u062a\u06a9 \u0633\u06cc\u0679 \u0627\u067e \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u0627 \u06c1\u06d2 (\u0622\u067e \u0627\u0633\u06d2 ArgoCD \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f \u0641\u0639\u0627\u0644 \u06a9\u0631 \u062f\u06cc\u06ba \u06af\u06d2)\u06d4<\/p>\n<\/li>\n<\/ul>\n<p>\u0645\u0631\u062d\u0644\u06c1 2 \u0645\u06a9\u0645\u0644 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f <code>make check-2<\/code> \u067e\u0627\u0633 \u0627\u0648\u0631 <code>http:\/\/argocd.local<\/code> ArgoCD \u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631\u06cc \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2\u06d4 <code>clearledger<\/code>.<\/p>\n<p>\u0622\u062e\u0631 \u0645\u06cc\u06ba\u060c \u0627\u067e\u0646\u06cc \u062a\u0631\u0642\u06cc \u06a9\u0648 \u0645\u062d\u0641\u0648\u0638 \u06a9\u0631\u06cc\u06ba.<\/p>\n<pre><code class=\"language-bash\">make snapshot STAGE=2\nmake snapshots\n<\/code><\/pre>\n<p>\u0627\u0633\u06d2 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 <code>clearledger.stage2<\/code> \u06cc\u06c1 \u0633\u0646\u06cc\u067e \u0634\u0627\u0679 \u06a9\u06cc \u0641\u06c1\u0631\u0633\u062a \u0645\u06cc\u06ba \u0638\u0627\u06c1\u0631 \u06c1\u0648\u06af\u0627\u06d4<\/p>\n<h3 id=\"heading-what-you-need-to-know-first\">\u0622\u067e \u06a9\u0648 \u067e\u06c1\u0644\u06d2 \u06a9\u06cc\u0627 \u062c\u0627\u0646\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4<\/h3>\n<p><strong>\u0645\u0631\u062d\u0644\u06c1 1 \u0633\u06d2 \u0641\u0631\u0642:<\/strong> CI \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u06c1\u06cc \u062a\u0635\u0627\u0648\u06cc\u0631 \u0627\u0648\u0631 \u0627\u067e \u0688\u06cc\u0679\u0633 \u0628\u0646\u0627 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4 <code>clearledger-infra<\/code>. \u062c\u0628 \u062a\u06a9 \u06a9\u0648\u0626\u06cc \u0627\u0633\u06d2 \u0686\u0644\u0627\u062a\u0627 \u06c1\u06d2 \u06a9\u0644\u0633\u0679\u0631 \u0645\u06cc\u06ba \u06a9\u0648\u0626\u06cc \u062a\u0628\u062f\u06cc\u0644\u06cc \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u06cc\u06d4 <code>kubectl<\/code>. \u06cc\u06c1 \u0642\u062f\u0645 \u0622\u062e\u0631\u06cc \u0645\u0631\u062d\u0644\u06d2 \u06a9\u0648 \u0628\u0646\u062f \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<table>\n<thead>\n<tr>\n<th>\u0688\u0628\u0644\u06cc\u0648 \u0627\u06cc\u0686 \u0627\u0648<\/th>\n<th>\u0646\u0648\u06a9\u0631\u06cc<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>C.I<\/strong> (\u0645\u0631\u062d\u0644\u06c1 1)<\/td>\n<td>\u062a\u0639\u0645\u06cc\u0631 \u2192 \u0627\u0633\u06a9\u06cc\u0646 \u2192 \u067e\u0634 \u0627\u0645\u06cc\u062c \u2192 \u0627\u067e\u0688\u06cc\u0679 \u0627\u0645\u06cc\u062c \u0679\u06cc\u06af <code>clearledger-infra<\/code><\/td>\n<\/tr>\n<tr>\n<td><strong>\u0622\u0631\u06af\u0648 \u0633\u06cc \u0688\u06cc<\/strong> (\u0645\u0631\u062d\u0644\u06c1 2)<\/td>\n<td>\u062f\u06cc\u06a9\u06be\u06cc\u06ba <code>clearledger-infra<\/code> \u2192 \u0645\u06cc\u0646\u06cc \u0641\u06cc\u0633\u0679 \u06a9\u0627 \u0627\u0637\u0644\u0627\u0642 \u06a9\u0631\u06cc\u06ba \u2192 \u06a9\u0644\u0633\u0679\u0631 \u0686\u0644\u0627\u0626\u06cc\u06ba \u062c\u06cc\u0633\u0627 \u06a9\u06c1 \u06af\u0679 \u0622\u067e \u06a9\u0648 \u0628\u062a\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<pre><code class=\"language-text\">push code \u2192 CI updates clearledger-infra \u2192 ArgoCD syncs cluster\n<\/code><\/pre>\n<h3 id=\"heading-pre-sync-checklist-run-before-argocd-app-sync\">\u067e\u0631\u06cc \u0633\u0646\u06a9 \u0686\u06cc\u06a9 \u0644\u0633\u0679: \u067e\u06c1\u0644\u06d2 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4 <code>argocd app sync<\/code><\/h3>\n<p>ArgoCD \u06a9\u0633\u06cc \u0628\u06be\u06cc \u0686\u06cc\u0632 \u06a9\u0648 \u0627\u067e\u0646\u0627\u062a\u0627 \u06c1\u06d2\u06d4 <code>clearledger-infra<\/code>. \u063a\u0644\u0637 \u0645\u0648\u0627\u062f \u0633\u0631\u062e \u067e\u06be\u0644\u06cc\u0648\u06ba \u06a9\u0627 \u0633\u0628\u0628 \u0628\u0646\u062a\u0627 \u06c1\u06d2\u06d4 \u00a71.7 \u0686\u06cc\u06a9 \u067e\u0648\u0627\u0626\u0646\u0679 \u0679\u06cc\u0628\u0644 \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0686\u0644\u0627\u0626\u06cc\u06ba \u062a\u0627\u06a9\u06c1 \u06cc\u06c1 \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u06d2 \u06a9\u06c1 GitHub \u0633\u0627\u0626\u06cc\u0688 \u067e\u0631 \u0645\u0648\u062c\u0648\u062f \u0645\u0648\u0627\u062f \u0627\u0628 \u0628\u06be\u06cc \u062f\u0631\u0633\u062a \u06c1\u06d2\u060c \u067e\u06be\u0631 \u0646\u0648\u0679 \u0628\u06a9 \u06a9\u06cc \u0637\u0631\u0641 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\"># Application manifest must point at YOUR infra repo\ngrep repoURL stages\/stage-2-gitops\/argocd\/clearledger-app.yaml\n\n# Stage 0 workloads still healthy before ArgoCD takes over\nkubectl get pods -n clearledger\ncurl -s -o \/dev\/null -w \"%{http_code}\" http:\/\/clearledger.local\/auth\/health\n<\/code><\/pre>\n<p>\u0645\u062a\u0648\u0642\u0639: <code>repoURL<\/code> \u0622\u067e \u06a9\u06d2 GitHub \u0635\u0627\u0631\u0641 \u0646\u0627\u0645\u060c \u0627\u0648\u0631 \u062a\u0645\u0627\u0645 \u0627\u06cc\u067e \u067e\u0648\u0688\u0632 \u067e\u0631 \u0645\u0634\u062a\u0645\u0644 \u06c1\u06d2\u06d4 <code>Running<\/code>curl <code>200<\/code>. \u0635\u0631\u0641 \u0627\u0633 \u0635\u0648\u0631\u062a \u0645\u06cc\u06ba \u062c\u0628 \u062f\u0648\u0646\u0648\u06ba \u067e\u0627\u0633 \u06c1\u0648\u06ba \u0622\u067e \u06a9\u0648 \u0646\u06cc\u0686\u06d2 \u0627\u0631\u06af\u0648 \u0633\u06cc \u0688\u06cc \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u0627\u0648\u0631 \u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631\u06cc \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u06af\u06cc\u06d4<\/p>\n<pre><code class=\"language-bash\">kubectl create namespace argocd 2>\/dev\/null || true\n\nkubectl apply -n argocd --server-side --force-conflicts -f \n  https:\/\/raw.githubusercontent.com\/argoproj\/argo-cd\/stable\/manifests\/install.yaml\n\nkubectl wait --for=condition=ready pod \n  -l app.kubernetes.io\/name=argocd-server -n argocd --timeout=180s\n<\/code><\/pre>\n<p><strong>\u06a9\u06cc\u0648\u06ba<\/strong> <code>--server-side --force-conflicts<\/code><strong>?<\/strong> Argo CDs \u0627\u0636\u0627\u0641\u06cc \u0628\u0691\u06d2 \u0633\u0627\u0626\u0632 \u0645\u06cc\u06ba \u0628\u06be\u06cc\u062c\u06d2 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>applicationsets.argoproj.io<\/code> \u0633\u06cc \u0622\u0631 \u0688\u06cc \u0639\u0627\u0645 \u0637\u0648\u0631 \u067e\u0631 <code>kubectl apply<\/code> \u0645\u06cc\u06ba \u062a\u0628\u0635\u0631\u0648\u06ba \u0645\u06cc\u06ba \u0633\u0628 \u06a9\u0686\u06be \u0686\u06be\u067e\u0627\u0646\u06d2 \u06a9\u06cc \u06a9\u0648\u0634\u0634 \u06a9\u0631\u062a\u0627 \u06c1\u0648\u06ba \u0627\u0648\u0631 256KiB \u06a9\u06cc \u062d\u062f \u06a9\u0648 \u0645\u0627\u0631\u062a\u0627 \u06c1\u0648\u06ba \u0627\u0648\u0631 \u0627\u06cc\u06a9 \u063a\u0644\u0637\u06cc \u06c1\u0648\u062a\u06cc \u06c1\u06d2: <code>metadata.annotations: Too long<\/code>. \u0633\u0631\u0648\u0631 \u0633\u0627\u0626\u06cc\u0688 \u0627\u0646\u0641\u0648\u0631\u0633\u0645\u0646\u0679 \u0627\u0633\u06d2 \u0631\u0648\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0633 \u0637\u0631\u062d \u0622\u0631\u06af\u0648 \u0633\u06cc \u0688\u06cc \u0622\u067e \u0633\u06d2 \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u062a\u0648\u0642\u0639 \u0631\u06a9\u06be\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u067e\u0646\u0627 \u0627\u06cc\u0688\u0645\u0646\u0633\u0679\u0631\u06cc\u0679\u0631 \u067e\u0627\u0633 \u0648\u0631\u0688 \u062d\u0627\u0635\u0644 \u06a9\u0631\u06cc\u06ba:<\/p>\n<pre><code class=\"language-bash\">kubectl -n argocd get secret argocd-initial-admin-secret \n  -o jsonpath=\"{.data.password}\" | base64 -d && echo\n<\/code><\/pre>\n<h4 id=\"heading-configure-argo-cd-for-your-nginx-ingress\">NGINX \u0627\u0633\u062a\u0642\u0628\u0627\u0644\u06cc\u06c1 \u06a9\u06d2 \u0644\u06cc\u06d2 Argo CD \u06a9\u0646\u0641\u06cc\u06af\u0631\u06cc\u0634\u0646<\/h4>\n<p>\u0628\u0631\u0627\u0624\u0632\u0631 HTTPS \u06a9\u0648 \u0627\u0646\u062f\u0631\u0627\u062c \u0633\u06d2 \u062c\u0648\u0691\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0627\u0646\u062f\u0631\u0627\u062c \u0633\u0627\u062f\u06c1 HTTP \u06a9\u0648 \u0627\u0631\u06af\u0648 \u0633\u06cc \u0688\u06cc \u0633\u0631\u0648\u0631 \u067e\u0631 \u0628\u06be\u06cc\u062c\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0633 \u06a9\u06d2 \u0628\u063a\u06cc\u0631\u060c UI \u0627\u06a9\u062b\u0631 \u06a9\u0631\u06cc\u0634 \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4 <code>503<\/code> \u06cc\u0627 <code>ERR_TOO_MANY_REDIRECTS<\/code> \u0631\u06cc\u0626\u0644 \u0679\u0627\u0626\u0645 \u0627\u067e \u0688\u06cc\u0679 URL (<code>\/api\/v1\/stream\/*<\/code>)\u06d4<\/p>\n<pre><code class=\"language-bash\">kubectl apply -f stages\/stage-2-gitops\/infra\/argocd-cmd-params.yaml\n\nkubectl apply -f stages\/stage-2-gitops\/infra\/argocd-ingress.yaml\n\nkubectl rollout restart deployment\/argocd-server -n argocd\n\nkubectl rollout status deployment\/argocd-server -n argocd --timeout=180s\n<\/code><\/pre>\n<p><strong>\u0633\u06d2 \u0645\u062a\u0648\u0642\u0639<\/strong> <code>argocd-cmd-params-cm<\/code><strong>:<\/strong> <code>server.insecure: \"true\"<\/code>, <code>server.grpc.web: \"true\"<\/code>, <code>server.url: https:\/\/argocd.local<\/code>.<\/p>\n<p>\u06a9\u06be\u0644\u0627 <code>https:\/\/argocd.local<\/code>. \u0644\u0627\u06af \u0627\u0646: <code>admin<\/code> \u0627\u0648\u0631 \u0627\u0648\u067e\u0631 \u0633\u06d2 \u067e\u0627\u0633 \u0648\u0631\u0688\u06d4 \u0627\u06af\u0631 \u0622\u067e \u06a9\u0627 \u0628\u0631\u0627\u0624\u0632\u0631 \u062e\u0648\u062f \u062f\u0633\u062a\u062e\u0637 \u0634\u062f\u06c1 \u0633\u0631\u0679\u06cc\u0641\u06a9\u06cc\u0679 \u0648\u0627\u0631\u0646\u0646\u06af \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2 \u062a\u0648 \u0627\u0633\u06d2 \u0642\u0628\u0648\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p><strong>\u0645\u062a\u0648\u0642\u0639:<\/strong> \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u0627 \u0635\u0641\u062d\u06c1 \u0644\u0648\u0688 \u06c1\u0648 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0628\u0631\u0627\u0624\u0632\u0631 \u06a9\u0646\u0633\u0648\u0644 (F12 \u06a9\u0646\u0633\u0648\u0644) \u06a9\u0648 \u0638\u0627\u06c1\u0631 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2: <code>401<\/code> \u06cc\u0627 <code>ERR_HTTP2_PROTOCOL_ERROR<\/code>. \u0627\u06af\u0631 UI \u0628\u0627\u0642\u0627\u0639\u062f\u06c1 \u0648\u0646\u0688\u0648 \u0645\u06cc\u06ba \u0627\u0686\u06be\u0627 \u0644\u06af\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u0622\u067e \u06a9\u0627 \u06a9\u0627\u0645 \u06c1\u0648 \u06af\u06cc\u0627\u06d4 \u067e\u0648\u0634\u06cc\u062f\u06af\u06cc \u0648\u0636\u0639 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba\u06d4<\/p>\n<p><strong>\u0627\u06af\u0631 \u0644\u0627\u06af \u0627\u0646 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/strong> <code>401 Unauthorized<\/code> (\u0627\u06a9\u062b\u0631 \u06a9\u0646\u0641\u06cc\u06af\u0631\u06cc\u0634\u0646 \u0645\u06cc\u06ba \u062a\u0628\u062f\u06cc\u0644\u06cc \u06cc\u0627 \u0633\u0627\u0628\u0642\u06c1 \u200b\u200b\u0644\u0627\u06af \u0627\u0646 \u06a9\u06cc \u062e\u0631\u0627\u0628\u06cc \u06a9\u06d2 \u0628\u0639\u062f) \u0646\u062c\u06cc\/\u067e\u0648\u0634\u06cc\u062f\u06c1 \u0648\u0646\u0688\u0648 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u06cc\u0627 \u0633\u0627\u0626\u0679 \u06a9\u0627 \u0688\u06cc\u0679\u0627 \u062d\u0630\u0641 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u06a9\u0648\u0634\u0634 \u06a9\u0631\u06cc\u06ba\u06d4 <code>argocd.local<\/code>\u0679\u06cc\u067e \u06a9\u0631\u06cc\u06ba\u060c \u067e\u06be\u0631 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0644\u0627\u06af \u0627\u0646 \u06a9\u0631\u06cc\u06ba\u06d4 \u06a9\u06cc\u0627 \u0622\u067e \u0627\u0628 \u0628\u06be\u06cc \u0645\u0646\u0633\u0644\u06a9 \u06c1\u06cc\u06ba\u061f Troubleshooting.md \u062f\u06cc\u06a9\u06be\u06cc\u06ba\u06d4 \u0622\u0631\u06af\u0648 \u0633\u06cc \u0688\u06cc\u06d4<\/p>\n<p>ArgoCD \u06a9\u0648 \u0627\u067e\u0646\u06d2 \u0627\u0646\u0641\u0631\u0627\u0633\u0679\u0631\u06a9\u0686\u0631 \u0631\u06cc\u067e\u0648\u0632\u0679\u0631\u06cc \u0633\u06d2 \u062c\u0648\u0691\u06cc\u06ba \u0627\u0648\u0631 \u0627\u06cc\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0645\u06cc\u0646\u06cc \u0641\u06cc\u0633\u0679 \u06a9\u0648 \u0644\u0627\u06af\u0648 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-1-edit-stagesstage-2-gitopsargocdclearledger-appyaml\">1. \u062a\u0631\u0645\u06cc\u0645 \u06a9\u0631\u06cc\u06ba\u06d4 <code>stages\/stage-2-gitops\/argocd\/clearledger-app.yaml<\/code><\/h4>\n<p>\u0633\u06cc\u0679 <code>spec.source.repoURL<\/code> \u0622\u067e \u06a9\u0627 \u0627\u0646\u0641\u0631\u0627\u0633\u0679\u0631\u06a9\u0686\u0631 \u0630\u062e\u06cc\u0631\u06c1 (\u0622\u067e \u06a9\u0627 GitHub \u0635\u0627\u0631\u0641 \u0646\u0627\u0645 \u0646\u06c1\u06cc\u06ba) <code>git config user.name<\/code>)\u06d4<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/07\/1785194532_986_Homelab-\u0633\u06d2-AWS-\u062a\u06a9-\u067e\u0631\u0648\u0688\u06a9\u0634\u0646-\u06a9\u06d2-\u0644\u06cc\u06d2-\u062a\u06cc\u0627\u0631-DevSecOps-\u067e\u0644\u06cc\u0679.png\" alt=\"\u0645\u06cc\u0646\u06cc \u0641\u06cc\u0633\u0679 \u0641\u0627\u0626\u0644 \u06a9\u06cc \u0627\u06cc\u06a9 \u062a\u0635\u0648\u06cc\u0631 \u062c\u0648 \u06cc\u06c1 \u0628\u062a\u0627\u062a\u06cc \u06c1\u06d2 \u06a9\u06c1 \u06a9\u06cc\u0627 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u0646\u0627 \u06c1\u06d2\u06d4\" style=\"display:block;margin:0 auto\" width=\"705\" height=\"161\" loading=\"lazy\" title=\"\"><\/p>\n<h4 id=\"heading-2-connect-argocd-to-your-infrastructure-repository\">2. ArgoCD \u06a9\u0648 \u0627\u067e\u0646\u06d2 \u0627\u0646\u0641\u0631\u0627\u0633\u0679\u0631\u06a9\u0686\u0631 \u0627\u0633\u0679\u0648\u0631\u06cc\u062c \u0633\u06d2 \u062c\u0648\u0691\u06cc\u06ba\u06d4<\/h4>\n<p>ArgoCD \u06a9\u0648 \u062f\u06cc\u06a9\u06be\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u06ba\u06d4 <code>clearledger-infra<\/code> \u0627\u06cc\u06a9 \u0646\u0626\u06d2 \u0639\u06c1\u062f \u06a9\u06d2 \u0644\u06cc\u06d2\u06d4 \u062c\u0628 \u0628\u06be\u06cc \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u0645\u06cc\u0646\u06cc \u0641\u06cc\u0633\u0679 \u0645\u06cc\u06ba \u062a\u0628\u062f\u06cc\u0644\u06cc \u0622\u062a\u06cc \u06c1\u06d2 \u062a\u0648 ArgoCD \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u0622\u067e \u06a9\u06d2 \u06a9\u0644\u0633\u0679\u0631 \u06a9\u0648 \u0627\u067e \u0688\u06cc\u0679 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\"># macOS: brew install argocd\nargocd login argocd.local --username admin --password YOUR_PASSWORD --insecure --grpc-web\n\n# Public repo\nargocd repo add https:\/\/github.com\/YOUR_USERNAME\/clearledger-infra.git --grpc-web\n\n# Private repo \u2014 PAT from Stage 1 \u00a71.4 (you saved it as GitHub secret INFRA_REPO_TOKEN)\nexport INFRA_REPO_TOKEN='ghp_...'   # paste here; GitHub only shows it once at creation\nargocd repo add https:\/\/github.com\/YOUR_USERNAME\/clearledger-infra.git \n  --username git --password \"$INFRA_REPO_TOKEN\" --grpc-web\n<\/code><\/pre>\n<p><strong>\u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u0622\u0631\u06af\u0648 \u0633\u06cc \u0688\u06cc \u0631\u06cc\u067e\u0648\u0632\u0679\u0631\u06cc \u062a\u06a9 \u067e\u06c1\u0646\u0686 \u0633\u06a9\u062a\u06cc \u06c1\u06d2\u06d4<\/strong> (\u0628\u0631\u0627\u06c1 \u06a9\u0631\u0645 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u062f\u06cc\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06cc\u06c1 \u06a9\u0631\u06cc\u06ba):<\/p>\n<pre><code class=\"language-bash\">argocd repo list --grpc-web\n<\/code><\/pre>\n<p>\u0622\u067e \u06a9\u06cc \u062a\u0644\u0627\u0634 <code>clearledger-infra<\/code> URL \u067e\u0631 \u0645\u0634\u062a\u0645\u0644 \u06c1\u06d2: <strong>\u0632\u0645\u0631\u06c1<\/strong> <code>git<\/code> \u06a9\u0646\u06a9\u0634\u0646 \u06a9\u0627\u0645\u06cc\u0627\u0628 \u0631\u06c1\u0627\u06d4 \u0627\u06af\u0631 \u0622\u067e \u0646\u0627\u06a9\u0627\u0645 \u0646\u0638\u0631 \u0622\u062a\u06d2 \u06c1\u06cc\u06ba \u06cc\u0627 \u0630\u062e\u06cc\u0631\u06c1 \u063a\u0627\u0626\u0628 \u06c1\u06d2\u060c \u062a\u0648 \u0622\u0631\u06af\u0648 \u0633\u06cc \u0688\u06cc \u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u0633\u06a9\u062a\u06cc \u06c1\u06d2\u06d4 \u0645\u0631\u062d\u0644\u06c1 4 \u06cc\u0627 GitOps \u067e\u0631 \u0627\u0646\u062d\u0635\u0627\u0631 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u06a9\u0633\u06cc \u0628\u06be\u06cc \u0642\u062f\u0645 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0627\u067e\u0646\u06cc \u0627\u0633\u0646\u0627\u062f \u0645\u06cc\u06ba \u062a\u0631\u0645\u06cc\u0645 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>VM \u06a9\u0648 \u0628\u062d\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u06cc\u0627 Argo CD \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f\u060c \u0622\u067e \u06a9\u0648 \u0686\u0644\u0627\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648 \u0633\u06a9\u062a\u06cc \u06c1\u06d2: <code>argocd repo add<\/code> \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u067e\u06be\u0631 ( \u0627\u0633\u0646\u0627\u062f \u06a9\u0644\u0633\u0679\u0631 \u067e\u0631 \u0645\u062d\u0641\u0648\u0638 \u06c1\u06cc\u06ba\u060c \u06af\u0679 \u067e\u0631 \u0646\u06c1\u06cc\u06ba)<\/p>\n<h4 id=\"heading-3-apply-and-sync\">3. \u0644\u0627\u06af\u0648 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631\u06cc \u06a9\u0631\u06cc\u06ba:<\/h4>\n<pre><code class=\"language-bash\">kubectl apply -f stages\/stage-2-gitops\/argocd\/clearledger-app.yaml\n\nargocd app sync clearledger --grpc-web\n<\/code><\/pre>\n<h3 id=\"heading-how-to-read-the-argo-cd-ui\">Argo CD UI \u06a9\u0648 \u06a9\u06cc\u0633\u06d2 \u067e\u0691\u06be\u06cc\u06ba<\/h3>\n<p>\u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631\u06cc \u06a9\u06d2 \u0628\u0639\u062f\u060c \u06a9\u06be\u0648\u0644\u06cc\u06ba: <strong>\u0644\u06cc\u06a9\u0648\u0626\u06cc\u0688\u06cc\u0679\u0631<\/strong> \u0679\u0631\u06cc \u0648\u06cc\u0648 \u0645\u06cc\u06ba \u0627\u06cc\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646\u0632 \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0648\u067e\u0631 \u0648\u0627\u0644\u06d2 \u062a\u06cc\u0646 \u0628\u06cc\u062c\u0632 \u0622\u067e \u06a9\u0648 \u0633\u0628 \u06a9\u0686\u06be \u0628\u062a\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/07\/1785194532_552_Homelab-\u0633\u06d2-AWS-\u062a\u06a9-\u067e\u0631\u0648\u0688\u06a9\u0634\u0646-\u06a9\u06d2-\u0644\u06cc\u06d2-\u062a\u06cc\u0627\u0631-DevSecOps-\u067e\u0644\u06cc\u0679.png\" alt=\"\u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679 argocd UI \u062f\u06a9\u06be\u0627 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4\" style=\"display:block;margin:0 auto\" width=\"1127\" height=\"1275\" loading=\"lazy\" title=\"\"><\/p>\n<p><strong>\u0627\u06cc\u067e \u06a9\u06cc \u062d\u06cc\u062b\u06cc\u062a: \u0679\u06be\u06cc\u06a9 \u06c1\u06d2\u06d4<\/strong>. Kubernetes \u06a9\u06d2 \u062e\u06cc\u0627\u0644 \u0645\u06cc\u06ba \u06a9\u0627\u0645 \u06a9\u0627 \u0628\u0648\u062c\u06be \u0686\u0644 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4 \u067e\u0648\u0688 \u0686\u0644 \u0631\u06c1\u0627 \u06c1\u06d2 (\u06cc\u0627 \u0627\u0628 \u0628\u06be\u06cc \u0634\u0631\u0648\u0639 \u06c1\u0648 \u0631\u06c1\u0627 \u06c1\u06d2 \u0627\u06af\u0631 \u06cc\u06c1 \u06a9\u06c1\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u062c\u0627\u0631\u06cc \u06c1\u06d2)\u06d4<\/p>\n<p><strong>\u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631\u06cc \u06a9\u06cc \u062d\u06cc\u062b\u06cc\u062a: \u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631<\/strong>: \u06a9\u0644\u0633\u0679\u0631 \u0645\u06cc\u0686\u06d4 <code>clearledger-infra<\/code> \u062f\u06a9\u06be\u0627\u06cc\u0627 \u06af\u06cc\u0627 \u06a9\u0645\u0679 GitHub \u067e\u0631 \u06c1\u06d2\u060c \u062c\u06cc\u0633\u06d2 <code>main (2c88aa1)<\/code>)\u06d4 \u06af\u0679 \u0633\u0686\u0627\u0626\u06cc \u06a9\u0627 \u0630\u0631\u06cc\u0639\u06c1 \u06c1\u06d2 \u0627\u0648\u0631 \u0622\u0631\u06af\u0648 \u0633\u06cc \u0688\u06cc \u0627\u0633 \u06a9\u0627 \u0627\u0637\u0644\u0627\u0642 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u0622\u062e\u0631\u06cc \u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631\u06cc: \u06a9\u0627\u0645\u06cc\u0627\u0628\u06cc<\/strong>: Git \u06a9\u06cc \u062a\u0627\u0632\u06c1 \u062a\u0631\u06cc\u0646 \u0627\u06cc\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0646\u06d2 \u06a9\u0627\u0645 \u06a9\u06cc\u0627\u06d4 \u0627\u06af\u0631 \u06cc\u06c1 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u063a\u0644\u0637\u06cc \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u0630\u06cc\u0644 \u0645\u06cc\u06ba \u0631\u06cc\u0633\u0648\u0631\u0633 \u0679\u0631\u06cc \u0648\u06c1\u06cc \u0627\u06cc\u067e \u06c1\u06d2 \u062c\u0633\u06d2 \u0679\u06a9\u0691\u0648\u06ba \u0645\u06cc\u06ba \u062a\u0642\u0633\u06cc\u0645 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2: \u0646\u06cc\u0645 \u0627\u0633\u067e\u06cc\u0633\u060c \u0633\u06cc\u06a9\u0631\u0679\u060c \u0633\u0631\u0648\u0633\u060c \u0688\u06cc\u067e\u0644\u0627\u0626\u0645\u0646\u0679\u060c \u0627\u0646\u06af\u0631\u06cc\u0633 \u0648\u063a\u06cc\u0631\u06c1\u06d4 \u06af\u0631\u06cc\u0646 \u0686\u06cc\u06a9 \u0645\u0627\u0631\u06a9 = Git \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0646\u0627\u0641\u0630\u06d4 \u06a9\u0633\u06cc \u0628\u06be\u06cc \u0628\u0627\u06a9\u0633 \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba\u060c \u062c\u06cc\u0633\u06d2 <code>deploy\/auth-service<\/code>) \u067e\u06be\u0631 <strong>\u0632\u0646\u062f\u06c1 \u0638\u0627\u06c1\u0631<\/strong> \u0628\u0691\u0627 <strong>\u062e\u0648\u0627\u06c1\u0634 \u0645\u0646\u062f<\/strong> \u062f\u06cc\u06a9\u06be\u06cc\u06ba \u06a9\u06c1 \u0622\u0631\u06af\u0648 \u0633\u06cc \u0688\u06cc \u06a9\u06d2 \u062e\u06cc\u0627\u0644 \u0645\u06cc\u06ba \u0627\u0633\u06d2 \u06a9\u06cc\u0627 \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4<\/p>\n<p><strong>\u0627\u06cc\u06a9 \u0641\u0648\u0631\u06cc &quot;\u06a9\u06cc\u0627 \u0627\u06cc\u067e \u0648\u0627\u0642\u0639\u06cc \u06a9\u0627\u0645 \u06a9\u0631 \u0631\u06c1\u06cc \u06c1\u06d2\u061f&#8221; \u0679\u06cc\u0633\u0679<\/strong> (\u0622\u0631\u06af\u0648 \u0633\u06cc \u0688\u06cc \u0633\u06d2 \u0628\u06cc\u0631\u0648\u0646\u06cc):<\/p>\n<pre><code class=\"language-bash\">curl -s -o \/dev\/null -w \"%{http_code}n\" http:\/\/clearledger.local\/auth\/health\n<\/code><\/pre>\n<p><code>200<\/code> = \u0627\u06cc\u067e \u0627\u06cc\u0646\u0688 \u0679\u0648 \u0627\u06cc\u0646\u0688 \u06a9\u0646\u06cc\u06a9\u0679\u06cc\u0648\u06cc\u0679\u06cc \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0633\u0627\u062a\u06be &quot;\u0622\u0631\u06af\u0648 \u0633\u06cc \u0688\u06cc \u067e\u0631 \u0633\u0628\u0632&#8221; \u06a9\u06d2 \u0642\u0627\u0628\u0644 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u0627\u06af\u0631 \u0622\u067e \u06a9\u0648 \u067e\u0631\u06cc\u0634\u0627\u0646\u06cc \u06c1\u0648 \u0631\u06c1\u06cc \u06c1\u06d2:<\/strong> \u0627\u0686\u06be\u06cc \u0635\u062d\u062a <strong>\u06af\u0631 \u06af\u06cc\u0627<\/strong> \u06cc\u0627 <strong>\u062c\u0627\u0631\u06cc \u06c1\u06d2\u06d4<\/strong> \u0627\u06cc\u06a9 \u0637\u0648\u06cc\u0644 \u0639\u0631\u0635\u06d2 \u0633\u06d2 SYNC <strong>\u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/strong>\u062f\u0631\u062e\u062a \u0645\u06cc\u06ba \u0648\u0633\u0627\u0626\u0644 \u0628\u062f\u0644 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <strong>\u0633\u0631\u062e<\/strong>. \u0648\u0633\u0627\u0626\u0644 \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u067e\u06be\u0631 <strong>\u0648\u0627\u0642\u0639\u06c1<\/strong> \u06cc\u0627 <strong>\u0644\u0627\u06af<\/strong>. \u0679\u0631\u0645\u06cc\u0646\u0644 \u0645\u06cc\u06ba \u0627\u0633\u06d2 \u062f\u0648\u0628\u0627\u0631\u06c1 \u062f\u06cc\u06a9\u06be\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 kubectl \u0630\u06cc\u0644 \u0645\u06cc\u06ba \u0686\u06cc\u06a9 \u06a9\u0631\u062a\u0627 \u06c1\u06d2:<\/p>\n<p>\u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u0626\u06cc\u06ba \u06a9\u06c1 ArgoCD \u062a\u0645\u0627\u0645 \u06a9\u0627\u0645 \u06a9\u06d2 \u0628\u0648\u062c\u06be \u06a9\u0648 \u062f\u06cc\u06a9\u06be \u0631\u06c1\u0627 \u06c1\u06d2\u060c \u0646\u06c1 \u06a9\u06c1 \u0635\u0631\u0641 \u062f\u0627\u062e\u0644 \u06c1\u0648\u0646\u0627\u06d4<\/p>\n<pre><code class=\"language-bash\">argocd app resources clearledger --grpc-web | grep Deployment\n<\/code><\/pre>\n<p><strong>\u067e\u0627\u0633 \u0622\u0624\u0679 \u067e\u0679 \u06a9\u06d2 \u0628\u0631\u0627\u0628\u0631 \u06c1\u06d2\u06d4<\/strong><\/p>\n<pre><code class=\"language-text\">apps    Deployment    clearledger    auth-service            No\napps    Deployment    clearledger    frontend                No\napps    Deployment    clearledger    ledger-service          No\napps    Deployment    clearledger    notification-service  No\napps    Deployment    clearledger    redis                   No\n<\/code><\/pre>\n<p>\u06cc\u06c1 \u06a9\u0645\u0627\u0646\u0688 \u0627\u0633 \u062a\u0642\u0633\u06cc\u0645 \u06a9\u0648 \u0638\u0627\u06c1\u0631 \u06a9\u0631\u062a\u06cc \u06c1\u06d2 \u062c\u0633 \u06a9\u0627 \u0627\u0646\u062a\u0638\u0627\u0645 ArgoCD ClearLedger \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0622\u067e \u06a9\u0648 \u062f\u06cc\u06a9\u06be\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2 <code>auth-service<\/code>, <code>ledger-service<\/code>, <code>notification-service<\/code>, <code>frontend<\/code>\u0627\u0648\u0631 <code>redis<\/code>. \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 ArgoCD \u067e\u0648\u0631\u0627 \u0645\u0648\u0627\u062f \u067e\u0691\u06be\u062a\u0627 \u06c1\u06d2\u06d4 <code>kustomization.yaml<\/code> \u0633\u06d2 <code>clearledger-infra\/manifests<\/code>\u06cc\u06c1 \u0635\u0631\u0641 \u0627\u06cc\u06a9 \u0641\u0627\u0626\u0644 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<p>\u0622\u062e\u0631\u06cc \u06a9\u0627\u0644\u0645 \u06c1\u06d2\u06d4 <code>ORPHANED<\/code>. <code>No<\/code> \u0634\u0628 \u0628\u062e\u06cc\u0631 \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 ArgoCD \u062c\u0627\u0646\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u06cc\u06c1 \u0648\u0633\u06cc\u0644\u06c1 ClearLedger \u0627\u06cc\u067e \u0633\u06d2 \u062a\u0639\u0644\u0642 \u0631\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u06d4 \u0622\u067e \u06a9\u0648 \u0635\u0631\u0641 \u0627\u0633 \u0635\u0648\u0631\u062a \u0645\u06cc\u06ba \u0641\u06a9\u0631 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2 \u062c\u0628 \u0622\u067e \u0627\u067e\u0646\u06cc \u062a\u0642\u0633\u06cc\u0645 \u0645\u06cc\u06ba \u0633\u06d2 \u0627\u06cc\u06a9 \u063a\u0627\u0626\u0628 \u06a9\u0631 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba \u06cc\u0627 ArgoCD \u062f\u06cc\u06a9\u06be\u06cc\u06ba\u06d4 <code>OutOfSync<\/code>, <code>Degraded<\/code>\u06cc\u0627 UI \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0633\u0631\u062e \u0648\u0633\u06cc\u0644\u06c1\u06d4<\/p>\n<p><strong> \u0644\u06cc\u0628 \u0686\u06cc\u06a9 \u067e\u0648\u0627\u0626\u0646\u0679: \u067e\u06c1\u0644\u06d2 \u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631\u06cc \u0679\u06be\u06cc\u06a9 \u06c1\u06d2\u06d4<\/strong><\/p>\n<p>\u062f\u0631\u062c \u0630\u06cc\u0644 \u0686\u0627\u0631 \u0679\u06cc\u0633\u0679 \u0686\u0644\u0627\u0626\u06cc\u06ba: \u067e\u0627\u0633 \u062f\u0631\u062c \u0630\u06cc\u0644 \u06c1\u06cc\u06ba:<\/p>\n<pre><code class=\"language-bash\">kubectl get pods -n clearledger\n# Every app pod 1\/1 Running (postgres\/redis may show older RESTARTS from VM reboots \u2014 OK)\n\nkubectl get application clearledger -n argocd \n  -o jsonpath=\"sync={.status.sync.status} health={.status.health.status}{\"n\"}\"\n# sync=Synced health=Healthy\n\ncurl -s -o \/dev\/null -w \"%{http_code}n\" http:\/\/clearledger.local\/auth\/health\n# 200\n\nkubectl logs -n clearledger deploy\/auth-service --tail=5 2>\/dev\/null | head -3\n# Lines like: GET \/health HTTP\/1.1\" 200 OK\n# Bad sign: DATABASE_URL is not set\n<\/code><\/pre>\n<p>\u0627\u06af\u0631 \u0686\u0627\u0631\u0648\u06ba \u067e\u0627\u0633 \u06c1\u0648 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0645\u0631\u062d\u0644\u06c1 2 \u06a9\u06cc \u067e\u06c1\u0644\u06cc \u06c1\u0645 \u0622\u06c1\u0646\u06af\u06cc \u0645\u06a9\u0645\u0644 \u06c1\u0648 \u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4 \u067e\u06be\u0631\u060c CI \u0627\u0648\u0631 ArgoCD \u06c1\u06cc\u0646\u0688 \u0622\u0641 \u06a9\u0648 \u0641\u0639\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0646\u06cc\u0686\u06d2 \u062c\u0627\u0631\u06cc \u0631\u06a9\u06be\u06cc\u06ba <code>make check-2<\/code> \u0627\u0648\u0631 <code>make snapshot STAGE=2<\/code>.<\/p>\n<h3 id=\"heading-how-to-enable-the-ci-to-argocd-handoff\">ArgoCD \u06c1\u06cc\u0646\u0688 \u0622\u0641 \u06a9\u06d2 \u0633\u0627\u062a\u06be CI \u06a9\u0648 \u06a9\u06cc\u0633\u06d2 \u0641\u0639\u0627\u0644 \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4<\/h3>\n<p>\u0641\u06cc\u0632 1 \u0645\u06cc\u06ba\u060c \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06a9\u0648 \u0627\u067e \u0688\u06cc\u0679 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u062a\u06be\u0627\u06d4 <code>clearledger-infra<\/code>\u062a\u0627\u06c1\u0645\u060c \u06a9\u0644\u0633\u0679\u0631 \u06a9\u0648 \u0627\u067e \u0688\u06cc\u0679 \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u062a\u06be\u0627\u06d4 \u06cc\u06c1 \u062c\u0627\u0646 \u0628\u0648\u062c\u06be \u06a9\u0631 \u062a\u06be\u0627\u06d4<\/p>\n<p>\u0627\u0628 \u062c\u0628 \u06a9\u06c1 ArgoCD \u0627\u0646\u0633\u0679\u0627\u0644 \u06c1\u0648 \u06af\u06cc\u0627 \u06c1\u06d2\u060c \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06c1\u0631 \u06a9\u0627\u0645\u06cc\u0627\u0628 \u0631\u0646 \u06a9\u06d2 \u0628\u0639\u062f ArgoCD \u06a9\u0648 \u062a\u0628\u062f\u06cc\u0644\u06cc\u0648\u06ba \u06a9\u06cc \u062c\u0627\u0646\u0686 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u06c1\u062f\u0627\u06cc\u062a \u06a9\u0631 \u0633\u06a9\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>GitHub \u067e\u0631 <code>clearledger<\/code> \u0631\u06cc\u067e\u0648\u0632\u0679\u0631\u06cc \u06a9\u0648 \u06a9\u06be\u0648\u0644\u06cc\u06ba \u0627\u0648\u0631 Settings, Secrets &#038; Variables, Actions, Variables, New Repository Variable \u067e\u0631 \u062c\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<p>\u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba:<\/p>\n<table>\n<thead>\n<tr>\n<th><strong>\u0646\u0627\u0645<\/strong><\/th>\n<th><strong>\u0642\u062f\u0631<\/strong><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>ENABLE_ARGOCD_SYNC<\/code><\/td>\n<td><code>true<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u0627\u0628 \u0633\u06d2\u060c \u06af\u0631\u06cc\u0646 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u062f\u0648 \u0686\u06cc\u0632\u06cc\u06ba \u06a9\u0631\u06d2 \u06af\u06cc:<\/p>\n<ol>\n<li>\n<p>\u0627\u067e \u0688\u06cc\u0679 <code>clearledger-infra<\/code> \u0646\u0626\u06d2 \u0627\u0645\u06cc\u062c \u0679\u06cc\u06af \u06a9\u06d2 \u0633\u0627\u062a\u06be<\/p>\n<\/li>\n<li>\n<p>\u06a9\u0644\u0633\u0679\u0631 \u06a9\u0648 \u0633\u0646\u06a9\u0631\u0648\u0646\u0627\u0626\u0632 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 ArgoCD \u0633\u06d2 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ol>\n<p>\u0627\u06af\u0631 \u0622\u067e \u06a9\u06cc \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u0641\u0648\u0631\u06cc \u0637\u0648\u0631 \u067e\u0631 ArgoCD \u06a9\u0648 \u0645\u062a\u062d\u0631\u06a9 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u0633\u06a9\u062a\u06cc \u06c1\u06d2\u060c \u062a\u0648 \u06cc\u06c1 \u0639\u0627\u0645 \u0637\u0648\u0631 \u067e\u0631 \u0679\u06be\u06cc\u06a9 \u06c1\u06d2\u06d4 ArgoCD \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 <code>clearledger-infra<\/code> \u06cc\u06c1 \u06c1\u0631 \u0686\u0646\u062f \u0645\u0646\u0679\u0648\u06ba \u0645\u06cc\u06ba \u062e\u0648\u062f \u06c1\u06cc \u0686\u0644\u062a\u0627 \u06c1\u06d2\u060c \u0644\u06c1\u0630\u0627 \u0622\u067e \u06a9\u0648 \u0627\u0628\u06be\u06cc \u0628\u06be\u06cc \u0646\u0626\u06cc Git \u062a\u0628\u062f\u06cc\u0644\u06cc\u0627\u06ba \u0644\u0627\u06af\u0648 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4<\/p>\n<p>\u0686\u06be\u0648\u0691 \u062f\u0648 <code>ENABLE_DAST<\/code> \u06cc\u06c1 \u0627\u0628\u06be\u06cc \u0633\u06cc\u0679 \u0627\u067e \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0627\u06cc\u067e \u06a9\u06d2 \u0645\u0633\u062a\u062d\u06a9\u0645 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f\u060c \u0627\u0633\u06d2 \u0645\u0631\u062d\u0644\u06c1 3 \u0645\u06cc\u06ba \u0641\u0639\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 <code>clearledger.local<\/code>.<\/p>\n<h3 id=\"heading-if-the-argocd-ui-shows-red-pods-or-progressing-read-this-before-the-screenshot\">\u0627\u06af\u0631 \u0622\u067e Argocd UI \u0645\u06cc\u06ba \u0633\u0631\u062e \u067e\u0648\u0688\u0632 \u06cc\u0627 &quot;\u062a\u0631\u0642\u06cc \u0645\u06cc\u06ba&#8221; \u062f\u06cc\u06a9\u06be\u062a\u06d2 \u06c1\u06cc\u06ba (\u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u067e\u0691\u06be\u06cc\u06ba)<\/h3>\n<p>\u06cc\u06c1 \u0679\u0648\u0679\u06cc \u06c1\u0648\u0626\u06cc \u062a\u0646\u0635\u06cc\u0628 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u060c \u06cc\u06c1 \u0635\u0631\u0641 \u0627\u06cc\u06a9 \u0639\u0627\u0645 \u067e\u06c1\u0644\u06cc \u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631\u06cc \u06a9\u0627 \u0633\u0631\u067e\u0631\u0627\u0626\u0632 \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-why-it-happens-in-stage-2\">\u06cc\u06c1 \u0645\u0631\u062d\u0644\u06c1 2 \u0645\u06cc\u06ba \u06a9\u06cc\u0648\u06ba \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u061f<\/h4>\n<p>ArgoCD \u06c1\u0631 \u0686\u06cc\u0632 \u06a9\u0648 \u0627\u0646\u062f\u0631 \u0633\u06d2 \u06c1\u0645 \u0622\u06c1\u0646\u06af \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <code>clearledger-infra<\/code>. \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u06a9\u06d2 \u0644\u06cc\u06d2 \u0622\u067e \u06a9\u0648 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2: <code>secretKeyRef<\/code> (\u0645\u0631\u062d\u0644\u06c1 2-4)\u060c \u0648\u0627\u0644\u0679 \u0627\u0646\u062c\u06cc\u06a9\u0634\u0646 \u0646\u06c1\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u0627\u0646\u0641\u0631\u0627\u0633\u0679\u0631\u06a9\u0686\u0631 \u0627\u0633\u0679\u0648\u0631 \u0645\u06cc\u06ba \u067e\u0631\u0627\u0646\u06cc \u0644\u06cc\u0628 \u06a9\u0627\u067e\u06cc \u0633\u06d2 \u0648\u0627\u0644\u0679 \u062a\u0634\u0631\u06cc\u062d\u0627\u062a \u06c1\u0648\u06ba \u062a\u0648 \u062a\u0648\u062b\u06cc\u0642\/\u0644\u06cc\u062c\u0631 \u0645\u06cc\u06ba \u062a\u0636\u0627\u062f \u06c1\u06d2\u06d4 <code>DATABASE_URL is not set<\/code> \u0644\u06cc\u0648\u0644 5 \u062a\u06a9\u06d4<\/p>\n<p>\u0646\u06cc\u0679 \u0648\u0631\u06a9 \u06a9\u06cc \u067e\u0627\u0644\u06cc\u0633\u06cc\u0627\u06ba \u0644\u06cc\u0648\u0644 6 \u0633\u06d2 \u062a\u0639\u0644\u0642 \u0631\u06a9\u06be\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 \u0628\u0646\u06cc\u0627\u062f\u06cc \u0637\u0648\u0631 \u067e\u0631 <code>clearledger<\/code> \u0631\u06cc\u067e\u0648\u060c \u0648\u06c1 \u0631\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba <code>infra\/deferred-by-stage\/stage-6-runtime-security\/netpol\/<\/code>\u0646\u06c1\u06cc\u06ba <code>infra\/manifests\/<\/code>. \u0646\u0642\u0644 \u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4 <code>clearledger-infra<\/code> \u0645\u0631\u062d\u0644\u06c1 2 \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646\u06d4<\/p>\n<p>\u0627\u06af\u0631 <code>manifests\/netpol\/<\/code> \u06cc\u06c1 \u0627\u0628 \u0628\u06be\u06cc \u062a\u0645\u06c1\u0627\u0631\u06d2 \u0627\u0646\u062f\u0631 \u06c1\u06d2\u06d4 <code>clearledger-infra<\/code> GitHub (\u067e\u0631\u0627\u0646\u06cc \u0644\u06cc\u0628 \u06a9\u0627\u067e\u06cc) \u067e\u0631 \u0631\u06cc\u067e\u0648 \u0645\u06cc\u06ba\u060c ArgoCD \u0627\u0633\u06d2 \u0646\u0627\u0641\u0630 \u06a9\u0631\u0646\u0627 \u062c\u0627\u0631\u06cc \u0631\u06a9\u06be\u06d2 \u06c1\u0648\u0626\u06d2 \u06c1\u06d2\u06d4 \u067e\u0627\u0644\u06cc\u0633\u06cc \u06c1\u06d2\u06d4 <strong>\u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0637\u06d2 \u0634\u062f\u06c1 \u0627\u0646\u06a9\u0627\u0631<\/strong> \u0627\u06af\u0631 \u0622\u067e \u0646\u0626\u06d2 \u067e\u0648\u0688 \u06a9\u06d2 \u0644\u06cc\u06d2 DNS \u062a\u0648\u0691\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0648 \u0622\u067e \u06a9\u0648 \u0633\u0631\u062e \u0631\u0646\u06af \u0646\u0638\u0631 \u0622\u0626\u06d2 \u06af\u0627\u06d4 <strong>0\/1<\/strong> \u067e\u06be\u0644\u06cc\u0648\u06ba \u06a9\u06d2 \u0633\u0627\u062a\u06be <strong>\u062c\u0627\u0631\u06cc \u06c1\u06d2\u06d4<\/strong> \u0635\u062d\u062a<\/p>\n<h4 id=\"heading-fix-for-stage-2\">\u0645\u0631\u062d\u0644\u06c1 2 \u062f\u0631\u0633\u062a \u06a9\u0631\u06cc\u06ba\u06d4<\/h4>\n<p>\u06a9\u0631\u0648 <strong>\u062f\u0648\u0646\u0648\u06ba<\/strong> \u0642\u062f\u0645 \u0635\u0631\u0641 \u06a9\u0644\u0633\u0679\u0631 \u0633\u06d2 \u062d\u0630\u0641 \u06a9\u0631\u0646\u0627 \u06a9\u0627\u0641\u06cc \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0627\u06af\u0644\u06cc \u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631\u06cc \u067e\u0631 ArgoCD Git \u0633\u06d2 \u067e\u0627\u0644\u06cc\u0633\u06cc \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u062a\u062e\u0644\u06cc\u0642 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u0645\u0631\u062d\u0644\u06c1 1: \u0633\u06d2 \u06c1\u0679\u0627 \u062f\u06cc\u06ba\u06d4<\/strong> <code>clearledger-infra<\/code> <strong>GitHub \u067e\u0631<\/strong><\/p>\n<p>\u0641\u0648\u0644\u0688\u0631 \u06a9\u0648 \u062d\u0630\u0641 \u06a9\u0631\u06cc\u06ba\u06d4 <code>manifests\/netpol\/<\/code> \u0627\u0648\u0631 \u0639\u06c1\u062f \u06a9\u0631\u06cc\u06ba: <code>chore: defer network policies to Stage 6<\/code>.<\/p>\n<p><strong>\u0645\u0631\u062d\u0644\u06c1 2: \u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631\u06cc \u0627\u0648\u0631 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba\u06d4<\/strong><\/p>\n<pre><code class=\"language-bash\">argocd app sync clearledger --grpc-web\nkubectl delete networkpolicy -n clearledger --all   # safe once Git no longer has netpol\nkubectl rollout restart deployment\/auth-service deployment\/ledger-service -n clearledger\nargocd app get clearledger --grpc-web | grep -E \"Sync Status|Health Status\"\n<\/code><\/pre>\n<p>\u0646\u06cc\u0679 \u0648\u0631\u06a9 \u06a9\u06cc \u067e\u0627\u0644\u06cc\u0633\u06cc\u0627\u06ba \u0648\u06c1\u06cc \u0631\u06c1\u06cc\u06ba\u06d4 <code>clearledger<\/code> \u0646\u06cc\u0686\u06d2 <code>infra\/deferred-by-stage\/<\/code> \u062c\u0628 \u062a\u06a9 \u06a9\u06c1 \u0622\u067e \u0627\u0633\u06d2 \u0645\u0631\u062d\u0644\u06c1 6 \u0645\u06cc\u06ba \u0644\u0627\u06af\u0648 \u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u06af\u0631 \u06a9\u0648\u0626\u06cc \u0645\u0633\u0626\u0644\u06c1 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2 \u062a\u0648 \u0646\u06cc\u0686\u06d2 \u062c\u0627\u0631\u06cc \u0631\u06a9\u06be\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u06cc\u06a9 \u0628\u0627\u0631 \u062c\u0628 ArgoCD \u06a9\u06cc \u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631\u06cc \u062e\u062a\u0645 \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u062a\u0648\u060c \u06a9\u06be\u0648\u0644\u06cc\u06ba: <code>clearledger<\/code> ArgoCD UI \u0633\u06d2 \u0627\u06cc\u067e\u06d4 \u0622\u067e \u06a9\u0648 \u0633\u0628\u0632 \u0631\u0646\u06af \u062f\u06cc\u06a9\u06be\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2\u06d4 <code>Healthy<\/code> \u0627\u0648\u0631 <code>Synced<\/code> \u0628\u06cc\u062c \u0622\u067e \u06a9\u06cc \u0627\u06cc\u067e \u06a9\u06cc \u0637\u0631\u0641 \u0627\u0634\u0627\u0631\u06c1 \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2: <code>clearledger-infra<\/code> \u0630\u062e\u06cc\u0631\u06c1\u060c \u0627\u0633\u062a\u0639\u0645\u0627\u0644 <code>manifests<\/code> \u0631\u0627\u0633\u062a\u06d2 \u06a9\u06cc \u0648\u0636\u0627\u062d\u062a \u06a9\u0631\u06cc\u06ba <code>clearledger<\/code> \u0646\u0627\u0645 \u06a9\u06cc \u062c\u06af\u06c1\u06d4<\/p>\n<p>\u067e\u06be\u0631 \u0627\u06cc\u067e \u0679\u0627\u0626\u0644 \u06a9\u06be\u0648\u0644\u06cc\u06ba\u06d4 \u0648\u0633\u0627\u0626\u0644 \u06a9\u06d2 \u062f\u0631\u062e\u062a \u06a9\u0648 \u06a9\u0633\u06cc \u0628\u06be\u06cc \u0633\u0631\u062e \u0648\u0633\u0627\u0626\u0644 \u06a9\u06d2 \u0628\u063a\u06cc\u0631 \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc\u060c \u0633\u0631\u0648\u0633\u060c \u0627\u0648\u0631 \u062f\u0627\u062e\u0644 \u06c1\u0648\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2.<\/p>\n<p>\u0622\u067e \u0627\u0633\u06d2 \u0679\u0631\u0645\u06cc\u0646\u0644 \u0645\u06cc\u06ba \u0628\u06be\u06cc \u0686\u06cc\u06a9 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p><code>argocd app get clearledger --grpc-web<\/code><\/p>\n<p>\u0627\u0633\u06d2 \u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba\u06d4 <code>Sync Status: Synced<\/code> \u0627\u0648\u0631 <code>Health Status: Healthy<\/code>.<\/p>\n<h3 id=\"heading-argocd-stuck-outofsync\">ArgoCD OutOfSync \u067e\u06be\u0646\u0633 \u06af\u06cc\u0627\u06d4<\/h3>\n<p><strong>\u0639\u0627\u0645 \u0631\u0627\u0633\u062a\u06c1:<\/strong> CI \u067e\u0648\u0631\u06d2 \u0645\u06cc\u0646\u06cc \u0641\u06cc\u0633\u0679 \u06a9\u0648 \u06a9\u0627\u067e\u06cc \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c Kustomize \u0679\u06cc\u06af\u0632 \u06a9\u0648 \u0627\u067e \u0688\u06cc\u0679 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 ArgoCD \u062e\u0648\u062f \u0628\u062e\u0648\u062f 3 \u0645\u0646\u0679 \u062a\u06a9 \u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631 \u06c1\u0648\u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u0627\u06af\u0631 OutOfSync 10 \u0645\u0646\u0679 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u06a9\u06d2 \u0628\u0639\u062f \u0628\u06be\u06cc \u06c1\u0648\u062a\u0627 \u06c1\u06d2:<\/strong><\/p>\n<pre><code class=\"language-bash\">make fix-argocd\n<\/code><\/pre>\n<p>\u0627\u0633 \u06a9\u06d2 \u0628\u0639\u062f \u06a9\u06cc\u0646\u0648\u0646\u06cc\u06a9\u0644 \u0645\u06cc\u0646\u06cc \u0641\u06cc\u0633\u0679 \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0627\u0633 \u0637\u0631\u062d \u06c1\u0645 \u0622\u06c1\u0646\u06af \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2 \u06af\u0627: <code>clearledger-infra<\/code> (\u06a9\u0633\u0679\u0645\u0627\u0626\u0632 SHA \u062a\u062d\u0641\u0638) \u0627\u06cc\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0644\u0627\u06af\u0648 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u062c\u0628\u0631\u06cc \u0631\u06cc\u0641\u0631\u06cc\u0634 \u06a9\u0648 \u0645\u062a\u062d\u0631\u06a9 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <strong>\u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u06d2<\/strong> <code>kubectl apply<\/code> \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc: Git \u0645\u06cc\u06ba \u062a\u0631\u0645\u06cc\u0645 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 ArgoCD \u06a9\u0648 \u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631 \u0628\u0646\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">kubectl annotate application clearledger -n argocd \n\nargocd.argoproj.io\/refresh=hard --overwrite\n\nargocd app sync clearledger --grpc-web --prune\n\nkubectl get application clearledger -n argocd -o jsonpath=\"sync={.status.sync.status} health={.status.health.status}{\"n\"}\"\n<\/code><\/pre>\n<p><strong>\u0627\u0633 \u0645\u0646\u0638\u0631 \u06a9\u0627 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679 \u0644\u06cc\u06ba\u06d4<\/strong>: \u0627\u06cc\u067e \u0679\u0627\u0626\u0644\u0632 \u06cc\u0627 \u0631\u06cc\u0633\u0648\u0631\u0633 \u0679\u0631\u06cc \u0679\u06be\u06cc\u06a9 \u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1 \u067e\u0648\u0631\u0679 \u0641\u0648\u0644\u06cc\u0648 \u062b\u0628\u0648\u062a \u06c1\u06d2 \u06a9\u06c1 GitOps \u0627\u06cc\u06a9\u0634\u0646 \u0645\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-prove-argocd-self-healing\">ArgoCD \u062e\u0648\u062f \u0634\u0641\u0627 \u06cc\u0627\u0628\u06cc \u062b\u0627\u0628\u062a<\/h3>\n<p>\u0627\u0628 \u062b\u0627\u0628\u062a \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u06af\u0679 \u0633\u0686\u0627\u0626\u06cc \u06a9\u0627 \u0633\u0631\u0686\u0634\u0645\u06c1 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0633 \u0688\u06cc\u0645\u0648 \u0645\u06cc\u06ba\u060c \u06c1\u0645 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0686\u0644\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u06a9\u0644\u0633\u0679\u0631 \u0645\u06cc\u06ba \u062a\u0628\u062f\u06cc\u0644\u06cc\u0627\u06ba \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0622\u067e \u06a9\u0631\u06cc\u06ba \u06af\u06d2 <strong>~ \u0646\u06c1\u06cc\u06ba<\/strong> \u06af\u0679 \u06a9\u0648 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 ArgoCD \u06a9\u0648 \u0627\u0633 \u0628\u0627\u062a \u06a9\u0627 \u062a\u0639\u06cc\u0646 \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2 \u06a9\u06c1 \u06a9\u0644\u0633\u0679\u0631\u0632 \u0627\u0628 \u0645\u0645\u0627\u062b\u0644 \u0646\u06c1\u06cc\u06ba \u06c1\u06cc\u06ba\u06d4 <code>clearledger-infra<\/code>\u0645\u0646\u062a\u062e\u0628 \u06a9\u0631\u06cc\u06ba\u060c \u067e\u06be\u0631 \u062f\u0648\u0628\u0627\u0631\u06c1 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u0634\u0631\u0648\u0639 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u060c \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u0626\u06cc\u06ba \u06a9\u06c1 \u0622\u067e \u06a9\u06cc \u0627\u06cc\u067e \u0635\u062d\u062a \u0645\u0646\u062f \u06c1\u06d2 \u0627\u0648\u0631 ArgoCD \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u06a9\u0627 \u0627\u0646\u062a\u0638\u0627\u0645 \u06a9\u0631 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\">argocd app resources clearledger --grpc-web | grep Deployment\n<\/code><\/pre>\n<p>\u0627\u067e\u0646\u06d2 \u06a9\u0644\u0633\u0679\u0631 \u067e\u0631 \u062a\u0635\u062f\u06cc\u0642\u06cc \u062e\u062f\u0645\u062a \u06a9\u06cc \u062a\u0635\u0648\u06cc\u0631 \u06a9\u0648 \u062f\u0633\u062a\u06cc \u0637\u0648\u0631 \u067e\u0631 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\"># Manually change the image in the cluster only (Git stays the same)\nkubectl set image deployment\/auth-service \n  auth-service=$DOCKER_USERNAME\/clearledger-auth-service:fake-tag \n  -n clearledger\n<\/code><\/pre>\n<p>ArgoCD \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba:<\/p>\n<pre><code class=\"language-bash\"># ArgoCD should flip to OutOfSync within a minute or two\nargocd app get clearledger --grpc-web | grep -E \"Sync Status|Health Status\"\n<\/code><\/pre>\n<p>\u06a9\u0644\u0633\u0679\u0631 \u0645\u06cc\u06ba \u062a\u0631\u0645\u06cc\u0645 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 ArgoCD \u06a9\u0627 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u06cc\u06ba\u06d4 \u062c\u0639\u0644\u06cc \u062a\u0635\u0648\u06cc\u0631\u06cc \u0679\u06cc\u06af\u0632 \u0645\u062e\u062a\u0635\u0631 \u0627\u0645\u06cc\u062c \u0627\u0645\u067e\u0648\u0631\u0679 \u06a9\u06cc \u062e\u0631\u0627\u0628\u06cc\u0648\u06ba \u06a9\u0627 \u0633\u0628\u0628 \u0628\u0646 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u0633 \u0688\u06cc\u0645\u0648 \u0645\u06cc\u06ba \u0627\u0633 \u06a9\u06cc \u062a\u0648\u0642\u0639 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\"># Wait for selfHeal (default sync interval is ~3 minutes)\nsleep 180\n<\/code><\/pre>\n<p>\u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u062a\u0635\u0648\u06cc\u0631 \u06a9\u0648 \u0648\u0627\u067e\u0633 \u06af\u0679 \u0648\u0631\u0698\u0646 \u0645\u06cc\u06ba \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631 \u062f\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\"># Cluster image should match clearledger-infra again \u2014 Git was never edited\nkubectl get deployment auth-service -n clearledger \n  -o jsonpath=\"{.spec.template.spec.containers[0].image}\"\n<\/code><\/pre>\n<p>\u0627\u06af\u0631 \u062a\u0635\u0648\u06cc\u0631 \u062f\u0648\u0628\u0627\u0631\u06c1 \u062a\u0628\u062f\u06cc\u0644 \u06c1\u0648\u062a\u06cc \u06c1\u06d2 \u062a\u0648\u060c ArgoCD \u062e\u0648\u062f \u0634\u0641\u0627 \u06cc\u0627\u0628\u06cc \u0646\u06d2 \u06a9\u0627\u0645 \u06a9\u06cc\u0627 \u06c1\u06d2\u06d4 \u0645\u06cc\u06ba \u0646\u06d2 \u06a9\u0644\u0633\u0679\u0631 \u06a9\u0648 \u062f\u0633\u062a\u06cc \u0637\u0648\u0631 \u067e\u0631 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u06cc\u0627\u060c \u0644\u06cc\u06a9\u0646 ArgoCD \u0646\u06d2 \u0627\u0633\u06d2 \u0645\u06cc\u0686 \u0645\u06cc\u06ba \u0628\u062d\u0627\u0644 \u06a9\u06cc\u0627\u06d4 <code>clearledger-infra<\/code>.<\/p>\n<p>\u06cc\u06c1 GitOps \u06c1\u06d2\u06d4 Git \u0622\u067e \u06a9\u0648 \u0628\u062a\u0627\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u06a9\u06cc\u0627 \u0686\u0644\u0646\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 ArgoCD \u0627\u06cc\u06a9 \u06a9\u0644\u0633\u0679\u0631 \u06a9\u0648 \u0628\u0631\u0642\u0631\u0627\u0631 \u0631\u06a9\u06be\u062a\u0627 \u06c1\u06d2 \u062c\u0648 Git \u0633\u06d2 \u0645\u0644\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\">make check-2\n<\/code><\/pre>\n<h3 id=\"heading-how-to-roll-back-a-bad-deploy\">\u062e\u0631\u0627\u0628 \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u06a9\u0648 \u06a9\u06cc\u0633\u06d2 \u0631\u0648\u06a9\u0627 \u062c\u0627\u0626\u06d2\u06d4<\/h3>\n<p>\u06c1\u0645 \u0646\u06d2 \u0627\u0628\u06be\u06cc \u06cc\u06c1 \u0638\u0627\u06c1\u0631 \u06a9\u06cc\u0627 \u06c1\u06d2 \u06a9\u06c1 ArgoCD \u063a\u06cc\u0631 \u0645\u062c\u0627\u0632 \u06a9\u0644\u0633\u0679\u0631 \u062a\u0628\u062f\u06cc\u0644\u06cc\u0648\u06ba \u06a9\u0648 \u0648\u0627\u067e\u0633 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0628 \u0627\u0633\u06d2 \u067e\u0644\u0679\u0627\u0626\u06cc\u06ba: <strong>\u06a9\u06cc\u0627 \u06c1\u0648\u06af\u0627 \u0627\u06af\u0631 \u0622\u067e \u0646\u06d2 \u0627\u067e\u0646\u06d2 \u0622\u067e \u06a9\u0648 \u0628\u0631\u0627 \u06a9\u0627\u0645 \u06a9\u0631\u0646\u06d2 \u067e\u0631 \u0632\u0648\u0631 \u062f\u06cc\u0627\u061f<\/strong> GitOps \u0631\u0648\u0644 \u0628\u06cc\u06a9 \u0628\u0679\u0646 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0627\u06cc\u06a9 Git \u0622\u067e\u0631\u06cc\u0634\u0646 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0633\u06cc\u06a9\u0634\u0646 \u0648\u0636\u0627\u062d\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u06a9\u06cc\u0648\u06ba\u060c \u0622\u067e \u06a9\u0648 \u062f\u0648\u0646\u0648\u06ba \u0637\u0631\u06cc\u0642\u06d2 \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0622\u067e \u06a9\u0648 \u062f\u0628\u0627\u0624 \u0645\u062d\u0633\u0648\u0633 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06c1\u0631 \u0627\u06cc\u06a9 \u067e\u0631 \u0639\u0645\u0644 \u06a9\u0631\u0646\u06d2 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-how-you-know-you-need-to-roll-back\">\u0645\u06cc\u06ba \u06a9\u06cc\u0633\u06d2 \u062c\u0627\u0646 \u0633\u06a9\u062a\u0627 \u06c1\u0648\u06ba \u06a9\u06c1 \u0631\u0648\u0644 \u0628\u06cc\u06a9 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u061f<\/h4>\n<p>\u06cc\u06c1 \u0639\u0644\u0627\u0645\u0627\u062a \u062f\u06be\u06a9\u0627 \u0644\u06af\u0627\u0646\u06d2 \u06a9\u06d2 \u0686\u0646\u062f \u0645\u0646\u0679\u0648\u06ba \u0645\u06cc\u06ba \u0638\u0627\u06c1\u0631 \u06c1\u0648\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 <code>clearledger-infra<\/code> \u06cc\u06c1 \u063a\u0644\u0637 \u0639\u06c1\u062f \u06a9\u06cc \u0646\u0634\u0627\u0646\u062f\u06c1\u06cc \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<ul>\n<li>\n<p>\u067e\u0648\u0688 \u067e\u06be\u0646\u0633 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4 <code>CrashLoopBackOff<\/code> \u06cc\u0627 <code>Error<\/code>. \u0627\u0633\u06d2 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba <code>kubectl get pods -n clearledger<\/code>.<\/p>\n<\/li>\n<li>\n<p><code>kubectl logs <pod> -n clearledger --previous<\/pod><\/code> \u0622\u067e \u06a9\u0648 \u0627\u0633\u0679\u0627\u0631\u0679 \u0627\u067e \u06a9\u06cc \u062e\u0631\u0627\u0628\u06cc\u0627\u06ba \u0646\u0638\u0631 \u0622\u0626\u06cc\u06ba \u06af\u06cc \u062c\u0648 \u067e\u06c1\u0644\u06d2 \u0646\u06c1\u06cc\u06ba \u062a\u06be\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>ArgoCD \u0635\u062d\u062a \u0627\u0633 \u0645\u06cc\u06ba \u067e\u0644\u0679 \u062c\u0627\u062a\u06cc \u06c1\u06d2: <code>Healthy<\/code> \u06a9\u0648 <code>Degraded<\/code> \u06cc\u0627 \u062e\u0627\u0645\u0648\u0634 \u0631\u06c1\u0648 <code>Progressing<\/code>. \u0627\u0633\u06d2 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba <code>argocd app get clearledger --grpc-web<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u0627\u06cc\u067e 5xx \u06a9\u06cc \u063a\u0644\u0637\u06cc \u0644\u0648\u0679\u0627\u062a\u06cc \u06c1\u06d2 \u06cc\u0627 \u0644\u0627\u06af \u0627\u0646 \u06a9\u0627\u0645 \u06a9\u0631\u0646\u0627 \u0628\u0646\u062f \u06a9\u0631 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0633\u06d2 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba <code>curl -I http:\/\/clearledger.local\/health<\/code>.<\/p>\n<\/li>\n<\/ul>\n<p>\u0627\u06af\u0631 \u06cc\u06c1 \u0627\u06cc\u06a9 \u062f\u06be\u06a9\u06d2 \u06a9\u06d2 \u0641\u0648\u0631\u0627\u064b \u0628\u0639\u062f \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u062a\u0648 \u067e\u06c1\u0644\u06d2 \u0631\u0648\u0644 \u0628\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u0627\u06cc\u067e \u06a9\u06d2 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0645\u0633\u062a\u062d\u06a9\u0645 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f\u060c \u062e\u0631\u0627\u0628 \u06a9\u0645\u0679 \u06a9\u06cc \u0686\u06be\u0627\u0646 \u0628\u06cc\u0646 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-why-argocd-rollback-isnt-just-a-button\">\u06a9\u06cc\u0648\u06ba ArgoCD \u0631\u0648\u0644 \u0628\u06cc\u06a9 \u0635\u0631\u0641 \u0627\u06cc\u06a9 \u0628\u0679\u0646 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/h4>\n<p>ArgoCD \u0645\u06cc\u06ba UI \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0631\u0648\u0644 \u0628\u06cc\u06a9 \u0628\u0679\u0646 \u06c1\u06d2 \u0627\u0648\u0631 <code>argocd app rollback<\/code> \u062d\u06a9\u0645 \u062f\u0648\u0646\u0648\u06ba \u06a9\u0627\u0645 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0644\u06cc\u06a9\u0646 \u0622\u067e <code>selfHeal<\/code>.<\/p>\n<p>\u0622\u067e \u06a9\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a (<code>stages\/stage-2-gitops\/argocd\/clearledger-app.yaml<\/code>) \u06a9\u06cc \u062a\u0634\u06a9\u06cc\u0644 \u0627\u0633 \u0637\u0631\u062d \u06a9\u06cc \u06af\u0626\u06cc \u06c1\u06d2:<\/p>\n<pre><code class=\"language-yaml\">syncPolicy:\n  automated:\n    selfHeal: true\n<\/code><\/pre>\n<p>ArgoCD \u0622\u067e \u06a9\u06d2 \u06a9\u0644\u0633\u0679\u0631 \u06a9\u0648 Git \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0645\u0637\u0627\u0628\u0642\u062a \u0631\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0633 \u0644\u06cc\u0628 \u0645\u06cc\u06ba\u060c Git \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2: <code>clearledger-infra<\/code>.<\/p>\n<p>\u0627\u06af\u0631 \u06a9\u0648\u0626\u06cc \u0622\u067e \u06a9\u06d2 \u06a9\u0644\u0633\u0679\u0631 \u06a9\u0648 \u062f\u0633\u062a\u06cc \u0637\u0648\u0631 \u067e\u0631 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 ArgoCD \u0627\u0633\u06d2 \u0627\u06cc\u06a9 \u0628\u0691\u06be\u06d2 \u06c1\u0648\u0626\u06d2 \u0633\u0645\u062c\u06be\u06d2 \u06af\u0627 \u0627\u0648\u0631 \u0627\u0633\u06d2 \u0648\u0627\u067e\u0633 Git \u0633\u06d2 \u0645\u0644\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u06d2 \u06af\u0627\u06d4<\/p>\n<p>\u06cc\u06c1 \u0631\u0648\u0644 \u0628\u06cc\u06a9\u0633 \u06a9\u0648 \u0628\u06be\u06cc \u0645\u062a\u0627\u062b\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 ArgoCD UI \u0631\u0648\u0644 \u0628\u06cc\u06a9 \u06a9\u0644\u0633\u0679\u0631 \u06a9\u0648 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0644\u06cc\u06a9\u0646 Git \u06a9\u0648 \u0646\u06c1\u06cc\u06ba\u06d4 \u0627\u06af\u0631 <code>clearledger-infra<\/code> \u06cc\u06c1 \u0627\u0628 \u0628\u06be\u06cc \u063a\u0644\u0637 \u0648\u0631\u0698\u0646 \u06a9\u06cc \u0637\u0631\u0641 \u0627\u0634\u0627\u0631\u06c1 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u062e\u0648\u062f \u0639\u0644\u0627\u062c \u0622\u067e \u06a9\u0648 \u063a\u0644\u0637 \u0648\u0631\u0698\u0646 \u067e\u0631 \u0648\u0627\u067e\u0633 \u0644\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u06cc\u06a9 \u0645\u062d\u0641\u0648\u0638 GitOps \u0631\u0648\u0644 \u0628\u06cc\u06a9 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 Git \u06a9\u0648 \u0627\u0633 \u0645\u06cc\u06ba \u062a\u0628\u062f\u06cc\u0644 \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2: <code>git revert<\/code> \u06a9\u0648 <code>clearledger-infra<\/code>. ArgoCD \u067e\u06be\u0631 \u06a9\u0644\u0633\u0679\u0631 \u06a9\u0648 \u0627\u0686\u06be\u06d2 \u0648\u0631\u0698\u0646 \u0645\u06cc\u06ba \u06c1\u0645 \u0622\u06c1\u0646\u06af \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u06af\u0631 \u0622\u067e \u06a9\u0648 \u06c1\u0646\u06af\u0627\u0645\u06cc UI \u0631\u0648\u0644 \u0628\u06cc\u06a9 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2 \u062a\u0648 \u067e\u06c1\u0644\u06d2 \u0622\u0679\u0648 \u0633\u0646\u06a9 \u06a9\u0648 \u0628\u0646\u062f \u06a9\u0631\u06cc\u06ba\u060c ArgoCD \u0633\u06d2 \u0631\u0648\u0644 \u0628\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u060c \u0627\u0648\u0631 \u067e\u06be\u0631 \u0628\u0639\u062f \u0645\u06cc\u06ba Git \u06a9\u0648 \u0679\u06be\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-method-1-git-revert-preferred-always-try-this-first\">\u0637\u0631\u06cc\u0642\u06c1 1: Git Revert (\u062a\u0631\u062c\u06cc\u062d\u06cc\u060c \u06c1\u0645\u06cc\u0634\u06c1 \u06cc\u06c1 \u0637\u0631\u06cc\u0642\u06c1 \u067e\u06c1\u0644\u06d2 \u0622\u0632\u0645\u0627\u0626\u06cc\u06ba)<\/h4>\n<p>\u06cc\u06c1 GitOps \u0637\u0631\u06cc\u0642\u06c1 \u06c1\u06d2\u06d4 \u06a9\u0644\u0633\u0679\u0631 \u06a9\u0648 \u0645\u062a \u0686\u06be\u0648\u0646\u0627\u06d4 \u062c\u0628 \u0622\u067e Git \u0645\u06cc\u06ba \u062a\u0628\u062f\u06cc\u0644\u06cc\u0627\u06ba \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0648 ArgoCD \u0622\u067e \u06a9\u06cc \u062a\u0631\u0645\u06cc\u0645 \u06a9\u0648 \u06c1\u0645 \u0622\u06c1\u0646\u06af \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u06a9\u0628 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba:<\/strong> \u0635\u0631\u0641 \u0686\u0646\u062f \u0645\u0646\u0679 \u0644\u06cc\u0646\u06d2 \u0633\u06d2 \u0622\u067e \u06a9\u0648 \u0628\u0631\u06d2 \u06a9\u0627\u0645\u0648\u06ba \u06a9\u06cc \u0634\u0646\u0627\u062e\u062a \u0645\u06cc\u06ba \u0645\u062f\u062f \u0645\u0644 \u0633\u06a9\u062a\u06cc \u06c1\u06d2\u06d4 <code>clearledger-infra<\/code>.<\/p>\n<p><strong>\u06cc\u06c1 \u06a9\u06cc\u0633\u06d2 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2:<\/strong><\/p>\n<pre><code class=\"language-plaintext\">Bad commit pushed to clearledger-infra\n        \u2193\nArgoCD auto-synced it (cluster is now broken)\n        \u2193\nYou run: git revert <bad-commit> && git push\n        \u2193\nArgoCD auto-syncs the revert (cluster is fixed, selfHeal works with you)\n        \u2193\nGit history shows the bad deploy AND the revert, full audit trail\n<\/bad-commit><\/code><\/pre>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/07\/1785194532_117_Homelab-\u0633\u06d2-AWS-\u062a\u06a9-\u067e\u0631\u0648\u0688\u06a9\u0634\u0646-\u06a9\u06d2-\u0644\u06cc\u06d2-\u062a\u06cc\u0627\u0631-DevSecOps-\u067e\u0644\u06cc\u0679.png\" alt=\"\u0688\u06cc\u0645\u0648 \u062f\u06a9\u06be\u0627 \u0631\u06c1\u0627 \u06c1\u06d2 \u06a9\u06c1 argocd \u06a9\u06cc\u0633\u06d2 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0628\u06c1\u062a\u0627 \u06c1\u06d2\u06d4\" style=\"display:block;margin:0 auto\" width=\"1024\" height=\"1536\" loading=\"lazy\" title=\"\"><\/p>\n<p><strong>\u0645\u0631\u062d\u0644\u06c1 \u0648\u0627\u0631:<\/strong><\/p>\n<pre><code class=\"language-bash\"># 1. Go to your clearledger-infra repo (wherever you cloned it)\ncd ~\/clearledger-infra  # adjust path if you cloned elsewhere\ngit pull                # make sure you are up to date\n\n# 2. Find the bad commit\ngit log --oneline -10\n\n# Output looks like:\n# abc1234 update ledger-service image to v1.4.0   \u2190 this broke prod\n# def5678 update auth-service image to v1.3.1     \u2190 was fine\n# 9a1b2c3 add vault rotation cronjob\n\n# 3. Revert it \u2014 this creates a NEW commit, it does not delete history\ngit revert abc1234 --no-edit\n\n# 4. Push \u2014 ArgoCD picks it up automatically within ~3 minutes\ngit push\n\n# 5. Confirm the cluster recovered\nkubectl get pods -n clearledger\nargocd app get clearledger --grpc-web | grep -E \"Sync Status|Health Status\"\n# Expected: Sync Status: Synced, Health Status: Healthy\n<\/code><\/pre>\n<p>\u0627\u0633 \u0637\u0631\u06cc\u0642\u06c1 \u06a9\u0648 \u062a\u0631\u062c\u06cc\u062d \u062f\u06cc \u062c\u0627\u062a\u06cc \u06c1\u06d2 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u06cc\u06c1 \u0633\u0686\u0627\u0626\u06cc \u06a9\u06d2 \u0645\u0627\u062e\u0630 \u06a9\u0648 \u0679\u06be\u06cc\u06a9 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <code>clearledger-infra<\/code>.<\/p>\n<p>\u062c\u0628 \u0622\u067e \u0631\u06cc\u0648\u0631\u0679 \u06a9\u0648 \u062f\u0628\u0627\u0626\u06cc\u06ba \u06af\u06d2\u060c \u062a\u0648 ArgoCD \u0646\u0626\u06cc \u06af\u0679 \u062d\u0627\u0644\u062a \u06a9\u0648 \u0686\u06cc\u06a9 \u06a9\u0631\u06d2 \u06af\u0627 \u0627\u0648\u0631 \u0622\u067e \u06a9\u06d2 \u06a9\u0644\u0633\u0679\u0631 \u06a9\u0648 \u0627\u0633 \u0633\u06d2 \u06c1\u0645 \u0622\u06c1\u0646\u06af \u06a9\u0631\u06d2 \u06af\u0627\u06d4 \u06cc\u06c1 \u06a9\u0648\u0626\u06cc \u0645\u0633\u0626\u0644\u06c1 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u06af\u0679 \u0627\u0648\u0631 \u06a9\u0644\u0633\u0679\u0631 \u06a9\u0627 \u0645\u0645\u0627\u062b\u0644 \u06c1\u0648\u0646\u0627 \u0636\u0631\u0648\u0631\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0633 \u0646\u06d2 \u0627\u06cc\u06a9 \u0648\u0627\u0636\u062d \u062a\u0627\u0631\u06cc\u062e \u0628\u06be\u06cc \u0686\u06be\u0648\u0691\u06cc \u06c1\u06d2\u06d4 \u06af\u0679 \u0622\u067e \u06a9\u0648 \u063a\u0644\u0637 \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc\u060c \u0648\u0627\u067e\u0633\u06cc\u060c \u062f\u0648\u0646\u0648\u06ba \u062a\u0628\u062f\u06cc\u0644\u06cc\u0627\u06ba \u06a9\u0633 \u0646\u06d2 \u06a9\u06cc\u06ba\u060c \u0627\u0648\u0631 \u0648\u06c1 \u06a9\u0628 \u06a9\u06cc \u06af\u0626\u06cc\u06ba\u06d4 \u0688\u06cc\u0628\u06af \u06a9\u0631\u0646\u0627 \u0622\u0633\u0627\u0646\u060c \u062c\u0627\u0626\u0632\u06c1 \u0644\u06cc\u0646\u0627 \u0622\u0633\u0627\u0646 \u0627\u0648\u0631 \u062a\u0639\u0645\u06cc\u0644 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0628\u06c1\u062a\u0631 \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-method-2-emergency-argocd-rollback-when-the-cluster-is-on-fire\">\u0637\u0631\u06cc\u0642\u06c1 2: \u0627\u06cc\u0645\u0631\u062c\u0646\u0633\u06cc ArgoCD \u0631\u0648\u0644 \u0628\u06cc\u06a9 (\u0627\u06af\u0631 \u06a9\u0644\u0633\u0679\u0631 \u0645\u06cc\u06ba \u0622\u06af \u0644\u06af \u062c\u0627\u0626\u06d2)<\/h4>\n<p>\u06cc\u06c1 \u0637\u0631\u06cc\u0642\u06c1 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba \u0627\u06af\u0631 \u0622\u067e \u06a9\u0627 \u06a9\u0644\u0633\u0679\u0631 \u0627\u0628\u06be\u06cc \u0679\u0648\u0679 \u06af\u06cc\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0622\u067e \u06a9\u06d2 \u067e\u0627\u0633 \u06af\u0679 \u0641\u06a9\u0633\u0632 \u06a9\u0648 \u0622\u06af\u06d2 \u0628\u0691\u06be\u0627\u0646\u06d2 \u06a9\u0627 \u0648\u0642\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0641\u0648\u0631\u06cc \u0637\u0648\u0631 \u067e\u0631 \u06a9\u0644\u0633\u0679\u0631 \u06a9\u0648 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0645\u0639\u0644\u0648\u0645 \u0627\u0686\u06be\u06cc \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u067e\u0631 \u0644\u0646\u06af\u0631 \u0627\u0646\u062f\u0627\u0632 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0622\u067e \u0628\u0639\u062f \u0645\u06cc\u06ba Git \u0645\u06cc\u06ba \u062a\u0631\u0645\u06cc\u0645 \u06a9\u0631\u06cc\u06ba \u06af\u06d2\u06d4 \u06cc\u06c1 \u06a9\u0648\u0626\u06cc \u0645\u0633\u062a\u0642\u0644 \u062d\u0644 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u06a9\u0628 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba:<\/strong> \u0645\u0642\u062f\u0645\u06c1 \u0686\u0644 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4 \u0627\u06cc\u06a9 \u067e\u0648\u0688 \u06a9\u0631\u06cc\u0634 \u06c1\u0648 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0635\u0627\u0631\u0641\u06cc\u0646 \u0645\u062a\u0627\u062b\u0631 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u0648\u0631 \u06a9\u0644\u0633\u0679\u0631 \u06a9\u0648 30 \u0633\u06cc\u06a9\u0646\u0688 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0627\u0686\u06be\u06cc \u062d\u0627\u0644\u062a \u0645\u06cc\u06ba \u0648\u0627\u067e\u0633 \u062c\u0627\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4<\/p>\n<p><strong>\u0634\u0631\u0648\u0639 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2:<\/strong> \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u0622\u06cc\u0627 \u0622\u067e \u06a9\u0627 ArgoCD CLI \u0633\u06cc\u0634\u0646 \u0627\u0628 \u0628\u06be\u06cc \u062f\u0631\u0633\u062a \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0627\u0633 \u06a9\u06cc \u0645\u06cc\u0639\u0627\u062f \u062e\u062a\u0645 \u06c1\u0648 \u06af\u0626\u06cc \u06c1\u06d2\u060c \u062a\u0648 \u0628\u0631\u0627\u06c1 \u06a9\u0631\u0645 \u067e\u06c1\u0644\u06d2 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0644\u0627\u06af \u0627\u0646 \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u06cc\u06a9 \u0645\u06cc\u0639\u0627\u062f \u062e\u062a\u0645 \u06c1\u0648\u0646\u06d2 \u0648\u0627\u0644\u0627 \u0633\u06cc\u0634\u0646 \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u0646\u06cc\u0686\u06d2 \u062f\u06cc\u06d2 \u06af\u0626\u06d2 \u062a\u0645\u0627\u0645 \u06a9\u0645\u0627\u0646\u0688\u0632 \u06a9\u0648 \u0646\u0627\u06a9\u0627\u0645 \u0628\u0646\u0627 \u062f\u06d2 \u06af\u0627\u06d4<\/p>\n<blockquote>\n<pre><code class=\"language-bash\">argocd account get-user-info --grpc-web\n# If you see \"Unauthenticated\", re-login:\nARGOCD_PASSWORD=$(kubectl -n argocd get secret argocd-initial-admin-secret \n  -o jsonpath=\"{.data.password}\" | base64 -d)\n\nargocd login argocd.local --username admin --password \"$ARGOCD_PASSWORD\" \n  --insecure --grpc-web\n<\/code><\/pre>\n<\/blockquote>\n<p><strong>\u0645\u0631\u062d\u0644\u06c1 1: \u062e\u0648\u062f\u06a9\u0627\u0631 \u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631\u06cc \u06a9\u0648 \u063a\u06cc\u0631 \u0641\u0639\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/strong> (\u062a\u0646\u0642\u06cc\u062f\u06cc) \u0627\u06af\u0631 \u0622\u067e \u0627\u0633 \u0642\u062f\u0645 \u06a9\u0648 \u0686\u06be\u0648\u0691 \u062f\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 SelfHeal 3 \u0645\u0646\u0679 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0631\u0648\u0644 \u0628\u06cc\u06a9 \u06a9\u0648 \u0645\u0646\u0633\u0648\u062e \u06a9\u0631 \u062f\u06d2 \u06af\u0627\u06d4<\/p>\n<pre><code class=\"language-bash\">argocd app set clearledger --sync-policy none --grpc-web\n# Confirm: automated sync is now off\nargocd app get clearledger --grpc-web | grep \"Sync Policy\"\n# Expected: Sync Policy: <none>\n<\/none><\/code><\/pre>\n<p><strong>\u0645\u0631\u062d\u0644\u06c1 2: \u0622\u062e\u0631\u06cc \u0645\u0639\u0644\u0648\u0645 \u0627\u0686\u06be\u06cc \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc ID \u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba\u06d4<\/strong><\/p>\n<pre><code class=\"language-bash\">argocd app history clearledger --grpc-web\n\n# Output looks like:\n# ID   DATE                           REVISION\n# 9    2026-06-05 10:12:00 +0000 UTC  abc1234  \u2190 bad deploy (current)\n# 8    2026-06-04 14:46:06 +0000 UTC  def5678  \u2190 known good\n# 7    2026-06-01 20:53:19 +0000 UTC  9a1b2c3\n\n# Or check via kubectl (no argocd CLI needed):\nkubectl get application clearledger -n argocd \n  -o jsonpath=\"{range .status.history[*]}{.id}{\"t\"}{.deployedAt}{\"t\"}{.revision}{\"n\"}{end}\"\n<\/code><\/pre>\n<p>ID (\u0628\u0627\u0626\u06cc\u06ba \u0637\u0631\u0641 \u06a9\u0627 \u0646\u0645\u0628\u0631) \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u060c SHA \u06a9\u0627 \u0646\u06c1\u06cc\u06ba\u06d4<\/p>\n<p><strong>\u0645\u0631\u062d\u0644\u06c1 3: \u0627\u06cc\u06a9 \u0627\u0686\u06be\u06cc ID \u067e\u0631 \u0648\u0627\u067e\u0633 \u062c\u0627\u0626\u06cc\u06ba\u06d4<\/strong><\/p>\n<pre><code class=\"language-bash\">argocd app rollback clearledger 8 --grpc-web\n<\/code><\/pre>\n<p><strong>\u0645\u0631\u062d\u0644\u06c1 4: \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u0622\u067e \u06a9\u0627 \u06a9\u0644\u0633\u0679\u0631 \u0645\u0633\u062a\u062d\u06a9\u0645 \u06c1\u06d2\u06d4<\/strong><\/p>\n<pre><code class=\"language-bash\">kubectl get pods -n clearledger\n# All pods should be Running\n\nargocd app get clearledger --grpc-web | grep -E \"Sync Status|Health Status\"\n# Sync Status:   OutOfSync  \u2190 expected \u2014 cluster is at rev 8, Git is still at the bad HEAD\n# Health Status: Healthy    \u2190 this is what matters right now\n<\/code><\/pre>\n<p><code>OutOfSync<\/code> \u0627\u0633 \u0648\u0642\u062a\u060c \u06cc\u06c1 \u062f\u0631\u0633\u062a \u0627\u0648\u0631 \u0645\u062a\u0648\u0642\u0639 \u06c1\u06d2\u06d4 \u06a9\u0644\u0633\u0679\u0631 \u0627\u06cc\u06a9 \u067e\u0686\u06be\u0644\u0627\u060c \u0627\u0686\u06be\u0627 \u0648\u0631\u0698\u0646 \u0686\u0644\u0627 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4 \u06af\u0679 \u0645\u06cc\u06ba \u0627\u0628 \u0628\u06be\u06cc \u0628\u0631\u06cc \u06a9\u0645\u0679\u0645\u0646\u0679 \u06c1\u06cc\u06ba\u06d4 \u06c1\u0645 \u0628\u0639\u062f \u0645\u06cc\u06ba \u0627\u0633 \u0645\u0633\u0626\u0644\u06d2 \u06a9\u0648 \u0679\u06be\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba \u06af\u06d2\u06d4<\/p>\n<p><strong>\u0645\u0631\u062d\u0644\u06c1 5: \u06af\u0679 \u06a9\u0648 \u062f\u0631\u0633\u062a \u06a9\u0631\u06cc\u06ba (\u0627\u0633\u06d2 \u0679\u0648\u0679\u0627 \u0646\u06c1 \u0686\u06be\u0648\u0691\u06cc\u06ba)<\/strong><\/p>\n<pre><code class=\"language-bash\">cd ~\/clearledger-infra\ngit pull\ngit revert <bad-commit-sha> --no-edit\ngit push\n<\/bad-commit-sha><\/code><\/pre>\n<p><strong>\u0645\u0631\u062d\u0644\u06c1 6: \u062e\u0648\u062f\u06a9\u0627\u0631 \u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631\u06cc \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0641\u0639\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/strong><\/p>\n<pre><code class=\"language-bash\">argocd app set clearledger \n  --sync-policy automated \n  --self-heal \n  --auto-prune \n  --grpc-web\n\n# Trigger an immediate sync so you do not wait for the next auto-check\nargocd app sync clearledger --grpc-web\n\n# Confirm everything is clean\nargocd app get clearledger --grpc-web | grep -E \"Sync Status|Health Status\"\n# Expected: Sync Status: Synced, Health Status: Healthy\n<\/code><\/pre>\n<p><strong>\u062e\u0648\u062f\u06a9\u0627\u0631 \u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631\u06cc \u06a9\u0648 \u0648\u0627\u0642\u0639\u06d2 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u062f\u06cc\u0631 \u062a\u06a9 \u063a\u06cc\u0631 \u0641\u0639\u0627\u0644 \u0646\u06c1 \u0686\u06be\u0648\u0691\u06cc\u06ba\u06d4<\/strong> \u06cc\u06c1 \u0628\u06c1\u0627\u0624 \u06a9\u0627 \u067e\u062a\u06c1 \u0644\u06af\u0627\u0646\u06d2 \u0627\u0648\u0631 \u0686\u06be\u06cc\u0691 \u0686\u06be\u0627\u0691 \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0637\u0631\u06cc\u0642\u06c1 \u06a9\u0627\u0631 \u06c1\u06d2\u06d4 \u0627\u0633 \u06a9\u06d2 \u0628\u063a\u06cc\u0631 \u0622\u067e \u06a9\u0648 \u0645\u0646\u0638\u0648\u0631 \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4 <code>kubectl<\/code> \u06a9\u0633\u06cc \u062a\u0628\u062f\u06cc\u0644\u06cc \u06a9\u0627 \u067e\u062a\u06c1 \u0646\u06c1\u06cc\u06ba \u0686\u0644\u0627\u06d4 \u062c\u0628 \u0622\u067e Git \u062a\u0631\u0645\u06cc\u0645 \u06a9\u0648 \u0622\u06af\u06d2 \u0628\u0691\u06be\u0627\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0648 \u0627\u0633\u06d2 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0641\u0639\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-practise-the-rollback-now-before-you-need-it-under-pressure\">\u0627\u0628\u06be\u06cc \u0627\u067e\u0646\u06d2 \u0631\u0648\u0644 \u0628\u06cc\u06a9 \u06a9\u06cc \u0645\u0634\u0642 \u06a9\u0631\u06cc\u06ba (\u0627\u0633 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06a9\u06c1 \u0622\u067e \u062f\u0628\u0627\u0624 \u0645\u062d\u0633\u0648\u0633 \u06a9\u0631\u06cc\u06ba)<\/h4>\n<p>\u0627\u0633 \u0648\u0642\u062a \u062a\u06a9 \u0627\u0646\u062a\u0638\u0627\u0631 \u0646\u06c1 \u06a9\u0631\u06cc\u06ba \u062c\u0628 \u062a\u06a9 \u06a9\u06c1 \u0627\u0635\u0644 \u0648\u0627\u0642\u0639\u06c1 \u067e\u06c1\u0644\u06cc \u0628\u0627\u0631 \u0646\u06c1\u06cc\u06ba \u0686\u0644\u062a\u0627\u06d4 \u0646\u06cc\u0686\u06d2 \u062f\u06cc\u06d2 \u06af\u0626\u06d2 \u0627\u0642\u062f\u0627\u0645\u0627\u062a \u063a\u0644\u0637 \u062a\u0635\u0648\u06cc\u0631\u06cc \u0679\u06cc\u06af \u06a9\u06cc \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u06a9\u06cc \u062a\u0642\u0644\u06cc\u062f \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0637\u0631\u06cc\u0642\u06c1 1 (\u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0637\u06d2 \u0634\u062f\u06c1 \u0631\u0627\u0633\u062a\u06c1) \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0622\u067e \u06a9\u06cc \u0631\u06c1\u0646\u0645\u0627\u0626\u06cc \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p><strong>\u0645\u0631\u062d\u0644\u06c1 1: \u063a\u0644\u0637 \u0627\u0645\u06cc\u062c \u0679\u06cc\u06af \u06a9\u0648 \u062f\u06be\u06a9\u06cc\u0644\u06cc\u06ba\u06d4<\/strong> <code>clearledger-infra<\/code><\/p>\n<pre><code class=\"language-bash\">cd ~\/clearledger-infra\ngit pull\n\n# Edit manifests\/notification-service\/deployment.yaml\n# Change the image tag to a tag that does not exist, e.g.:\n#   image: docker.io\/$DOCKER_USERNAME\/clearledger-notification-service:broken-tag\n\n# Commit and push it\ngit add manifests\/notification-service\/deployment.yaml\ngit commit -m \"test: simulate bad deploy with nonexistent image tag\"\ngit push\n<\/code><\/pre>\n<p><strong>\u0645\u0631\u062d\u0644\u06c1 2: \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u0622\u06cc\u0627 ArgoCD \u063a\u0644\u0637 \u062d\u0627\u0644\u062a \u0645\u06cc\u06ba \u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631 \u06c1\u06d2\u06d4<\/strong><\/p>\n<pre><code class=\"language-bash\"># Give ArgoCD ~3 minutes to pick it up, or trigger immediately:\nargocd app sync clearledger --grpc-web\n\n# Watch the notification-service pod fail\nkubectl get pods -n clearledger -w\n# You will see: notification-service pod stuck in ImagePullBackOff or ErrImagePull\n<\/code><\/pre>\n<p><strong>\u0645\u0631\u062d\u0644\u06c1 3: \u0637\u0631\u06cc\u0642\u06c1 1 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0648\u0627\u067e\u0633 \u0631\u0648\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/strong><\/p>\n<pre><code class=\"language-bash\">cd ~\/clearledger-infra\n\n# Revert the bad commit\ngit revert HEAD --no-edit\ngit push\n\n# ArgoCD will auto-sync \u2014 or trigger it:\nargocd app sync clearledger --grpc-web\n\n# Watch pods recover\nkubectl get pods -n clearledger -w\n# notification-service should return to Running\n<\/code><\/pre>\n<p><strong>\u0645\u0631\u062d\u0644\u06c1 4: \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631\u06cc\u06ba\u06d4<\/strong><\/p>\n<pre><code class=\"language-bash\">argocd app get clearledger --grpc-web | grep -E \"Sync Status|Health Status\"\n# Expected: Sync Status: Synced, Health Status: Healthy\n\nkubectl get pods -n clearledger\n# All pods Running, no ImagePullBackOff\n<\/code><\/pre>\n<p>\u0627\u0628 \u0622\u067e \u0646\u06d2 \u0627\u06cc\u0646\u0688 \u0679\u0648 \u0627\u06cc\u0646\u0688 \u0631\u0648\u0644 \u0628\u06cc\u06a9 \u06a9\u06cc \u0645\u0634\u0642 \u06a9\u0631 \u0644\u06cc \u06c1\u06d2\u06d4 \u06a9\u06c1 <code>git revert<\/code> \u0622\u067e \u06a9\u06d2 \u0628\u0646\u06cc\u0627\u062f\u06cc \u0688\u06be\u0627\u0646\u0686\u06d2 \u06a9\u06d2 \u0630\u062e\u06cc\u0631\u06d2 \u06a9\u06cc \u062a\u0627\u0631\u06cc\u062e \u0645\u06cc\u06ba \u06a9\u0645\u0679 \u0645\u0633\u062a\u0642\u0644 \u0637\u0648\u0631 \u067e\u0631 \u0634\u0627\u0645\u0644 \u06c1\u06cc\u06ba\u06d4 \u06cc\u0639\u0646\u06cc\u060c \u0646\u0642\u0644\u06cc \u0648\u0635\u0648\u0644\u06cc \u06a9\u0627 \u0627\u06cc\u06a9 \u062d\u0642\u06cc\u0642\u06cc \u0622\u0688\u0679 \u0679\u0631\u06cc\u0644\u06d4<\/p>\n<h4 id=\"heading-quick-reference\">\u0641\u0648\u0631\u06cc \u062d\u0648\u0627\u0644\u06c1<\/h4>\n<p><strong>\u0637\u0631\u06cc\u0642\u06c1 1 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba (\u06af\u0679 \u0631\u06cc\u0648\u0631\u0679) \u0627\u06af\u0631:<\/strong><\/p>\n<ul>\n<li>\n<p>\u0627\u06cc\u06a9 \u063a\u0644\u0637 \u062a\u0635\u0648\u06cc\u0631\u06cc \u0679\u06cc\u06af \u06cc\u0627 \u0645\u06cc\u0646\u06cc \u0641\u06cc\u0633\u0679 \u06a9\u0648 \u062f\u06be\u06a9\u06cc\u0644 \u062f\u06cc\u0627 \u06af\u06cc\u0627 \u062a\u06be\u0627\u06d4 <code>clearledger-infra<\/code> \u0627\u0648\u0631 \u0686\u0646\u062f \u0645\u0646\u0679 \u0628\u0627\u0642\u06cc \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0628\u0646\u06cc\u0627\u062f\u06cc \u0688\u06be\u0627\u0646\u0686\u06d2 \u06a9\u06cc \u062f\u06a9\u0627\u0646 \u0645\u06cc\u06ba \u062a\u0631\u062a\u06cc\u0628 \u0645\u06cc\u06ba \u062a\u0628\u062f\u06cc\u0644\u06cc \u06a9\u06cc \u0648\u062c\u06c1 \u0633\u06d2 \u067e\u0648\u0688 \u06a9\u0648 \u062e\u062a\u0645 \u06a9\u0631 \u062f\u06cc\u0627 \u06af\u06cc\u0627 \u062a\u06be\u0627\u06d4<\/p>\n<\/li>\n<li>\n<p>\u06cc\u06c1 \u062a\u0642\u0631\u06cc\u0628\u0627\u064b \u06c1\u0645\u06cc\u0634\u06c1 \u0635\u062d\u06cc\u062d \u062c\u0648\u0627\u0628 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u062a\u06cc\u0632\u060c \u0645\u062d\u0641\u0648\u0638 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0627\u06cc\u06a9 \u0635\u0627\u0641 \u0622\u0688\u0679 \u0679\u0631\u06cc\u0644 \u0686\u06be\u0648\u0691\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u0637\u0631\u06cc\u0642\u06c1 2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba (\u0627\u06cc\u0645\u0631\u062c\u0646\u0633\u06cc \u0622\u0631\u06af\u0648 \u0633\u06cc \u0688\u06cc \u0631\u0648\u0644 \u0628\u06cc\u06a9) \u0627\u06af\u0631:<\/strong><\/p>\n<ul>\n<li>\n<p>\u06a9\u0644\u0633\u0679\u0631 \u0641\u06cc \u0627\u0644\u062d\u0627\u0644 \u0688\u0627\u0624\u0646 \u06c1\u06d2\u060c \u0635\u0627\u0631\u0641\u06cc\u0646 \u06a9\u0648 \u0645\u062a\u0627\u062b\u0631 \u06a9\u0631 \u0631\u06c1\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 30 \u200b\u200b\u0633\u06cc\u06a9\u0646\u0688 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0645\u0633\u062a\u062d\u06a9\u0645 \u06c1\u0648\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0645\u062c\u06be\u06d2 \u0627\u0628\u06be\u06cc \u062a\u06a9 \u06cc\u0642\u06cc\u0646 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2 \u06a9\u06c1 \u06a9\u0633 \u06a9\u0645\u0679 \u06a9\u06cc \u0648\u062c\u06c1 \u0633\u06d2 \u0645\u0633\u0626\u0644\u06c1 \u06c1\u0648\u0627 \u0627\u0648\u0631 \u0645\u062c\u06be\u06d2 \u062a\u062d\u0642\u06cc\u0642\u0627\u062a \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0686\u06be \u0648\u0642\u062a \u062f\u0631\u06a9\u0627\u0631 \u06c1\u06d2\u06d4 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0645\u0633\u062a\u062d\u06a9\u0645 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0648\u0627\u067e\u0633 \u0631\u0648\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 <code>git log<\/code> \u0645\u062c\u0631\u0645 \u06a9\u0648 \u062a\u0644\u0627\u0634 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u0645\u0633\u0626\u0644\u06c1 \u062d\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0637\u0631\u06cc\u0642\u06c1 1 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u06a9\u0648\u0626\u06cc \u0628\u06be\u06cc \u0637\u0631\u06cc\u0642\u06c1 \u0644\u0627\u06af\u0648 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4<\/strong> \u0627\u06cc\u06a9 \u067e\u0648\u0688 \u06a9\u0631\u06cc\u0634 \u06c1\u0648 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u062d\u0627\u0644 \u06c1\u06cc \u0645\u06cc\u06ba \u0627\u0646\u0641\u0631\u0627\u0633\u0679\u0631\u06a9\u0686\u0631 \u0627\u0633\u0679\u0648\u0631 \u067e\u0631 \u06a9\u0686\u06be \u0628\u06be\u06cc \u0646\u06c1\u06cc\u06ba \u062f\u06be\u06a9\u06cc\u0644\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0631\u0648\u0644 \u0628\u06cc\u06a9 \u0645\u0633\u0626\u0644\u06c1 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba <code>kubectl logs<\/code>\u0627\u0633 \u06a9\u06cc \u0628\u062c\u0627\u0626\u06d2 \u0648\u0627\u0644\u0679 \u06a9\u0646\u06a9\u0634\u0646 \u0627\u0648\u0631 \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u06a9\u06cc \u067e\u0627\u0644\u06cc\u0633\u06cc\u0627\u06ba \u0644\u0627\u06af\u0648 \u06c1\u0648\u062a\u06cc \u06c1\u06cc\u06ba\u06d4<\/p>\n<p><code>revisionHistoryLimit: 10<\/code> \u06a9\u0648 <code>stages\/stage-2-gitops\/argocd\/clearledger-app.yaml<\/code> \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 ArgoCD \u06a9\u06d2 \u067e\u0627\u0633 \u06c1\u0645\u06cc\u0634\u06c1 \u06c1\u0646\u06af\u0627\u0645\u06cc \u0631\u0648\u0644 \u0628\u06cc\u06a9\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2 10 \u067e\u0686\u06be\u0644\u06cc \u062a\u0642\u0633\u06cc\u0645\u06cc\u06ba \u062f\u0633\u062a\u06cc\u0627\u0628 \u06c1\u0648\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u0622\u067e \u06a9\u06cc \u0631\u06c1\u0627\u0626\u06cc \u06a9\u0627 \u0686\u06a9\u0631 \u0632\u06cc\u0627\u062f\u06c1 \u06c1\u06d2 \u062a\u0648 \u0627\u0633\u06d2 \u0628\u0691\u06be\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-what-you-learned-in-stage-2\">\u0622\u067e \u0646\u06d2 \u0645\u0631\u062d\u0644\u06c1 2 \u0645\u06cc\u06ba \u06a9\u06cc\u0627 \u0633\u06cc\u06a9\u06be\u0627\u06d4<\/h3>\n<ul>\n<li>\n<p>GitOps \u06a9\u0627 \u06a9\u06cc\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2: Git \u0633\u0686\u0627\u0626\u06cc \u06a9\u0627 \u0648\u0627\u062d\u062f \u0630\u0631\u06cc\u0639\u06c1 \u06c1\u06d2 \u0627\u0648\u0631 \u0679\u0648\u0644\u0632 \u0627\u0633\u06d2 \u0646\u0627\u0641\u0630 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>ArgoCD \u062e\u0635\u0648\u0635\u06cc\u0627\u062a: \u06af\u0679 \u06a9\u0627 \u0645\u0634\u0627\u06c1\u062f\u06c1 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0633 \u06a9\u0627 \u0627\u067e\u0646\u06d2 \u06a9\u0644\u0633\u0679\u0631 \u0633\u06d2 \u0645\u0648\u0627\u0632\u0646\u06c1 \u06a9\u0631\u06a9\u06d2 \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u0628\u0691\u06be\u06d2 \u06c1\u0648\u0626\u06d2 \u06a9\u0648 \u062f\u0631\u0633\u062a \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0627\u0628 \u067e\u0648\u0631\u0627 \u0628\u06c1\u0627\u0624 \u0627\u0633 \u0637\u0631\u062d \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2: \u067e\u0634 \u06a9\u0648\u0688\u060c \u0633\u06cc \u0622\u0626\u06cc \u0628\u0644\u0688 \u0627\u0645\u06cc\u062c\u060c \u0633\u06cc \u0622\u0626\u06cc \u0627\u067e \u0688\u06cc\u0679 \u0627\u0646\u0641\u0631\u0627\u0633\u0679\u0631\u06a9\u0686\u0631 \u0631\u06cc\u067e\u0648\u0632\u0679\u0631\u06cc\u060c \u0627\u0648\u0631 \u0622\u0631\u06af\u0648 \u0633\u06cc \u0688\u06cc \u0633\u0646\u06a9 \u06a9\u0644\u0633\u0679\u0631\u06d4<\/p>\n<\/li>\n<li>\n<p>\u06a9\u0648\u0626\u06cc \u0646\u06c1\u06cc\u06ba \u0686\u0644 \u0631\u06c1\u0627 \u06c1\u06d2 <code>kubectl<\/code> \u06cc\u06c1 \u0627\u0628 \u062a\u0642\u0633\u06cc\u0645 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062f\u0633\u062a\u06cc\u0627\u0628 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 Git \u06a9\u0648 \u0627\u067e \u0688\u06cc\u0679 \u06a9\u0631\u062a\u06cc \u06c1\u06d2 \u0627\u0648\u0631 ArgoCD \u0628\u0627\u0642\u06cc \u06a9\u0627\u0645 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0645\u062d\u0641\u0648\u0638 \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u0648\u0627\u067e\u0633 \u062c\u0627\u0646\u06d2 \u06a9\u0627 \u0637\u0631\u06cc\u0642\u06c1:<\/strong> <code>git revert<\/code> \u0627\u0646\u0641\u0631\u0627 \u0631\u06cc\u067e\u0648 \u062c\u0648\u0627\u0628 \u06c1\u06d2 \u0627\u0648\u0631 ArgoCD \u0627\u06cc\u0645\u0631\u062c\u0646\u0633\u06cc \u0631\u0648\u0644 \u0628\u06cc\u06a9 \u0628\u0631\u06cc\u06a9 \u06af\u0644\u0627\u0633 \u0622\u067e\u0634\u0646 \u06c1\u06d2\u06d4 \u067e\u06c1\u0644\u06d2 \u0622\u067e \u06a9\u0648 \u062e\u0648\u062f\u06a9\u0627\u0631 \u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631\u06cc \u06a9\u0648 \u063a\u06cc\u0631 \u0641\u0639\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4 \u0628\u0635\u0648\u0631\u062a \u062f\u06cc\u06af\u0631 \u0633\u06cc\u0644\u0641 \u06c1\u06cc\u0644 \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631\u06cc \u06a9\u0648 \u0645\u0646\u0633\u0648\u062e \u06a9\u0631\u062f\u06d2 \u06af\u0627\u06d4<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u0627\u0628 \u0622\u067e \u0627\u067e\u0646\u06d2 \u062a\u062c\u0631\u0628\u06d2 \u06a9\u06cc \u0641\u06c1\u0631\u0633\u062a \u0645\u06cc\u06ba \u06a9\u06cc\u0627 \u0688\u0627\u0644 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\/\u0627\u06cc\u06a9 \u0627\u0646\u0679\u0631\u0648\u06cc\u0648 \u0645\u06cc\u06ba \u06a9\u06c1\u06c1 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba:<\/strong><\/p>\n<blockquote>\n<p>GitOps \u06a9\u0648 ArgoCD \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0644\u0627\u06af\u0648 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u062a\u0627\u06a9\u06c1 \u06cc\u06c1 \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u06d2 \u06a9\u06c1 \u06a9\u0644\u0633\u0679\u0631 \u0633\u0679\u06cc\u0679 Git \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0688\u0631\u0641\u0679 \u0688\u06cc\u0679\u06cc\u06a9\u0634\u0646\u060c \u0622\u0679\u0648\u0645\u06cc\u0679\u06a9 \u0633\u0646\u06a9\u0631\u0648\u0646\u0627\u0626\u0632\u06cc\u0634\u0646\u060c \u0627\u0648\u0631 \u063a\u0644\u0637 \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc\u0648\u06ba \u06a9\u06d2 Git \u067e\u0631 \u0645\u0628\u0646\u06cc \u0631\u0648\u0644 \u0628\u06cc\u06a9 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0686\u0644\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<\/blockquote>\n<p><code>make snapshot STAGE=2 && make snapshots<\/code>. \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba <code>clearledger.stage2<\/code>. \u062f\u06cc\u06a9\u06be\u06cc\u06ba \u06a9\u06c1 \u0627\u067e\u0646\u06cc \u062a\u0631\u0642\u06cc \u06a9\u0648 \u06a9\u06cc\u0633\u06d2 \u0628\u0686\u0627\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4<\/p>\n<h2 id=\"heading-stage-3-security-gates\">\u0645\u0631\u062d\u0644\u06c1 3 &#8211; \u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u06af\u06cc\u0679<\/h2>\n<p>\u06c1\u0631 \u062f\u06be\u06a9\u0627 \u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u0686\u06cc\u06a9 \u0686\u0644\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u06a9\u0686\u06be \u062e\u0631\u0627\u0628\u06cc\u0627\u06ba \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06a9\u0648 \u0641\u0648\u0631\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0631\u0648\u06a9 \u062f\u06cc\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 \u062f\u0648\u0633\u0631\u0648\u06ba \u06a9\u0648 \u0627\u0628\u06be\u06cc \u0633\u06cc\u06a9\u06be\u0627 \u062c\u0627\u0626\u06d2 \u06af\u0627 \u0627\u0648\u0631 \u0628\u0639\u062f \u0645\u06cc\u06ba \u06a9\u0644\u0633\u0679\u0631 \u067e\u0631 \u0644\u0627\u06af\u0648 \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2 \u06af\u0627 (\u0645\u0631\u062d\u0644\u06c1 4)\u06d4<\/p>\n<p><strong>\u06c1\u062f\u0641:<\/strong> 6 \u0627\u0633\u06a9\u06cc\u0646\u0631\u0632 \u06a9\u0648 \u0633\u0645\u062c\u06be\u06cc\u06ba\u06d4 \u06c1\u0631 \u0627\u0633\u06a9\u06cc\u0646\u0631 \u0633\u0645\u062c\u06be\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0648\u06c1 \u06a9\u06cc\u0627 \u062f\u06cc\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u060c \u06a9\u06cc\u0627 \u067e\u06a9\u0691\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u063a\u0644\u0637\u06cc\u0648\u06ba \u06a9\u0648 \u06a9\u06cc\u0633\u06d2 \u067e\u0691\u06be\u0646\u0627 \u06c1\u06d2\u06d4 \u0686\u0648\u0646\u06a9\u06c1 \u06c1\u0631 \u06af\u06cc\u0679 \u06a9\u0648 \u062c\u0627\u0646 \u0628\u0648\u062c\u06be \u06a9\u0631 \u062a\u0648\u0691\u0627 \u062c\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2 (\u00a73.4)\u060c \u0627\u06cc\u06a9 \u0646\u0627\u06a9\u0627\u0645 CI \u0622\u067e\u0631\u06cc\u0634\u0646 \u062d\u06cc\u0631\u0627\u0646 \u06a9\u0646 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u06a9\u06cc\u0627 \u0622\u067e \u0645\u0631\u062d\u0644\u06c1 3 \u0634\u0631\u0648\u0639 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062a\u06cc\u0627\u0631 \u06c1\u06cc\u06ba\u061f<\/strong><\/p>\n<ul>\n<li>\n<p><code>make check-2<\/code> \u067e\u0627\u0633<\/p>\n<\/li>\n<li>\n<p><code>ENABLE_ARGOCD_SYNC=true<\/code> GitHub \u067e\u0631 (\u0645\u0631\u062d\u0644\u06c1 2 \u0645\u06cc\u06ba \u0633\u06cc\u0679 \u0627\u067e)<\/p>\n<\/li>\n<li>\n<p><code>ENABLE_DAST<\/code> \u0627\u0628\u06be\u06cc \u062a\u06a9 <strong>\u0645\u0642\u0631\u0631 \u0646\u06c1\u06cc\u06ba<\/strong> (\u0627\u06af\u0631 \u0622\u067e \u0686\u0627\u06c1\u06cc\u06ba \u062a\u0648 \u0627\u0633 \u0645\u0631\u062d\u0644\u06d2 \u0645\u06cc\u06ba \u0628\u0639\u062f \u0645\u06cc\u06ba \u0627\u0633\u06d2 \u0622\u0646 \u06a9\u0631\u06cc\u06ba)<\/p>\n<\/li>\n<li>\n<p>\u0622\u0631\u06af\u0648 \u0633\u06cc \u0688\u06cc <code>http:\/\/argocd.local<\/code> \u062f\u06a9\u06be\u0627\u0626\u06cc\u06ba <strong>\u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631<\/strong><\/p>\n<\/li>\n<li>\n<p>\u0627\u062e\u062a\u06cc\u0627\u0631\u06cc: \u0645\u0631\u062d\u0644\u06c1 1 \u0627\u067e\u0646\u06cc \u062d\u0641\u0627\u0638\u062a\u06cc \u06a9\u0631\u0646\u0633\u06cc \u06a9\u0648 \u0628\u0631\u0627\u0624\u0632 \u06a9\u0631\u06cc\u06ba\u06d4 \u0641\u06cc\u0632 1 \u0645\u06cc\u06ba\u060c \u06c1\u0645 \u067e\u06c1\u0644\u06d2 \u06c1\u06cc \u0627\u0646 \u0645\u06cc\u06ba \u0633\u06d2 \u0628\u06c1\u062a \u0633\u06d2 \u0679\u0648\u0644\u0632 \u06a9\u0648 \u0644\u0627\u06af\u0648 \u06a9\u0631 \u0686\u06a9\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u0645\u06a9\u0645\u0644 \u06c1\u0648\u0646\u06d2 \u067e\u0631:<\/strong> <code>make check-3<\/code> \u06c1\u0631 \u06af\u06cc\u0679 \u06a9\u0648 \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u067e\u0627\u0633 \u06a9\u06cc\u0627 \u0627\u0648\u0631 \u0679\u0631\u06af\u0631 \u06a9\u06cc\u0627 (\u00a73.4)\u06d4 \u067e\u06be\u0631 <code>make snapshot STAGE=3<\/code> \u0627\u0648\u0631 <code>make snapshots<\/code>.<\/p>\n<h3 id=\"heading-what-you-need-to-know-first\">\u0622\u067e \u06a9\u0648 \u067e\u06c1\u0644\u06d2 \u06a9\u06cc\u0627 \u062c\u0627\u0646\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4<\/h3>\n<p>\u0627\u06cc\u06a9 \u0679\u0648\u0644 \u06a9\u0627\u0641\u06cc \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u06c1\u0631 \u0627\u0633\u06a9\u06cc\u0646\u0631 \u0627\u06cc\u06a9 \u0645\u062e\u062a\u0644\u0641 \u067e\u0631\u062a \u06a9\u06cc \u062d\u0641\u0627\u0638\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<ul>\n<li>\n<p><strong>\u06af\u0679\u0644\u06cc\u06a9\u0633<\/strong>: \u06a9\u0648\u0688 \u06cc\u0627 \u06af\u0679 \u0631\u06cc\u06a9\u0627\u0631\u0688 \u06a9\u0627 \u0631\u0627\u0632 (API \u06a9\u0644\u06cc\u062f\u060c \u0679\u0648\u06a9\u0646)<\/p>\n<\/li>\n<li>\n<p><strong>Semgrep (SAST)<\/strong>: Python\/JS \u0633\u0648\u0631\u0633 \u0645\u06cc\u06ba \u06a9\u06cc\u0691\u06d2 (\u0627\u0646\u062c\u06cc\u06a9\u0634\u0646\u060c \u063a\u06cc\u0631 \u0645\u062d\u0641\u0648\u0638 \u067e\u06cc\u0679\u0631\u0646)<\/p>\n<\/li>\n<li>\n<p><strong>Trivy (SCA + \u062a\u0635\u0648\u06cc\u0631)<\/strong>: Python\/Node.js \u067e\u06cc\u06a9\u062c\u0632 \u0627\u0648\u0631 Docker \u0627\u0645\u06cc\u062c\u0632 \u0645\u06cc\u06ba \u0645\u0639\u0644\u0648\u0645 \u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u06a9\u0645\u0632\u0648\u0631\u06cc\u0627\u06ba (\u062c\u0633\u06d2 CVEs \u06a9\u06c1\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2) \u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba\u06d4 Common Vulnerability and Exposures (CVE) \u0633\u0627\u0641\u0679 \u0648\u06cc\u0626\u0631 \u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u06a9\u06cc \u062e\u0627\u0645\u06cc\u0627\u06ba \u06c1\u06cc\u06ba \u062c\u0646 \u06a9\u0648 \u0639\u0648\u0627\u0645\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0627\u06cc\u06a9 \u0645\u0646\u0641\u0631\u062f \u0634\u0646\u0627\u062e\u062a \u06a9\u0646\u0646\u062f\u06c1 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0679\u0631\u06cc\u06a9 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba (IaC)<\/strong>: Dockerfile\u060c Kubernetes manifest\u060c \u0627\u0648\u0631 Stage 8 Terraform \u06a9\u06cc \u063a\u0644\u0637 \u06a9\u0646\u0641\u06cc\u06af\u0631\u06cc\u0634\u0646\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0645\u0634\u062a\u0631\u06a9\u06c1 \u0646\u0634\u0627\u0646<\/strong>: \u062b\u0627\u0628\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u062a\u0635\u0648\u06cc\u0631 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0628\u0646\u0627\u0626\u06cc \u06af\u0626\u06cc \u062a\u06be\u06cc \u0627\u0648\u0631 \u0627\u0633 \u067e\u0631 \u062f\u0633\u062a\u062e\u0637 \u06a9\u06cc\u06d2 \u06af\u0626\u06d2 \u062a\u06be\u06d2\u06d4<\/p>\n<\/li>\n<\/ul>\n<p>\u0622\u062c CI \u06a9\u0648 \u06a9\u06cc\u0627 \u0631\u0648\u06a9\u062a\u0627 \u06c1\u06d2: \u0631\u0627\u0632\u060c \u062e\u0631\u0627\u0628 \u06a9\u0648\u0688 (SAST)\u060c \u06a9\u0645\u0632\u0648\u0631 \u062a\u0635\u0627\u0648\u06cc\u0631\u060c \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u0627\u0645\u06cc\u062c\u0632 \u0645\u06cc\u06ba \u0688\u0627\u06a9\u0631 \u0641\u0627\u0626\u0644 \u06a9\u06d2 \u0645\u0633\u0627\u0626\u0644\u06d4<\/p>\n<p>\u0628\u0639\u062f \u0645\u06cc\u06ba \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u0646\u0627: Kubernetes \u06a9\u06d2 \u06a9\u0686\u06be \u0645\u0633\u0627\u0626\u0644 \u0635\u0631\u0641 \u0645\u0631\u062d\u0644\u06c1 1 \u0645\u06cc\u06ba \u0631\u067e\u0648\u0631\u0679 \u06a9\u06cc\u06d2 \u06af\u0626\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0638\u0627\u06c1\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u06a9\u0633 \u0686\u06cc\u0632 \u06a9\u0648 \u0645\u0636\u0628\u0648\u0637 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4 \u0645\u0631\u062d\u0644\u06c1 4 \u0645\u06cc\u06ba\u060c Kyverno \u0627\u06c1\u0645 \u0627\u0635\u0648\u0644\u0648\u06ba \u06a9\u0627 \u0627\u0635\u0644 \u06a9\u0644\u0633\u0679\u0631 \u0646\u0641\u0627\u0630 \u0645\u06cc\u06ba \u062a\u0631\u062c\u0645\u06c1 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0644\u06c1\u0630\u0627 \u063a\u06cc\u0631 \u0645\u062d\u0641\u0648\u0638 \u06a9\u0627\u0645 \u06a9\u06d2 \u0628\u0648\u062c\u06be \u06a9\u0648 \u0686\u0644\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06c1\u06cc \u0631\u0648\u06a9 \u062f\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0622\u067e <code>git commit<\/code>\u0646\u0648\u0679 \u0628\u06a9 \u06a9\u0627 \u06c1\u06a9 \u067e\u06c1\u0644\u06d2 \u0627\u0633\u06a9\u06cc\u0646 \u06a9\u0631 \u0633\u06a9\u062a\u0627 \u06c1\u06d2 (\u06a9\u0645\u0679 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2)\u06d4 \u0622\u067e <code>git push<\/code>GitHub \u0627\u06cc\u06a9\u0634\u0646 \u0644\u0627\u0646\u0686\u0631 \u0633\u06d2 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0627\u0633\u06a9\u06cc\u0646 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06cc\u06a9 \u06c1\u06cc \u062e\u06cc\u0627\u0644 \u062f\u0648 \u0628\u0627\u0631 \u0638\u0627\u06c1\u0631 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 \u0622\u067e \u06a9\u06cc 10 \u0645\u0646\u0679 \u06a9\u06cc \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06a9\u0648 \u0636\u0627\u0626\u0639 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u063a\u0644\u0637\u06cc\u0648\u06ba \u06a9\u0648 \u067e\u06a9\u0691\u06cc\u06ba\u06d4 CI \u06c1\u0645\u06cc\u0634\u06c1 \u06a9\u0633\u06cc \u0628\u06be\u06cc \u0637\u0631\u062d \u0633\u06d2 \u067e\u0634 \u067e\u0631 \u0686\u0644\u062a\u0627 \u06c1\u06d2\u060c \u0644\u06c1\u0630\u0627 \u0627\u0646\u0633\u0679\u0627\u0644\u06cc\u0634\u0646 \u06a9\u06d2 \u0644\u06cc\u06d2 precommit \u0627\u062e\u062a\u06cc\u0627\u0631\u06cc \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-enable-dast-optional-after-stage-2\">DAST \u06a9\u0648 \u0641\u0639\u0627\u0644 \u06a9\u0631\u06cc\u06ba (\u0645\u0631\u062d\u0644\u06c1 2 \u06a9\u06d2 \u0628\u0639\u062f \u0627\u062e\u062a\u06cc\u0627\u0631\u06cc)<\/h3>\n<p>\u0688\u0627\u0626\u0646\u0627\u0645\u06a9 \u0627\u06cc\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u0679\u06cc\u0633\u0679\u0646\u06af (DAST) \u06c1\u06d2\u06d4 <strong>\u0686\u0644 \u0631\u06c1\u0627 \u06c1\u06d2<\/strong> \u0627\u06cc\u067e <code>http:\/\/clearledger.local<\/code>. \u0641\u06cc\u0632 1 \u0627\u0648\u0631 2 \u06a9\u0648 \u062c\u0627\u0646 \u0628\u0648\u062c\u06be \u06a9\u0631 \u0628\u0646\u062f \u06a9\u0631 \u062f\u06cc\u0627 \u06af\u06cc\u0627 \u062a\u06be\u0627\u06d4 \u0645\u0631\u062d\u0644\u06c1 1 \u06a9\u0644\u0633\u0679\u0631 \u0645\u06cc\u06ba \u062a\u0639\u06cc\u0646\u0627\u062a \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u062a\u06be\u0627\u060c \u0645\u0631\u062d\u0644\u06c1 2 \u067e\u06c1\u0644\u06d2 GitOps \u06a9\u0648 \u0645\u0639\u0645\u0648\u0644 \u067e\u0631 \u0644\u0627\u0646\u0627 \u062a\u06be\u0627\u06d4<\/p>\n<p>\u0627\u06af\u0631 <code>make check-2<\/code> \u067e\u0627\u0633 \u0627\u0648\u0631 <code>curl http:\/\/clearledger.local\/auth\/health<\/code> \u0631\u067e\u0648\u0631\u0679 <code>200<\/code>\u0622\u067e DAST \u06a9\u0648 \u0622\u0646 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>GitHub \u067e\u0631 \u062c\u0627\u0626\u06cc\u06ba\u06d4 <code>clearledger<\/code> \u0631\u06cc\u067e\u0648 \u067e\u06be\u0631 <strong>\u062a\u0631\u062a\u06cc\u0628\u0627\u062a\u060c \u0631\u0627\u0632 \u0627\u0648\u0631 \u0645\u062a\u063a\u06cc\u0631\u0627\u062a\u060c \u0627\u0639\u0645\u0627\u0644\u060c \u0645\u062a\u063a\u06cc\u0631\u0627\u062a<\/strong>\u0627\u0648\u0631 <strong>\u0646\u06cc\u0627 \u0630\u062e\u06cc\u0631\u06c1 \u0645\u062a\u063a\u06cc\u0631<\/strong>:<\/p>\n<table>\n<thead>\n<tr>\n<th>\u0646\u0627\u0645<\/th>\n<th>\u0642\u062f\u0631<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>ENABLE_DAST<\/code><\/td>\n<td><code>true<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u0627\u06cc\u06a9 \u0686\u06be\u0648\u0679\u06cc \u06a9\u0645\u0679 \u06a9\u0648 \u062f\u0628\u0627\u0626\u06cc\u06ba \u06cc\u0627 \u0627\u067e\u0646\u06d2 \u0622\u062e\u0631\u06cc \u0648\u0631\u06a9 \u0641\u0644\u0648 \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4 <code>main<\/code>)\u06d4 \u06a9\u06c1 <strong>DAST (OWASP ZAP + Fintech API \u0679\u06cc\u0633\u0679)<\/strong> \u0627\u0633 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2\u060c \u0622\u067e \u06a9\u0648 \u06a9\u0627\u0645 \u0686\u0644\u0627\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4 <strong>\u0686\u06be\u0648\u0691 \u062f\u06cc\u0627<\/strong>. \u0627\u06cc\u06a9 \u0646\u0627\u06a9\u0627\u0645 ZAP \u0627\u0633\u06a9\u06cc\u0646 \u0627\u06cc\u06a9 \u0627\u06cc\u0633\u06cc \u062a\u0644\u0627\u0634 \u06c1\u06d2 \u062c\u0633 \u06a9\u06cc \u0648\u0627\u0642\u0639\u06cc \u062a\u062d\u0642\u06cc\u0642\u0627\u062a \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4 \u0627\u0633 \u0642\u062f\u0645 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06a9\u0633\u06cc \u0628\u06be\u06cc \u0686\u06cc\u0632 \u06a9\u0648 \u0686\u06be\u0648\u0691\u0646\u06d2 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u0679\u0648\u06af\u0644 \u0622\u0641 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-31-install-pre-commit-hooks\">3.1: \u067e\u0631\u06cc \u06a9\u0645\u0679 \u06c1\u06a9 \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u0646\u0627<\/h3>\n<pre><code class=\"language-bash\"># macOS (Homebrew \u2014 avoids PEP 668 \"externally-managed-environment\" from pip3):\nbrew install pre-commit\n\n# Linux\/WSL2:\n# sudo apt install -y pre-commit\n# or: python3 -m pip install --user pre-commit\n\npre-commit install\npre-commit run --all-files\n<\/code><\/pre>\n<p>\u0627\u06af\u0631 \u0622\u067e \u06a9\u0627 \u06c1\u06a9 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u067e\u06c1\u0644\u06d2 \u063a\u0644\u0637\u06cc \u06a9\u0648 \u067e\u0691\u06be\u06cc\u06ba\u06d4 \u06af\u0679\u0644\u06cc\u06a9\u0633 \u0627\u0648\u0631 \u0631\u0641 \u06a9\u0648 \u0627\u0631\u062a\u06a9\u0627\u0628 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06af\u0632\u0631\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4 \u06a9\u0686\u06be YAML \u06cc\u0627 Terraform \u06c1\u06a9 \u06a9\u06d2 \u0645\u0633\u0627\u0626\u0644 \u0628\u0639\u062f \u06a9\u06d2 \u0645\u0631\u062d\u0644\u06d2 \u06a9\u06cc \u0641\u0627\u0626\u0644\u0648\u06ba \u0645\u06cc\u06ba \u06c1\u0648 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u0633 \u0635\u0648\u0631\u062a \u0645\u06cc\u06ba\u060c \u0627\u0633\u0679\u06cc\u062c \u06c1\u062f\u0627\u06cc\u0627\u062a \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062c\u0627\u0631\u06cc \u0631\u06a9\u06be\u06cc\u06ba \u0627\u0648\u0631 <code>troubleshooting.md<\/code> Gitleaks \u06cc\u0627 CI \u0633\u06a9\u06cc\u0646\u0631 \u06a9\u06cc \u062e\u0631\u0627\u0628\u06cc\u0648\u06ba \u06a9\u06cc \u0635\u0648\u0631\u062a \u0645\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u06cc\u0633\u0627 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0679\u06cc\u0633\u0679 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u0622\u067e \u06a9\u0627 CI \u0645\u0642\u0627\u0645\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0631\u0627\u0632 \u06a9\u0648 \u067e\u06a9\u0691\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\">echo 'AWS_SECRET = \"'$(printf '%s%s' 'AKIA' 'IOSFODNN7EXAMPLE')'\"' >> app\/auth-service\/main.py\ngit add app\/auth-service\/main.py && git commit -m \"test\"\n\n# Gitleaks fires and blocks the commit \u2014 see \"What you should see\" below\n\ngit restore --staged app\/auth-service\/main.py\n\ngit checkout app\/auth-service\/main.py\n<\/code><\/pre>\n<p>\u06a9\u0645\u0679 \u06a9\u0648 \u06af\u0679 \u062a\u06a9 \u067e\u06c1\u0646\u0686\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06c1\u06cc \u0628\u0644\u0627\u06a9 \u06a9\u0631 \u062f\u06cc\u0627 \u06af\u06cc\u0627 \u062a\u06be\u0627\u06d4 \u0627\u06af\u0631 \u0622\u067e \u06a9\u06d2 \u067e\u0627\u0633 \u067e\u0631\u06cc \u06a9\u0645\u0679 \u06c1\u06a9 \u0627\u0646\u0633\u0679\u0627\u0644 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2 \u062a\u0648\u060c \u0648\u06c1 \u062c\u0639\u0644\u06cc AWS \u06a9\u0644\u06cc\u062f \u0622\u067e \u06a9\u06cc \u06af\u0679 \u06c1\u0633\u0679\u0631\u06cc \u0645\u06cc\u06ba \u0645\u0633\u062a\u0642\u0644 \u0637\u0648\u0631 \u067e\u0631 \u0645\u0648\u062c\u0648\u062f \u0631\u06c1\u06d2 \u06af\u06cc (\u0686\u0627\u06c1\u06d2 \u0622\u067e \u0627\u0633 \u0644\u0627\u0626\u0646 \u06a9\u0648 \u0628\u0639\u062f \u0645\u06cc\u06ba \u062d\u0630\u0641 \u06a9\u0631\u062f\u06cc\u06ba\u060c \u06af\u0679 \u0627\u0633\u06d2 \u06cc\u0627\u062f \u0631\u06a9\u06be\u06d2 \u06af\u0627)\u06d4<\/p>\n<p><strong>\u0627\u06af\u0631 \u0622\u067e \u067e\u06c1\u0644\u06d2 \u06c1\u06cc \u0645\u0631\u062d\u0644\u06c1 1 \u0645\u06cc\u06ba \u0633\u0627\u0626\u0646 \u06a9\u0631 \u0686\u06a9\u06d2 \u06c1\u06cc\u06ba\u060c<\/strong> \u06cc\u06c1 \u0636\u0631\u0648\u0631\u06cc \u06c1\u06d2\u06d4 \u0645\u0631\u062d\u0644\u06c1 3 \u06a9\u0644\u06cc\u062f\u06cc \u062a\u062e\u0644\u06cc\u0642 \u0646\u0648 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0627\u0633\u06d2 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 <code>infra\/cosign.pub<\/code> \u06cc\u06c1 \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2 \u0627\u0648\u0631 GitHub \u067e\u0631 \u06c1\u06d2\u06d4 <code>COSIGN_PRIVATE_KEY<\/code> + <code>COSIGN_PASSWORD<\/code>. \u0645\u0631\u062d\u0644\u06c1 4 \u0644\u0627\u06af \u0627\u0646 \u06a9\u0631\u0646\u06d2 \u067e\u0631 \u0633\u0648\u0626\u0686 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <strong>\u0646\u0641\u0627\u0630<\/strong> \u06a9\u0644\u0633\u0679\u0631 \u06af\u06cc\u0679 \u067e\u0631\u06d4<\/p>\n<p><strong> \u06c1\u06cc\u0646\u0688 \u0622\u0646 \u0686\u06cc\u06a9 \u067e\u0648\u0627\u0626\u0646\u0679: \u0642\u0628\u0644 \u0627\u0632 \u06a9\u0645\u0679 \u062f\u0631\u0627\u0635\u0644 \u0631\u0627\u0632 \u06a9\u0648 \u0631\u0648\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/strong><\/p>\n<p>\u0627\u0646\u0633\u0679\u0627\u0644 \u0644\u06cc\u06a9\u0646 \u0645\u0646\u0633\u0644\u06a9 \u0646\u06c1\u06cc\u06ba \u0627\u06cc\u06a9 \u06a9\u0644\u0627\u0633\u06a9 \u062e\u0627\u0645\u0648\u0634 \u0646\u0627\u06a9\u0627\u0645\u06cc \u06c1\u06d2\u06d4 \u062b\u0627\u0628\u062a \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u06c1\u06a9 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\">echo 'AWS_SECRET='\"$(printf '%s%s' 'AKIA' 'IOSFODNN7EXAMPLE')\" > leak-test.env\n\ngit add leak-test.env\n\npre-commit run --all-files; echo \"exit=$?\"\n\ngit reset leak-test.env >\/dev\/null; rm -f leak-test.env\n<\/code><\/pre>\n<p><strong>\u0645\u062a\u0648\u0642\u0639:<\/strong> \u062e\u0641\u06cc\u06c1 \u0633\u06a9\u06cc\u0646\u0646\u06af \u06c1\u06a9 <strong>\u0646\u0627\u06a9\u0627\u0645<\/strong> \u067e\u06be\u0627\u0646\u0633\u06cc (<code>exit=1<\/code>) \u0627\u0648\u0631 \u062c\u06be\u0646\u0688\u06d2 <code>leak-test.env<\/code>. \u0627\u06af\u0631 <code>exit=0<\/code>\u06c1\u06a9 \u0646\u0635\u0628 \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u06cc\u06c1 \u06a9\u0686\u06be \u0628\u06be\u06cc \u0646\u06c1\u06cc\u06ba \u067e\u06a9\u0691\u062a\u0627. \u062f\u0648\u0628\u0627\u0631\u06c1 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4 <code>pre-commit install<\/code> \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 <code>.git\/hooks\/pre-commit<\/code> \u06cc\u06c1 \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u06af\u0631 \u0622\u067e \u0627\u0633\u06d2 \u0686\u06be\u0648\u0691 \u062f\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0622\u067e \u0628\u063a\u06cc\u0631 \u0627\u0633\u06a9\u06cc\u0646 \u06a9\u06d2 \u0633\u0641\u0631 \u06a9\u0631\u06cc\u06ba \u06af\u06d2 \u0627\u0648\u0631 \u06cc\u0642\u06cc\u0646 \u06a9\u0631\u06cc\u06ba \u06af\u06d2 \u06a9\u06c1 \u0645\u0631\u062d\u0644\u06c1 3 \u0622\u067e \u06a9\u06cc \u062d\u0641\u0627\u0638\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0628 \u0627\u06cc\u0633\u0627 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-32-generate-cosign-keys\">3.2: \u0634\u0631\u06cc\u06a9 \u062f\u0633\u062a\u062e\u0637 \u06a9\u0644\u06cc\u062f \u0628\u0646\u0627\u0626\u06cc\u06ba<\/h3>\n<p>\u0627\u06af\u0631 \u0622\u067e \u0646\u06d2 Cosign \u06a9\u0644\u06cc\u062f \u06a9\u0648 \u0645\u0631\u062d\u0644\u06c1 1 (\u00a71.4) \u0645\u06cc\u06ba \u0628\u0646\u0627\u06cc\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u0627\u0633\u06d2 \u0628\u0646\u0627\u0646\u0627 \u0686\u06be\u0648\u0691 \u062f\u06cc\u06ba \u0627\u0648\u0631 \u0633\u06cc\u062f\u06be\u06d2 \u062f\u0627\u062e\u0644 \u06a9\u0631\u0646\u06d2 \u067e\u0631 \u062c\u0627\u0626\u06cc\u06ba\u06d4 <code>cosign.pub<\/code> \u0630\u06cc\u0644 \u0645\u06cc\u06ba GitHub \u0631\u0627\u0632 \u06a9\u0648 \u0627\u067e\u0646\u06cc Kyverno \u067e\u0627\u0644\u06cc\u0633\u06cc \u0645\u06cc\u06ba \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p><strong>\u0645\u0634\u062a\u0631\u06a9\u06c1 \u0646\u0634\u0627\u0646<\/strong> \u0627\u067e\u0646\u06cc \u0627\u0646\u06a9\u0631\u067e\u0634\u0646 \u06a9\u0644\u06cc\u062f \u0633\u06d2 \u0688\u0627\u06a9\u0631 \u0627\u0645\u06cc\u062c \u067e\u0631 \u062f\u0633\u062a\u062e\u0637 \u06a9\u0631\u06cc\u06ba\u06d4 \u06a9\u0644\u0633\u0679\u0631 \u0645\u06cc\u06ba \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc Kyverno (\u0645\u0631\u062d\u0644\u06c1 4) \u06a9\u0648 \u062f\u0633\u062a\u062e\u0637 \u06a9\u06cc \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631\u0646\u06d2 \u0627\u0648\u0631 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u0633\u06d2 \u063a\u06cc\u0631 \u062f\u0633\u062a\u062e\u0637 \u0634\u062f\u06c1 \u062a\u0635\u0627\u0648\u06cc\u0631 \u06a9\u0648 \u0645\u0633\u062a\u0631\u062f \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u06cc \u06c1\u06d2\u06d4 \u06cc\u06c1 \u06a9\u0633\u06cc \u06a9\u0648 \u0646\u0642\u0635\u0627\u0646 \u062f\u06c1 \u062a\u0635\u0648\u06cc\u0631 \u06a9\u0648 Docker Hub \u067e\u0631 \u0622\u06af\u06d2 \u0628\u0691\u06be\u0627\u0646\u06d2 \u0627\u0648\u0631 \u0627\u0633\u06d2 \u0622\u067e \u06a9\u06d2 \u06a9\u0644\u0633\u0679\u0631 \u067e\u0631 \u0686\u0644\u0627\u0646\u06d2 \u0633\u06d2 \u0631\u0648\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\"># macOS: brew install cosign\n\n# Linux\/WSL2: curl -O -L https:\/\/github.com\/sigstore\/cosign\/releases\/download\/v2.2.4\/cosign-linux-amd64 && chmod +x cosign-linux-amd64 && sudo mv cosign-linux-amd64 \/usr\/local\/bin\/cosign\n\ncosign generate-key-pair   # enter a password when prompted\n<\/code><\/pre>\n<p>\u0627\u0633 \u0633\u06d2 \u062f\u0648 \u0641\u0627\u0626\u0644\u06cc\u06ba \u0628\u0646\u06cc\u06ba \u06af\u06cc\u06d4 <code>cosign.key<\/code> (\u0646\u062c\u06cc\u060c \u062f\u0633\u062a\u062e\u0637 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u0645\u06cc\u06ba \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2) \u0627\u0648\u0631 <code>cosign.pub<\/code> (\u0639\u0648\u0627\u0645\u06cc\u060c \u062a\u0635\u062f\u06cc\u0642 \u06a9\u06d2 \u0644\u06cc\u06d2 Kyverno \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2)<\/p>\n<p>\u0627\u067e\u0646\u06cc Kyverno \u067e\u0627\u0644\u06cc\u0633\u06cc \u0645\u06cc\u06ba \u0627\u067e\u0646\u06cc \u0639\u0648\u0627\u0645\u06cc \u06a9\u0644\u06cc\u062f \u062f\u0627\u062e\u0644 \u06a9\u0631\u06cc\u06ba (\u067e\u0644\u06cc\u0633 \u06c1\u0648\u0644\u0688\u0631 \u0628\u0644\u0627\u06a9 \u06a9\u0648 \u06cc\u06c1\u0627\u06ba \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u06cc\u06ba)\u06d4 <code>infra\/policies\/require-signed-images.yaml<\/code> \u06a9\u06d2 \u0645\u0634\u0645\u0648\u0644\u0627\u062a \u06a9\u06d2 \u0633\u0627\u062a\u06be <code>cosign.pub<\/code>)\u06d4<\/p>\n<p>GitHub \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0631\u0627\u0632 \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba (github.com\/YOUR_USERNAME\/clearledger \u2192 \u062a\u0631\u062a\u06cc\u0628\u0627\u062a \u2192 \u0631\u0627\u0632 \u0627\u0648\u0631 \u0645\u062a\u063a\u06cc\u0631\u0627\u062a \u2192 \u0627\u0639\u0645\u0627\u0644):<\/p>\n<table>\n<thead>\n<tr>\n<th>\u062e\u0641\u06cc\u06c1<\/th>\n<th>\u0642\u062f\u0631<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>COSIGN_PRIVATE_KEY<\/code><\/td>\n<td>\u062a\u0641\u0635\u06cc\u0644 <code>cosign.key<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>COSIGN_PASSWORD<\/code><\/td>\n<td>\u06a9\u0644\u06cc\u062f \u0628\u0646\u0627\u062a\u06d2 \u0648\u0642\u062a \u067e\u0627\u0633 \u0648\u0631\u0688 \u062f\u0631\u062c \u06a9\u06cc\u0627 \u06af\u06cc\u0627\u06d4<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><strong> \u0644\u06cc\u0628 \u0686\u06cc\u06a9 \u067e\u0648\u0627\u0626\u0646\u0679: \u0622\u067e \u06a9\u06cc \u06a9\u0648-\u0633\u0627\u0626\u0646\u0646\u06af \u06a9\u0644\u06cc\u062f \u062a\u06cc\u0627\u0631 \u06c1\u06d2\u06d4<\/strong><\/p>\n<p>\u0645\u0631\u062d\u0644\u06c1 4 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 <code>cosign.pub<\/code> \u062f\u0633\u062a\u062e\u0637 \u0634\u062f\u06c1 \u062a\u0635\u0648\u06cc\u0631 \u06a9\u0648 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 \u062c\u0627\u0631\u06cc \u0631\u06a9\u06be\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u060c \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u0626\u06cc\u06ba \u06a9\u06c1 \u0622\u067e \u06a9\u06cc \u06a9\u0644\u06cc\u062f\u06cc \u0641\u0627\u0626\u0644 \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2 \u0627\u0648\u0631 \u0622\u067e \u06a9\u06cc \u0646\u062c\u06cc \u06a9\u0644\u06cc\u062f \u06a9\u0648 Git \u0645\u06cc\u06ba \u0679\u0631\u06cc\u06a9 \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\">test -f cosign.key && echo \"private key present\"\ntest -f cosign.pub && echo \"public key present\"\ngrep -q \"BEGIN PUBLIC KEY\" cosign.pub && echo \"public key valid\"\ngit check-ignore cosign.key && echo \"private key correctly ignored\"\n<\/code><\/pre>\n<p><strong>\u0645\u062a\u0648\u0642\u0639:<\/strong> \u062a\u0645\u0627\u0645 \u0686\u0627\u0631 \u0644\u0627\u0626\u0646\u06cc\u06ba \u067e\u0631\u0646\u0679 \u06c1\u0648\u0646\u06cc \u0686\u0627\u06c1\u0626\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u06af\u0631 <code>git check-ignore cosign.key<\/code> \u06a9\u0686\u06be \u0628\u06be\u06cc \u067e\u0631\u0646\u0679 \u06a9\u06cc\u06d2 \u0628\u063a\u06cc\u0631 \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 <code>cosign.key<\/code> \u06a9\u0648 <code>.gitignore<\/code> \u06a9\u0686\u06be \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u06d4 \u0622\u067e \u06a9\u06cc \u0646\u062c\u06cc \u06a9\u0644\u06cc\u062f Git \u0633\u06d2 \u0628\u0627\u06c1\u0631 \u06c1\u0648\u0646\u06cc \u0686\u0627\u06c1\u06cc\u06d2\u06d4<\/p>\n<p>\u0627\u0633 \u0627\u0645\u062a\u062d\u0627\u0646 \u06a9\u0648 \u0646\u06c1 \u0686\u06be\u0648\u0691\u06cc\u06ba\u06d4 \u0645\u0631\u062d\u0644\u06c1 4 \u06a9\u06d2 \u0644\u06cc\u06d2 Kyverno \u0627\u0645\u06cc\u062c \u067e\u0631 \u062f\u0633\u062a\u062e\u0637 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u067e\u0627\u0644\u06cc\u0633\u06cc \u06a9\u06d2 \u0644\u06cc\u06d2 \u0639\u0648\u0627\u0645\u06cc \u06a9\u0644\u06cc\u062f \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2 \u0627\u0648\u0631 \u0646\u062c\u06cc \u06a9\u0644\u06cc\u062f \u06a9\u0648 \u0645\u0642\u0627\u0645\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0631\u06a9\u06be\u0627 \u062c\u0627\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4<\/p>\n<h3 id=\"heading-33-activate-the-full-security-pipeline\">3.3: \u067e\u0648\u0631\u06cc \u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06a9\u0648 \u0686\u0627\u0644\u0648 \u06a9\u0631\u06cc\u06ba\u06d4<\/h3>\n<p>\u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u06af\u06cc\u0679 \u067e\u06c1\u0644\u06d2 \u06c1\u06cc \u0627\u0646\u062f\u0631 \u06c1\u06d2\u06d4 <code>.github\/workflows\/ci.yaml<\/code>. \u067e\u0648\u0631\u06cc \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06a9\u0648 \u0645\u062a\u062d\u0631\u06a9 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u067e\u0646\u06cc \u062a\u0628\u062f\u06cc\u0644\u06cc\u0648\u06ba \u06a9\u0648 \u0622\u06af\u06d2 \u0628\u0691\u06be\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">git add . && git commit -m \"ci: full DevSecOps pipeline\" && git push origin main\n<\/code><\/pre>\n<h3 id=\"heading-34-break-each-gate-on-purpose\">3.4: \u062c\u0627\u0646 \u0628\u0648\u062c\u06be \u06a9\u0631 \u06c1\u0631 \u062f\u0631\u0648\u0627\u0632\u06d2 \u06a9\u0648 \u062a\u0648\u0691\u0646\u0627<\/h3>\n<p>\u06c1\u0631 \u06af\u06cc\u0679 \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u0622\u067e \u062c\u0627\u0646 \u0628\u0648\u062c\u06be \u06a9\u0631 \u06a9\u0633\u06cc \u0686\u06cc\u0632 \u06a9\u0648 \u062a\u0648\u0691\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06ba \u06af\u06d2\u060c \u067e\u0691\u06be\u06cc\u06ba \u06a9\u06c1 \u0679\u0648\u0644 \u0627\u0633\u06d2 \u06a9\u06cc\u0633\u06d2 \u0631\u067e\u0648\u0631\u0679 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0648\u0627\u067e\u0633 \u0644\u0648\u0679\u0646\u0627\u060c \u0627\u0648\u0631 \u067e\u06be\u0631 \u0633\u0628\u0632 \u0631\u0646\u06af \u06a9\u06cc \u062f\u0648\u0628\u0627\u0631\u06c1 \u062c\u0627\u0646\u0686 \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06ba \u06af\u06d2\u06d4 \u067e\u06c1\u0644\u06d2 \u0645\u0642\u0627\u0645\u06cc \u06a9\u0645\u0627\u0646\u0688 \u0622\u0632\u0645\u0627\u0626\u06cc\u06ba\u060c \u067e\u06be\u0631 \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u062f\u0628\u0627\u0626\u06cc\u06ba \u0627\u06af\u0631 \u0622\u067e GitHub \u0627\u06cc\u06a9\u0634\u0646\u0632 \u0645\u06cc\u06ba \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679 \u0686\u0627\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\"># 1. Break it   2. Run locally or push   3. Read the failure\n# 4. git checkout -- path\/to\/file   5. pre-commit run --all-files (optional)   6. git push\n<\/code><\/pre>\n<p>\u0633\u06d2 \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba\u06d4 <strong>\u06af\u06cc\u0679 1<\/strong> \u06a9\u0633\u06cc \u0628\u06be\u06cc \u0686\u06cc\u0632 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0622\u062e\u0631 \u062a\u06a9\u06d4<\/p>\n<h4 id=\"heading-gate-1-gitleaks-secrets\">\u06af\u06cc\u0679 1: \u06af\u0679\u0644\u06cc\u06a9\u0633 (\u062e\u0641\u06cc\u06c1)<\/h4>\n<p><strong>\u0627\u0646\u062c\u06a9\u0634\u0646:<\/strong> AWS \u06a9\u0644\u06cc\u062f Python \u0641\u0627\u0626\u0644 \u0645\u06cc\u06ba \u06c1\u0627\u0631\u0688 \u06a9\u0648\u0688 \u06a9\u06cc \u06af\u0626\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u0645\u0642\u0635\u062f \u06cc\u06c1 \u062b\u0627\u0628\u062a \u06a9\u0631\u0646\u0627 \u06c1\u06d2 \u06a9\u06c1 \u062e\u0641\u06cc\u06c1 \u0633\u06a9\u06cc\u0646\u0631 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06cc\u06c1 \u06a9\u0645\u0627\u0646\u0688 \u0627\u06cc\u06a9 \u062c\u0639\u0644\u06cc AWS \u06a9\u06cc \u0634\u06a9\u0644 \u0648\u0627\u0644\u06cc \u06a9\u0644\u06cc\u062f \u06a9\u0627 \u0627\u0636\u0627\u0641\u06c1 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 <code>app\/auth-service\/main.py<\/code>:<\/p>\n<pre><code class=\"language-bash\">echo 'AWS_KEY = \"'$(printf '%s%s' 'AKIA' 'IOSFODNN7EXAMPLE')'\"' >> app\/auth-service\/main.py\n\ngit add app\/auth-service\/main.py && git commit -m \"test: trigger gitleaks\"\n# pre-commit blocks this commit locally \u2014 that is the test.\n# For a CI screenshot only: git commit --no-verify -m \"test: trigger gitleaks\" && git push\n<\/code><\/pre>\n<p><strong>\u062a\u06a9\u0645\u06cc\u0644 \u0627\u0633 \u0637\u0631\u062d \u0646\u0638\u0631 \u0622\u062a\u06cc \u06c1\u06d2 (\u0679\u0631\u0645\u06cc\u0646\u0644: \u067e\u0631\u06cc \u06a9\u0645\u0679):<\/strong><\/p>\n<pre><code class=\"language-text\">&#x1f511; Secrets scan (Gitleaks)...............................................Failed\n- hook id: gitleaks\n- exit code: 1\n\nFinding:     AWS_KEY = \"REDACTED\"\nRuleID:      aws-access-token\nFile:        app\/auth-service\/main.py\nLine:        316\n<\/code><\/pre>\n<p><strong>\u0645\u062a\u0648\u0642\u0639:<\/strong> \u0639\u0632\u0645 \u06a9\u0648 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4 Gitleaks \u06a9\u0648 \u0627\u067e\u0646\u06cc \u0627\u06cc\u06a9 \u062e\u0641\u06cc\u06c1 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u06cc \u0627\u0637\u0644\u0627\u0639 \u062f\u06cc\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4 <code>app\/auth-service\/<\/code><code>main.py<\/code>.<\/p>\n<p>\u06cc\u06c1 \u0646\u0627\u06a9\u0627\u0645\u06cc \u0627\u0686\u06be\u06cc \u0686\u06cc\u0632 \u06c1\u06d2\u06d4 \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 \u0645\u0642\u0627\u0645\u06cc \u067e\u0631\u06cc \u06a9\u0645\u0679 \u06c1\u06a9 \u0646\u06d2 \u06af\u0679 \u062a\u06a9 \u067e\u06c1\u0646\u0686\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06c1\u06cc \u0627\u0633 \u0631\u0627\u0632 \u06a9\u0648 \u067e\u06a9\u0691 \u0644\u06cc\u0627\u06d4<\/p>\n<p><strong>\u0627\u0631\u062f \u06af\u0631\u062f \u06a9\u06cc\u0627 \u06c1\u0648\u062a\u0627 \u06c1\u06d2:<\/strong><\/p>\n<pre><code class=\"language-bash\">git restore --staged app\/auth-service\/main.py 2>\/dev\/null\ngit checkout app\/auth-service\/main.py\npre-commit run gitleaks --all-files   # \u2192 Passed\n<\/code><\/pre>\n<h4 id=\"heading-gate-2-semgrep-sast\">\u06af\u06cc\u0679 2: Semgrep (SAST)<\/h4>\n<p><strong>\u0645\u0642\u0627\u0645\u06cc \u062e\u0634\u06a9 \u0631\u0646<\/strong> (\u0630\u062e\u06cc\u0631\u06c1 \u0645\u06cc\u06ba \u06a9\u0648\u0626\u06cc \u062a\u0628\u062f\u06cc\u0644\u06cc \u0646\u06c1\u06cc\u06ba):<\/p>\n<pre><code class=\"language-bash\">python3 -m venv \/tmp\/sec-gates-venv && \/tmp\/sec-gates-venv\/bin\/pip install semgrep\ncat > \/tmp\/semgrep-bad.py << 'EOF'\nimport subprocess\nfrom fastapi import Request\ndef bad(request: Request):\n    subprocess.run(request.query_params.get(\"cmd\"), shell=True)\nEOF\n\/tmp\/sec-gates-venv\/bin\/semgrep \n  --config=p\/python --config=p\/security-audit --config=p\/owasp-top-ten --error \n  \/tmp\/semgrep-bad.py\n<\/code><\/pre>\n<p><strong>\u0628\u0631\u06cc\u06a9\u0646\u06af CI<\/strong>: Semgrep \u06a9\u0648 \u0627\u0633\u06a9\u06cc\u0646 \u06a9\u0631\u0646\u06d2\u060c \u06a9\u0645\u0679 \u06a9\u0631\u0646\u06d2 \u0627\u0648\u0631 \u0622\u06af\u06d2 \u0628\u0691\u06be\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0639\u0627\u0631\u0636\u06cc \u0641\u0627\u0626\u0644\u06cc\u06ba \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">cat > app\/auth-service\/gate_test_semgrep.py << 'EOF'\nimport subprocess\nfrom fastapi import Request\ndef bad(request: Request):\n    subprocess.run(request.query_params.get(\"cmd\"), shell=True)\nEOF\n\ngit add app\/auth-service\/gate_test_semgrep.py &#038;&#038; git commit -m \"test: trigger semgrep\" &#038;&#038; git push\n<\/code><\/pre>\n<p><strong>\u0645\u062a\u0648\u0642\u0639 \u0646\u062a\u0627\u0626\u062c:<\/strong> \u0633\u06cc\u0645\u06af\u0631\u06cc\u067e \u0631\u067e\u0648\u0631\u0679 <code>subprocess-shell-true<\/code> \u067e\u0633\u0646\u062f <code>Blocking<\/code>. \u06a9\u06c1 <code>SAST (Semgrep)<\/code> \u06a9\u0627\u0645 \u0633\u0631\u062e \u06c1\u0648 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0645\u06cc\u062c \u0628\u0646\u0627\u0646\u06d2 \u06a9\u0627 \u06a9\u0627\u0645 \u0646\u06c1\u06cc\u06ba \u0686\u0644\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u0627\u0631\u062f \u06af\u0631\u062f \u06a9\u06cc\u0627 \u06c1\u0648\u062a\u0627 \u06c1\u06d2:<\/strong><\/p>\n<pre><code class=\"language-bash\">rm -f app\/auth-service\/gate_test_semgrep.py\ngit add -A && git commit -m \"revert: semgrep gate test\" && git push\n<\/code><\/pre>\n<h4 id=\"heading-gate-3-checkov-iac-dockerfile\">\u06af\u06cc\u0679 3: \u0686\u06cc\u06a9\u0648\u0641 (IaC\/Dockerfile)<\/h4>\n<p>\u0686\u06cc\u06a9\u0648\u0641 \u063a\u06cc\u0631 \u0645\u062d\u0641\u0648\u0638 \u06a9\u0646\u0641\u06cc\u06af\u0631\u06cc\u0634\u0646\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2 Dockerfiles \u0627\u0648\u0631 Kubernetes \u0638\u0627\u06c1\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0633\u0628 \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u060c \u0645\u0642\u0627\u0645\u06cc \u0688\u06cc\u0645\u0648 \u0686\u0644\u0627\u0626\u06cc\u06ba. \u0627\u06af\u0631 \u0622\u067e \u0627\u06cc\u0633\u0627 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>HEALTHCHECK<\/code> \u0627\u06cc\u06a9 \u06a9\u0627\u067e\u06cc \u0634\u062f\u06c1 \u0688\u0627\u06a9\u0631 \u0641\u0627\u0626\u0644 \u062f\u06a9\u06be\u0627\u062a\u06cc \u06c1\u06d2 \u06a9\u06c1 \u0686\u06cc\u06a9\u0648\u0641 \u0627\u0633 \u06a9\u06cc \u0627\u0637\u0644\u0627\u0639 \u06a9\u06cc\u0633\u06d2 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\">python3 -m venv \/tmp\/sec-gates-venv && \/tmp\/sec-gates-venv\/bin\/pip install checkov\nsed '\/^HEALTHCHECK\/,+1d' app\/auth-service\/Dockerfile > \/tmp\/Dockerfile-nohc\nmkdir -p \/tmp\/checkov-demo\/app\/auth-service\ncp \/tmp\/Dockerfile-nohc \/tmp\/checkov-demo\/app\/auth-service\/Dockerfile\n\/tmp\/sec-gates-venv\/bin\/checkov --directory \/tmp\/checkov-demo --framework dockerfile\n<\/code><\/pre>\n<p>\u0627\u0628 \u06c1\u0645 CI \u0645\u06cc\u06ba \u0686\u06cc\u06a9\u0648\u0641 \u06a9\u06d2 \u0646\u062a\u0627\u0626\u062c \u06a9\u0648 \u0645\u062a\u062d\u0631\u06a9 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 SSH \u067e\u0648\u0631\u0679 \u06a9\u0648 \u0628\u06d2 \u0646\u0642\u0627\u0628 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>22<\/code> \u062a\u0648\u062b\u06cc\u0642 \u06a9\u06cc \u062e\u062f\u0645\u062a Dockerfile \u0645\u06cc\u06ba:<\/p>\n<pre><code class=\"language-bash\">echo 'EXPOSE 22' >> app\/auth-service\/Dockerfile\ngit add app\/auth-service\/Dockerfile && git commit -m \"test: trigger checkov\" && git push\n<\/code><\/pre>\n<p><strong>\u0645\u062a\u0648\u0642\u0639 \u0646\u062a\u0627\u0626\u062c:<\/strong> \u0622\u067e \u06a9\u0648 \u0686\u06cc\u06a9\u0648\u0641 \u0644\u0627\u06af\u0632 \u06cc\u0627 \u0646\u0645\u0648\u0646\u06d2 \u062f\u06cc\u06a9\u06be\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4 <code>CKV_DOCKER_1<\/code>\u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 \u0622\u067e \u06a9\u0627 SSH \u067e\u0648\u0631\u0679 \u0628\u06d2 \u0646\u0642\u0627\u0628 \u06c1\u06d2\u06d4<\/p>\n<p>\u06a9\u06c1 <code>IaC Scan (Checkov)<\/code> \u0686\u06cc\u06a9\u0648\u0641 \u06a9\u06cc \u0637\u0631\u0641 \u0633\u06d2 \u062a\u0641\u0648\u06cc\u0636 \u06a9\u0631\u062f\u06c1 \u0634\u062f\u062a \u067e\u0631 \u0645\u0646\u062d\u0635\u0631 \u06c1\u06d2\u060c \u06a9\u0627\u0645 \u0633\u0631\u062e \u06c1\u0648 \u0633\u06a9\u062a\u0627 \u06c1\u06d2 \u06cc\u0627 \u0646\u06c1\u06cc\u06ba\u06d4 \u0627\u0633 \u0645\u0634\u0642 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06cc\u06c1 \u0679\u06be\u06cc\u06a9 \u06c1\u06d2\u06d4 \u0645\u0642\u0635\u062f \u0686\u06cc\u06a9\u0648\u0641 \u06a9\u06d2 \u0646\u062a\u0627\u0626\u062c \u06a9\u0648 \u062a\u0644\u0627\u0634 \u06a9\u0631\u0646\u0627 \u0627\u0648\u0631 \u0633\u0645\u062c\u06be\u0646\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u06af\u0631 \u0622\u067e \u06a9\u0648 \u0646\u0627\u06a9\u0627\u0645 GitHub \u0627\u06cc\u06a9\u0634\u0646\u0632 \u06a9\u06d2 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679\u0633 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2 \u062a\u0648 \u06af\u06cc\u0679 1\u060c \u06af\u06cc\u0679 2\u060c \u06cc\u0627 \u06af\u06cc\u0679 4 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0622\u067e \u06a9\u06d2 \u0648\u0631\u06a9 \u0641\u0644\u0648 \u06a9\u0648 \u0633\u0631\u062e \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0688\u06cc\u0632\u0627\u0626\u0646 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4 \u0686\u06cc\u06a9\u0648\u0641 \u0633\u0628\u0632 \u0631\u06c1 \u0633\u06a9\u062a\u0627 \u06c1\u06d2 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u06cc\u06c1 \u0628\u0646\u06cc\u0627\u062f\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0646\u062a\u0627\u0626\u062c \u06a9\u0648 \u067e\u0691\u06be\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u0627\u0631\u062f \u06af\u0631\u062f \u06a9\u06cc\u0627 \u06c1\u0648\u062a\u0627 \u06c1\u06d2:<\/strong><\/p>\n<pre><code class=\"language-bash\">git checkout app\/auth-service\/Dockerfile\ngit commit -am \"revert: checkov gate test\" && git push\n<\/code><\/pre>\n<h4 id=\"heading-gate-4-trivy-image-cves\">\u06af\u06cc\u0679 4: \u0679\u0631\u06cc\u0648\u06cc (\u062a\u0635\u0648\u06cc\u0631 CVE)<\/h4>\n<p><strong>\u0645\u0642\u0627\u0645\u06cc \u062e\u0634\u06a9 \u0631\u0646<\/strong>: \u067e\u0686\u06be\u0644\u06cc \u0628\u0646\u06cc\u0627\u062f\u06cc \u062a\u0635\u0648\u06cc\u0631 \u06a9\u0648 \u0627\u0633\u06a9\u06cc\u0646 \u06a9\u0631\u06cc\u06ba (\u06a9\u0648\u0626\u06cc \u062a\u0639\u0645\u06cc\u0631 \u0646\u06c1\u06cc\u06ba):<\/p>\n<pre><code class=\"language-bash\">trivy image --exit-code 1 --severity CRITICAL,HIGH --ignore-unfixed python:3.8-slim\n<\/code><\/pre>\n<p><strong>\u0628\u0631\u06cc\u06a9\u0646\u06af CI<\/strong>: \u067e\u0631\u0627\u0646\u06d2 \u0628\u06cc\u0633 \u06a9\u0648 \u0688\u0627\u06a9\u0631 \u0641\u0627\u0626\u0644 \u0645\u06cc\u06ba \u067e\u0646 \u06a9\u0631\u06cc\u06ba\u060c \u062f\u0628\u0627\u0626\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u06cc\u06ba\u06d4 <code>Scan images<\/code>:<\/p>\n<pre><code class=\"language-bash\">sed -i.bak 's\/FROM python:3.13-slim\/FROM python:3.8-slim\/' app\/auth-service\/Dockerfile\ngit add app\/auth-service\/Dockerfile && git commit -m \"test: trigger trivy\" && git push\n<\/code><\/pre>\n<p><strong>\u067e\u0627\u0633:<\/strong> <code>Scan images<\/code> \u2192 <strong>\u0679\u0631\u06cc\u0648\u06cc \u062a\u0645\u0627\u0645 \u062a\u0635\u0627\u0648\u06cc\u0631 \u06a9\u0648 \u0627\u0633\u06a9\u06cc\u0646 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/strong> CVE \u0679\u06cc\u0628\u0644 \u06a9\u06d2 \u0633\u0627\u062a\u06be 1 \u0628\u0627\u06c1\u0631 \u0646\u06a9\u0644\u06cc\u06ba (<code>HIGH<\/code> \/ <code>CRITICAL<\/code>)\u06d4 <code>Publish images<\/code> \u0627\u0648\u0631 <code>Update Manifests<\/code> \u0686\u06be\u0648\u0691\u06cc\u06ba\u06d4<\/p>\n<p><strong>\u0627\u0631\u062f \u06af\u0631\u062f \u06a9\u06cc\u0627 \u06c1\u0648\u062a\u0627 \u06c1\u06d2:<\/strong><\/p>\n<pre><code class=\"language-bash\">git checkout app\/auth-service\/Dockerfile\ngit commit -am \"revert: trivy gate test\" && git push\n<\/code><\/pre>\n<h3 id=\"heading-35-when-a-scan-fails-on-a-cve-you-didnt-inject\">3.5: \u062c\u0628 \u063a\u06cc\u0631 \u0627\u0646\u062c\u06a9\u0634\u0646 \u0634\u062f\u06c1 CVEs \u06a9\u06cc \u062c\u0627\u0646\u0686 \u067e\u0691\u062a\u0627\u0644 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4<\/h3>\n<p>\u00a73.4 \u062c\u0627\u0646 \u0628\u0648\u062c\u06be \u06a9\u0631 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0633\u06cc\u06a9\u0634\u0646 \u0627\u06cc\u06a9 \u0627\u0648\u0631 \u06a9\u06cc\u0633 \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u06c1\u06d2 \u062c\u06c1\u0627\u06ba \u0622\u067e \u0646\u06d2 \u0639\u0627\u0645 \u06a9\u0648\u0688 \u06a9\u0648 \u0622\u06af\u06d2 \u0628\u0691\u06be\u0627\u06cc\u0627\u060c \u0644\u06cc\u06a9\u0646 \u0627\u06cc\u06a9 \u0646\u0626\u06cc \u06a9\u0645\u0632\u0648\u0631\u06cc \u062f\u0631\u06cc\u0627\u0641\u062a \u06c1\u0648\u0626\u06cc \u0627\u0648\u0631 \u0627\u0645\u06cc\u062c \u0627\u0633\u06a9\u06cc\u0646 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u06af\u06cc\u0627\u06d4<br \/>\u06cc\u06c1 \u0639\u0627\u0645 \u0628\u0627\u062a \u06c1\u06d2\u06d4 CVE \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06c1\u0645\u06cc\u0634\u06c1 \u0627\u067e \u0688\u06cc\u0679 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0633\u06a9\u06cc\u0646 \u06a9\u0648 \u06a9\u0645\u0632\u0648\u0631 \u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4 \u06a9\u0645\u0632\u0648\u0631 \u067e\u06cc\u06a9\u062c\u0648\u06ba \u06cc\u0627 \u062a\u0635\u0627\u0648\u06cc\u0631 \u06a9\u0648 \u062f\u0631\u0633\u062a \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u0633\u0628 \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u060c \u0627\u0635\u0644 CVE \u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba\u06d4 GitHub \u0627\u06cc\u06a9\u0634\u0646\u0632 \u0645\u06cc\u06ba\u060c \u06a9\u06be\u0648\u0644\u06cc\u06ba: <strong>\u062a\u0635\u0648\u06cc\u0631 \u0627\u0633\u06a9\u06cc\u0646<\/strong> \u067e\u06be\u0631 \u062c\u0627\u0624 <strong>\u0679\u0631\u06cc\u0648\u06cc \u062a\u0645\u0627\u0645 \u062a\u0635\u0627\u0648\u06cc\u0631 \u06a9\u0648 \u0627\u0633\u06a9\u06cc\u0646 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/strong> \u0627\u0633 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0679\u06cc\u0628\u0644 \u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba:<\/p>\n<p><strong>\u0627\u0633 \u0631\u06cc\u0688 \u06c1\u06cc\u0631\u0646\u06af \u06a9\u0648 \u0646\u0638\u0631 \u0627\u0646\u062f\u0627\u0632 \u06a9\u0631\u06cc\u06ba\u06d4<\/strong> \u0644\u0627\u06af \u06a9\u06d2 \u0646\u06cc\u0686\u06d2:<\/p>\n<pre><code class=\"language-text\">Version 0.71.2 of Trivy is now available\nError: Process completed with exit code 1.\n<\/code><\/pre>\n<p>\u0648\u0631\u0698\u0646 \u06a9\u06cc \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u06a9\u0627\u0645 \u06a9\u0648 \u0646\u0627\u06a9\u0627\u0645 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0627\u06cc\u06a9 \u0642\u0627\u0628\u0644 \u0627\u0635\u0644\u0627\u062d \u06c1\u0627\u0626\u06cc\/\u06a9\u0631\u06cc\u0679\u06cc\u06a9\u0644 CVE \u06c1\u06d2\u06d4 \u0634\u0627\u0645\u0644 \u0646\u06c1 \u06a9\u0631\u06cc\u06ba <code>--skip-version-check<\/code> \u0627\u0633\u06d2 \"\u0679\u06be\u06cc\u06a9\" \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2\u06d4<\/p>\n<p><strong>\u0627\u0633 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2\u060c \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba:<\/strong><\/p>\n<ul>\n<li>\n<p><strong>\u067e\u0627\u0626\u067e \u067e\u06cc\u06a9\u062c<\/strong>: \u0627\u06af\u0644\u06d2 \u0641\u06a9\u0633\u0688 \u0648\u0631\u0698\u0646 \u067e\u0631 \u062c\u0627\u0626\u06cc\u06ba\u06d4 <code>requirements.txt<\/code> (\u06c1\u0627\u06ba: <code>python-multipart==0.0.30<\/code> CVE-2026-53539 \u06a9\u06d2 \u0644\u06cc\u06d2)\u06d4 \u0628\u06c1\u0646 \u0628\u06be\u0627\u0626\u06cc\u0648\u06ba \u06a9\u06cc \u062e\u062f\u0645\u0627\u062a \u06a9\u0648 \u0648\u06c1\u06cc \u0679\u06a9\u0631\u0627\u0626\u06cc\u06ba \u0627\u06af\u0631 \u0648\u06c1 \u0627\u0633 \u067e\u0646 \u06a9\u0627 \u0627\u0634\u062a\u0631\u0627\u06a9 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>OS \u067e\u06cc\u06a9\u06cc\u062c<\/strong>: \u062a\u0627\u0632\u06c1 \u062a\u0631\u06cc\u0646 \u0628\u06cc\u0633 \u062a\u0635\u0648\u06cc\u0631 \u06cc\u0627 \u06c1\u062f\u0641 \u06a9\u06cc \u062a\u0635\u0648\u06cc\u0631 <code>apt<\/code>\/<code>apk<\/code> Dockerfile \u0633\u06d2 \u0627\u067e \u06af\u0631\u06cc\u0688 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0627\u0628\u06be\u06cc \u062a\u06a9 \u06a9\u0648\u0626\u06cc \u0645\u0633\u062a\u062d\u06a9\u0645 \u062d\u0644 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/strong> \u0635\u0631\u0641 \u0645\u0633\u062a\u062b\u0646\u06cc\u0627\u062a \u062f\u0633\u062a\u0627\u0648\u06cc\u0632\u06cc: CVE \u06a9\u0648 \u0627\u0633 \u0645\u06cc\u06ba \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba: <code>.trivyignore<\/code> \u0627\u0648\u0631 <code>.grype.yaml<\/code> \u062a\u0628\u0635\u0631\u0648\u06ba \u06a9\u06d2 \u0633\u0627\u062a\u06be (\u062f\u06cc\u06a9\u06be\u06cc\u06ba\u06d4 <code>CVE-2026-7210<\/code>)\u06d4<\/p>\n<\/li>\n<\/ul>\n<p>\u0646\u06c1 \u06c1\u0679\u0627\u0626\u06cc\u06ba <code>--exit-code 1<\/code>\u0634\u062f\u062a \u06a9\u06d2 \u0627\u0635\u0648\u0644 \u06a9\u0648 \u06a9\u0645 \u06a9\u0631\u06cc\u06ba \u06cc\u0627 \u0686\u06cc\u06a9 \u06a9\u0648 \u063a\u06cc\u0631 \u0641\u0639\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 \u0645\u062f\u062f \u06a9\u06d2 \u0644\u06cc\u06d2\u060c Trivy \u0648\u0631\u0698\u0646 \u06a9\u06cc \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0627\u0648\u0631 Trivy blocks Python \u0633\u0631\u0648\u0633 \u06a9\u06cc \u062a\u0635\u0627\u0648\u06cc\u0631 \u062f\u06cc\u06a9\u06be\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-finish-stage-3\">\u0645\u0631\u062d\u0644\u06c1 3 \u0645\u06a9\u0645\u0644 \u06c1\u0648\u0627\u06d4<\/h3>\n<p>\u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u0627\u06cc\u06a9 \u0648\u0627\u0636\u062d \u0646\u0627\u06a9\u0627\u0645 \u06af\u06cc\u0679 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u00a73.4 \u0645\u06cc\u06ba \u06c1\u0631 \u0679\u06cc\u0633\u0679 \u06a9\u06d2 \u0628\u0639\u062f\u060c \u0679\u06cc\u0633\u0679 \u06a9\u06cc \u062a\u0628\u062f\u06cc\u0644\u06cc \u06a9\u0648 \u06a9\u0627\u0644\u0639\u062f\u0645 \u06a9\u0631\u06cc\u06ba\u060c Revert \u062f\u0628\u0627\u0626\u06cc\u06ba\u060c \u0627\u0648\u0631 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u0648\u0631\u06a9 \u0641\u0644\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0633\u0628\u0632 \u06c1\u06d2\u06d4 \u0622\u067e \u06a9\u06d2 \u067e\u0648\u0631\u0679 \u0641\u0648\u0644\u06cc\u0648 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0633\u0631\u062e GitHub \u0627\u06cc\u06a9\u0634\u0646 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679 \u06a9\u0627\u0641\u06cc \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u0627\u06cc\u06a9 \u0645\u0631\u062d\u0644\u06c1 \u0686\u06cc\u06a9 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4<\/strong><\/p>\n<pre><code class=\"language-bash\">make check-3   # must end: All checks passed. Ready for the next stage.\n<\/code><\/pre>\n<p><strong>\u0645\u062a\u0648\u0642\u0639:<\/strong> <code>All checks passed. Ready for the next stage.<\/code><\/p>\n<p>\u0645\u0632\u06cc\u062f \u0628\u0631\u0622\u06ba\u060c \u00a73.4 \u0645\u06cc\u06ba \u06a9\u0645 \u0627\u0632 \u06a9\u0645 \u0627\u06cc\u06a9 \u06af\u06cc\u0679 \u06a9\u0648 \u0645\u062a\u062d\u0631\u06a9 \u06a9\u06cc\u0627 \u062c\u0627\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4 \u0645\u0642\u0627\u0645\u06cc Gitleaks \u06a9\u06cc \u0646\u0627\u06a9\u0627\u0645\u06cc\u0627\u06ba \u0627\u06c1\u0645 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p><code>ENABLE_DAST=true<\/code> \u0627\u062e\u062a\u06cc\u0627\u0631\u06cc \u0627\u0633 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0635\u0631\u0641 \u0627\u0633 \u0635\u0648\u0631\u062a \u0645\u06cc\u06ba \u06c1\u06d2 \u062c\u0628 \u0622\u067e \u0628\u0639\u062f \u0645\u06cc\u06ba ZAP \u0686\u0644\u0627\u0646\u0627 \u0686\u0627\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p><strong>\u0627\u0628\u06be\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2:<\/strong> \u0686\u06cc\u06a9\u0648\u0641 \u0628\u0644\u0627\u06a9\u0646\u06af \u06a9\u0628\u0631\u0646\u06cc\u0679\u0633 \u0645\u06cc\u0646\u06cc \u0641\u06cc\u0633\u0679 \u06cc\u0627 \u06a9\u0648\u0633\u0627\u0626\u0646 \u0628\u0644\u0627\u06a9\u0646\u06af \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc\u06d4 \u0645\u0631\u062d\u0644\u06c1 4 \u0627\u0633\u06d2 Kyverno \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u06a9\u0644\u0633\u0679\u0631 \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u0645\u06cc\u06ba \u0628\u062f\u0644 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u06af\u0644\u0627\u060c \u0627\u067e\u0646\u06cc \u062a\u0631\u0642\u06cc \u06a9\u0648 \u0645\u062d\u0641\u0648\u0638 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">make snapshot STAGE=3 && make snapshots\n<\/code><\/pre>\n<h2 id=\"heading-stage-4-admission-control-kyverno\">\u0645\u0631\u062d\u0644\u06c1 4 \u2014 \u062f\u0627\u062e\u0644\u06c1 \u06a9\u0646\u0679\u0631\u0648\u0644 (Kyverno)<\/h2>\n<p>\u06cc\u06c1\u0627\u06ba \u062a\u06a9 \u06a9\u06c1 \u0627\u06af\u0631 CI \u067e\u0627\u0633 \u06c1\u0648 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0628 \u0628\u06be\u06cc \u06a9\u0644\u0633\u0679\u0631 \u0627\u0633\u06d2 \u0645\u0633\u062a\u0631\u062f \u06a9\u0631 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>CI \u06a9\u0648\u0688 \u0627\u0648\u0631 \u0627\u0645\u06cc\u062c\u0632 \u06a9\u0648 GitOps \u062a\u06a9 \u067e\u06c1\u0646\u0686\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0627\u0633\u06a9\u06cc\u0646 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u06cc\u06c1 \u06a9\u0644\u0633\u0679\u0631 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u06c1\u0648\u0646\u06d2 \u0648\u0627\u0644\u06cc \u06c1\u0631 \u0686\u06cc\u0632 \u067e\u0631 \u0646\u0638\u0631 \u0646\u06c1\u06cc\u06ba \u0631\u06a9\u06be \u0633\u06a9\u062a\u0627\u06d4 \u06a9\u0648\u0626\u06cc \u0628\u06be\u06cc <code>kubectl<\/code> \u0631\u0633\u0627\u0626\u06cc \u0645\u06cc\u0646\u06cc \u0641\u06cc\u0633\u0679 \u06a9\u0648 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0644\u0627\u06af\u0648 \u06a9\u0631 \u0633\u06a9\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u06c1\u06cc\u0644\u0645 \u0686\u0627\u0631\u0679\u0633 \u062c\u0648 \u0622\u067e \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u0648\u06c1 \u067e\u0648\u0688 \u0628\u0646\u0627 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u0648 \u0633\u06cc\u06a9\u0648\u0631\u0679\u06cc \u06a9\u06d2 \u0645\u0639\u06cc\u0627\u0631\u0627\u062a \u06a9\u06cc \u062e\u0644\u0627\u0641 \u0648\u0631\u0632\u06cc \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0686\u0648\u0646\u06a9\u06c1 \u06cc\u06c1 \u0631\u0627\u0633\u062a\u06d2 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u062a\u06a9 \u0646\u06c1\u06cc\u06ba \u067e\u06c1\u0646\u0686\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u0633 \u0644\u06cc\u06d2 \u0645\u0631\u062d\u0644\u06c1 4 \u062f\u0627\u062e\u0644\u06c1 \u06a9\u0646\u0679\u0631\u0648\u0644 \u06a9\u0627 \u0627\u0636\u0627\u0641\u06c1 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u06cc\u06c1 \u0627\u06cc\u06a9 \u0686\u06cc\u06a9 \u067e\u0648\u0627\u0626\u0646\u0679 \u06c1\u06d2 \u062c\u0648 \u062e\u0648\u062f Kubernetes \u0645\u06cc\u06ba \u0628\u0646\u0627\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u062c\u0628 \u0628\u06be\u06cc \u06a9\u0648\u0626\u06cc \u0648\u0633\u06cc\u0644\u06c1 \u0628\u0646\u0627\u0646\u06d2 \u06cc\u0627 \u0627\u067e \u0688\u06cc\u0679 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u06a9\u0648\u0634\u0634 \u06a9\u06cc \u062c\u0627\u062a\u06cc \u06c1\u06d2\u060c \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0644\u0627\u06af\u0648 \u06c1\u0648\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0642\u0628\u0648\u0644\u06cc\u062a \u06a9\u06d2 \u0648\u06cc\u0628 \u06c1\u06a9 \u0633\u06d2 \u06af\u0632\u0631 \u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0648\u06cc\u0628 \u06c1\u06a9 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u0648 \u0645\u0633\u062a\u0631\u062f \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062a\u0648 \u06a9\u0648\u0626\u06cc \u0648\u0633\u06cc\u0644\u06c1 \u0646\u06c1\u06cc\u06ba \u0628\u0646\u0627\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u06a9\u06cc\u0628\u0631\u0646\u0648<\/strong> \u0627\u06cc\u06a9 Kubernetes \u067e\u0631 \u0645\u0628\u0646\u06cc \u067e\u0627\u0644\u06cc\u0633\u06cc \u0627\u0646\u062c\u0646 \u062c\u0648 \u0627\u0646 \u0648\u06cc\u0628 \u06c1\u06a9\u0633 \u06a9\u0648 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0622\u067e \u0627\u067e\u0646\u06cc \u067e\u0627\u0644\u06cc\u0633\u06cc \u06a9\u0648 YAML \u0641\u0627\u0626\u0644 \u0645\u06cc\u06ba \u0644\u06a9\u06be\u062a\u06d2 \u06c1\u06cc\u06ba (\u0627\u06cc\u067e\u0644\u06cc \u06a9\u06cc\u0634\u0646 \u06a9\u0648\u0688 \u0646\u06c1\u06cc\u06ba)\u060c \u0627\u0648\u0631 Kyverno \u067e\u0627\u0644\u06cc\u0633\u06cc \u06a9\u0648 \u0622\u067e \u06a9\u06d2 \u06a9\u0644\u0633\u0679\u0631 \u0645\u06cc\u06ba \u062a\u0645\u0627\u0645 \u0645\u0645\u0627\u062b\u0644 \u0648\u0633\u0627\u0626\u0644 \u067e\u0631 \u0644\u0627\u06af\u0648 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0645\u062b\u0627\u0644 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631\u060c \u062c\u0691 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0686\u0644\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u062a\u0645\u0627\u0645 \u067e\u0648\u0688\u0632 \u0633\u06d2 \u0627\u0646\u06a9\u0627\u0631 \u06a9\u0631\u06cc\u06ba \u06cc\u0627 \u062a\u0645\u0627\u0645 \u06a9\u0646\u0679\u06cc\u0646\u0631\u0632 \u067e\u0631 CPU \u0627\u0648\u0631 \u0645\u06cc\u0645\u0648\u0631\u06cc \u06a9\u06cc \u062d\u062f \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4<\/p>\n<p>CI \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0641\u0631\u0642 \u0648\u0642\u062a \u06a9\u0627 \u06c1\u06d2: CI \u0627\u0633\u06a9\u06cc\u0646 <em>\u067e\u06c1\u0644\u06d2<\/em> \u06a9\u0648\u0688 \u0628\u06be\u06cc\u062c \u062f\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2 \u0627\u0648\u0631 Kyverno <em>\u06a9\u0644\u0633\u0679\u0631 \u06af\u06cc\u0679<\/em>. \u0648\u06c1 \u0645\u0644 \u06a9\u0631 \u062f\u0641\u0627\u0639 \u06a9\u06cc \u062f\u0648 \u067e\u0631\u062a\u06cc\u06ba \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u0633 \u0642\u062f\u0645 \u06a9\u0627 \u0645\u0642\u0635\u062f Kyverno \u06a9\u0648 \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u0646\u0627 \u0627\u0648\u0631 \u067e\u0627\u0644\u06cc\u0633\u06cc\u0627\u06ba \u0644\u0627\u06af\u0648 \u06a9\u0631\u0646\u0627 \u06c1\u06d2\u06d4 <code>infra\/policies\/<\/code>\u0627\u0648\u0631 \u00a74.4 \u0645\u06cc\u06ba\u060c \u062b\u0627\u0628\u062a \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u06a9\u0646\u0679\u06cc\u0646\u0631 \u06a9\u06d2 \u0631\u0646 \u0679\u0627\u0626\u0645 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0686\u06cc\u06a9 \u06a9\u06cc\u06d2 \u062c\u0627\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u063a\u06cc\u0631 \u062a\u0639\u0645\u06cc\u0644 \u067e\u0648\u0688\u0632 \u06a9\u0648 \u0645\u0633\u062a\u0631\u062f \u06a9\u0631 \u062f\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0634\u0631\u0648\u0639 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u060c \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u0626\u06cc\u06ba \u06a9\u06c1 \u067e\u0686\u06be\u0644\u06d2 \u0645\u0631\u0627\u062d\u0644 \u06a9\u06cc \u0628\u0646\u06cc\u0627\u062f \u0627\u0628 \u0628\u06be\u06cc \u0645\u0636\u0628\u0648\u0637 \u06c1\u06d2\u06d4 <code>make check-3<\/code> \u067e\u0627\u0633 \u06c1\u0648\u0646\u0627 \u0636\u0631\u0648\u0631\u06cc \u06c1\u06d2 (\u067e\u0631\u06cc \u06a9\u0645\u0679 \u06c1\u06a9 \u0627\u0648\u0631 \u0633\u06cc \u0622\u0626\u06cc \u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u06af\u06cc\u0679 \u0641\u0639\u0627\u0644)\u06d4 <code>infra\/cosign.pub<\/code> \u06cc\u06c1 \u0645\u0631\u062d\u0644\u06c1 3 \u0633\u06d2 \u0645\u0648\u062c\u0648\u062f \u06c1\u0648\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2 \u0627\u0648\u0631 ArgoCD \u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631 \u0631\u06c1\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2 \u0644\u06c1\u0630\u0627 \u0627\u06cc\u067e \u06a9\u0648 \u062c\u0648\u0627\u0628 \u062f\u06cc\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2\u06d4 <code>http:\/\/clearledger.local<\/code>. \u0627\u06af\u0631 \u0627\u0646 \u0645\u06cc\u06ba \u0633\u06d2 \u06a9\u0648\u0626\u06cc \u0633\u0631\u062e \u06c1\u06d2 \u062a\u0648 \u067e\u06c1\u0644\u06d2 \u0627\u0633\u06d2 \u062f\u0631\u0633\u062a \u06a9\u0631\u06cc\u06ba\u06d4 Kyverno \u0627\u06cc\u06a9 \u0635\u062d\u062a \u0645\u0646\u062f \u062c\u06be\u0631\u0645\u0679 \u067e\u0631 \u0628\u06cc\u0679\u06be\u062a\u0627 \u06c1\u06d2\u060c \u0646\u06c1 \u06a9\u06c1 \u0679\u0648\u0679\u06d2 \u06c1\u0648\u0626\u06d2 \u062c\u06be\u0631\u0645\u0679 \u067e\u0631\u06d4<\/p>\n<p>\u00a74.4 \u0645\u06cc\u06ba \u0628\u0646\u062f \u06c1\u0648\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u062a\u06cc\u0646\u0648\u06ba \u0645\u0646\u0638\u0631\u0646\u0627\u0645\u0648\u06ba \u06a9\u0648 \u0645\u0633\u062a\u0631\u062f \u06a9\u0631 \u062f\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2 \u0627\u0648\u0631 <code>make check-4<\/code> \u06cc\u06c1 \u06af\u0632\u0631 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u0641\u06cc\u0632 3 \u0645\u06cc\u06ba \u062a\u0628\u062f\u06cc\u0644\u06cc \u0646\u0641\u0627\u0630 \u06c1\u06d2\u060c \u0645\u0639\u0627\u0626\u0646\u06c1 \u0646\u06c1\u06cc\u06ba\u06d4<\/strong> CI \u0645\u06cc\u06ba\u060c Checkov \u0646\u06d2 Kubernetes \u06a9\u0646\u0641\u06cc\u06af\u0631\u06cc\u0634\u0646 \u06a9\u06cc \u062e\u0631\u0627\u0628\u06cc \u06a9\u06cc \u0627\u0637\u0644\u0627\u0639 \u062f\u06cc \u0644\u06cc\u06a9\u0646 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06a9\u0648 \u0628\u0644\u0627\u06a9 \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u0627\u06d4 Kyverno \u0627\u0628 \u06a9\u0644\u0633\u0679\u0631 \u06af\u06cc\u0679 \u067e\u0631 \u0627\u0633\u06cc \u0642\u0633\u0645 \u06a9\u06d2 \u0645\u0633\u0626\u0644\u06d2 \u06a9\u0648 \u0631\u0648\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>Cosign \u0645\u0631\u062d\u0644\u06c1 1 \u0633\u06d2 \u0622\u067e \u06a9\u06cc \u062a\u0635\u0627\u0648\u06cc\u0631 \u067e\u0631 \u062f\u0633\u062a\u062e\u0637 \u06a9\u0631 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4 \u0627\u0628 Kyverno <em>\u0636\u0631\u0648\u0631\u062a<\/em> ClearLedger \u0627\u0645\u06cc\u062c \u06a9\u0648 \u062a\u0642\u0633\u06cc\u0645 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0627\u0633 \u067e\u0631 \u062f\u0633\u062a\u062e\u0637 \u06a9\u0631\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0648\u06c1 \u062c\u06af\u06c1 \u06c1\u06d2 \u062c\u06c1\u0627\u06ba \u0645\u0631\u062d\u0644\u06c1 1 \u062b\u0628\u0648\u062a \u06a9\u0648 \u067e\u06be\u0627\u0646\u0633\u06cc \u062f\u06cc \u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4 \u0641\u06cc\u0632 1 \u0645\u06cc\u06ba \u06a9\u06cc\u0627 \u0628\u0644\u0627\u06a9 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u062a\u06be\u0627 \u0627\u0648\u0631 \u0641\u06cc\u0632 4 \u0645\u06cc\u06ba \u06a9\u06cc\u0627 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u06cc\u0627 \u062c\u0627 \u0631\u06c1\u0627 \u062a\u06be\u0627 \u0627\u0633 \u06a9\u06d2 \u0645\u06a9\u0645\u0644 \u0646\u0642\u0634\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0648\u06c1 \u0633\u06cc\u06a9\u0634\u0646 \u062f\u06cc\u06a9\u06be\u06cc\u06ba\u06d4<\/p>\n<p>Kyverno \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u00a74.1 \u0633\u06d2 \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba\u06d4 \u062a\u0646\u0635\u06cc\u0628\u060c \u067e\u0627\u0644\u06cc\u0633\u06cc\u060c \u0628\u0646\u062f\u0634 \u06a9\u0627 \u0645\u0646\u0638\u0631\u060c \u06cc\u0627 <code>make check-4<\/code> \u0646\u0627\u06a9\u0627\u0645\u060c \u067e\u0691\u06be\u06cc\u06ba <code>troubleshooting.md<\/code> \u0627\u0648\u0631 <strong>\u0645\u0631\u062d\u0644\u06c1 4: \u062f\u0627\u062e\u0644\u06c1 \u06a9\u0646\u0679\u0631\u0648\u0644 (Kyverno)<\/strong> \u06c1\u06cc\u0644\u0645 \u06a9\u06cc \u0627\u0642\u062f\u0627\u0631 \u06cc\u0627 \u067e\u0627\u0644\u06cc\u0633\u06cc YAML \u06a9\u0648 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u06d4<\/p>\n<h3 id=\"heading-what-kyverno-enforces\">Kyverno \u06a9\u06cc\u0627 \u0644\u0627\u06af\u0648 \u06a9\u0631\u062a\u0627 \u06c1\u06d2<\/h3>\n<p>\u062a\u0645\u0627\u0645 \u067e\u0627\u0644\u06cc\u0633\u06cc \u0641\u0627\u0626\u0644\u06cc\u06ba \u06cc\u06c1\u0627\u06ba \u0645\u0648\u062c\u0648\u062f \u06c1\u06cc\u06ba: <code>infra\/policies\/<\/code>. Kyverno \u062e\u0648\u062f \u06c1\u06cc\u0644\u0645 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0627\u0646\u0633\u0679\u0627\u0644 \u06c1\u0648\u062a\u0627 \u06c1\u06d2: <code>stages\/stage-4-admission-control\/infra\/kyverno\/values.yaml<\/code>.<\/p>\n<table>\n<thead>\n<tr>\n<th>\u067e\u0627\u0644\u06cc\u0633\u06cc<\/th>\n<th>\u062c\u0633 \u067e\u0631 \u0639\u0645\u0644 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/th>\n<th>\u06a9\u0646\u06a9\u0627\u0644<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>disallow-root-containers<\/code><\/td>\n<td><code>runAsNonRoot: true<\/code><\/td>\n<td>CIS K8s 5.2.6<\/td>\n<\/tr>\n<tr>\n<td><code>require-resource-limits<\/code><\/td>\n<td>CPU\/\u0645\u06cc\u0645\u0648\u0631\u06cc \u06a9\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u06cc\u06ba \u0627\u0648\u0631 \u062d\u062f\u0648\u062f<\/td>\n<td>CIS K8s 5.2.4<\/td>\n<\/tr>\n<tr>\n<td><code>disallow-privilege-escalation<\/code><\/td>\n<td><code>allowPrivilegeEscalation: false<\/code><\/td>\n<td>CIS K8s 5.2.5<\/td>\n<\/tr>\n<tr>\n<td><code>drop-all-capabilities<\/code><\/td>\n<td><code>capabilities.drop: [ALL]<\/code><\/td>\n<td>CIS K8s 5.2.7<\/td>\n<\/tr>\n<tr>\n<td><code>require-signed-images<\/code><\/td>\n<td>ClearLedger \u0627\u0645\u06cc\u062c\u0632 \u067e\u0631 \u0645\u0634\u062a\u0631\u06a9\u06c1 \u062f\u0633\u062a\u062e\u0637 \u06a9\u0631\u0646\u0627<\/td>\n<td>SLSA \u0644\u06cc\u0648\u0644 2<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3 id=\"heading-platform-stability-from-stage-4-onward\">\u067e\u0644\u06cc\u0679 \u0641\u0627\u0631\u0645 \u06a9\u0627 \u0627\u0633\u062a\u062d\u06a9\u0627\u0645: \u0633\u0637\u062d 4 \u0633\u06d2<\/h3>\n<p>\u0645\u0631\u062d\u0644\u06c1 4 \u06a9\u06d2 \u0628\u0639\u062f \u0633\u06d2\u060c \u0622\u067e \u0627\u06cc\u06a9 \u06c1\u06cc \u0646\u0648\u0688 VM \u067e\u0631 \u0645\u0632\u06cc\u062f \u06a9\u0646\u0679\u0631\u0648\u0644\u0631\u0632 \u0686\u0644\u0627 \u0631\u06c1\u06d2 \u06c1\u0648\u06ba \u06af\u06d2\u06d4 Kyverno\u060c \u0627\u0633\u0679\u0648\u0631\u06cc\u062c \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u0627\u060c \u0627\u0648\u0631 \u0628\u0639\u062f \u0645\u06cc\u06ba Prometheus \u0627\u0648\u0631 Loki. \u067e\u06be\u0644\u06cc\u0627\u06ba \u0646\u0638\u0631 \u0622\u0633\u06a9\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 <code>Running<\/code> \u062d\u0642\u06cc\u0642\u062a \u0645\u06cc\u06ba\u060c \u06a9\u0631\u06cc\u0634 \u0644\u0648\u067e \u067e\u0633 \u0645\u0646\u0638\u0631 \u0645\u06cc\u06ba \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u067e\u0644\u06cc\u0679 \u0641\u0627\u0631\u0645 \u067e\u0648\u0688 (\u06a9\u06cc\u0648\u0631\u0646\u0648 \u06a9\u0646\u0679\u0631\u0648\u0644\u0631\u060c <code>hostpath-provisioner<\/code>\u067e\u0631\u0648\u0645\u06cc\u062a\u06be\u06cc\u0633 \u0622\u067e\u0631\u06cc\u0679\u0631\u0632 \u0648\u063a\u06cc\u0631\u06c1) \u0628\u06c1\u062a \u0632\u06cc\u0627\u062f\u06c1 \u062c\u0645\u0639 \u06c1\u06cc\u06ba\u06d4 <code>RESTARTS<\/code>API \u0633\u0631\u0648\u0631 \u06a9\u0627 \u0648\u0642\u062a \u062e\u062a\u0645 \u06c1\u0648\u0646\u0627 \u0634\u0631\u0648\u0639 \u06c1\u0648 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 <code>kubectl<\/code> \u06cc\u06c1 \u063a\u06cc\u0631 \u0645\u0633\u062a\u062d\u06a9\u0645 \u0645\u062d\u0633\u0648\u0633 \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0645\u06cc\u06ba \u063a\u0644\u0637 \u0627\u062c\u0632\u0627\u0621 \u06a9\u0648 \u0688\u06cc\u0628\u06af \u06a9\u0631\u0646\u06d2 \u0645\u06cc\u06ba \u062f\u0646 \u0636\u0627\u0626\u0639 \u06a9\u0631 \u0633\u06a9\u062a\u0627 \u06c1\u0648\u06ba \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u0627\u06cc\u067e \u067e\u0648\u0688 \u0679\u06be\u06cc\u06a9 \u0644\u06af \u0631\u06c1\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06cc\u06c1\u0627\u06ba \u0633\u06d2 \u062a\u0645\u0627\u0645 \u0627\u0642\u062f\u0627\u0645\u0627\u062a \u06a9\u06d2 \u0628\u0639\u062f\u060c \u06a9\u0644\u0633\u0679\u0631 \u06a9\u06d2 \u0645\u0633\u062a\u062d\u06a9\u0645 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062a\u0642\u0631\u06cc\u0628\u0627\u064b 10 \u0645\u0646\u0679 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u067e\u06be\u0631 \u0633\u0679\u06cc\u067e \u0627\u0633\u0679\u06cc\u0679\u0633 \u0686\u06cc\u06a9 \u06a9\u0648 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">bash scripts\/health-check.sh <stage>    # for example, 4, 7, 7.5\n# or the Makefile shortcut:\nmake check-4\n<\/stage><\/code><\/pre>\n<p>\u0627\u0633\u06a9\u0631\u067e\u0679 \u067e\u0644\u06cc\u0679 \u0641\u0627\u0631\u0645 \u06a9\u06d2 \u0627\u0633\u062a\u062d\u06a9\u0627\u0645 \u0648\u0627\u0644\u06d2 \u062d\u0635\u06d2 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062e\u062a\u0645 \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u062c\u0648 \u067e\u0648\u0688\u0632 \u06a9\u0648 \u0645\u0634\u06a9\u0648\u06a9 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0634\u0631\u0648\u0639 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u06af\u0646\u062a\u06cc \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062c\u06be\u0646\u0688\u0627 \u0644\u06af\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1\u0627\u06ba \u062a\u06a9 \u06a9\u06c1 \u0622\u067e \u0628\u062f\u062a\u0631\u06cc\u0646 \u0645\u062c\u0631\u0645\u0648\u06ba \u06a9\u0648 \u062e\u0648\u062f \u0628\u06be\u06cc \u0627\u0633\u06a9\u06cc\u0646 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u0633 \u0645\u06cc\u06ba 15 \u067e\u0648\u0688\u0632 \u06a9\u06cc \u0641\u06c1\u0631\u0633\u062a \u062f\u06cc \u06af\u0626\u06cc \u06c1\u06d2 \u062c\u0646 \u0645\u06cc\u06ba \u06a9\u0644\u0633\u0679\u0631 \u0645\u06cc\u06ba \u062f\u0648\u0628\u0627\u0631\u06c1 \u0634\u0631\u0648\u0639 \u06c1\u0648\u0646\u06d2 \u06a9\u06cc \u0633\u0628 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u062a\u0639\u062f\u0627\u062f \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0627\u0633 \u0648\u0642\u062a \u0645\u0641\u06cc\u062f \u06c1\u06d2 \u062c\u0628 \u0622\u067e \u06a9\u0648 \u0644\u06af\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0686\u06cc\u0632\u06cc\u06ba \u0633\u0633\u062a \u06c1\u06cc\u06ba\u060c \u0644\u06cc\u06a9\u0646 \u0622\u067e \u06a9\u0648 \u06cc\u0642\u06cc\u0646 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2 \u06a9\u06c1 \u06a9\u0648\u0646 \u0633\u06cc \u0646\u0627\u0645 \u06a9\u06cc \u062c\u06af\u06c1 \u062c\u062f\u0648\u062c\u06c1\u062f \u06a9\u0631 \u0631\u06c1\u06cc \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\">kubectl get pods -A --sort-by='.status.containerStatuses[0].restartCount' \n  -o custom-columns=\"NS:.metadata.namespace,NAME:.metadata.name,RESTARTS:.status.containerStatuses[0].restartCount\" \n  | tail -15\n<\/code><\/pre>\n<p><strong>\u06af\u06cc\u0679:<\/strong> \u0622\u067e \u06a9\u0648 Kyverno \u06a9\u0646\u0679\u0631\u0648\u0644\u0631 \u0627\u0648\u0631 \u062f\u06cc\u06af\u0631 \u067e\u0644\u06cc\u0679 \u0641\u0627\u0631\u0645 \u067e\u0648\u0688\u0632 \u062f\u06cc\u06a9\u06be\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4 <strong>5 \u0633\u06d2 \u06a9\u0645 \u0639\u0645\u0631 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba\u06d4<\/strong> \u0627\u0633\u0679\u06cc\u062c \u062e\u062a\u0645 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f\u06d4 \u0627\u06af\u0631 \u0622\u067e \u06a9\u06d2 \u067e\u0644\u06cc\u0679 \u0641\u0627\u0631\u0645 \u06a9\u06cc \u067e\u0648\u0688\u0632 10 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u062f\u0633\u062a\u0627\u0648\u06cc\u0632\u06cc \u06c1\u06cc\u0644\u0645 \u0648\u06cc\u0644\u06cc\u0648\u0632 \u06cc\u0627 \u0679\u0631\u0628\u0644 \u0634\u0648\u0679\u0646\u06af \u0688\u0627\u0679 \u0627\u06cc\u0645 \u0688\u06cc \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0627\u0646\u06c1\u06cc\u06ba \u0631\u0648\u06a9\u06cc\u06ba \u0627\u0648\u0631 \u0679\u06be\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u06d2 <code>kubectl patch<\/code> \u0627\u062f\u06be\u0631 \u0627\u062f\u06be\u0631 \u062f\u06cc\u06a9\u06be\u0648 \u0627\u0648\u0631 \u0622\u06af\u06d2 \u0628\u0691\u06be\u0648\u06d4 \u0627\u06cc\u06a9 \u0645\u0633\u062a\u062d\u06a9\u0645 \u067e\u0644\u06cc\u0679 \u0641\u0627\u0631\u0645 \u067e\u0631\u062a \u062a\u0645\u0627\u0645 \u0628\u0639\u062f \u06a9\u06d2 \u0645\u0631\u0627\u062d\u0644 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0634\u0631\u0637 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-41-install-kyverno\">4.1: Kyverno \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u0646\u0627<\/h3>\n<pre><code class=\"language-bash\">helm repo add kyverno https:\/\/kyverno.github.io\/kyverno\/\nhelm repo update\n\nhelm upgrade --install kyverno kyverno\/kyverno \n  --version 3.2.8 \n  --namespace kyverno \n  --create-namespace \n  -f stages\/stage-4-admission-control\/infra\/kyverno\/values.yaml \n  --wait --timeout=600s\n<\/code><\/pre>\n<p>\u0648\u06cc\u0644\u06cc\u0648\u0632 \u0641\u0627\u0626\u0644 \u06c1\u0645\u0627\u0631\u06cc \u0644\u06cc\u0628 \u0645\u06cc\u06ba \u062a\u06cc\u0646 \u0627\u06c1\u0645 \u06a9\u0627\u0645 \u0627\u0646\u062c\u0627\u0645 \u062f\u06cc\u062a\u06cc \u06c1\u06d2:<\/p>\n<ol>\n<li>\n<p><strong>CronJob \u06a9\u06cc \u0635\u0641\u0627\u0626\u06cc \u06a9\u0648 \u063a\u06cc\u0631 \u0641\u0639\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/strong>: \u067e\u0686\u06be\u0644\u06d2 Kyverno \u0686\u0627\u0631\u0679\u0633 \u062f\u0631\u0622\u0645\u062f \u06a9\u0631\u06cc\u06ba\u06d4 <code>bitnami\/kubectl<\/code>\u0627\u0633\u06d2 Docker Hub \u0633\u06d2 \u06c1\u0679\u0627 \u062f\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0633 \u06a9\u0627 \u0633\u0628\u0628 \u0628\u0646\u062a\u0627 \u06c1\u06d2\u06d4 <code>ImagePullBackOff<\/code> \u06a9\u0644\u06cc\u0646 \u0627\u067e \u067e\u0648\u0688 \u0645\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0648\u06c1 \u0646\u0642\u0637\u06c1 \u062c\u06c1\u0627\u06ba \u06c1\u06cc\u0644\u0645\u0679 \u062c\u0691\u062a\u0627 \u06c1\u06d2\u06d4<\/strong> <code>bitnamilegacy\/kubectl<\/code>\u062a\u0648 \u0645\u0633\u062a\u0642\u0628\u0644 <code>helm uninstall<\/code> \u06af\u0645\u0634\u062f\u06c1 \u062a\u0635\u0627\u0648\u06cc\u0631 \u067e\u0631 \u0645\u062a \u0644\u0679 \u062c\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0633\u0631\u06af\u0631\u0645\u06cc \u06a9\u06cc \u062a\u062d\u0642\u06cc\u0642\u0627\u062a \u06a9\u0627 \u0648\u0642\u062a \u062e\u062a\u0645 \u06a9\u0631\u06cc\u06ba\u06d4<\/strong>: \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0637\u06d2 \u0634\u062f\u06c1 <code>timeoutSeconds: 5, failureThreshold: 2<\/code> \u06cc\u06c1 \u0628\u06be\u0631\u06cc \u06c1\u0648\u0626\u06cc \u0633\u0646\u06af\u0644 \u0646\u0648\u0688 VM \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0627\u0641\u06cc \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 CPU \u062f\u0628\u0627\u0624 \u06a9\u06d2 \u062a\u062d\u062a\u060c \u06c1\u06cc\u0644\u062a\u06be \u0627\u06cc\u0646\u0688 \u067e\u0648\u0627\u0626\u0646\u0679 \u06a9\u0648 \u062c\u0648\u0627\u0628 \u062f\u06cc\u0646\u06d2 \u0645\u06cc\u06ba 5 \u0633\u06cc\u06a9\u0646\u0688 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u06a9\u0627 \u0648\u0642\u062a \u0644\u06af \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u060c \u062c\u0648 \u0645\u0633\u0644\u0633\u0644 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0634\u0631\u0648\u0639 \u06c1\u0648\u0646\u06d2 \u06a9\u0648 \u0645\u062a\u062d\u0631\u06a9 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0648 \u0646\u0648\u0688 \u06a9\u0648 \u0633\u06cc\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 API \u0633\u0631\u0648\u0631 \u06a9\u0648 \u0648\u0642\u0641\u06d2 \u0648\u0642\u0641\u06d2 \u0633\u06d2 \u0646\u0627\u0642\u0627\u0628\u0644 \u0631\u0633\u0627\u0626\u06cc \u0628\u0646\u0627 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4 \u0648\u06cc\u0644\u06cc\u0648 \u0641\u0627\u0626\u0644 \u0633\u06cc\u0679 <code>timeoutSeconds: 30, failureThreshold: 5<\/code> \u0644\u06c1\u0630\u0627\u060c Kyverno \u0628\u0627\u0631 \u0628\u0627\u0631 \u06c1\u0648\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u06a9\u0631\u06cc\u0634\u0648\u06ba \u06a9\u06d2 \u0628\u063a\u06cc\u0631 \u0644\u0648\u0688 \u0627\u0633\u067e\u0627\u0626\u06a9\u0633 \u06a9\u0648 \u0628\u0631\u062f\u0627\u0634\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<\/ol>\n<p><strong>\u0622\u067e \u06a9\u0648 \u06a9\u06cc\u0627 \u062f\u06cc\u06a9\u06be\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2:<\/strong><\/p>\n<pre><code class=\"language-yaml\">Release \"kyverno\" does not exist. Installing it now.\nNAME: kyverno\nNAMESPACE: kyverno\nSTATUS: deployed\n...\nKyverno version: v1.12.6\n<\/code><\/pre>\n<p>\u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u0626\u06cc\u06ba \u06a9\u06c1 \u0686\u0627\u0631\u0648\u06ba \u06a9\u0646\u0679\u0631\u0648\u0644\u0631\u0632 \u0686\u0644 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba (\u0627\u06af\u0631 \u0622\u067e \u06a9\u0627 \u06a9\u0646\u06a9\u0634\u0646 \u0633\u0633\u062a \u06c1\u06d2 \u062a\u0648 \u067e\u06c1\u0644\u06cc \u067e\u0648\u0644\u0646\u06af \u0645\u06cc\u06ba \u06a9\u0626\u06cc \u0645\u0646\u0679 \u0644\u06af \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba)\u06d4<\/p>\n<pre><code class=\"language-markdown\">kubectl get pods -n kyverno\n<\/code><\/pre>\n<pre><code class=\"language-plaintext\">NAME                                             READY   STATUS    RESTARTS   AGE\nkyverno-admission-controller-bd685cd4b-f6kl6     1\/1     Running   0          2m\nkyverno-background-controller-66fcfc6d87-59wgt   1\/1     Running   0          2m\nkyverno-cleanup-controller-5c5bf8bc6b-7kspq      1\/1     Running   0          2m\nkyverno-reports-controller-5cdd6f4c48-qf5wc      1\/1     Running   0          2m\n<\/code><\/pre>\n<p>\u0627\u06af\u0631 \u067e\u06be\u0644\u06cc \u0648\u06c1\u06cc \u0631\u06c1\u062a\u06cc \u06c1\u06d2\u06d4 <code>ContainerCreating<\/code> \u0627\u06cc\u06a9 \u0637\u0648\u06cc\u0644 \u0639\u0631\u0635\u06d2 \u0633\u06d2 \u0646\u0648\u0688 \u0627\u0628 \u0628\u06be\u06cc \u062a\u0635\u0627\u0648\u06cc\u0631 \u062d\u0627\u0635\u0644 \u06a9\u0631 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4 <code>ghcr.io\/kyverno<\/code>. \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u0648 \u06c1\u06cc\u0644\u0645 \u06a9\u06cc \u062c\u0632\u0648\u06cc \u062a\u0646\u0635\u06cc\u0628 \u06a9\u06d2 \u0627\u0648\u067e\u0631 \u062f\u0648\u0633\u0631\u06cc \u06c1\u06cc\u0644\u0645 \u06a9\u06cc \u062a\u0646\u0635\u06cc\u0628 \u0634\u0631\u0648\u0639 \u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-stability-gate-kyverno-install-only-before-42\">\u0627\u0633\u062a\u062d\u06a9\u0627\u0645 \u06af\u06cc\u0679: \u0635\u0631\u0641 Kyverno \u062a\u0646\u0635\u06cc\u0628\u0627\u062a \u06a9\u06d2 \u0644\u06cc\u06d2 (\u00a74.2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2):<\/h4>\n<p>\u062c\u0627\u0631\u06cc \u0631\u06a9\u06be\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u0626\u06cc\u06ba \u06a9\u06c1 \u0622\u067e \u06a9\u0627 \u06a9\u06cc\u0648\u0631\u0646\u0648 \u067e\u0648\u0688 \u0635\u062d\u062a \u0645\u0646\u062f \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\">kubectl get pods -n kyverno\n<\/code><\/pre>\n<p><strong>\u0645\u062a\u0648\u0642\u0639:<\/strong> Kyverno \u06a9\u0646\u0679\u0631\u0648\u0644\u0631 \u0641\u0648\u0631\u0688 \u0634\u0648 <code>1\/1 Running<\/code>\u06a9\u0645 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0634\u0631\u0648\u0639: <code>0<\/code>, <code>1<\/code>\u06cc\u0627 <code>2<\/code>\u062f\u0648\u0628\u0627\u0631\u06c1 \u0634\u0631\u0648\u0639 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u062a\u0639\u062f\u0627\u062f \u0645\u06cc\u06ba \u0627\u0636\u0627\u0641\u06c1 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0645\u062a \u0628\u06be\u0627\u06af\u0648 <code>make check-4<\/code> \u0627\u0628\u06be\u06cc \u062a\u06a9 \u06cc\u06c1 \u0686\u06cc\u06a9 \u0627\u0646 \u067e\u0627\u0644\u06cc\u0633\u06cc\u0648\u06ba \u06a9\u06cc \u0628\u06be\u06cc \u062a\u0644\u0627\u0634 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0648 \u0628\u0639\u062f \u0645\u06cc\u06ba \u00a74.3 \u0645\u06cc\u06ba \u0644\u0627\u06af\u0648 \u06c1\u0648\u062a\u06cc \u06c1\u06cc\u06ba\u060c \u0627\u0633 \u0644\u06cc\u06d2 \u06cc\u06c1 \u0627\u0633 \u0645\u0642\u0627\u0645 \u067e\u0631 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648 \u0633\u06a9\u062a\u06cc \u06c1\u06d2 \u0686\u0627\u06c1\u06d2 Kyverno \u06a9\u0648 \u0635\u062d\u06cc\u062d \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u0648\u06d4<\/p>\n<h3 id=\"heading-42-confirm-your-cosign-public-key-is-in-the-policy\">4.2: \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 Cosign \u067e\u0628\u0644\u06a9 \u06a9\u0644\u06cc\u062f \u067e\u0627\u0644\u06cc\u0633\u06cc \u0645\u06cc\u06ba \u06c1\u06d2\u06d4<\/h3>\n<p>\u0645\u0631\u062d\u0644\u06c1 3 \u0628\u0646\u0627\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4 <code>infra\/cosign.pub<\/code>. Kyverno Pod \u0628\u0646\u0646\u06d2 \u067e\u0631 \u062a\u0635\u0648\u06cc\u0631 \u06a9\u06d2 \u062f\u0633\u062a\u062e\u0637 \u06a9\u06cc \u062a\u0635\u062f\u06cc\u0642 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0648\u06c1\u06cc \u06a9\u0644\u06cc\u062f \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u067e\u0627\u0644\u06cc\u0633\u06cc \u0641\u0627\u0626\u0644 \u067e\u0644\u06cc\u0633 \u06c1\u0648\u0644\u0688\u0631\u0632 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0622\u062a\u06cc \u06c1\u06d2\u06d4 \u0622\u067e \u06a9\u0648 \u00a74.3 \u0645\u06cc\u06ba \u067e\u0627\u0644\u06cc\u0633\u06cc \u0644\u0627\u06af\u0648 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0627\u0633\u06d2 \u06a9\u0644\u06cc\u062f \u0633\u06d2 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u0646\u0627 \u06c1\u0648\u06af\u0627\u06d4<\/p>\n<h4 id=\"heading-step-1-show-your-key-run-from-the-repo-root-on-the-vm\">\u0645\u0631\u062d\u0644\u06c1 1: \u06a9\u0644\u06cc\u062f \u062f\u06a9\u06be\u0627\u0626\u06cc\u06ba (VM \u06a9\u06d2 \u0627\u0633\u0679\u0648\u0631\u06cc\u062c \u0631\u0648\u0679 \u0633\u06d2 \u0686\u0644\u0627\u0626\u06cc\u06ba)<\/h4>\n<pre><code class=\"language-bash\">cd ~\/clearledger    # or wherever you cloned the repo\ncat infra\/cosign.pub\n<\/code><\/pre>\n<p>\u0622\u067e \u06a9\u0648 \u062f\u0631\u062c \u0630\u06cc\u0644 \u062a\u06cc\u0646 \u0644\u0627\u0626\u0646\u06cc\u06ba \u0646\u0638\u0631 \u0622\u0626\u06cc\u06ba \u06af\u06cc\u06d4 <code>-----BEGIN PUBLIC KEY-----<\/code>\u0644\u0645\u0628\u06cc \u0628\u06cc\u0633 64 \u0644\u0627\u0626\u0646 \u0627\u0648\u0631 <code>-----END PUBLIC KEY-----<\/code>. \u067e\u0648\u0631\u06d2 \u0628\u0644\u0627\u06a9 \u06a9\u0648 \u06a9\u0627\u067e\u06cc \u06a9\u0631\u06cc\u06ba (\u0622\u067e \u0627\u0633\u06d2 \u0627\u06af\u0644\u06d2 \u0645\u0631\u062d\u0644\u06d2 \u0645\u06cc\u06ba \u067e\u06cc\u0633\u0679 \u06a9\u0631\u06cc\u06ba \u06af\u06d2)\u06d4<\/p>\n<h4 id=\"heading-step-2-paste-the-key-into-the-policy\">\u0645\u0631\u062d\u0644\u06c1 2: \u06a9\u0644\u06cc\u062f \u06a9\u0648 \u067e\u0627\u0644\u06cc\u0633\u06cc \u0645\u06cc\u06ba \u0686\u0633\u067e\u0627\u06ba \u06a9\u0631\u06cc\u06ba\u06d4<\/h4>\n<p>\u06a9\u06be\u0644\u0627 <code>infra\/policies\/require-signed-images.yaml<\/code> \u0627\u06cc\u0688\u06cc\u0679\u0631 \u0645\u06cc\u06ba (<code>nano<\/code>, <code>vim<\/code>\u06cc\u0627 VS \u06a9\u0648\u0688)\u06d4<\/p>\n<p>\u062f\u0631\u062c \u0630\u06cc\u0644 \u0644\u0627\u0626\u0646 \u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba:<\/p>\n<pre><code class=\"language-yaml\">                      PASTE_YOUR_COSIGN_PUBLIC_KEY_HERE\n<\/code><\/pre>\n<p>\u062d\u0630\u0641 \u06a9\u0631\u06cc\u06ba <strong>\u0635\u0631\u0641<\/strong> \u0648\u06c1 \u067e\u0644\u06cc\u0633 \u06c1\u0648\u0644\u0688\u0631 \u0644\u0627\u0626\u0646 \u062f\u0631\u062c \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0627\u06af\u0644\u06cc \u062a\u06cc\u0646 \u0644\u0627\u0626\u0646\u06cc\u06ba \u0686\u0633\u067e\u0627\u06ba \u06a9\u0631\u06cc\u06ba\u06d4 <code>cosign.pub<\/code> \u0645\u0648\u0642\u0639 \u067e\u0631\u06d4 \u0646\u062a\u06cc\u062c\u06c1 \u0627\u0633 \u0637\u0631\u062d \u0646\u0638\u0631 \u0622\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2 (\u0628\u06cc\u0633 64 \u0644\u0627\u0626\u0646\u06cc\u06ba \u0645\u062e\u062a\u0644\u0641 \u06c1\u0648\u0633\u06a9\u062a\u06cc \u06c1\u06cc\u06ba):<\/p>\n<pre><code class=\"language-yaml\">                - keys:\n                    publicKeys: |-\n                      -----BEGIN PUBLIC KEY-----\n                     JFkwEwYHKoZIzj0CAQYIKoFIzj0DAQcDQgZEI...\n                      -----END PUBLIC KEY-----\n<\/code><\/pre>\n<p>\u0641\u0627\u0626\u0644 \u06a9\u0648 \u0645\u062d\u0641\u0648\u0638 \u06a9\u0631\u06cc\u06ba\u06d4 \u0686\u0633\u067e\u0627\u06ba \u06a9\u0644\u06cc\u062f \u06a9\u0648 \u0646\u06cc\u0686\u06d2 \u062d\u0627\u0634\u06cc\u06c1 \u0645\u06cc\u06ba \u0631\u06a9\u06be\u06cc\u06ba\u06d4 <code>publicKeys: |-<\/code>. \u06a9\u06c1 <code>BEGIN PUBLIC KEY<\/code> \u0627\u0648\u0631 <code>END PUBLIC KEY<\/code> \u0628\u06cc\u0633 64 \u0644\u0627\u0626\u0646\u0648\u06ba \u06a9\u06cc \u0637\u0631\u062d \u0644\u0627\u0626\u0646\u0648\u06ba \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0627\u06cc\u06a9 \u062c\u06af\u06c1 \u06c1\u0648\u0646\u06cc \u0686\u0627\u06c1\u06cc\u06d2\u06d4<\/p>\n<h4 id=\"heading-step-3-verify-three-quick-checks\">\u0645\u0631\u062d\u0644\u06c1 3: \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba (3 \u0641\u0648\u0631\u06cc \u0686\u06cc\u06a9)<\/h4>\n<p>\u0631\u06cc\u067e\u0648\u0632\u0679\u0631\u06cc \u0631\u0648\u0679 \u0633\u06d2 \u0627\u06cc\u06a9 \u0648\u0642\u062a \u0645\u06cc\u06ba \u0627\u0646 \u06a9\u0648 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\"># Check A \u2014 placeholder must be gone\ngrep PASTE_YOUR_COSIGN_PUBLIC_KEY_HERE infra\/policies\/require-signed-images.yaml \n  && echo \"&#x274c; FAIL: placeholder still in file \u2014 edit and save again\" \n  || echo \"\u2713 OK: placeholder removed\"\n<\/code><\/pre>\n<pre><code class=\"language-bash\"># Check B \u2014 key block must be present exactly once\ngrep -c \"BEGIN PUBLIC KEY\" infra\/policies\/require-signed-images.yaml\n<\/code><\/pre>\n<p>\u0686\u06cc\u06a9 B \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u062a\u0648\u0642\u0639 \u0622\u0624\u0679 \u067e\u0679: <code>1<\/code> (\u0627\u06af\u0631 \u0622\u067e \u062f\u06cc\u06a9\u06be\u06cc\u06ba <code>0<\/code>\u0686\u0627\u0628\u06cc \u0686\u0633\u067e\u0627\u06ba \u0646\u06c1\u06cc\u06ba \u06a9\u06cc \u06af\u0626\u06cc\u06d4 \u0627\u06af\u0631 <code>2<\/code>\u062f\u0648 \u0628\u0627\u0631 \u0686\u0633\u067e\u0627\u06ba \u06a9\u06cc\u0627 \u06af\u06cc\u0627)\u06d4<\/p>\n<pre><code class=\"language-bash\"># Check C \u2014 policy key must match cosign.pub byte-for-byte\ndiff infra\/cosign.pub \n  <(sed -n '\/-----BEGIN PUBLIC KEY-----\/,\/-----END PUBLIC KEY-----\/p' \n      infra\/policies\/require-signed-images.yaml | sed 's\/^[[:space:]]*\/\/')\n<\/code><\/pre>\n<p>\u0686\u06cc\u06a9 \u0633\u06cc \u06a9\u06cc \u0645\u062a\u0648\u0642\u0639 \u067e\u06cc\u062f\u0627\u0648\u0627\u0631: <strong>\u06a9\u0686\u06be \u0646\u06c1\u06cc\u06ba<\/strong>. \u06a9\u0648\u0626\u06cc \u0641\u0631\u0642 \u0646\u06c1\u06cc\u06ba \u0644\u0627\u0626\u0646\u0648\u06ba \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 \u0686\u0627\u0628\u06cc\u0627\u06ba \u0645\u0645\u0627\u062b\u0644 \u06c1\u06cc\u06ba\u06d4 \u0627\u06af\u0631 <code>diff<\/code> \u0627\u062e\u062a\u0644\u0627\u0641\u0627\u062a \u06a9\u0648 \u067e\u0631\u0646\u0679 \u06a9\u0631\u06cc\u06ba\u060c \u067e\u0627\u0644\u06cc\u0633\u06cc \u0641\u0627\u0626\u0644 \u06a9\u06be\u0648\u0644\u06cc\u06ba \u0627\u0648\u0631 \u067e\u06cc\u0633\u0679 \u0645\u06cc\u06ba \u062a\u0631\u0645\u06cc\u0645 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u06af\u0631 \u0622\u067e \u062a\u06cc\u0646\u0648\u06ba \u067e\u0627\u0633 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0648 \u00a74.3 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062c\u0627\u0631\u06cc \u0631\u06a9\u06be\u06cc\u06ba\u06d4<\/p>\n<p><strong>\u0627\u06af\u0631 \u0622\u067e \u0627\u0633\u06d2 \u0686\u06be\u0648\u0691 \u062f\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/strong>\u00a74.4 \u0645\u06cc\u06ba \u0645\u0646\u0638\u0631 \u0646\u0627\u0645\u06c1 3 \u0627\u06cc\u06a9 \u0627\u0644\u062c\u06be\u06d2 \u06c1\u0648\u0626\u06d2 \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0686\u0648\u0646\u06a9\u06c1 Kyverno \u063a\u0644\u0637 \u06a9\u0644\u06cc\u062f \u06a9\u06cc \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631 \u0631\u06c1\u0627 \u06c1\u06d2\u060c \u063a\u06cc\u0631 \u062f\u0633\u062a\u062e\u0637 \u0634\u062f\u06c1 \u062a\u0635\u0627\u0648\u06cc\u0631 \u0628\u0686 \u0633\u06a9\u062a\u06cc \u06c1\u06cc\u06ba \u06cc\u0627 \u062f\u0633\u062a\u062e\u0637 \u0634\u062f\u06c1 \u067e\u0648\u0688\u0632 \u06a9\u0648 \u0645\u0633\u062a\u0631\u062f \u06a9\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-43-apply-the-five-core-policies\">4.3: \u067e\u0627\u0646\u0686 \u0628\u0646\u06cc\u0627\u062f\u06cc \u067e\u0627\u0644\u06cc\u0633\u06cc\u0648\u06ba \u06a9\u0648 \u0644\u0627\u06af\u0648 \u06a9\u0631\u0646\u0627<\/h3>\n<p>\u0627\u0628 \u06c1\u0645 \u067e\u0627\u0646\u0686 \u067e\u0627\u0644\u06cc\u0633\u06cc\u0627\u06ba \u0644\u0627\u06af\u0648 \u06a9\u0631\u06cc\u06ba \u06af\u06d2 \u062c\u0648 CIS \u06a9\u0646\u0679\u0631\u0648\u0644\u0632 \u06a9\u0648 \u0646\u0642\u0634\u06c1 \u0628\u0646\u0627\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 \u0644\u0627\u06af\u0648 \u0646\u06c1 \u06a9\u0631\u06cc\u06ba <code>verify-slsa-provenance.yaml<\/code> \u0627\u0628\u06be\u06cc \u062a\u06a9 \u0645\u0633\u062a\u0642\u0628\u0644 \u0645\u06cc\u06ba \u0627\u0636\u0627\u0641\u06c1 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u062e\u062a\u06cc\u0627\u0631\u06cc SLSA \u062a\u0635\u062f\u06cc\u0642\u06cc \u067e\u0627\u0644\u06cc\u0633\u06cc (\u0622\u0688\u0679 \u0645\u0648\u0688)\u06d4<\/p>\n<p>\u0645\u0631\u062d\u0644\u06c1 4 \u062f\u0631\u062e\u0648\u0627\u0633\u062a <code>infra\/policies\/require-signed-images.yaml<\/code>. \u06cc\u06c1 \u067e\u0627\u0644\u06cc\u0633\u06cc <code>failurePolicy: Fail<\/code>\u0644\u06c1\u0630\u0627\u060c \u0627\u06af\u0631 Kyverno \u062a\u0635\u0648\u06cc\u0631 \u06a9\u06d2 \u062f\u0633\u062a\u062e\u0637 \u06a9\u06cc \u062a\u0635\u062f\u06cc\u0642 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u0633\u06a9\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u067e\u0648\u0688 \u06a9\u0648 \u0627\u062c\u0627\u0632\u062a \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0628\u0644\u0627\u06a9 \u06a9\u0631\u062f\u06cc\u0627 \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4 \u0627\u06cc \u0633\u06cc \u0622\u0631 \u067e\u0627\u0644\u06cc\u0633\u06cc \u0645\u0646\u062f\u0631\u062c\u06c1 \u0630\u06cc\u0644 \u06c1\u06d2: <code>failurePolicy: Ignore<\/code> \u06cc\u06c1 \u0645\u0631\u062d\u0644\u06c1 8 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06c1\u06d2\u060c \u06cc\u06c1 \u0642\u062f\u0645 \u0646\u06c1\u06cc\u06ba\u06d4<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/07\/1785194532_299_Homelab-\u0633\u06d2-AWS-\u062a\u06a9-\u067e\u0631\u0648\u0688\u06a9\u0634\u0646-\u06a9\u06d2-\u0644\u06cc\u06d2-\u062a\u06cc\u0627\u0631-DevSecOps-\u067e\u0644\u06cc\u0679.png\" alt=\"\u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679 \u06a9\u06cc \u062a\u0635\u0648\u06cc\u0631 \u062c\u0633 \u0645\u06cc\u06ba \u0627\u0646\u0641\u0631\u0627\u0633\u0679\u0631\u06a9\u0686\u0631 \u067e\u0627\u0644\u06cc\u0633\u06cc Yaml \u0641\u0627\u0626\u0644 \u06a9\u06cc \u0646\u0627\u06a9\u0627\u0645\u06cc \u06a9\u06cc \u067e\u0627\u0644\u06cc\u0633\u06cc \u062f\u06a9\u06be\u0627\u0626\u06cc \u062f\u06d2 \u0631\u06c1\u06cc \u06c1\u06d2\u06d4 \" style=\"display:block;margin:0 auto\" width=\"721\" height=\"193\" loading=\"lazy\" title=\"\"><\/p>\n<pre><code class=\"language-bash\">kubectl apply \n  -f infra\/policies\/disallow-root.yaml \n  -f infra\/policies\/disallow-privilege-escalation.yaml \n  -f infra\/policies\/drop-all-capabilities.yaml \n  -f infra\/policies\/require-resource-limits.yaml \n  -f infra\/policies\/require-signed-images.yaml\n<\/code><\/pre>\n<p>\u0686\u0646\u062f \u0633\u06cc\u06a9\u0646\u0688 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u0622\u06cc\u0627 \u062a\u0645\u0627\u0645 \u067e\u0627\u0644\u06cc\u0633\u06cc\u0627\u06ba \u0638\u0627\u06c1\u0631 \u06c1\u0648\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 <code>READY: True<\/code> \u0627\u0648\u0631 <code>VALIDATE ACTION: Enforce<\/code>:<\/p>\n<pre><code class=\"language-bash\">kubectl get clusterpolicy\n<\/code><\/pre>\n<pre><code class=\"language-plaintext\">NAME                            ADMISSION   BACKGROUND   VALIDATE ACTION   READY   AGE\ndisallow-privilege-escalation   true        true         Enforce           True    10s\ndisallow-root-containers        true        true         Enforce           True    10s\ndrop-all-capabilities           true        true         Enforce           True    10s\nrequire-resource-limits         true        true         Enforce           True    10s\nrequire-signed-images           true        false        Enforce           True    10s\n<\/code><\/pre>\n<p>\u0627\u06af\u0631 <code>READY<\/code> \u06cc\u06c1 \u062e\u0627\u0644\u06cc \u06c1\u06d2\u06d4 Kyverno \u0644\u0627\u06af\u0632 \u06a9\u0648 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 <code>kubectl logs -n kyverno -l app.kubernetes.io\/component=admission-controller --tail=50<\/code>.<\/p>\n<h3 id=\"heading-44-breaking-it-on-purpose\">4.4: \u062c\u0627\u0646 \u0628\u0648\u062c\u06be \u06a9\u0631 \u062a\u0648\u0691\u0646\u0627<\/h3>\n<p>\u0627\u0628 \u0622\u0626\u06cc\u06d2 \u0627\u06cc\u06a9 \u063a\u0644\u0637 Pod \u0628\u0646\u0627 \u06a9\u0631 \u067e\u0627\u0644\u06cc\u0633\u06cc \u06a9\u06cc \u062c\u0627\u0646\u0686 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u0633 \u067e\u0648\u0688 \u06a9\u06d2 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u0646\u06d2 \u06a9\u06cc \u0627\u0645\u06cc\u062f \u06c1\u06d2\u06d4 \u06cc\u06c1\u06cc \u0628\u0627\u062a \u06c1\u06d2\u06d4<\/p>\n<p>\u0686\u06cc\u06a9\u0648\u0641 \u062c\u06cc\u0633\u06d2 CI \u0679\u0648\u0644\u0632 \u0622\u067e \u06a9\u0648 \u0627\u067e\u0646\u06cc \u0631\u067e\u0648\u0631\u0679\u0633 \u0645\u06cc\u06ba \u062e\u0628\u0631\u062f\u0627\u0631 \u06a9\u0631\u06cc\u06ba \u06af\u06d2\u06d4 Kyverno \u0645\u0632\u06cc\u062f \u0622\u06af\u06d2 \u0628\u0691\u06be\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u063a\u06cc\u0631 \u0645\u062d\u0641\u0648\u0638 \u067e\u06be\u0644\u06cc\u0648\u06ba \u06a9\u0648 \u0631\u0648\u06a9\u062a\u0627 \u06c1\u06d2 \u0627\u0633 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06a9\u06c1 Kubernetes \u0627\u0646 \u067e\u0631 \u0639\u0645\u0644 \u062f\u0631\u0622\u0645\u062f \u06a9\u0631 \u0633\u06a9\u06d2\u06d4<\/p>\n<p>\u06c1\u0631 \u0679\u06cc\u0633\u0679 \u06a9\u06d2 \u0644\u06cc\u06d2 \u063a\u0644\u0637\u06cc \u06a9\u06d2 \u067e\u06cc\u063a\u0627\u0645\u0627\u062a \u067e\u0691\u06be\u06cc\u06ba\u06d4 \u0627\u0633 \u06a9\u06cc \u0648\u062c\u06c1 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u06cc\u06c1 \u0622\u067e \u06a9\u0648 \u0628\u062a\u0627\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u06a9\u0633 \u067e\u0627\u0644\u06cc\u0633\u06cc \u0646\u06d2 \u067e\u0648\u0688 \u06a9\u0648 \u0628\u0644\u0627\u06a9 \u06a9\u06cc\u0627 \u0627\u0648\u0631 \u06a9\u0648\u0646 \u0633\u06d2 \u0641\u06cc\u0644\u0688\u0632 \u063a\u0644\u0637 \u062a\u06be\u06d2\u06d4 \u06cc\u06c1 \u063a\u0644\u0637\u06cc \u06a9\u0627 \u067e\u06cc\u063a\u0627\u0645 \u0627\u0633 \u0628\u0627\u062a \u06a9\u0627 \u062b\u0628\u0648\u062a \u06c1\u06d2 \u06a9\u06c1 \u062f\u0627\u062e\u0644\u06c1 \u06a9\u0646\u0679\u0631\u0648\u0644 \u06a9\u0627\u0645 \u06a9\u0631 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4<\/p>\n<table>\n<thead>\n<tr>\n<th>\u0633\u06a9\u0631\u067e\u0679<\/th>\n<th>\u06a9\u06cc\u0627 \u0646\u0642\u0644\u06cc \u06c1\u06d2<\/th>\n<th>\u067e\u0627\u0644\u06cc\u0633\u06cc \u06a9\u06cc \u062c\u0627\u0646\u0686 \u06a9\u06cc \u062c\u0627 \u0631\u06c1\u06cc \u06c1\u06d2\u06d4<\/th>\n<th>\u06a9\u0627\u0645\u06cc\u0627\u0628\u06cc \u06cc\u06c1 \u06c1\u06d2:<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>1<\/td>\n<td>\u062d\u0645\u0644\u06c1 \u0622\u0648\u0631 \u0646\u0646\u06af\u06cc \u067e\u06be\u0644\u06cc \u0644\u06af\u0627\u062a\u0627 \u06c1\u06d2 (\u06a9\u0648\u0626\u06cc \u0633\u062e\u062a\u06cc \u0646\u06c1\u06cc\u06ba)\u06d4<\/td>\n<td>\u062c\u0691\u060c \u0628\u0691\u06d2\u060c \u0627\u062c\u0627\u0632\u062a\u060c \u067e\u0627\u0628\u0646\u062f\u06cc\u0627\u06ba<\/td>\n<td>4 \u067e\u0627\u0644\u06cc\u0633\u06cc \u0641\u0627\u0626\u0631\u060c \u0641\u0648\u0631\u0688 <code>NotFound<\/code><\/td>\n<\/tr>\n<tr>\n<td>2<\/td>\n<td>\u0688\u0648\u06cc\u0644\u067e\u0631 \u0646\u06d2 securityContext \u0645\u06cc\u06ba \u062a\u0631\u0645\u06cc\u0645 \u06a9\u06cc \u0644\u06cc\u06a9\u0646 \u067e\u0627\u0628\u0646\u062f\u06cc\u0648\u06ba \u06a9\u0648 \u0628\u06be\u0648\u0644 \u06af\u06cc\u0627\u06d4<\/td>\n<td>\u0635\u0631\u0641 \u0648\u0633\u0627\u0626\u0644 \u06a9\u06cc \u062d\u062f\u0648\u062f<\/td>\n<td>1 \u067e\u0627\u0644\u06cc\u0633\u06cc \u0686\u0644 \u0631\u06c1\u06cc \u06c1\u06d2\u060c \u067e\u0648\u0688 <code>NotFound<\/code><\/td>\n<\/tr>\n<tr>\n<td>3<\/td>\n<td>\u0627\u06cc\u06a9 \u062d\u0645\u0644\u06c1 \u0622\u0648\u0631 \u0627\u06cc\u06a9 \u063a\u06cc\u0631 \u062f\u0633\u062a\u062e\u0637 \u0634\u062f\u06c1 \u062a\u0635\u0648\u06cc\u0631 \u06a9\u0648 Docker Hub \u06a9\u06cc \u0637\u0631\u0641 \u062f\u06be\u06a9\u06cc\u0644\u062a\u0627 \u06c1\u06d2\u06d4<\/td>\n<td>\u0634\u0631\u06cc\u06a9 \u062f\u0633\u062a\u062e\u0637<\/td>\n<td><code>require-signed-images<\/code> \u0645\u0633\u062a\u0631\u062f\u060c \u0641\u0648\u0631\u0688 <code>NotFound<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h4 id=\"heading-scenario-1-root-container-no-securitycontext\">\u0645\u0646\u0638\u0631 \u0646\u0627\u0645\u06c1 1: \u0631\u0648\u0679 \u06a9\u0646\u0679\u06cc\u0646\u0631 (\u06a9\u0648\u0626\u06cc \u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u0633\u06cc\u0627\u0642 \u0648 \u0633\u0628\u0627\u0642 \u0646\u06c1\u06cc\u06ba)<\/h4>\n<p><strong>\u06a9\u06cc\u0627 \u0646\u0642\u0644 \u06a9\u06cc\u0627 \u062c\u0627 \u0631\u06c1\u0627 \u06c1\u06d2:<\/strong> \u06a9\u0648\u0626\u06cc \u0628\u06be\u06cc <code>kubectl<\/code> \u0631\u0633\u0627\u0626\u06cc CI \u06a9\u0648 \u0646\u0638\u0631\u0627\u0646\u062f\u0627\u0632 \u06a9\u0631\u062a\u06cc \u06c1\u06d2 \u0627\u0648\u0631 \u06a9\u0645 \u0633\u06d2 \u06a9\u0645 \u067e\u0648\u0688\u0632 \u06a9\u0648 \u0646\u0627\u0641\u0630 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 \u0646\u06c1\u06cc\u06ba <code>securityContext<\/code>\u0648\u0633\u0627\u0626\u0644 \u06a9\u06cc \u06a9\u0648\u0626\u06cc \u062d\u062f \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<p>\u06cc\u06c1 \u0628\u0627\u0644\u06a9\u0644 \u0648\u06c1\u06cc \u06c1\u06d2 \u062c\u0633\u06d2 \u0645\u0631\u062d\u0644\u06c1 1 \u0686\u06cc\u06a9\u0648\u0641 \u0646\u06d2 \u0628\u0637\u0648\u0631 \u062b\u0628\u0648\u062a \u0646\u0634\u0627\u0646 \u0632\u062f \u06a9\u06cc\u0627 \u06c1\u06d2\u06d4 \u0627\u0628 \u0645\u0631\u062d\u0644\u06c1 4 \u0627\u0633\u06d2 \u0631\u0648\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u0627\u0633 \u0645\u0646\u0634\u0648\u0631 \u0645\u06cc\u06ba \u06a9\u06cc\u0627 \u062d\u0631\u062c \u06c1\u06d2\u061f<\/strong> \u0627\u06cc\u06a9 \u06a9\u0646\u0679\u06cc\u0646\u0631 \u0645\u06cc\u06ba \u0635\u0631\u0641 \u0627\u06cc\u06a9 \u0646\u0627\u0645 \u0627\u0648\u0631 \u0627\u06cc\u06a9 \u062a\u0635\u0648\u06cc\u0631 \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0645\u0642\u0627\u0645\u06cc \u0637\u0648\u0631 \u067e\u0631 \u062c\u0691 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0686\u0644\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0645\u0627\u0645 \u0644\u06cc\u0646\u06a9\u0633 \u06a9\u06cc \u0641\u0639\u0627\u0644\u06cc\u062a \u06a9\u0648 \u0628\u0631\u0642\u0631\u0627\u0631 \u0631\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0627\u0633 \u06a9\u06cc \u06a9\u0648\u0626\u06cc CPU\/\u0645\u06cc\u0645\u0648\u0631\u06cc \u06a9\u06cc \u062d\u062f\u0648\u062f \u0646\u06c1\u06cc\u06ba \u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">cat <<eof kubectl=\"\" apply=\"\" apiversion:=\"\" v1=\"\" kind:=\"\" pod=\"\" metadata:=\"\" name:=\"\" root-test=\"\" namespace:=\"\" clearledger=\"\" spec:=\"\" containers:=\"\" test=\"\" image:=\"\" nginx:alpine=\"\" eof=\"\"\/><\/code><\/pre>\n<p><strong>\u0622\u067e \u06a9\u0648 \u06a9\u06cc\u0627 \u062f\u06cc\u06a9\u06be\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2:<\/strong><\/p>\n<pre><code class=\"language-yaml\">Error from server: error when creating \"STDIN\": admission webhook \"validate.kyverno.svc-fail\" denied the request:\n\nresource Pod\/clearledger\/root-test was blocked due to the following policies\n\ndisallow-privilege-escalation:\n  check-allowPrivilegeEscalation: 'validation error: allowPrivilegeEscalation must\n    be set to false. rule check-allowPrivilegeEscalation failed at path \/spec\/containers\/0\/securityContext\/'\ndisallow-root-containers:\n  check-runAsNonRoot: |-\n    validation error: Root containers are blocked in the clearledger namespace. Set securityContext.runAsNonRoot: true on the pod or container.\n    . rule check-runAsNonRoot failed at path \/spec\/containers\/0\/securityContext\/\ndrop-all-capabilities:\n  check-capabilities: 'validation error: All containers must drop ALL capabilities.\n    rule check-capabilities failed at path \/spec\/containers\/0\/securityContext\/'\nrequire-resource-limits:\n  check-resources: 'validation error: Resource requests and limits are required for\n    all containers. rule check-resources failed at path \/spec\/containers\/0\/resources\/limits\/'\n<\/code><\/pre>\n<p><strong>\u0627\u0633 \u0622\u0624\u0679 \u067e\u0679 \u06a9\u0648 \u06a9\u06cc\u0633\u06d2 \u067e\u0691\u06be\u06cc\u06ba:<\/strong><\/p>\n<p>\u0627\u06c1\u0645 \u0644\u0627\u0626\u0646\u06cc\u06ba \u06c1\u06cc\u06ba:<\/p>\n<pre><code class=\"language-text\">resource Pod\/clearledger\/root-test was blocked due to the following policies\n<\/code><\/pre>\n<p>\u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u06a9\u06cc\u0648\u0631\u0646\u0648 \u0646\u06d2 \u067e\u0648\u0688 \u06a9\u0648 \u0628\u0646\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06c1\u06cc \u0631\u0648\u06a9 \u062f\u06cc\u0627\u06d4<\/p>\n<p>\u0627\u0633 \u0644\u0627\u0626\u0646 \u06a9\u06d2 \u0646\u06cc\u0686\u06d2\u060c Kyverno \u0627\u0646 \u062a\u0645\u0627\u0645 \u067e\u0627\u0644\u06cc\u0633\u06cc\u0648\u06ba \u06a9\u06cc \u0641\u06c1\u0631\u0633\u062a \u062f\u06cc\u062a\u0627 \u06c1\u06d2 \u062c\u0646 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u067e\u0648\u0688 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u0627\u06d4 \u0645\u062b\u0627\u0644 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631:<\/p>\n<pre><code class=\"language-text\">disallow-root-containers:\n  check-runAsNonRoot:\n<\/code><\/pre>\n<p>\u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 \u067e\u0648\u0688 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4 <code>disallow-root-containers<\/code> \u067e\u0627\u0644\u06cc\u0633\u06cc\u060c \u062e\u0627\u0635 \u0637\u0648\u0631 \u067e\u0631 <code>check-runAsNonRoot<\/code> \u062d\u06a9\u0645\u0631\u0627\u0646\u06cc \u062a\u0628\u062f\u06cc\u0644\u06cc\u0627\u06ba \u0628\u06be\u06cc \u067e\u06cc\u063a\u0627\u0645 \u0645\u06cc\u06ba \u0646\u0638\u0631 \u0622\u0626\u06cc\u06ba \u06af\u06cc\u06d4<\/p>\n<pre><code class=\"language-text\">Set securityContext.runAsNonRoot: true\n<\/code><\/pre>\n<p>\u06cc\u06c1\u06cc \u0637\u0631\u0632 \u062f\u06cc\u06af\u0631 \u067e\u0627\u0644\u06cc\u0633\u06cc\u0648\u06ba \u067e\u0631 \u0628\u06be\u06cc \u0644\u0627\u06af\u0648 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<ul>\n<li>\n<p><code>disallow-privilege-escalation<\/code> \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 \u067e\u0648\u0688 \u0633\u06cc\u0679 \u0627\u067e \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 <code>allowPrivilegeEscalation: false<\/code><\/p>\n<\/li>\n<li>\n<p><code>drop-all-capabilities<\/code> \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 \u067e\u0648\u0688\u0632 \u0646\u06d2 \u0644\u06cc\u0646\u06a9\u0633 \u06a9\u06cc \u062f\u0631\u062c \u0630\u06cc\u0644 \u062e\u0635\u0648\u0635\u06cc\u0627\u062a \u06a9\u0648 \u0646\u06c1\u06cc\u06ba \u0686\u06be\u0648\u0691\u0627 \u06c1\u06d2\u06d4 <code>capabilities.drop: [ALL]<\/code><\/p>\n<\/li>\n<li>\n<p><code>require-resource-limits<\/code> \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 \u067e\u0648\u0688 \u0646\u06d2 \u06a9\u0648\u0626\u06cc \u0633\u06cc \u067e\u06cc \u06cc\u0648 \u0627\u0648\u0631 \u0645\u06cc\u0645\u0648\u0631\u06cc \u06a9\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u06cc\u06ba\/\u062d\u062f\u06cc\u06ba \u0645\u062a\u0639\u06cc\u0646 \u0646\u06c1\u06cc\u06ba \u06a9\u06cc \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ul>\n<p>\u06a9\u06c1 <code>path<\/code> \u062d\u0635\u06c1 Kubernetes \u06a9\u0648 \u0628\u062a\u0627\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0627\u0633\u06d2 \u06a9\u06c1\u0627\u06ba \u06af\u0645 \u0634\u062f\u06c1 \u062a\u0631\u062a\u06cc\u0628\u0627\u062a \u06a9\u06cc \u062a\u0648\u0642\u0639 \u062a\u06be\u06cc\u06d4 \u0645\u062b\u0627\u0644 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631\u060c <code>\/spec\/containers\/0\/securityContext\/<\/code> \u0645\u0637\u0644\u0628: \u067e\u06be\u0644\u06cc \u06a9\u06cc \u0642\u06cc\u0627\u0633 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u062f\u06cc\u06a9\u06be\u0648\u060c \u067e\u06be\u0631 \u067e\u06c1\u0644\u06d2 \u06a9\u0646\u0679\u06cc\u0646\u0631\u060c \u067e\u06be\u0631 <code>securityContext<\/code>.<\/p>\n<p>\u0627\u0648\u0631 <code>\/spec\/containers\/0\/resources\/limits\/<\/code> \u0645\u0637\u0644\u0628: \u067e\u06c1\u0644\u06d2 \u06a9\u0646\u0679\u06cc\u0646\u0631 \u06a9\u06d2 \u0648\u0633\u0627\u0626\u0644 \u06a9\u06cc \u062d\u062f\u0648\u062f \u06a9\u0648 \u062f\u06cc\u06a9\u06be\u06cc\u06ba\u06d4<\/p>\n<p>\u062a\u0648 \u06cc\u06c1 \u0627\u06cc\u06a9 \u0628\u0631\u0627 \u067e\u0648\u0688 \u0627\u06cc\u06a9 \u06c1\u06cc \u0648\u0642\u062a \u0645\u06cc\u06ba \u0686\u0627\u0631 \u06a9\u0646\u0679\u0631\u0648\u0644\u0648\u06ba \u0645\u06cc\u06ba \u0646\u0627\u06a9\u0627\u0645 \u0631\u06c1\u0627\u06d4 \u06cc\u06c1 \u0633\u0628\u0642 \u06c1\u06d2\u06d4 Kyverno \u0635\u0631\u0641 \"\u0646\u06c1\u06cc\u06ba\" \u0646\u06c1\u06cc\u06ba \u06a9\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0622\u067e \u06a9\u0648 \u0628\u062a\u0627\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u06a9\u0648\u0646 \u0633\u06cc \u067e\u0627\u0644\u06cc\u0633\u06cc \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u0626\u06cc \u0627\u0648\u0631 YAML \u06a9\u0648 \u06a9\u06c1\u0627\u06ba \u0679\u06be\u06cc\u06a9 \u06a9\u0631\u0646\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u0627\u0633 \u0628\u0627\u062a \u06a9\u0648 \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u0626\u06cc\u06ba \u06a9\u06c1 \u0639\u0645\u0644 \u062f\u0631\u0622\u0645\u062f \u0645\u0646\u0627\u0633\u0628 \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4<\/strong><\/p>\n<pre><code class=\"language-bash\">kubectl get pod root-test -n clearledger\n# Error from server (NotFound): pods \"root-test\" not found\n<\/code><\/pre>\n<p>\u062c\u0628 \u0622\u067e \u0627\u06cc\u06a9 \u067e\u06be\u0644\u06cc \u062f\u06cc\u06a9\u06be\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>Running<\/code> \u06cc\u0627 <code>Pending<\/code>\u067e\u0627\u0644\u06cc\u0633\u06cc \u067e\u0631 \u0639\u0645\u0644 \u062f\u0631\u0622\u0645\u062f \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u0627\u06d4 \u0628\u0631\u0627\u06c1 \u06a9\u0631\u0645 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 <code>kubectl get clusterpolicy<\/code> \u067e\u0627\u0646\u0686\u0648\u06ba \u06a9\u0648 \u062f\u06a9\u06be\u0627\u0626\u06cc\u06ba\u06d4 <code>READY: True<\/code>.<\/p>\n<p><strong>\u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679 \u0644\u06cc\u06ba\u06d4<\/strong> \u06cc\u06c1 CIS Kubernetes \u0628\u06cc\u0646\u0686 \u0645\u0627\u0631\u06a9 5.2.6 \u06a9\u06d2 \u062e\u0644\u0627\u0641 \u067e\u0648\u0631\u0679 \u0641\u0648\u0644\u06cc\u0648 \u062b\u0628\u0648\u062a \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0635\u0631\u0641 \u062a\u0639\u0645\u06cc\u0631 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u060c \u06cc\u06c1 \u0639\u0645\u0644 \u062f\u0631\u0622\u0645\u062f \u06c1\u06d2.<\/p>\n<h4 id=\"heading-scenario-2-missing-resource-limits\">\u0645\u0646\u0638\u0631 \u0646\u0627\u0645\u06c1 2: \u0648\u0633\u0627\u0626\u0644 \u06a9\u06cc \u062d\u062f\u06cc\u06ba \u063a\u0627\u0626\u0628 \u06c1\u06cc\u06ba\u06d4<\/h4>\n<p><strong>\u06a9\u06cc\u0627 \u0646\u0642\u0644 \u06a9\u06cc\u0627 \u062c\u0627 \u0631\u06c1\u0627 \u06c1\u06d2:<\/strong> \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0688\u0648\u06cc\u0644\u067e\u0631 \u06c1\u0648\u06ba \u062c\u0633 \u0646\u06d2 securityContext \u06a9\u06cc \u0636\u0631\u0648\u0631\u06cc\u0627\u062a \u06a9\u0648 \u067e\u0691\u06be\u0627 \u0627\u0648\u0631 \u0631\u0648\u0679\/\u06a9\u06cc\u067e\u0679\u0644\u0627\u0626\u0632\u06cc\u0634\u0646\/\u0627\u062c\u0627\u0632\u062a \u0645\u06cc\u06ba \u062a\u0631\u0645\u06cc\u0645 \u06a9\u06cc\u06d4 \u062a\u0627\u06c1\u0645\u060c \u0648\u0633\u0627\u0626\u0644 \u06a9\u06cc \u062d\u062f\u0648\u062f \u06a9\u0648 \u0686\u06be\u0648\u0691 \u062f\u06cc\u0627 \u06af\u06cc\u0627 \u062a\u06be\u0627\u06d4<\/p>\n<p>\u06cc\u06c1 \u062d\u0642\u06cc\u0642\u06cc \u0679\u06cc\u0645\u0648\u06ba \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0639\u0627\u0645 \u0648\u0627\u0642\u0639\u06c1 \u06c1\u06d2\u06d4 \u0622\u067e \u0646\u06d2 \"\u06a9\u0646\u0679\u06cc\u0646\u0631 \u06a9\u0648 \u0633\u062e\u062a \u06a9\u06cc\u0627\" \u0644\u06cc\u06a9\u0646 CPU\/\u0645\u06cc\u0645\u0648\u0631\u06cc \u06a9\u06cc \u062d\u062f \u0628\u06be\u0648\u0644 \u06af\u0626\u06d2\u06d4<\/p>\n<p><strong>\u0627\u0633 \u0645\u0646\u0634\u0648\u0631 \u0645\u06cc\u06ba \u06a9\u06cc\u0627 \u062d\u0631\u062c \u06c1\u06d2\u061f<\/strong> <code>securityContext<\/code> \u06cc\u06c1 \u0633\u0686 \u06c1\u06d2 \u0644\u06cc\u06a9\u0646 \u06cc\u06c1 \u0648\u06c1\u0627\u06ba \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 <code>resources.requests<\/code> \u06cc\u0627 <code>resources.limits<\/code>. \u063a\u06cc\u0631 \u067e\u0627\u0628\u0646\u062f \u06a9\u0646\u0679\u06cc\u0646\u0631\u0632 \u0646\u0648\u0688 \u067e\u0631 \u062f\u0648\u0633\u0631\u06d2 \u06a9\u0627\u0645 \u06a9\u06d2 \u0628\u0648\u062c\u06be \u0645\u06cc\u06ba \u062e\u0644\u0644 \u0688\u0627\u0644 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">cat <<eof kubectl=\"\" apply=\"\" apiversion:=\"\" v1=\"\" kind:=\"\" pod=\"\" metadata:=\"\" name:=\"\" nolimits-test=\"\" namespace:=\"\" clearledger=\"\" spec:=\"\" containers:=\"\" test=\"\" image:=\"\" nginx:alpine=\"\" securitycontext:=\"\" runasnonroot:=\"\" true=\"\" runasuser:=\"\" allowprivilegeescalation:=\"\" false=\"\" capabilities:=\"\" drop:=\"\" eof=\"\"\/><\/code><\/pre>\n<p><strong>\u0622\u067e \u06a9\u0648 \u06a9\u06cc\u0627 \u062f\u06cc\u06a9\u06be\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2:<\/strong><\/p>\n<pre><code class=\"language-plaintext\">Error from server: error when creating \"STDIN\": admission webhook \"validate.kyverno.svc-fail\" denied the request:\n\nresource Pod\/clearledger\/nolimits-test was blocked due to the following policies\n\nrequire-resource-limits:\n  check-resources: 'validation error: Resource requests and limits are required for\n    all containers. rule check-resources failed at path \/spec\/containers\/0\/resources\/limits\/'\n<\/code><\/pre>\n<p><strong>\u0627\u06c1\u0645 \u0645\u0634\u0627\u06c1\u062f\u0627\u062a:<\/strong> \u0627\u0633 \u0628\u0627\u0631 \u0635\u0631\u0641 \u0627\u06cc\u06a9 \u067e\u0627\u0644\u06cc\u0633\u06cc \u0686\u0644\u0627\u0626\u06cc \u06af\u0626\u06cc \u06c1\u06d2\u06d4 SecurityContext \u0641\u06cc\u0644\u0688 \u0646\u06d2 \u062f\u06cc\u06af\u0631 \u0686\u0627\u0631 \u0627\u0635\u0648\u0644\u0648\u06ba \u06a9\u0648 \u067e\u0648\u0631\u0627 \u06a9\u06cc\u0627\u06d4 Kyverno \u0622\u0632\u0627\u062f\u0627\u0646\u06c1 \u0637\u0648\u0631 \u067e\u0631 \u0642\u0648\u0627\u0646\u06cc\u0646 \u06a9\u0627 \u062c\u0627\u0626\u0632\u06c1 \u0644\u06cc\u062a\u0627 \u06c1\u06d2\u06d4 \u06c1\u0631 \u06a9\u0646\u0679\u06cc\u0646\u0631 \u067e\u0631\u0627\u067e\u0631\u0679\u06cc \u0627\u06cc\u06a9 \u0639\u0644\u06cc\u062d\u062f\u06c1 \u06af\u06cc\u0679 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba:<\/strong><\/p>\n<pre><code class=\"language-bash\">kubectl get pod nolimits-test -n clearledger\n# Error from server (NotFound): pods \"nolimits-test\" not found\n<\/code><\/pre>\n<h4 id=\"heading-scenario-3-unsigned-clearledger-image\">\u0645\u0646\u0638\u0631 \u0646\u0627\u0645\u06c1 3: \u063a\u06cc\u0631 \u062f\u0633\u062a\u062e\u0637 \u0634\u062f\u06c1 ClearLedger \u062a\u0635\u0648\u06cc\u0631<\/h4>\n<p><strong>\u06a9\u06cc\u0627 \u0646\u0642\u0644 \u06a9\u06cc\u0627 \u062c\u0627 \u0631\u06c1\u0627 \u06c1\u06d2:<\/strong> \u0633\u067e\u0644\u0627\u0626\u06cc \u0686\u06cc\u0646 \u0627\u0679\u06cc\u06a9: \u06a9\u0648\u0626\u06cc \u0622\u067e \u06a9\u06d2 \u0630\u062e\u06cc\u0631\u06d2 \u06a9\u06d2 \u0646\u0627\u0645 \u06a9\u06d2 \u062a\u062d\u062a \u0627\u06cc\u06a9 \u0628\u062f\u0646\u06cc\u062a\u06cc \u067e\u0631 \u0645\u0628\u0646\u06cc \u062a\u0635\u0648\u06cc\u0631 \u06a9\u0648 \u0688\u0648\u06a9\u0631 \u06c1\u0628 \u067e\u0631 \u062f\u06be\u06a9\u06cc\u0644\u062a\u0627 \u06c1\u06d2 (<code>clearledger-auth-service<\/code>) \u06a9\u0627\u0633\u0627\u0626\u0646 \u0633\u0627\u0626\u0646\u0646\u06af \u0645\u0631\u062d\u0644\u06c1 3 \u0645\u06cc\u06ba \u062f\u0633\u062a\u062e\u0637 \u0634\u062f\u06c1 CI \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u0633\u06d2 \u06af\u0632\u0631\u06d2 \u0628\u063a\u06cc\u0631 \u0645\u0645\u06a9\u0646 \u06c1\u0648\u0627\u060c \u0627\u0648\u0631 \u0645\u0631\u062d\u0644\u06c1 4 \u0645\u06cc\u06ba \u06a9\u0644\u0633\u0679\u0631 \u06af\u06cc\u0679 \u067e\u0631 \u0644\u0627\u0632\u0645\u06cc \u06c1\u0648 \u06af\u06cc\u0627\u06d4<\/p>\n<p><strong>\u0622\u067e \u06a9\u0648 \u0627\u0633 \u062a\u0631\u062a\u06cc\u0628 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06a9\u06cc\u0648\u06ba \u06c1\u06d2:<\/strong> Kyverno Docker Hub \u067e\u0631 \u0645\u0648\u062c\u0648\u062f \u062a\u0635\u0648\u06cc\u0631 \u06a9\u06d2 \u062e\u0644\u0627\u0641 \u062a\u0635\u0648\u06cc\u0631\u06cc \u062f\u0633\u062a\u062e\u0637\u0648\u06ba \u06a9\u06cc \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0622\u067e \u06a9\u06d2 \u0644\u06cc\u067e \u0679\u0627\u067e \u067e\u0631 \u0645\u0648\u062c\u0648\u062f \u062a\u0635\u0648\u06cc\u0631 \u06a9\u06d2 \u062e\u0644\u0627\u0641 \u0646\u06c1\u06cc\u06ba\u06d4 \u0633\u0628 \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u060c \u0622\u067e \u06a9\u0627 \u0679\u06cc\u0633\u0679 \u0627\u0645\u06cc\u062c \u0679\u06cc\u06af Docker Hub \u0645\u06cc\u06ba \u0645\u0648\u062c\u0648\u062f \u06c1\u0648\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4<\/p>\n<p>\u0627\u06af\u0631 \u0622\u067e \u062c\u0639\u0644\u06cc \u0679\u06cc\u06af \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u06cc\u0633\u06d2: <code>:unsigned<\/code> \u0627\u06af\u0631 \u0627\u0633\u06d2 \u0622\u06af\u06d2 \u0646\u06c1\u06cc\u06ba \u0628\u0691\u06be\u0627\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u062a\u0648\u060c \u06a9\u0628\u0631\u0646\u06cc\u0679\u0633 \u0628\u0639\u062f \u0645\u06cc\u06ba \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>ImagePullBackOff<\/code>. \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u0635\u0631\u0641 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u062a\u0635\u0648\u06cc\u0631 \u06a9\u0648 \u062f\u0631\u0622\u0645\u062f \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u062a\u0627\u06d4 \u0627\u0633 \u0633\u06d2 \u06cc\u06c1 \u062b\u0627\u0628\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 Kyverno \u0646\u06d2 \u063a\u06cc\u0631 \u062f\u0633\u062a\u062e\u0637 \u0634\u062f\u06c1 \u062a\u0635\u0627\u0648\u06cc\u0631 \u06a9\u0648 \u0628\u0644\u0627\u06a9 \u06a9\u06cc\u0627 \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-step-1-push-a-deliberately-unsigned-test-image-one-time\">\u0645\u0631\u062d\u0644\u06c1 1: \u062c\u0627\u0646 \u0628\u0648\u062c\u06be \u06a9\u0631 \u0628\u063a\u06cc\u0631 \u062f\u0633\u062a\u062e\u0637 \u0634\u062f\u06c1 \u0679\u06cc\u0633\u0679 \u0627\u0645\u06cc\u062c \u06a9\u0648 \u062f\u0628\u0627\u0626\u06cc\u06ba (\u0627\u06cc\u06a9 \u0628\u0627\u0631):<\/h4>\n<pre><code class=\"language-bash\">export DOCKER_USERNAME=your-dockerhub-username\n\ndocker pull nginx:alpine\ndocker tag nginx:alpine ${DOCKER_USERNAME}\/clearledger-auth-service:unsigned-test\ndocker push ${DOCKER_USERNAME}\/clearledger-auth-service:unsigned-test\n\n# Must fail \u2014 proves the image has no Cosign signature from your pipeline key:\ncosign verify --key infra\/cosign.pub \n  index.docker.io\/${DOCKER_USERNAME}\/clearledger-auth-service:unsigned-test\n# Error: no signatures found\n<\/code><\/pre>\n<h4 id=\"heading-step-2-try-to-deploy-it-with-a-compliant-pod-spec\">\u0645\u0631\u062d\u0644\u06c1 2: \u0627\u06cc\u06a9 \u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631 Pod \u062a\u0641\u0635\u06cc\u0644\u0627\u062a \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u06a9\u0648\u0634\u0634 \u06a9\u0631\u06cc\u06ba\u06d4<\/h4>\n<p>\u067e\u0648\u0688 \u0645\u06cc\u0646\u06cc \u0641\u06cc\u0633\u0679 \u0645\u06a9\u0645\u0644 \u0637\u0648\u0631 \u067e\u0631 \u0633\u062e\u062a \u06c1\u06d2 (securityContext + restrictions)\u060c \u0627\u0633 \u0644\u06cc\u06d2 \u0635\u0631\u0641 \u062f\u0633\u062a\u062e\u0637 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u067e\u0627\u0644\u06cc\u0633\u06cc \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648 \u0633\u06a9\u062a\u06cc \u06c1\u06d2\u06d4 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba <code>index.docker.io\/<\/code> \u062a\u0635\u0648\u06cc\u0631\u06cc URL: Kyverno 1.12 \u0633\u06d2\u061b <code>docker.io\/...<\/code> \u0645\u062a\u062d\u0631\u06a9 \u0646\u06c1\u06cc\u06ba \u06c1\u0648 \u0633\u06a9\u062a\u0627 <code>verifyImages<\/code> \u0645\u0644\u0627\u067e<\/p>\n<pre><code class=\"language-bash\">cat <<eof kubectl=\"\" apply=\"\" apiversion:=\"\" v1=\"\" kind:=\"\" pod=\"\" metadata:=\"\" name:=\"\" unsigned-test=\"\" namespace:=\"\" clearledger=\"\" spec:=\"\" containers:=\"\" test=\"\" image:=\"\" index.docker.io=\"\" securitycontext:=\"\" runasnonroot:=\"\" true=\"\" runasuser:=\"\" allowprivilegeescalation:=\"\" false=\"\" capabilities:=\"\" drop:=\"\" resources:=\"\" requests:=\"\" memory:=\"\" cpu:=\"\" limits:=\"\" eof=\"\"\/><\/code><\/pre>\n<p><strong>\u0622\u067e \u06a9\u0648 \u06a9\u06cc\u0627 \u062f\u06cc\u06a9\u06be\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2:<\/strong><\/p>\n<pre><code class=\"language-plaintext\">Error from server: error when creating \"STDIN\": admission webhook \"mutate.kyverno.svc-fail\" denied the request:\n\nresource Pod\/clearledger\/unsigned-test was blocked due to the following policies\n\nrequire-signed-images:\n  verify-cosign-signature: 'failed to verify image index.docker.io\/veeno-demo\/clearledger-auth-service:unsigned-test:\n    .attestors[0].entries[0].keys: no signatures found'\n<\/code><\/pre>\n<p><strong>\u0627\u0633 \u0622\u0624\u0679 \u067e\u0679 \u06a9\u0648 \u06a9\u06cc\u0633\u06d2 \u067e\u0691\u06be\u06cc\u06ba:<\/strong><\/p>\n<ul>\n<li>\n<p>\u0648\u06cc\u0628 \u06c1\u06a9 \u06a9\u0627 \u0646\u0627\u0645 \u06c1\u06d2: <code>mutate.kyverno.svc-fail<\/code>\u0646\u06c1\u06cc\u06ba <code>validate<\/code>: \u062a\u0635\u0648\u06cc\u0631 \u06a9\u06cc \u062a\u0648\u062b\u06cc\u0642 \u067e\u0648\u0688 \u06a9\u06cc \u0645\u0646\u0638\u0648\u0631\u06cc \u0633\u06d2 \u067e\u06c1\u0644\u06d2 Kyverno \u06a9\u06d2 mutate \u067e\u0627\u0633 (\u0688\u0627\u0626\u062c\u0633\u0679 + \u062f\u0633\u062a\u062e\u0637\u06cc \u062a\u0635\u062f\u06cc\u0642) \u067e\u0631 \u0686\u0644\u0627\u0626\u06cc \u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><code>no signatures found<\/code> \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 Kyverno Docker Hub \u067e\u06c1\u0646\u0686\u0627\u060c \u062a\u0635\u0648\u06cc\u0631 \u0645\u0644\u06cc\u060c \u0627\u0648\u0631 \u062a\u0635\u062f\u06cc\u0642 \u06a9\u06cc \u06a9\u06c1 \u06cc\u06c1 \u0635\u062d\u06cc\u062d \u062a\u0635\u0648\u06cc\u0631 \u06c1\u06d2\u06d4 <strong>~ \u0646\u06c1\u06cc\u06ba<\/strong> \u0622\u067e \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062f\u0633\u062a\u062e\u0637 \u06a9\u0631\u06cc\u06ba <code>infra\/cosign.pub<\/code> \u06a9\u0644\u06cc\u062f<\/p>\n<\/li>\n<li>\n<p>\u0641\u0648\u0631\u0688 \u0645\u0648\u062c\u0648\u062f \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u06cc\u06c1\u0627\u06ba \u062a\u06a9 \u06a9\u06c1 \u0627\u06af\u0631 \u062a\u0635\u0648\u06cc\u0631 \u06a9\u06be\u06cc\u0646\u0686\u06cc \u062c\u0627 \u0633\u06a9\u062a\u06cc \u06c1\u06d2\u060c \u062d\u0645\u0644\u06c1 \u0622\u0648\u0631 \u06af\u0648\u0644\u06c1 \u062d\u0627\u0635\u0644 \u0646\u06c1\u06cc\u06ba \u06a9\u0631 \u0633\u06a9\u062a\u0627\u06d4<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba:<\/strong><\/p>\n<pre><code class=\"language-bash\">kubectl get pod unsigned-test -n clearledger\n# Error from server (NotFound): pods \"unsigned-test\" not found\n<\/code><\/pre>\n<p><strong>\u06a9\u06cc\u0627 \u0646\u06c1\u06cc\u06ba \u062f\u06cc\u06a9\u06be\u0646\u0627 \u06c1\u06d2\u06d4<\/strong> (\u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 \u0679\u06cc\u0633\u0679 \u0646\u06d2 \u062f\u0633\u062a\u062e\u0637 \u06a9\u06d2 \u0646\u0641\u0627\u0630 \u06a9\u0627 \u0645\u0638\u0627\u06c1\u0631\u06c1 \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u0627):<\/p>\n<table>\n<thead>\n<tr>\n<th>\u0639\u0644\u0627\u0645\u062a<\/th>\n<th>\u06a9\u06cc\u0627 \u063a\u0644\u0637 \u06c1\u06d2\u061f<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>\u067e\u06be\u0644\u06cc \u0628\u0646\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f <code>ImagePullBackOff<\/code><\/td>\n<td>Docker Hub \u0645\u06cc\u06ba \u06a9\u0648\u0626\u06cc \u0679\u06cc\u06af \u0646\u06c1\u06cc\u06ba \u06c1\u06cc\u06ba\u06d4 \u067e\u06c1\u0644\u06d2 \u0645\u0631\u062d\u0644\u06c1 1 \u0645\u06a9\u0645\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/td>\n<\/tr>\n<tr>\n<td>\u067e\u06be\u0644\u06cc \u0628\u0646\u0627\u0626\u06cc \u06af\u0626\u06cc \u06c1\u06d2\u06d4 <code>Running<\/code><\/td>\n<td>\u062a\u0635\u0648\u06cc\u0631 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc \u06af\u0626\u06cc\u06d4 <code>docker.io\/...<\/code> \u0627\u0633 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 <code>index.docker.io\/...<\/code><\/td>\n<\/tr>\n<tr>\n<td>\u0646\u06c1\u06cc\u06ba <code>require-signed-images<\/code> \u063a\u0644\u0637\u06cc \u0633\u06d2<\/td>\n<td>\u067e\u0627\u0644\u06cc\u0633\u06cc \u0644\u0627\u06af\u0648 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u06cc \u06c1\u06d2 \u06cc\u0627 <code>cosign.pub<\/code> YAML \u067e\u0627\u0644\u06cc\u0633\u06cc \u0645\u06cc\u06ba \u0634\u0627\u0645\u0644 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h4 id=\"heading-contrast-signed-image-is-allowed\">\u06a9\u0646\u0679\u0631\u0627\u0633\u0679: \u062f\u0633\u062a\u062e\u0637 \u0634\u062f\u06c1 \u062a\u0635\u0627\u0648\u06cc\u0631 \u0642\u0627\u0628\u0644 \u0642\u0628\u0648\u0644 \u06c1\u06cc\u06ba\u06d4<\/h4>\n<p>\u067e\u0686\u06be\u0644\u06d2 \u0679\u06cc\u0633\u0679\u0648\u06ba \u0645\u06cc\u06ba\u060c Kyverno \u0646\u06d2 \u0627\u0646\u06c1\u06cc\u06ba \u0628\u0644\u0627\u06a9 \u06a9\u0631 \u062f\u06cc\u0627 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u0627\u0646\u06c1\u0648\u06ba \u0646\u06d2 \u063a\u06cc\u0631 \u062f\u0633\u062a\u062e\u0637 \u0634\u062f\u06c1 \u062a\u0635\u0627\u0648\u06cc\u0631 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u0635\u0644 ClearLedger \u0627\u0645\u06cc\u062c \u067e\u0631 CI \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u062f\u0633\u062a\u062e\u0637 \u06c1\u0648\u0646\u0627 \u0636\u0631\u0648\u0631\u06cc \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u067e\u0648\u0688 \u0628\u06be\u06cc \u062d\u0641\u0627\u0638\u062a\u06cc \u0627\u0635\u0648\u0644\u0648\u06ba \u06a9\u06cc \u062a\u0639\u0645\u06cc\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 Kyverno \u067e\u0648\u0688 \u06a9\u0648 \u0686\u0644\u0627\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06d2 \u06af\u0627\u06d4<\/p>\n<p>\u0622\u067e \u0641\u06cc \u0627\u0644\u062d\u0627\u0644 \u0632\u06cc\u0631 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u062a\u0635\u0648\u06cc\u0631 \u06a9\u0648 \u0686\u06cc\u06a9 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>auth-service<\/code>:<\/p>\n<pre><code class=\"language-bash\"># Your deployed tag (signed in CI) should start if spec is compliant:\nkubectl get deployment auth-service -n clearledger \n  -o jsonpath=\"{.spec.template.spec.containers[0].image}\"\n# docker.io\/veeno-demo\/clearledger-auth-service:v0.1.0\n<\/code><\/pre>\n<p><strong>\u0645\u062b\u0627\u0644 \u0622\u0624\u0679 \u067e\u0679:<\/strong><\/p>\n<p><code>docker.io\/veeno-demo\/clearledger-auth-service:v0.1.0<\/code><\/p>\n<p>\u062c\u0648 \u067e\u0648\u0688\u0632 \u067e\u0627\u0644\u06cc\u0633\u06cc \u0644\u0627\u06af\u0648 \u06c1\u0648\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06c1\u06cc \u0686\u0644 \u0631\u06c1\u06d2 \u062a\u06be\u06d2 \u0648\u06c1 \u0686\u0644\u062a\u06d2 \u0631\u06c1\u06cc\u06ba \u06af\u06d2\u06d4 \u0627\u06c1\u0645 \u0627\u0645\u062a\u062d\u0627\u0646 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u062c\u0628 Kubernetes \u0627\u06cc\u06a9 \u0646\u0626\u06cc \u067e\u0648\u0688 \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2 \u062a\u0648 \u06a9\u06cc\u0627 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 \u062f\u0633\u062a\u062e\u0637 \u0634\u062f\u06c1 ClearLedger \u0627\u0645\u06cc\u062c\u0632 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0646\u0626\u06d2 \u067e\u0648\u0688\u0632 \u06a9\u0648 Kyverno \u062a\u0635\u062f\u06cc\u0642 \u067e\u0627\u0633 \u06a9\u0631\u0646\u0627 \u0636\u0631\u0648\u0631\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u0633\u06cc\u0646\u0627\u0631\u06cc\u0648 3 \u0645\u0633\u062a\u0631\u062f \u06c1\u0648\u0646\u06d2 \u06a9\u0627 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679 \u0644\u06cc\u06ba\u06d4 \u0627\u0633 \u0633\u06d2 \u062b\u0627\u0628\u062a \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u06a9\u0644\u0633\u0679\u0631 \u0628\u0644\u0627\u06a9\u0633 \u0646\u06c1 \u0635\u0631\u0641 CI \u06a9\u06cc \u062f\u0633\u062a\u062e\u0637 \u0634\u062f\u06c1 \u062a\u0635\u0627\u0648\u06cc\u0631 \u0628\u0644\u06a9\u06c1 \u063a\u06cc\u0631 \u062f\u0633\u062a\u062e\u0637 \u0634\u062f\u06c1 \u062a\u0635\u0627\u0648\u06cc\u0631 \u06a9\u0648 \u0628\u06be\u06cc \u0631\u0648\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-45-verify-clearledger-still-works\">4.5: \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u0622\u06cc\u0627 ClearLedger \u0627\u0628 \u0628\u06be\u06cc \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/h3>\n<p>Kyverno \u0627\u06cc\u06a9 \u0646\u0626\u06cc \u067e\u0648\u0688 \u06a9\u06cc \u062a\u062e\u0644\u06cc\u0642 \u06a9\u0648 \u0646\u0627\u0641\u0630 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0645\u0648\u062c\u0648\u062f\u06c1 \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc\u0627\u06ba \u062c\u0648 \u067e\u06c1\u0644\u06d2 \u06c1\u06cc \u0645\u0646\u0638\u0648\u0631\u06cc \u067e\u0627\u0633 \u06a9\u0631 \u0686\u06a9\u06cc \u06c1\u06cc\u06ba (\u06cc\u0627 \u067e\u0627\u0644\u06cc\u0633\u06cc \u06a9\u06d2 \u0645\u0648\u062c\u0648\u062f \u06c1\u0648\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631 \u06c1\u0648 \u0686\u06a9\u06cc \u06c1\u06cc\u06ba) \u0686\u0644\u062a\u06cc \u0631\u06c1\u06cc\u06ba \u06af\u06cc\u06d4 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u0622\u06cc\u0627 \u0627\u06cc\u067e \u067e\u0648\u0688 \u0635\u062d\u062a \u0645\u0646\u062f \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\">kubectl get pods -n clearledger\n<\/code><\/pre>\n<pre><code class=\"language-plaintext\">NAME                                    READY   STATUS    RESTARTS   AGE\nauth-service-...                        1\/1     Running   0          ...\nfrontend-...                            1\/1     Running   0          ...\nledger-service-...                      1\/1     Running   0          ...\nnotification-service-...                1\/1     Running   0          ...\npostgres-0                              1\/1     Running   0          ...\nredis-...                               1\/1     Running   0          ...\n<\/code><\/pre>\n<p>\u0627\u06af\u0631 \u0627\u0633\u062a\u0642\u0628\u0627\u0644\u06cc\u06c1 \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2:<\/p>\n<pre><code class=\"language-bash\">curl -s http:\/\/clearledger.local\/auth\/health | jq .\n# {\"status\": \"ok\", \"service\": \"auth-service\"}\n<\/code><\/pre>\n<p>\u0622\u067e \u06a9\u0648 \u0627\u0628 \u0628\u06be\u06cc ArgoCD \u062f\u06cc\u06a9\u06be\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4 <strong>\u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631<\/strong> \u0627\u0648\u0631 <strong>\u0635\u062d\u062a \u0645\u0646\u062f<\/strong>: GitOps \u0627\u0648\u0631 \u062f\u0627\u062e\u0644\u06c1 \u06a9\u0646\u0679\u0631\u0648\u0644 \u0645\u0644 \u06a9\u0631 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u06cc\u06a9 \u062f\u0648\u0633\u0631\u06d2 \u06a9\u06d2 \u062e\u0644\u0627\u0641 \u0646\u06c1\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-46-policy-exceptions-when-a-legitimate-workload-needs-a-bypass\">4.6: \u067e\u0627\u0644\u06cc\u0633\u06cc \u0645\u0633\u062a\u062b\u0646\u06cc\u0627\u062a (\u062c\u0628 \u062c\u0627\u0626\u0632 \u06a9\u0627\u0645 \u06a9\u06d2 \u0628\u0648\u062c\u06be \u06a9\u0648 \u0628\u0627\u0626\u06cc \u067e\u0627\u0633 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2)<\/h3>\n<p>Kyverno \u0627\u0633 \u06a9\u06cc \u067e\u0627\u0644\u06cc\u0633\u06cc\u0648\u06ba \u06a9\u06cc \u062e\u0644\u0627\u0641 \u0648\u0631\u0632\u06cc \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u06a9\u0633\u06cc \u0628\u06be\u06cc \u067e\u0648\u0688 \u06a9\u0648 \u0631\u0648\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u0644\u06cc\u06a9\u0646 \u06a9\u06cc\u0627 \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u062c\u0628 \u0627\u06cc\u06a9 \u062c\u0627\u0626\u0632 \u06a9\u0627\u0645 \u06a9\u06d2 \u0628\u0648\u062c\u06be \u06a9\u0648 \u06a9\u0686\u06be \u0627\u0635\u0648\u0644\u0648\u06ba \u06a9\u0648 \u0646\u0638\u0631\u0627\u0646\u062f\u0627\u0632 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u061f<\/p>\n<p>PostgreSQL \u0627\u06cc\u06a9 \u0645\u062b\u0627\u0644 \u06c1\u06d2\u06d4 \u0622\u0641\u06cc\u0634\u0644 \u067e\u0648\u0633\u0679\u06af\u0631\u06cc\u0633 \u0627\u0644\u067e\u0627\u0626\u0646 \u0627\u0645\u06cc\u062c \u0688\u06cc\u0679\u0627 \u0688\u0627\u0626\u0631\u06a9\u0679\u0631\u06cc \u06a9\u0648 \u0645\u0646\u0638\u0645 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0645\u062e\u0635\u0648\u0635 \u0627\u0646\u062f\u0631\u0648\u0646\u06cc \u0635\u0627\u0631\u0641 (UID 70) \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 \u06a9\u06c1 <code>disallow-root-containers<\/code> \u062a\u0645\u0627\u0645 \u067e\u0648\u0688\u0632 \u06a9\u0648 \u067e\u0627\u0644\u06cc\u0633\u06cc \u06a9\u06d2 \u0645\u0637\u0627\u0628\u0642 \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc\u0627 \u062c\u0627\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4 <code>runAsNonRoot: true<\/code>.<\/p>\n<p>\u067e\u0648\u0633\u0679\u06af\u0631\u06cc\u0633 \u0622\u067e \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633\u06d2 \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4 \u062a\u0627\u06c1\u0645\u060c \u0627\u06af\u0631 Kyverno \u06a9\u0648 \u0645\u062e\u0635\u0648\u0635 UID \u0631\u06cc\u0646\u062c\u0632 \u06a9\u06cc \u062c\u0627\u0646\u0686 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0628\u06be\u06cc \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u060c \u06cc\u0627 \u0627\u06af\u0631 \u067e\u0648\u0688 \u06a9\u0627 \u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u0633\u06cc\u0627\u0642 \u0648 \u0633\u0628\u0627\u0642 \u06a9\u0633\u06cc \u0628\u06be\u06cc \u0648\u062c\u06c1 \u0633\u06d2 \u0642\u0648\u0627\u0639\u062f \u067e\u0631 \u067e\u0648\u0631\u0627 \u0646\u06c1\u06cc\u06ba \u0627\u062a\u0631\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 Kyverno \u0627\u0633\u06d2 \u0631\u0648\u06a9 \u062f\u06d2 \u06af\u0627\u06d4 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0634\u0631\u0648\u0639 \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u062a\u0627 \u0627\u0648\u0631 \u067e\u0648\u0631\u06cc \u0627\u06cc\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648 \u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u0622\u067e \u0627\u06cc\u06a9 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u0648 \u0627\u06cc\u0688\u062c\u0633\u0679 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0644\u0633\u0679\u0631 \u0645\u06cc\u06ba \u067e\u0627\u0644\u06cc\u0633\u06cc\u0648\u06ba \u06a9\u0648 \u06a9\u0645\u0632\u0648\u0631 \u0646\u06c1\u06cc\u06ba \u06a9\u0631 \u0633\u06a9\u062a\u06d2\u06d4 \u06cc\u06c1 \u06a9\u0633\u06cc \u0628\u06be\u06cc \u067e\u0648\u0688 \u06a9\u0648 \u0627\u0635\u0648\u0644 \u06a9\u0648 \u0646\u0638\u0631\u0627\u0646\u062f\u0627\u0632 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06d2 \u06af\u0627\u06d4 \u0627\u0633 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 <strong>\u067e\u0627\u0644\u06cc\u0633\u06cc \u0627\u0633\u062a\u062b\u0646\u0627\u0621<\/strong>: \u0628\u0627\u0644\u06a9\u0644 \u0645\u0637\u0644\u0648\u0628\u06c1 \u067e\u0648\u0688 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06c1\u062f\u0641\u06cc \u0627\u0633\u062a\u062b\u0646\u0627\u0621\u06d4<\/p>\n<p>\u06a9\u06be\u0644\u0627 <code>infra\/policies\/exceptions\/postgres-root-exception.yaml<\/code> \u0627\u0648\u0631 \u06a9\u0645\u0646\u0679\u0633 \u067e\u0691\u06be\u06cc\u06ba\u06d4 \u06c1\u0631 \u0633\u06cc\u06a9\u0634\u0646 \u06a9\u0627 \u06a9\u0631\u062f\u0627\u0631 \u062f\u0631\u062c \u0630\u06cc\u0644 \u06c1\u06d2:<\/p>\n<p><strong>\u06a9\u06c1<\/strong> <code>spec.exceptions<\/code> <strong>\u0628\u0644\u0627\u06a9<\/strong> \u0628\u0627\u0626\u06cc \u067e\u0627\u0633 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u067e\u0627\u0644\u06cc\u0633\u06cc\u0648\u06ba \u0627\u0648\u0631 \u0642\u0648\u0627\u0639\u062f \u06a9\u06cc \u0634\u0646\u0627\u062e\u062a \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-yaml\">exceptions:\n  - policyName: disallow-root-containers\n    ruleNames:\n      - check-runAsNonRoot\n<\/code><\/pre>\n<p>\u062f\u0648\u0633\u0631\u06d2 \u0627\u0644\u0641\u0627\u0638 \u0645\u06cc\u06ba\u060c \"\u0628\u0633 \u0627\u0633\u06d2 \u0686\u06be\u0648\u0691 \u062f\u06cc\u06ba\u06d4 <code>check-runAsNonRoot<\/code> \u0633\u06d2 \u062d\u06a9\u0645\u0631\u0627\u0646\u06cc <code>disallow-root-containers<\/code> \u067e\u0627\u0644\u06cc\u0633\u06cc\u06d4 \u0627\u0633 \u067e\u0627\u0644\u06cc\u0633\u06cc \u06a9\u06d2 \u062f\u06cc\u06af\u0631 \u062a\u0645\u0627\u0645 \u0642\u0648\u0627\u0639\u062f (\u0627\u0648\u0631 \u06a9\u0644\u0633\u0679\u0631 \u0645\u06cc\u06ba \u062f\u06cc\u06af\u0631 \u062a\u0645\u0627\u0645 \u067e\u0627\u0644\u06cc\u0633\u06cc\u0627\u06ba) \u0627\u0628 \u0628\u06be\u06cc \u0645\u0639\u0645\u0648\u0644 \u06a9\u06d2 \u0645\u0637\u0627\u0628\u0642 \u0644\u0627\u06af\u0648 \u06c1\u0648\u06ba \u06af\u06d2\u06d4<\/p>\n<p><strong>\u06a9\u06c1<\/strong> <code>spec.match<\/code> <strong>\u0628\u0644\u0627\u06a9<\/strong> \u0627\u0646 \u0648\u0633\u0627\u0626\u0644 \u06a9\u0648 \u0645\u062d\u062f\u0648\u062f \u06a9\u0631\u06cc\u06ba \u062c\u0646 \u067e\u0631 \u0645\u0633\u062a\u062b\u0646\u06cc\u0627\u062a \u0648\u0627\u0642\u0639 \u06c1\u0648\u06ba\u06d4<\/p>\n<pre><code class=\"language-yaml\">match:\n  any:\n    - resources:\n        kinds:\n          - Pod\n        namespaces:\n          - clearledger\n        names:\n          - postgres-*\n<\/code><\/pre>\n<p>\u0635\u0631\u0641 \u0646\u0627\u0645 \u06a9\u06cc \u067e\u06be\u0644\u06cc\u0627\u06ba <code>postgres-*<\/code> (\u0645\u0645\u0627\u062b\u0644 <code>postgres-0<\/code>, <code>postgres-1<\/code>\u0648\u063a\u06cc\u0631\u06c1) <code>clearledger<\/code> \u0635\u0631\u0641 \u0646\u0627\u0645 \u06a9\u06cc \u062c\u06af\u06c1 \u06a9\u06d2 \u0644\u06cc\u06d2 <code>Pod<\/code> \u0648\u0633\u0627\u0626\u0644 \u06a9\u06cc \u0642\u0633\u0645\u06d4 \u06a9\u0644\u0633\u0679\u0631 \u0645\u06cc\u06ba \u0628\u0627\u0642\u06cc \u0633\u0628 \u06a9\u0686\u06be \u0627\u0628 \u0628\u06be\u06cc \u0633\u062e\u062a \u067e\u0627\u0644\u06cc\u0633\u06cc \u067e\u0631 \u0639\u0645\u0644 \u067e\u06cc\u0631\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u062a\u0634\u0631\u06cc\u062d<\/strong> \u0622\u067e \u06a9\u06cc \u0679\u06cc\u0645 \u0627\u0648\u0631 \u0622\u0688\u06cc\u0679\u0631\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0686\u06be \u062f\u0633\u062a\u0627\u0648\u06cc\u0632\u0627\u062a \u06cc\u06c1 \u06c1\u06cc\u06ba:<\/p>\n<pre><code class=\"language-yaml\">annotations:\n  reason: \"Postgres alpine image requires UID 70 for data directory ownership\"\n  approved-by: \"platform-team\"\n  review-date: \"2026-01-01\"\n<\/code><\/pre>\n<p>\u06a9\u0648\u0626\u06cc \u062a\u06a9\u0646\u06cc\u06a9\u06cc \u0627\u062b\u0631 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 Kyverno \u0627\u0633 \u06a9\u0648 \u0646\u0638\u0631 \u0627\u0646\u062f\u0627\u0632 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0627\u0633 \u0644\u06cc\u06d2 \u06c1\u06d2 \u06a9\u06c1 \u0627\u0628 \u0633\u06d2 \u0686\u06be \u0645\u0627\u06c1 \u0628\u0639\u062f\u060c \u0627\u06af\u0631 \u06a9\u0648\u0626\u06cc \u067e\u0648\u0686\u06be\u06d2 \u06a9\u06c1 \"\u067e\u0648\u0633\u0679\u06af\u0631\u06cc\u0633 \u0627\u0633 \u0627\u0635\u0648\u0644 \u06a9\u0648 \u06a9\u06cc\u0648\u06ba \u0646\u0638\u0631\u0627\u0646\u062f\u0627\u0632 \u06a9\u0631 \u0631\u06c1\u0627 \u06c1\u06d2\u061f\"\u060c \u062a\u0648 \u062c\u0648\u0627\u0628 \u0641\u0627\u0626\u0644 \u067e\u0631 \u0645\u0648\u062c\u0648\u062f \u06c1\u0648\u06af\u0627\u06d4<\/p>\n<p><strong>\u0645\u062d\u0641\u0648\u0638 \u0627\u0633\u062a\u062b\u0646\u0627\u0621 \u06a9\u06d2 \u0642\u0648\u0627\u0639\u062f:<\/strong><\/p>\n<ol>\n<li>\n<p><strong>\u062a\u0646\u06af \u06a9\u0631\u06cc\u06ba<\/strong>: \u0627\u067e\u0646\u06cc \u0636\u0631\u0648\u0631\u062a \u06a9\u06d2 \u0639\u06cc\u0646 \u0645\u0637\u0627\u0628\u0642 \u0648\u0633\u0627\u0626\u0644 \u06a9\u0648 \u0646\u0634\u0627\u0646\u06c1 \u0628\u0646\u0627\u0626\u06cc\u06ba\u06d4 \u0627\u0633 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0646\u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>Git \u06a9\u0627 \u0639\u06c1\u062f \u06a9\u0631\u06cc\u06ba\u06d4<\/strong>: \u0645\u0633\u062a\u062b\u0646\u06cc\u0627\u062a \u06a9\u0627 \u067e\u0644 \u06a9\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0645\u06cc\u06ba \u062c\u0627\u0626\u0632\u06c1 \u0644\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0648\u0631\u0698\u0646 \u06a9\u06cc \u062a\u0627\u0631\u06cc\u062e \u0645\u06cc\u06ba \u0679\u0631\u06cc\u06a9 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0642\u0627\u0628\u0644 \u0633\u0645\u0627\u0639\u062a \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u062e\u0648\u062f \u067e\u0627\u0644\u06cc\u0633\u06cc \u06a9\u0648 \u06a9\u0645\u0632\u0648\u0631 \u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4<\/strong>: \u0628\u0627\u0642\u06cc \u062a\u0645\u0627\u0645 \u0686\u06cc\u0632\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 \u0642\u0648\u0627\u0646\u06cc\u0646 \u06a9\u0648 \u0633\u062e\u062a\u06cc \u0633\u06d2 \u0628\u0631\u0642\u0631\u0627\u0631 \u0631\u06a9\u06be\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0628\u0627\u0642\u0627\u0639\u062f\u06af\u06cc \u0633\u06d2 \u062c\u0627\u0626\u0632\u06c1 \u0644\u06cc\u06ba\u06d4<\/strong>: \u062c\u0628 \u0628\u06be\u06cc \u0645\u0645\u06a9\u0646 \u06c1\u0648 \u0645\u0633\u062a\u062b\u0646\u06cc\u0627\u062a \u0639\u0627\u0631\u0636\u06cc \u06c1\u0648\u06ba \u0627\u0648\u0631 \u0634\u06cc\u0688\u0648\u0644 \u06a9\u06d2 \u0645\u0637\u0627\u0628\u0642 \u0627\u0646 \u06a9\u0627 \u062f\u0648\u0628\u0627\u0631\u06c1 \u062c\u0627\u0626\u0632\u06c1 \u0644\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4<\/p>\n<\/li>\n<\/ol>\n<p>\u0645\u0633\u062a\u062b\u0646\u06cc\u0627\u062a \u0644\u0627\u06af\u0648 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <strong>\u0635\u0631\u0641 \u0627\u06af\u0631<\/strong> Kyverno \u0628\u0644\u0627\u06a9\u0633 Postgres pods.<\/p>\n<pre><code class=\"language-bash\">kubectl apply -f infra\/policies\/exceptions\/postgres-root-exception.yaml\n<\/code><\/pre>\n<p>\u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 Kyverno \u0627\u0628 \u0628\u06be\u06cc \u062f\u06cc\u06af\u0631 \u063a\u06cc\u0631 \u062a\u0639\u0645\u06cc\u0644 \u067e\u0648\u0688\u0632 \u06a9\u0648 \u0631\u0648\u06a9\u062a\u0627 \u06c1\u06d2 (\u0645\u0646\u0638\u0631 1 \u06a9\u06cc \u0637\u0631\u062d \u0645\u0633\u062a\u0631\u062f)\u06d4<\/p>\n<pre><code class=\"language-bash\">cat <<eof kubectl=\"\" apply=\"\" apiversion:=\"\" v1=\"\" kind:=\"\" pod=\"\" metadata:=\"\" name:=\"\" another-root-test=\"\" namespace:=\"\" clearledger=\"\" spec:=\"\" containers:=\"\" test=\"\" image:=\"\" nginx:alpine=\"\" eof=\"\"\/><\/code><\/pre>\n<h3 id=\"heading-47-cis-benchmark-evidence-kube-bench\">4.7: CIS \u0628\u06cc\u0646\u0686 \u0645\u0627\u0631\u06a9 \u062b\u0628\u0648\u062a <code>kube-bench<\/code>)<\/h3>\n<p>\u06c1\u0645 \u067e\u06c1\u0644\u06d2 \u06c1\u06cc Kyverno \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631 \u0686\u06a9\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u062b\u0627\u0628\u062a \u06a9\u0631 \u0686\u06a9\u06d2 \u06c1\u06cc\u06ba \u06a9\u06c1 \u06cc\u06c1 \u063a\u06cc\u0631 \u0645\u062d\u0641\u0648\u0638 \u067e\u0648\u0688\u0632 \u06a9\u0648 \u0631\u0648\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06cc\u06c1 \u0645\u0631\u062d\u0644\u06c1 \u0645\u062e\u062a\u0644\u0641 \u06c1\u06d2\u06d4 <code>kube-bench<\/code> \u06cc\u06c1 \u06a9\u0633\u06cc \u0628\u06be\u06cc \u067e\u0648\u0688 \u06a9\u0648 \u0628\u0644\u0627\u06a9 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u0627 \u0627\u0648\u0631 \u06a9\u0644\u0633\u0679\u0631 \u06a9\u0648 \u062a\u0628\u062f\u06cc\u0644 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 CIS \u0628\u06cc\u0646\u0686 \u0645\u0627\u0631\u06a9\u0633 \u06a9\u06d2 \u062e\u0644\u0627\u0641 \u0635\u0631\u0641 Kubernetes \u0646\u0648\u0688\u0633 \u06a9\u06cc \u062c\u0627\u0646\u0686 \u06a9\u06cc \u062c\u0627\u062a\u06cc \u06c1\u06d2 \u0627\u0648\u0631 \u062b\u0628\u0648\u062a \u0645\u062d\u0641\u0648\u0638 \u06a9\u06cc\u06d2 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0645\u0646\u062f\u0631\u062c\u06c1 \u0630\u06cc\u0644 \u0627\u062e\u062a\u0644\u0627\u0641\u0627\u062a \u067e\u0631 \u063a\u0648\u0631 \u06a9\u0631\u06cc\u06ba:<\/p>\n<table>\n<thead>\n<tr>\n<th>\u0633\u0627\u0645\u0627\u0646<\/th>\n<th>\u0645\u0639\u0627\u0626\u0646\u06c1 \u06a9\u0627 \u0645\u0648\u0627\u062f<\/th>\n<th>\u0622\u067e \u06a9\u06d2 \u0633\u0648\u0627\u0644\u0627\u062a \u06a9\u06d2 \u062c\u0648\u0627\u0628\u0627\u062a<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>\u06a9\u06cc\u0628\u0631\u0646\u0648<\/td>\n<td>\u067e\u06be\u0644\u06cc \u0627\u0648\u0631 \u06a9\u0627\u0645 \u06a9\u0627 \u0628\u0648\u062c\u06be<\/td>\n<td>\"\u06a9\u06cc\u0627 \u0645\u06cc\u06ba \u0627\u0633 \u067e\u0648\u0688 \u06a9\u0648 \u0686\u0644\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u0648\u06ba\u061f\"<\/td>\n<\/tr>\n<tr>\n<td>\u06a9\u06cc\u0648\u0628 \u0628\u06cc\u0646\u0686<\/td>\n<td>Kubernetes \u0646\u0648\u0688\u0633 \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc\u0646\u0627<\/td>\n<td>\"\u06a9\u06cc\u0627 \u06cc\u06c1 \u06a9\u0628\u0631\u0646\u06cc\u0679\u0633 \u0646\u0648\u0688\u0633 \u0633\u062e\u062a \u06c1\u06cc\u06ba\u061f\"<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u062f\u0648\u0646\u0648\u06ba \u0645\u0641\u06cc\u062f \u06c1\u06cc\u06ba\u060c \u0644\u06cc\u06a9\u0646 \u0627\u0633 \u0644\u06cc\u0628 \u0645\u06cc\u06ba \u0635\u0631\u0641 Kyverno \u06a9\u0627\u0645 \u06a9\u06d2 \u0628\u0648\u062c\u06be \u06a9\u0648 \u0631\u0648\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06a9\u06cc\u0648\u0628 \u0628\u06cc\u0646\u0686 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">bash stages\/stage-4-admission-control\/scripts\/run-kube-bench.sh\n<\/code><\/pre>\n<p>\u0627\u0633\u06a9\u0631\u067e\u0679 kube-bench \u06a9\u0648 Kubernetes \u0679\u0627\u0633\u06a9 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0686\u0644\u0627\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0648\u06c1\u0627\u06ba \u0631\u067e\u0648\u0631\u0679\u0633 \u0627\u0633\u0679\u0648\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-text\">stages\/stage-4-admission-control\/scripts\/kube-bench-report.json\n<\/code><\/pre>\n<p>\u06c1\u0645 \u0627\u067e\u0646\u06d2 \u0646\u062a\u0627\u0626\u062c \u06a9\u0627 \u0627\u0633 \u0628\u06cc\u0633 \u0644\u0627\u0626\u0646 \u0633\u06d2 \u0628\u06be\u06cc \u0645\u0648\u0627\u0632\u0646\u06c1 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-text\">stages\/stage-4-admission-control\/scripts\/kube-bench-baseline.json\n<\/code><\/pre>\n<p>\u0645\u0627\u0626\u06cc\u06a9\u0631\u0648 \u06a9\u06d2 8 \u0645\u06cc\u06ba \u062f\u06cc\u06a9\u06be\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0628\u06c1\u062a \u06a9\u0686\u06be \u06c1\u06d2\u06d4 <code>FAIL<\/code> \u0627\u0648\u0631 <code>WARN<\/code> \u0633\u0645\u0648\u0686 \u0627\u0633 \u06a9\u06cc \u062a\u0648\u0642\u0639 \u06c1\u06d2\u06d4 \u0644\u06cc\u0628 \u0622\u067e \u06a9\u0648 \u0633\u0646\u06af\u0644 \u0646\u0648\u0688 \u0645\u0642\u0627\u0645\u06cc VMs \u067e\u0631 \u062a\u0645\u0627\u0645 CIS \u0627\u0646\u062a\u0628\u0627\u06c1\u0627\u062a \u06a9\u0648 \u0679\u06be\u06cc\u06a9 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<p>\u062c\u0648 \u0686\u06cc\u0632 \u0627\u06c1\u0645 \u06c1\u06d2 \u0648\u06c1 \u062d\u062a\u0645\u06cc \u0646\u062a\u06cc\u062c\u06c1 \u06c1\u06d2\u06d4<\/p>\n<p>\u067e\u0627\u0633\u0632 \u062f\u0631\u062c \u0630\u06cc\u0644 \u06c1\u06cc\u06ba:<\/p>\n<pre><code class=\"language-text\">kube-bench: 1 FAIL control(s) present (documented in baseline \u2014 no regressions).\nkube-bench: no regressions vs baseline.\n<\/code><\/pre>\n<p>\u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 \u0645\u0627\u0626\u06cc\u06a9\u0631\u0648 \u06a9\u06d2 8 \u06a9\u06d2 \u0645\u0639\u0644\u0648\u0645 \u0645\u0633\u0627\u0626\u0644 \u06a9\u0648 \u062f\u0633\u062a\u0627\u0648\u06cc\u0632\u06cc \u0634\u06a9\u0644 \u062f\u06cc \u06af\u0626\u06cc \u06c1\u06d2 \u0627\u0648\u0631 \u06a9\u0644\u0633\u0679\u0631 \u0645\u0632\u06cc\u062f \u062e\u0631\u0627\u0628 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u06af\u0631 \u0622\u067e \u062f\u06cc\u06a9\u06be\u062a\u06d2 \u06c1\u06cc\u06ba <code>REGRESSION<\/code> \u06cc\u0627 <code>make check-4<\/code> \u0627\u06af\u0631 \u06a9\u06cc\u0648\u0628 \u0628\u06cc\u0646\u0686 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u0631\u0648\u06a9\u06cc\u06ba \u0627\u0648\u0631 \u0645\u0631\u062d\u0644\u06c1 5 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u062a\u062d\u0642\u06cc\u0642 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u062e\u062a\u06cc\u0627\u0631\u06cc: \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u0631\u067e\u0648\u0631\u0679 \u0641\u0627\u0626\u0644 \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\">ls -la stages\/stage-4-admission-control\/scripts\/kube-bench-report.json\n<\/code><\/pre>\n<p>\u067e\u06cc\u062f\u0627\u0648\u0627\u0631 CIS \u06a9\u06cc \u063a\u0644\u0637\u06cc\u0648\u06ba \u06cc\u0627 \u062f\u0633\u062a\u0627\u0648\u06cc\u0632\u0627\u062a \u0633\u06d2 \u0645\u0646\u0638\u0648\u0631 \u0634\u062f\u06c1 \u0645\u0633\u062a\u062b\u0646\u06cc\u0627\u062a \u06a9\u0648 \u062f\u0631\u0633\u062a \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 \u0627\u0633 \u0644\u06cc\u0628 \u0645\u06cc\u06ba\u060c \u0628\u06cc\u0633 \u0644\u0627\u0626\u0646 \u0645\u062a\u0648\u0642\u0639 \u0645\u0627\u0626\u06cc\u06a9\u0631\u0648 \u06a9\u06d2 8 \u06a9\u06cc \u062d\u0627\u0644\u062a \u06a9\u0648 \u0631\u06cc\u06a9\u0627\u0631\u0688 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-48-health-check\">4.8: \u0627\u0633\u0679\u06cc\u0679\u0633 \u0686\u06cc\u06a9<\/h3>\n<pre><code class=\"language-bash\">make check-4\n<\/code><\/pre>\n<p><strong>\u0622\u067e \u06a9\u0648 \u06a9\u06cc\u0627 \u062f\u06cc\u06a9\u06be\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2:<\/strong><\/p>\n<pre><code class=\"language-plaintext\">&#x25b6; Stage 4 \u2014 Admission Control (Kyverno)\n  \u2713 Kyverno is running\n  \u2713 Policy disallow-root-containers \u2014 Enforce mode\n  \u2713 Policy require-resource-limits \u2014 Enforce mode\n  \u2713 Policy require-signed-images \u2014 Enforce mode\n  \u2713 Policy disallow-privilege-escalation \u2014 Enforce mode\n  \u2713 Policy drop-all-capabilities \u2014 Enforce mode\n  \u2713 Kyverno correctly rejects pods without securityContext\n  \u2713 kube-bench baseline exists (...)\n\nAll checks passed. Ready for the next stage.\n<\/code><\/pre>\n<p>\u0627\u06af\u0631 \u06a9\u06cc\u0648\u0628 \u0628\u06cc\u0646\u0686 \u0631\u062c\u0639\u062a \u06a9\u06cc \u0627\u0637\u0644\u0627\u0639 \u062f\u06cc\u062a\u0627 \u06c1\u06d2 \u062a\u0648 \u062f\u0633\u062a\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0627\u0633\u06a9\u0631\u067e\u0679 \u06a9\u0648 \u0686\u0644\u0627\u0626\u06cc\u06ba\u060c \u062c\u0627\u0626\u0632\u06c1 \u0644\u06cc\u06ba \u0627\u0648\u0631 \u0628\u06cc\u0633 \u0644\u0627\u0626\u0646 \u06a9\u0648 \u0627\u067e \u0688\u06cc\u0679 \u06a9\u0631\u06cc\u06ba\u06d4 \u0641\u0631\u0642 \u0622\u0688\u0679 \u062b\u0628\u0648\u062a \u06a9\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u06af\u0631 \u0622\u067e Kyverno \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0622\u067e \u06a9\u0648 \u067e\u0627\u0644\u06cc\u0633\u06cc\u0648\u06ba\u060c \u0628\u0646\u062f\u0634 \u06a9\u06d2 \u062d\u0627\u0644\u0627\u062a\u060c \u06cc\u0627 <code>make check-4<\/code> \u0627\u06af\u0631 \u06cc\u06c1 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u062a\u0648\u060c Troubleshooting.md \u062f\u06cc\u06a9\u06be\u06cc\u06ba\u06d4 \u0645\u0631\u062d\u0644\u06c1 4\u06d4<\/p>\n<h3 id=\"heading-stage-4-complete-done-checklist-move-to-stage-5\">\u0645\u0631\u062d\u0644\u06c1 4 \u0645\u06a9\u0645\u0644 \u06c1\u0648\u0627: \u062a\u06a9\u0645\u06cc\u0644\u06cc \u0686\u06cc\u06a9 \u0644\u0633\u0679 (\u0645\u0631\u062d\u0644\u06c1 5 \u067e\u0631 \u062c\u0627\u0626\u06cc\u06ba)<\/h3>\n<p>\u062a\u0645 \u06c1\u0648 <strong>\u0645\u0631\u062d\u0644\u06c1 4 \u062a\u06a9 \u0645\u06a9\u0645\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/strong> \u062c\u0628 \u06cc\u06c1 \u0633\u0628 \u0633\u0686 \u06c1\u06d2:<\/p>\n<table>\n<thead>\n<tr>\n<th>#<\/th>\n<th>\u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba<\/th>\n<th>\u0686\u06cc\u06a9 \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0637\u0631\u06cc\u0642\u06c1<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>1<\/td>\n<td>Kyberno \u0686\u0644 \u0631\u06c1\u0627 \u06c1\u06d2<\/td>\n<td><code>kubectl get pods -n kyverno<\/code> - 4 \u06a9\u0646\u0679\u0631\u0648\u0644\u0631\u0632 <code>Running<\/code><\/td>\n<\/tr>\n<tr>\n<td>2<\/td>\n<td>\u0644\u0627\u06af\u0648 \u067e\u0627\u0644\u06cc\u0633\u06cc<\/td>\n<td><code>kubectl get clusterpolicy<\/code> - \u067e\u0627\u0646\u0686 \u067e\u0627\u0644\u06cc\u0633\u06cc\u0627\u06ba\u061b <code>READY: True<\/code>, <code>Enforce<\/code><\/td>\n<\/tr>\n<tr>\n<td>3<\/td>\n<td>\u0631\u0648\u0679 \u067e\u0648\u0688 \u0645\u0633\u062f\u0648\u062f \u06c1\u06d2\u06d4<\/td>\n<td>\u0679\u0631\u0645\u06cc\u0646\u0644 \u0645\u06cc\u06ba \u0645\u0646\u0638\u0631 \u0646\u0627\u0645\u06d2 1 \u06a9\u0648 \u0645\u0633\u062a\u0631\u062f \u06a9\u0631\u06cc\u06ba (\u067e\u0648\u0631\u0679 \u0641\u0648\u0644\u06cc\u0648 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679)<\/td>\n<\/tr>\n<tr>\n<td>4<\/td>\n<td>\u063a\u06cc\u0631 \u062f\u0633\u062a\u062e\u0637 \u0634\u062f\u06c1 \u062a\u0635\u0627\u0648\u06cc\u0631 \u0645\u0633\u062f\u0648\u062f \u06c1\u06cc\u06ba\u06d4<\/td>\n<td>\u0645\u0646\u0638\u0631 3 \u0645\u0633\u062a\u0631\u062f - \u062f\u06be\u06a9\u0627 <code>unsigned-test<\/code> \u067e\u06c1\u0644\u06d2 \u0627\u0633\u06d2 \u0679\u06cc\u06af \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u067e\u06be\u0631 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 <code>index.docker.io\/<\/code><\/td>\n<\/tr>\n<tr>\n<td>5<\/td>\n<td>\u0627\u06cc\u067e \u0627\u0628 \u0628\u06be\u06cc \u0635\u062d\u062a \u0645\u0646\u062f \u06c1\u06d2\u06d4<\/td>\n<td><code>kubectl get pods -n clearledger<\/code> - \u062a\u0645\u0627\u0645 \u0627\u06cc\u067e \u067e\u0648\u0688\u0632 <code>Running<\/code><\/td>\n<\/tr>\n<tr>\n<td>6<\/td>\n<td>\u0635\u062d\u062a \u06a9\u06cc \u062c\u0627\u0646\u0686 \u0633\u0628\u0632<\/td>\n<td><code>make check-4<\/code> \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062e\u062a\u0645 \u06c1\u0648\u062a\u0627 \u06c1\u06d2 <code>All checks passed. Ready for the next stage.<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><strong>\u067e\u0648\u0631\u0679 \u0641\u0648\u0644\u06cc\u0648 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679 (\u0627\u062e\u062a\u06cc\u0627\u0631\u06cc):<\/strong> \u0631\u0648\u0679 \u067e\u0648\u0688\u0632 \u06a9\u0648 \u0645\u0633\u062a\u0631\u062f \u06a9\u0631\u06cc\u06ba (\u00a74.4 \u0645\u0646\u0638\u0631 \u0646\u0627\u0645\u06c1 1)\u060c \u063a\u06cc\u0631 \u062f\u0633\u062a\u062e\u0637 \u0634\u062f\u06c1 \u062a\u0635\u0627\u0648\u06cc\u0631 \u06a9\u0648 \u0645\u0633\u062a\u0631\u062f \u06a9\u0631\u06cc\u06ba (\u00a74.4 \u0645\u0646\u0638\u0631 \u0646\u0627\u0645\u06c1 3) <code>kubectl get clusterpolicy<\/code> \u062f\u06a9\u06be\u0627\u0626\u06cc\u06ba 5 <code>Enforce<\/code> \u067e\u0627\u0644\u06cc\u0633\u06cc<\/p>\n<p>\u0627\u0628\u06be\u06cc \u062a\u06a9 \u0646\u06c1\u06cc\u06ba: SLSA \u062a\u0635\u062f\u06cc\u0642 (\u0627\u062e\u062a\u06cc\u0627\u0631\u06cc)\u060c \u0648\u0627\u0644\u0679 \u0633\u06cc\u06a9\u0631\u06cc\u0679 (\u0645\u0631\u062d\u0644\u06c1 5)\u060c \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u067e\u0627\u0644\u06cc\u0633\u06cc (\u0645\u0631\u062d\u0644\u06c1 6)\u06d4 \u067e\u0627\u0633 \u0648\u0631\u0688 \u0627\u0628 \u0628\u06be\u06cc Kubernetes Secrets \u0645\u06cc\u06ba \u06c1\u06d2\u06d4 \u0645\u0631\u062d\u0644\u06c1 5 \u0622\u067e \u06a9\u0648 \u0648\u0627\u0644\u0679 \u067e\u0631 \u0644\u06d2 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-what-you-learned-in-stage-4\">\u0622\u067e \u0646\u06d2 \u0645\u0631\u062d\u0644\u06c1 4 \u0645\u06cc\u06ba \u06a9\u06cc\u0627 \u0633\u06cc\u06a9\u06be\u0627\u06d4<\/h3>\n<ul>\n<li>\n<p>CI \u0627\u0633\u06a9\u06cc\u0646\u0646\u06af (\u067e\u0631\u06cc \u0645\u0631\u062c) \u0627\u0648\u0631 \u062f\u0627\u062e\u0644\u06c1 \u06a9\u0646\u0679\u0631\u0648\u0644 (\u06a9\u0644\u0633\u0679\u0631 \u06af\u06cc\u0679 \u067e\u0631) \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u0641\u0631\u0642<\/p>\n<\/li>\n<li>\n<p>Kyverno \u06a9\u06cc\u0627 \u06c1\u06d2: \u0627\u06cc\u06a9 \u067e\u0627\u0644\u06cc\u0633\u06cc \u0627\u0646\u062c\u0646 \u062c\u0648 \u062a\u0645\u0627\u0645 Kubernetes API \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba \u06a9\u0648 \u0631\u0648\u06a9\u062a\u0627 \u06c1\u06d2\u061f<\/p>\n<\/li>\n<li>\n<p>\u0627\u0633 \u0646\u0641\u0627\u0630 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 \u0646\u0627\u0642\u0635 \u0648\u0633\u06cc\u0644\u06c1 \u0645\u0648\u062c\u0648\u062f \u0646\u06c1\u06cc\u06ba \u06c1\u06d2 \u0627\u0648\u0631 \u06cc\u06c1 \"\u062d\u0642\u06cc\u0642\u062a \u06a9\u06d2 \u0628\u0639\u062f\" \u062f\u0631\u06cc\u0627\u0641\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>Kyverno \u0627\u0646\u06a9\u0627\u0631 \u06a9\u0648 \u06a9\u06cc\u0633\u06d2 \u067e\u0691\u06be\u06cc\u06ba: \u067e\u0627\u0644\u06cc\u0633\u06cc \u06a9\u0627 \u0646\u0627\u0645 \u2192 \u0627\u0635\u0648\u0644 \u06a9\u0627 \u0646\u0627\u0645 \u2192 JSON \u0631\u0627\u0633\u062a\u06c1 \u062c\u0648 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u06af\u06cc\u0627\u06d4<\/p>\n<\/li>\n<li>\n<p>YAML \u0645\u06cc\u06ba \u06a9\u0644\u0633\u0679\u0631 \u0648\u0627\u0626\u06cc\u0688 \u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u067e\u0627\u0644\u06cc\u0633\u06cc\u0627\u06ba \u06a9\u06cc\u0633\u06d2 \u0644\u06a9\u06be\u06cc\u06ba \u0627\u0648\u0631 \u0646\u0627\u0641\u0630 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u06c1\u0631 \u06a9\u0633\u06cc \u06a9\u06d2 \u0644\u06cc\u06d2 \u067e\u0627\u0644\u06cc\u0633\u06cc \u06a9\u0648 \u06a9\u0645\u0632\u0648\u0631 \u06a9\u06cc\u06d2 \u0628\u063a\u06cc\u0631 PolicyException \u06a9\u0627 \u062f\u0627\u0626\u0631\u06c1 \u06a9\u0627\u0631 \u06a9\u06cc\u0633\u06d2 \u0628\u0646\u0627\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0622\u067e\u0631\u06cc\u0634\u0646\u0644 \u0645\u0633\u0627\u0626\u0644 (\u06c1\u06cc\u0644\u0645\u060c \u0627\u0645\u06cc\u062c \u0627\u0645\u067e\u0648\u0631\u0679\u060c \u0631\u062c\u0633\u0679\u0631\u06cc \u06cc\u0648 \u0622\u0631 \u0627\u06cc\u0644 \u0641\u0627\u0631\u0645\u06cc\u0679) \u0627\u0633 \u0628\u0627\u062a \u067e\u0631 \u0627\u062b\u0631 \u0627\u0646\u062f\u0627\u0632 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba \u06a9\u06c1 \u0622\u06cc\u0627 \u06a9\u0646\u0679\u0631\u0648\u0644 \u0648\u0627\u0642\u0639\u06cc \u0686\u0644\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0622\u067e \u06a9\u0648 CI \u0627\u0648\u0631 \u062f\u0627\u062e\u0644\u06c1 \u06a9\u0646\u0679\u0631\u0648\u0644 \u062f\u0648\u0646\u0648\u06ba \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06a9\u06cc\u0648\u06ba \u06c1\u06d2:<\/strong> CI \u0622\u067e \u06a9\u06d2 \u06a9\u0648\u0688 \u0645\u06cc\u06ba \u0645\u0633\u0627\u0626\u0644 \u06a9\u0648 \u067e\u06a9\u0691\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 Kyverno \u06c1\u0631 \u0648\u06c1 \u0686\u06cc\u0632 \u067e\u06a9\u0691\u062a\u0627 \u06c1\u06d2 \u062c\u0648 \u0622\u067e \u06a9\u06d2 \u06a9\u0644\u0633\u0679\u0631 \u06a9\u0648 \u0686\u06be\u0648\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u062b\u0628\u0648\u062a \u0679\u0631\u0645\u067e \u06a9\u06cc \u062a\u0639\u0645\u06cc\u0631:<\/strong> \u06af\u0679 \u06a9\u06cc \u067e\u0627\u0644\u06cc\u0633\u06cc \u0641\u0627\u0626\u0644\u0648\u06ba \u06a9\u0627 \u06a9\u0648\u0626\u06cc \u0645\u0637\u0644\u0628 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0645\u062f\u0627\u062e\u0644\u062a \u06a9\u06cc \u062a\u0631\u062f\u06cc\u062f \u0627\u0633 \u0628\u0627\u062a \u06a9\u0627 \u062b\u0628\u0648\u062a \u06c1\u06d2 \u06a9\u06c1 CIS \u06a9\u0646\u0679\u0631\u0648\u0644\u0632 \u0645\u0648\u062c\u0648\u062f \u06c1\u06cc\u06ba\u060c \u0646\u06c1 \u0635\u0631\u0641 \u062f\u0633\u062a\u0627\u0648\u06cc\u0632\u06cc\u06d4<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u0627\u0628 \u0622\u067e \u0627\u067e\u0646\u06d2 \u062a\u062c\u0631\u0628\u06d2 \u06a9\u06cc \u0641\u06c1\u0631\u0633\u062a \u0645\u06cc\u06ba \u06a9\u06cc\u0627 \u0688\u0627\u0644 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\/\u0627\u06cc\u06a9 \u0627\u0646\u0679\u0631\u0648\u06cc\u0648 \u0645\u06cc\u06ba \u06a9\u06c1\u06c1 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba:<\/strong><\/p>\n<blockquote>\n<p>Kyverno \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0644\u0627\u06af\u0648 \u062f\u0627\u062e\u0644\u06c1 \u06a9\u0646\u0679\u0631\u0648\u0644: \u0631\u0648\u0679 \u06a9\u0646\u0679\u06cc\u0646\u0631\u0632 \u06a9\u0648 \u0645\u0633\u062f\u0648\u062f \u06a9\u0631\u0646\u0627\u060c \u0645\u0631\u0627\u0639\u0627\u062a \u06a9\u0648 \u0628\u0691\u06be\u0627\u0646\u0627\u060c \u063a\u06cc\u0631 \u062f\u0633\u062a\u062e\u0637 \u0634\u062f\u06c1 \u0627\u0645\u06cc\u062c\u0632 \u063a\u0627\u0626\u0628 \u06a9\u0631\u0646\u0627\u060c \u0627\u0648\u0631 \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u067e\u0631 \u0648\u0633\u0627\u0626\u0644 \u06a9\u06cc \u062d\u062f\u0648\u062f: CIS Kubernetes \u0628\u06cc\u0646\u0686 \u0645\u0627\u0631\u06a9\u0633 \u067e\u0631 \u0646\u0642\u0634\u06c1 \u0644\u06af\u0627\u0646\u0627\u06d4<\/p>\n<\/blockquote>\n<p><code>make snapshot STAGE=4 && make snapshots<\/code>. \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba <code>clearledger.stage4<\/code>. \u062f\u06cc\u06a9\u06be\u06cc\u06ba \u06a9\u06c1 \u0627\u067e\u0646\u06cc \u062a\u0631\u0642\u06cc \u06a9\u0648 \u06a9\u06cc\u0633\u06d2 \u0628\u0686\u0627\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4<\/p>\n<h2 id=\"heading-stage-5-secrets-management-vault\">\u0645\u0631\u062d\u0644\u06c1 5: \u062e\u0641\u06cc\u06c1 \u0627\u0646\u062a\u0638\u0627\u0645 (\u0648\u0627\u0644\u0679)<\/h2>\n<p>\u0627\u0633 \u0642\u062f\u0645 \u06a9\u06d2 \u0628\u0639\u062f\u060c \u062d\u0633\u0627\u0633 \u0642\u062f\u0631 Git \u06cc\u0627 etcd \u06a9\u06cc \u062d\u0645\u0627\u06cc\u062a \u06cc\u0627\u0641\u062a\u06c1 Kubernetes Secret \u0645\u06cc\u06ba \u0645\u0632\u06cc\u062f \u0645\u0648\u062c\u0648\u062f \u0646\u06c1\u06cc\u06ba \u0631\u06c1\u06d2 \u06af\u06cc\u06d4 \u0648\u0627\u0644\u0679 \u0627\u0646 \u0627\u0642\u062f\u0627\u0631 \u06a9\u0648 \u0645\u0631\u06a9\u0632\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0631\u06a9\u06be\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0646\u06c1\u06cc\u06ba Pod \u0645\u06cc\u06ba \u0635\u0631\u0641 \u0627\u0633 \u0648\u0642\u062a \u062f\u0627\u062e\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0628 \u06cc\u06c1 \u0634\u0631\u0648\u0639 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u0622\u067e \u06a9\u06d2 \u0645\u0642\u0627\u0635\u062f:<\/strong> \u06c1\u0679\u0627 \u062f\u06cc\u06ba <code>auth-service-secret<\/code> \u0627\u0648\u0631 <code>ledger-service-secret<\/code> \u062c\u06be\u0631\u0645\u0679 \u0645\u06cc\u06ba\u06d4<\/p>\n<p>Vault \u067e\u0648\u0688 \u0627\u0633\u0679\u0627\u0631\u0679 \u0627\u067e \u067e\u0631 \u0627\u0633\u0646\u0627\u062f \u06a9\u0648 \u0627\u0646\u062c\u06cc\u06a9\u0634\u0646 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0644\u06c1\u0630\u0627 \u0644\u0627\u06af \u0627\u0646 \u0627\u0648\u0631 API \u06a9\u0627\u0644\u0632 \u06a9\u0648 \u06a9\u0627\u0645 \u06a9\u0631\u0646\u0627 \u062c\u0627\u0631\u06cc \u0631\u06a9\u06be\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4 \u0627\u0633 \u0648\u0642\u062a \u062c\u0628 \u062e\u0641\u06cc\u06c1 \u0627\u0646\u062a\u0638\u0627\u0645 \u06a9\u0644\u06a9 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u0627\u0633 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06a9\u06c1 \u0622\u067e \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba\u06d4<\/strong>\u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u0626\u06cc\u06ba \u06a9\u06c1 \u0645\u0631\u062d\u0644\u06c1 4 \u0679\u06be\u0648\u0633 \u06c1\u06d2\u06d4 <code>make check-4<\/code> \u0645\u0646\u0638\u0648\u0631 \u06c1\u0648\u0646\u06d2 \u067e\u0631\u060c \u062a\u0645\u0627\u0645 \u067e\u0627\u0646\u0686 Kyverno \u067e\u0627\u0644\u06cc\u0633\u06cc\u0627\u06ba \u0646\u0627\u0641\u0630 \u06c1\u0648 \u062c\u0627\u0626\u06cc\u06ba \u06af\u06cc \u0627\u0648\u0631 \u0627\u06cc\u067e \u0627\u0633 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062c\u0648\u0627\u0628 \u062f\u06d2 \u06af\u06cc: <code>http:\/\/clearledger.local<\/code>. \u0648\u0627\u0644\u0679 \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06a9\u0631\u06cc\u0634 \u06c1\u0648\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0631\u06cc\u067e\u06cc\u0679 \u067e\u0648\u0688\u0632 \u06a9\u0648 \u062f\u0631\u0633\u062a \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-what-changes-in-this-stage\">\u0627\u0633 \u0645\u0631\u062d\u0644\u06d2 \u067e\u0631 \u06a9\u06cc\u0627 \u062a\u0628\u062f\u06cc\u0644\u06cc\u0627\u06ba \u0622\u062a\u06cc \u06c1\u06cc\u06ba\u061f<\/h3>\n<p>\u0645\u0648\u062c\u0648\u062f\u06c1 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u067e\u0627\u0633 \u0648\u0631\u0688 \u0627\u0648\u0631 JWT \u06a9\u0644\u06cc\u062f \u06c1\u06cc\u06ba\u06d4 <code>secret.yaml<\/code> GitHub \u067e\u0631 \u0627\u0648\u0631 \u0622\u067e \u06a9\u06d2 \u06a9\u0644\u0633\u0679\u0631 \u06a9\u06d2 \u0627\u0646\u062f\u0631 Kubernetes Secrets \u0645\u06cc\u06ba \u0641\u0627\u0626\u0644\u06cc\u06ba\u06d4 \u0645\u0631\u062d\u0644\u06c1 5 \u0645\u06cc\u06ba\u060c \u0642\u062f\u0631 \u06c1\u06d2\u06d4 <strong>\u06c1\u0627\u0634\u06cc \u06a9\u0627\u0631\u067e \u0648\u0627\u0644\u0679<\/strong> \u0627\u06cc\u067e \u0622\u067e \u06a9\u0648 \u0645\u062e\u062a\u0644\u0641 \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u067e\u0691\u06be\u0646\u0627 \u0633\u06a9\u06be\u0627 \u0633\u06a9\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u062c\u0628 \u062a\u0635\u062f\u06cc\u0642 \u06cc\u0627 \u0644\u06cc\u062c\u0631 \u067e\u0648\u0688 \u0634\u0631\u0648\u0639 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 <strong>\u0628\u0648\u0644\u0679 \u0627\u06cc\u062c\u0646\u0679 \u0627\u0646\u062c\u06cc\u06a9\u0679\u0631<\/strong> \u0627\u06cc\u06a9 \u0686\u06be\u0648\u0679\u0627 \u0633\u0627 \u0633\u0627\u0626\u06cc\u0688 \u06a9\u0627\u0631 \u06a9\u0646\u0679\u06cc\u0646\u0631 \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 \u0633\u0627\u0626\u0688 \u06a9\u0627\u0631 \u0648\u0627\u0644\u0679 \u0645\u06cc\u06ba \u0644\u0627\u06af \u0627\u0646 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u067e\u0648\u0688 \u06a9\u0627 \u0627\u067e\u0646\u0627 \u0633\u0631\u0648\u0633 \u0627\u06a9\u0627\u0624\u0646\u0679 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u067e\u0627\u0633 \u0648\u0631\u0688 \u0627\u0648\u0631 JWT \u0644\u06cc\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0627\u0646\u06c1\u06cc\u06ba \u0646\u06cc\u0686\u06d2 \u06a9\u06cc \u0641\u0627\u0626\u0644 \u0645\u06cc\u06ba \u0644\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u06d4 <code>\/vault\/secrets\/<\/code>.<\/p>\n<p>\u0627\u06cc\u067e \u067e\u06c1\u0644\u06d2 \u06c1\u06cc \u062c\u0627\u0646\u062a\u06cc \u06c1\u06d2 \u06a9\u06c1 \u0627\u0633 \u0631\u0627\u0633\u062a\u06d2 \u06a9\u0648 \u06a9\u06cc\u0633\u06d2 \u067e\u0691\u06be\u0646\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0648\u06c1\u06cc \u0688\u06cc\u0679\u0627 \u06c1\u06d2 \u062c\u0648 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u067e\u06c1\u0646\u0686\u0627 \u06c1\u06d2\u06d4 <code>secretKeyRef<\/code>\u0627\u0633\u06d2 Kubernetes \u0633\u06cc\u06a9\u0631\u06cc\u0679 \u0622\u0628\u062c\u06cc\u06a9\u0679 \u0633\u06d2 \u0628\u0627\u0632\u06cc\u0627\u0641\u062a \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0631\u0646 \u0679\u0627\u0626\u0645 \u067e\u0631 \u0645\u0646\u062a\u0642\u0644 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0645\u0646\u062a\u0642\u0644\u06cc \u0645\u06a9\u0645\u0644 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f \u062d\u0633\u0627\u0633 \u0627\u0642\u062f\u0627\u0631 \u06a9\u0648 \u0645\u062d\u0641\u0648\u0638 \u06a9\u0631 \u0644\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 <strong>\u0648\u0627\u0644\u0679<\/strong> (\u0637\u0648\u06cc\u0644 \u0645\u062f\u062a\u06cc \u0633\u0679\u0648\u0631) \u0645\u062e\u062a\u0635\u0631 \u0637\u0648\u0631 \u067e\u0631 \u0648\u0636\u0627\u062d\u062a \u06a9\u06cc. <strong>\u067e\u0648\u0688 \u0641\u0627\u0626\u0644 \u0633\u0633\u0679\u0645<\/strong> \u062c\u0628\u06a9\u06c1 \u06a9\u0646\u0679\u06cc\u0646\u0631 \u0686\u0644 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4 \u0648\u06c1 \u0627\u0628 \u06af\u0679 \u0645\u06cc\u06ba \u0646\u06c1\u06cc\u06ba \u06c1\u06cc\u06ba\u06d4 \u0622\u067e \u06c1\u0679\u0627 \u062f\u06cc\u06ba <code>secret.yaml<\/code> \u0633\u06d2 <code>clearledger-infra<\/code> ArgoCD \u062a\u0642\u0633\u06cc\u0645 \u06a9\u06cc \u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631\u06cc \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0648 \u0627\u0633 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0648\u0627\u0644\u0679 \u06a9\u06cc \u0637\u0631\u0641 \u0627\u0634\u0627\u0631\u06c1 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u067e\u06c1\u0644\u06cc \u0628\u0627\u0631 Vault \u0644\u0648\u0688 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u0679\u06cc\u0645\u067e\u0644\u06cc\u0679 \u06a9\u0648 \u0645\u0642\u0627\u0645\u06cc \u0637\u0648\u0631 \u067e\u0631 \u06a9\u0627\u067e\u06cc \u06a9\u0631\u06cc\u06ba\u06d4 <code>.env<\/code> \u0641\u0627\u0626\u0644\u06cc\u06ba (\u00a75.1)\u06d4 \u0627\u0646 \u0641\u0627\u0626\u0644\u0648\u06ba \u06a9\u0648 \u0646\u0638\u0631 \u0627\u0646\u062f\u0627\u0632 \u06a9\u0631 \u062f\u06cc\u0627 \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4 \u062a\u0645 \u062f\u0648\u0691\u0648 <code>seed-vault-secrets.sh<\/code> \u0627\u06af\u0631 \u0622\u067e \u0627\u0633 \u0642\u062f\u0631 \u06a9\u0648 \u0648\u0627\u0644\u0679 \u0645\u06cc\u06ba \u06a9\u0627\u067e\u06cc \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0622\u067e \u06a9\u0648 \u0627\u0633\u06d2 \u0635\u0631\u0641 \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0635\u0644 \u062e\u0641\u06cc\u06c1 \u0642\u062f\u0631 \u06a9\u0645\u0679\u0688 \u0627\u0633\u06a9\u0631\u067e\u0679 \u067e\u0631 \u0646\u06c1\u06cc\u06ba \u0644\u06a9\u06be\u06cc \u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4 \u0633\u06a9\u0631\u067e\u0679 \u0645\u0642\u0627\u0645\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0631\u0627\u0632 \u06a9\u0648 \u067e\u0691\u06be\u062a\u0627 \u06c1\u06d2\u06d4 <code>.env<\/code> \u06cc\u06c1 \u0641\u0627\u0626\u0644 \u06cc\u0627 \u0679\u0631\u0645\u06cc\u0646\u0644 \u0645\u06cc\u06ba \u0645\u062d\u0641\u0648\u0638 \u06c1\u06d2\u060c \u0644\u06c1\u0630\u0627 \u0622\u067e \u06a9\u0627 \u067e\u0627\u0633 \u0648\u0631\u0688 \u0627\u0648\u0631 \u0679\u0648\u06a9\u0646 \u06af\u0679 \u0645\u06cc\u06ba \u0646\u06c1\u06cc\u06ba \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-do-the-steps-in-this-order\">\u0627\u0633 \u062a\u0631\u062a\u06cc\u0628 \u0645\u06cc\u06ba \u0627\u0642\u062f\u0627\u0645\u0627\u062a \u067e\u0631 \u0639\u0645\u0644 \u06a9\u0631\u06cc\u06ba:<\/h3>\n<p>\u06c1\u0631 \u0642\u062f\u0645 \u067e\u0686\u06be\u0644\u06d2 \u0645\u0631\u062d\u0644\u06d2 \u067e\u0631 \u0645\u0646\u062d\u0635\u0631 \u06c1\u06d2\u06d4 \u0633\u0631\u062e \u062a\u0648\u062b\u06cc\u0642\/\u0644\u06cc\u062c\u0631 \u067e\u0648\u0688 \u062d\u0627\u0635\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0633\u0628 \u0633\u06d2 \u0639\u0627\u0645 \u0637\u0631\u06cc\u0642\u06c1 \u0622\u06af\u06d2 \u0628\u0691\u06be\u0627\u0646\u0627 \u06c1\u06d2 \u062c\u0648 \u06a9\u06c1 \u0633\u0645\u062c\u06be\u0648\u062a\u06c1 \u0634\u062f\u06c1 \u0627\u06cc\u067e \u06a9\u06cc \u0637\u0631\u062d \u0644\u06af\u062a\u0627 \u06c1\u06d2 \u0644\u06cc\u06a9\u0646 \u0627\u0633 \u06a9\u0627 \u0627\u0635\u0644 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \"\u0648\u0627\u0644\u0679 \u0627\u0628\u06be\u06cc \u062a\u06cc\u0627\u0631 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\"\u06d4<\/p>\n<ol>\n<li>\n<p><strong>\u00a75.1<\/strong>: \u0646\u0642\u0644 <code>stages\/stage-5-secrets-management\/.env.example<\/code> \u06a9\u0648 <code>.env<\/code>\u0627\u067e\u0646\u0627 \u06a9\u0644\u0633\u0679\u0631 \u067e\u0627\u0633 \u0648\u0631\u0688 \u062f\u0631\u062c \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u00a75.2<\/strong>: \u06c1\u06cc\u0644\u0645 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0648\u0627\u0644\u0679 \u0627\u0648\u0631 \u0627\u06cc\u062c\u0646\u0679 \u0627\u0646\u062c\u06cc\u06a9\u0679\u0631 \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u00a75.3<\/strong>. \u0686\u0644\u0627\u0626\u06cc\u06ba <code>setup.sh<\/code>\u067e\u06be\u0631 <code>seed-vault-secrets.sh<\/code> (\u067e\u0627\u0633 \u0648\u0631\u0688 \u0627\u0628 \u0648\u0627\u0644\u0679 \u0645\u06cc\u06ba \u06c1\u06d2)<\/p>\n<\/li>\n<li>\n<p><strong>\u00a75.4<\/strong>: \u0648\u0627\u0644\u0679 \u06a9\u06d2 \u0642\u0627\u0628\u0644 \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u06a9\u0648 \u0627\u0633 \u067e\u0631 \u067e\u0634 \u06a9\u0631\u06cc\u06ba: <code>clearledger-infra<\/code>. \u0627\u067e\u0646\u06d2 ArgoCD \u06a9\u0648 \u06c1\u0645 \u0622\u06c1\u0646\u06af \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u00a75.5<\/strong>. \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u0648 <strong>2\/2<\/strong> Pod (app + Vault sidecar) \u06a9\u0648 \u062d\u0630\u0641 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f\u060c \u067e\u0631\u0627\u0646\u06d2 Kubernetes Secrets \u06a9\u0648 \u062d\u0630\u0641 \u06a9\u0631 \u062f\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u00a75.5b<\/strong>: ArgoCD <strong>\u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631 \/ \u0679\u06be\u06cc\u06a9 \u06c1\u06d2\u06d4<\/strong> (\u0631\u0627\u0632 \u06a9\u0648 \u062d\u0630\u0641 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f\u06d4 \u062d\u0630\u0641 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 OutOfSync \u0645\u0639\u0645\u0648\u0644 \u06a9\u06cc \u0628\u0627\u062a \u06c1\u06d2)<\/p>\n<\/li>\n<li>\n<p><strong>\u00a75.6<\/strong>. \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u062c\u0628 \u0622\u067e \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631 \u0644\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba \u06a9\u06c1 \u0622\u067e \u06a9\u0627 \u0644\u0627\u06af \u0627\u0646 \u06a9\u0627\u0645 \u06a9\u0631 \u0631\u06c1\u0627 \u06c1\u06d2\u060c \u0622\u067e \u06a9\u06cc \u0627\u0633\u0646\u0627\u062f \u0646\u06cc\u0686\u06d2 \u0638\u0627\u06c1\u0631 \u06c1\u0648\u06ba \u06af\u06cc\u06d4 <code>\/vault\/secrets\/<\/code> \u067e\u06be\u0644\u06cc \u06a9\u0627 \u062f\u0627\u062e\u0644\u06c1<\/p>\n<\/li>\n<\/ol>\n<p>\u0648\u0642\u062a \u0634\u0631\u0648\u0639 <strong>\u00a75.1<\/strong>. \u0627\u06af\u0631 \u0622\u067e \u06a9\u06d2 \u067e\u0627\u0633 \u06a9\u0648\u0626\u06cc \u0646\u0627\u06a9\u0627\u0645\u06cc \u06c1\u06d2\u060c \u062a\u0648 \u0627\u0646\u06c1\u06cc\u06ba \u067e\u0691\u06be\u06cc\u06ba. <code>troubleshooting.md.<\/code> \u0645\u06cc\u0646\u06cc \u0641\u06cc\u0633\u0679 \u06a9\u0648 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u06d4<\/p>\n<h3 id=\"heading-51-create-env-local-only-never-commit\">5.1: \u062a\u062e\u0644\u06cc\u0642 <code>.env<\/code> (\u0635\u0631\u0641 \u0645\u0642\u0627\u0645\u06cc\u060c \u06a9\u0648\u0626\u06cc \u0639\u06c1\u062f \u0646\u06c1\u06cc\u06ba)<\/h3>\n<p>\u0627\u0633 \u0641\u0627\u0626\u0644 \u0645\u06cc\u06ba \u062f\u0648 \u0622\u0626\u0679\u0645\u0632 \u06c1\u06cc\u06ba: \u06c1\u06cc\u0644\u0645 (\u00a75.2) \u06a9\u06d2 \u0644\u06cc\u06d2 \u0688\u06cc\u0648\u0644\u067e\u0631 \u0648\u0627\u0644\u0679 \u0631\u0648\u0679 \u0679\u0648\u06a9\u0646 \u0627\u0648\u0631 \u00a75.3 \u0645\u06cc\u06ba \u0648\u0627\u0644\u0679 \u0645\u06cc\u06ba \u0644\u0648\u0688 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u067e\u0627\u0633 \u0648\u0631\u0688\u06d4<\/p>\n<p>\u06cc\u06c1 \u0635\u0631\u0641 \u0622\u067e \u06a9\u06d2 \u06a9\u0645\u067e\u06cc\u0648\u0679\u0631 \u067e\u0631 \u0631\u06c1\u062a\u0627 \u06c1\u06d2\u06d4 \u06a9\u0628\u06be\u06cc \u0639\u06c1\u062f \u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4 \u06a9\u06c1 <code>SEED_*<\/code> \u0642\u062f\u0631 \u0627\u0633 \u0633\u06d2 \u0645\u0645\u0627\u062b\u0644 \u06c1\u0648\u0646\u06cc \u0686\u0627\u06c1\u06cc\u06d2 \u062c\u0648 \u0622\u067e \u06a9\u06cc \u0627\u06cc\u067e \u0641\u06cc \u0627\u0644\u062d\u0627\u0644 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06cc \u06c1\u06d2 \u062a\u0627\u06a9\u06c1 \u0633\u0627\u0626\u0646 \u0627\u0646 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u0631\u06c1\u06d2 \u0686\u0627\u06c1\u06d2 \u0622\u067e \u0628\u0639\u062f \u0645\u06cc\u06ba Kubernetes Secret \u06a9\u0648 \u062d\u0630\u0641 \u06a9\u0631 \u062f\u06cc\u06ba\u06d4<\/p>\n<p>\u062f\u0648 \u0645\u062e\u062a\u0644\u0641 \u0641\u0627\u0626\u0644\u06cc\u06ba\u06d4 <strong>\u0627\u0644\u062c\u06be\u0646 \u0645\u06cc\u06ba \u0646\u06c1 \u067e\u0691\u0648\u06d4<\/strong><\/p>\n<table>\n<thead>\n<tr>\n<th>\u0641\u0627\u0626\u0644<\/th>\n<th>\u06cc\u06c1 \u06a9\u06cc\u0627 \u06c1\u06d2<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>stages\/stage-5-secrets-management\/.env.example<\/code><\/td>\n<td>\u0627\u0633\u06d2 \u0627\u067e\u0646\u06d2 \u0631\u06cc\u067e\u0648\u0632\u0679\u0631\u06cc \u0645\u06cc\u06ba \u062e\u0627\u0644\u06cc \u0679\u06cc\u0645\u067e\u0644\u06cc\u0679 (\u062e\u0627\u0644\u06cc \u0641\u06cc\u0644\u0688\u0632) \u06a9\u06d2 \u0645\u0631\u062d\u0644\u06c1 1 \u0633\u06d2 \u06a9\u0627\u067e\u06cc \u06a9\u0631\u06cc\u06ba\u06d4<\/td>\n<\/tr>\n<tr>\n<td><code>stages\/stage-5-secrets-management\/.env<\/code><\/td>\n<td>\u06cc\u06c1 \u0622\u067e \u06a9\u06cc \u0627\u0635\u0644 \u0641\u0627\u0626\u0644 \u06c1\u06d2 (gitignored)\u06d4 \u0645\u0631\u062d\u0644\u06c1 2 \u0627\u0648\u0631 3 \u0645\u06cc\u06ba \u0628\u0646\u0627\u0626\u06cc\u06ba \u0627\u0648\u0631 \u0622\u0628\u0627\u062f \u06a9\u0631\u06cc\u06ba\u06d4<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u0627\u0633 \u0633\u06cc\u06a9\u0634\u0646 \u06a9\u06d2 \u0646\u0686\u0644\u06d2 \u062d\u0635\u06d2 \u0645\u06cc\u06ba \u0646\u0645\u0648\u0646\u06d2 \u06a9\u06d2 \u0628\u0644\u0627\u06a9\u0633 \u0635\u0631\u0641 \u0627\u0633 \u06a9\u06cc \u0645\u062b\u0627\u0644\u06cc\u06ba \u06c1\u06cc\u06ba \u062c\u0648 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4 <code>.env<\/code> \u06cc\u06c1 \u0645\u0646\u062f\u0631\u062c\u06c1 \u0630\u06cc\u0644 \u06c1\u06d2: \u067e\u0644\u06cc\u0633 \u06c1\u0648\u0644\u0688\u0631 \u067e\u0627\u0633 \u0648\u0631\u0688 \u06a9\u0627\u067e\u06cc \u0646\u06c1 \u06a9\u0631\u06cc\u06ba \u062c\u0628 \u062a\u06a9 \u06a9\u06c1 \u06cc\u06c1 \u0622\u067e \u06a9\u06d2 \u06a9\u0644\u0633\u0679\u0631 \u0633\u06d2 \u0645\u0645\u0627\u062b\u0644 \u0646\u06c1 \u06c1\u0648\u06d4<\/p>\n<h4 id=\"heading-step-1-copy-the-template-to-env\">\u0645\u0631\u062d\u0644\u06c1 1: \u0679\u06cc\u0645\u067e\u0644\u06cc\u0679 \u06a9\u0648 \u062f\u0631\u062c \u0630\u06cc\u0644 \u0645\u0642\u0627\u0645 \u067e\u0631 \u06a9\u0627\u067e\u06cc \u06a9\u0631\u06cc\u06ba: <code>.env<\/code><\/h4>\n<pre><code class=\"language-bash\">cp stages\/stage-5-secrets-management\/.env.example \n   stages\/stage-5-secrets-management\/.env\n<\/code><\/pre>\n<p>\u06cc\u06c1 \u0622\u067e \u06a9\u0648 \u0627\u06cc\u06a9 \u062e\u0627\u0644\u06cc \u0641\u0627\u0626\u0644 \u062f\u06d2 \u06af\u0627\u06d4 <code>VAULT_TOKEN=<\/code> \u0627\u0648\u0631 <code>SEED_*=<\/code> \u0633\u0645\u0648\u0686 \u0627\u0633\u06d2 \u0627\u06cc\u0688\u06cc\u0679\u0631 \u0645\u06cc\u06ba 2 \u0627\u0648\u0631 3 \u0645\u0631\u0627\u062d\u0644 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u06be\u0648\u0644\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-step-2-read-the-current-passwords-from-the-cluster\">\u0645\u0631\u062d\u0644\u06c1 2: \u06a9\u0644\u0633\u0679\u0631 \u0633\u06d2 \u0645\u0648\u062c\u0648\u062f\u06c1 \u067e\u0627\u0633 \u0648\u0631\u0688 \u067e\u0691\u06be\u06cc\u06ba<\/h4>\n<p>\u0627\u0633\u06d2 \u0631\u06cc\u067e\u0648 \u0631\u0648\u0679 \u0633\u06d2 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4 \u06c1\u0631 \u06a9\u0645\u0627\u0646\u0688 \u0627\u06cc\u06a9 \u0642\u062f\u0631 \u067e\u0631\u0646\u0679 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0622\u0624\u0679 \u067e\u0679 \u06a9\u0648 \u062f\u0631\u062c \u0630\u06cc\u0644 \u0645\u0642\u0627\u0645 \u067e\u0631 \u06a9\u0627\u067e\u06cc \u06a9\u0631\u06cc\u06ba: <code>.env<\/code> \u0645\u0631\u062d\u0644\u06c1 3 \u0645\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\"># \u2192 paste as SEED_AUTH_DATABASE_URL\nkubectl get secret auth-service-secret -n clearledger \n  -o jsonpath=\"{.data.database_url}\" | base64 -d; echo\n\n# \u2192 paste as SEED_AUTH_JWT_SECRET\nkubectl get secret auth-service-secret -n clearledger \n  -o jsonpath=\"{.data.jwt_secret}\" | base64 -d; echo\n\n# \u2192 paste as SEED_LEDGER_DATABASE_URL\nkubectl get secret ledger-service-secret -n clearledger \n  -o jsonpath=\"{.data.database_url}\" | base64 -d; echo\n<\/code><\/pre>\n<h4 id=\"heading-step-3-fill-in-env\">\u0645\u0631\u062d\u0644\u06c1 3: \u0644\u06a9\u06be\u06cc\u06ba\u06d4 <code>.env<\/code><\/h4>\n<table>\n<thead>\n<tr>\n<th>\u0645\u062a\u063a\u06cc\u0631<\/th>\n<th>\u0645\u06cc\u06ba \u0627\u0633 \u0645\u06cc\u06ba \u06a9\u06cc\u0627 \u0688\u0627\u0644\u0648\u06ba\u061f<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>VAULT_TOKEN<\/code><\/td>\n<td>\u0622\u067e \u06a9\u06cc \u067e\u0633\u0646\u062f \u06a9\u06cc \u0635\u0631\u0641 \u062a\u0631\u0642\u06cc \u06a9\u06cc \u062a\u0627\u0631\u060c \u062c\u06cc\u0633\u06d2 <code>my-dev-root-token<\/code>): \u00a75.2 \u06c1\u06cc\u0644\u0645 \u06a9\u06cc \u062a\u0646\u0635\u06cc\u0628 \u062c\u06cc\u0633\u06cc \u0642\u062f\u0631<\/td>\n<\/tr>\n<tr>\n<td><code>SEED_AUTH_DATABASE_URL<\/code><\/td>\n<td>\u0627\u0648\u067e\u0631 \u06a9\u06cc \u067e\u06c1\u0644\u06cc \u06a9\u0645\u0627\u0646\u0688 \u06a9\u0627 \u0622\u0624\u0679 \u067e\u0679<\/td>\n<\/tr>\n<tr>\n<td><code>SEED_AUTH_JWT_SECRET<\/code><\/td>\n<td>\u062f\u0648\u0633\u0631\u06cc \u06a9\u0645\u0627\u0646\u0688 \u06a9\u0627 \u0622\u0624\u0679 \u067e\u0679<\/td>\n<\/tr>\n<tr>\n<td><code>SEED_LEDGER_DATABASE_URL<\/code><\/td>\n<td>\u062a\u06cc\u0633\u0631\u06cc \u06a9\u0645\u0627\u0646\u0688 \u06a9\u0627 \u0622\u0624\u0679 \u067e\u0679<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><strong>\u0635\u0631\u0641 \u0646\u0645\u0648\u0646\u06c1: \u0645\u06a9\u0645\u0644 \u0634\u06a9\u0644<\/strong> <code>.env<\/code> (\u062c\u0628 \u062a\u06a9 \u0648\u06c1 \u0645\u0645\u0627\u062b\u0644 \u0646\u06c1 \u06c1\u0648\u06ba\u060c \u0627\u0646 \u0645\u062b\u0627\u0644 \u06a9\u06d2 \u062a\u0627\u0631\u0648\u06ba \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0645\u0631\u062d\u0644\u06c1 2 \u0633\u06d2 kubectl \u0622\u0624\u0679 \u067e\u0679 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba):<\/p>\n<pre><code class=\"language-text\">VAULT_TOKEN=my-dev-root-token\nSEED_AUTH_DATABASE_URL=postgresql:\/\/clearledger:changeme-stage0@postgres:5432\/clearledger\nSEED_AUTH_JWT_SECRET=stage0-jwt-secret-change-in-production\nSEED_LEDGER_DATABASE_URL=postgresql:\/\/clearledger:changeme-stage0@postgres:5432\/clearledger\n<\/code><\/pre>\n<p>\u0627\u06af\u0631 <code>auth-service-secret<\/code> \u0627\u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06c1\u06cc \u062d\u0630\u0641 \u06a9\u0631 \u062f\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2 (\u0622\u06af\u06d2 \u0686\u06be\u0648\u0691 \u062f\u06cc\u0627 \u06af\u06cc\u0627\u060c \u0645\u0646\u062f\u0631\u062c\u06c1 \u0630\u06cc\u0644 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0628\u0627\u0632\u06cc\u0627\u0641\u062a \u06a9\u0631\u06cc\u06ba)\u06d4<\/p>\n<pre><code class=\"language-bash\"># Database URL from Postgres bootstrap secret (lab default password is often changeme-stage0)\nPG_PASS=$(kubectl get secret postgres-secret -n clearledger \n  -o jsonpath=\"{.data.password}\" | base64 -d)\necho \"postgresql:\/\/clearledger:${PG_PASS}@postgres:5432\/clearledger\"\n# Use that line for both SEED_AUTH_DATABASE_URL and SEED_LEDGER_DATABASE_URL\n\n# JWT: same value you used at Stage 0, or read from Vault if you already seeded:\nkubectl exec -n vault vault-0 -- vault kv get -field=jwt_secret clearledger\/auth-service 2>\/dev\/null \n  || echo \"(set SEED_AUTH_JWT_SECRET manually \u2014 must match tokens already issued)\"\n<\/code><\/pre>\n<p>\u062c\u0627\u0631\u06cc \u0631\u06a9\u06be\u06cc\u06ba <strong>\u00a75.2<\/strong> \u0627\u06cc\u06a9 \u0628\u0627\u0631 <code>.env<\/code> \u062a\u0645\u0627\u0645 \u0686\u0627\u0631 \u0645\u062a\u063a\u06cc\u0631\u0627\u062a \u0633\u06cc\u0679 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-52-install-vault-and-the-agent-injector\">5.2: \u0648\u0627\u0644\u0679 \u0627\u0648\u0631 \u0627\u06cc\u062c\u0646\u0679 \u0627\u0646\u062c\u06cc\u06a9\u0679\u0631 \u06a9\u06cc \u062a\u0646\u0635\u06cc\u0628<\/h3>\n<pre><code class=\"language-bash\">set -a && source stages\/stage-5-secrets-management\/.env && set +a\n\nhelm repo add hashicorp https:\/\/helm.releases.hashicorp.com && helm repo update\n\n# First install:\nhelm install vault hashicorp\/vault \n  --namespace vault --create-namespace \n  --set server.dev.enabled=true \n  --set server.dev.devRootToken=\"${VAULT_TOKEN}\" \n  --set ui.enabled=true \n  --set injector.enabled=true\n\n# If helm install fails with \"cannot re-use a name\", use upgrade instead:\n# helm upgrade --install vault hashicorp\/vault \n#   --namespace vault --create-namespace \n#   --set server.dev.enabled=true \n#   --set server.dev.devRootToken=\"${VAULT_TOKEN}\" \n#   --set ui.enabled=true \n#   --set injector.enabled=true\n\nkubectl wait --for=condition=ready pod \n  -l app.kubernetes.io\/name=vault -n vault --timeout=120s\nkubectl wait --for=condition=ready pod \n  -l app.kubernetes.io\/name=vault-agent-injector -n vault --timeout=120s\n\nkubectl apply -f stages\/stage-5-secrets-management\/infra\/vault-ingress.yaml\n<\/code><\/pre>\n<p>\u06a9\u06be\u0644\u0627 <code>http:\/\/vault.local<\/code> \u0622\u067e \u06a9\u06d2 \u0628\u0631\u0627\u0624\u0632\u0631 \u0645\u06cc\u06ba\u06d4 \u062f\u0631\u062c \u0630\u06cc\u0644 \u062a\u0631\u062a\u06cc\u0628\u0627\u062a \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0644\u0627\u06af \u0627\u0646 \u06a9\u0631\u06cc\u06ba: <code>VAULT_TOKEN<\/code> \u06a9\u0648 <code>stages\/stage-5-secrets-management\/.env<\/code>. \u0645\u062b\u0627\u0644 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631\u060c \u0622\u067e \u06a9\u06d2 \u0645\u0639\u0627\u0645\u0644\u06d2 \u0645\u06cc\u06ba <code>.env<\/code> \u06c1\u06d2 <code>VAULT_TOKEN=my-dev-root-token<\/code>\u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba <code>my-dev-root-token<\/code> \u0627\u067e\u0646\u06d2 \u0648\u0627\u0644\u0679 \u0644\u0627\u06af \u0627\u0646 \u0679\u0648\u06a9\u0646 \u06a9\u06d2 \u0633\u0627\u062a\u06be\u06d4<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/07\/1785194532_474_Homelab-\u0633\u06d2-AWS-\u062a\u06a9-\u067e\u0631\u0648\u0688\u06a9\u0634\u0646-\u06a9\u06d2-\u0644\u06cc\u06d2-\u062a\u06cc\u0627\u0631-DevSecOps-\u067e\u0644\u06cc\u0679.png\" alt=\"\u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679 \u0648\u0627\u0644\u0679 UI \u062f\u06a9\u06be\u0627 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4\" style=\"display:block;margin:0 auto\" width=\"1301\" height=\"696\" loading=\"lazy\" title=\"\"><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/07\/1785194532_866_Homelab-\u0633\u06d2-AWS-\u062a\u06a9-\u067e\u0631\u0648\u0688\u06a9\u0634\u0646-\u06a9\u06d2-\u0644\u06cc\u06d2-\u062a\u06cc\u0627\u0631-DevSecOps-\u067e\u0644\u06cc\u0679.png\" alt=\"\u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679 \u0648\u0627\u0644\u0679 UI \u062f\u06a9\u06be\u0627 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4\" style=\"display:block;margin:0 auto\" width=\"1283\" height=\"703\" loading=\"lazy\" title=\"\"><\/p>\n<p><strong>\u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba: \u0648\u0627\u0644\u0679 \u067e\u0648\u0688\u0632 \u06a9\u06cc \u0641\u06c1\u0631\u0633\u062a \u0628\u0646\u0627\u0626\u06cc\u06ba:<\/strong><\/p>\n<pre><code class=\"language-bash\">kubectl get pods -n vault\n<\/code><\/pre>\n<p><strong>\u062a\u0648\u0642\u0639 \u06a9\u0631\u06cc\u06ba: \u0648\u0627\u0644\u0679 \u067e\u0648\u0688:<\/strong><\/p>\n<pre><code class=\"language-text\">NAME                                   READY   STATUS    RESTARTS   AGE\nvault-0                                1\/1     Running   0          1m\nvault-agent-injector-8d6b668b4-xxxxx   1\/1     Running   0          1m\n<\/code><\/pre>\n<p><strong>\u0627\u06af\u0631<\/strong> <code>helm install<\/code> <strong>\u062e\u0631\u0627\u0628\u06cc: \"\u0646\u0627\u0645 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u062a\u0627\"<\/strong>: \u0648\u0627\u0644\u0679 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0627\u0646\u0633\u0679\u0627\u0644 \u06c1\u06d2\u06d4 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba <code>helm upgrade --install<\/code> \u0627\u0648\u067e\u0631 \u0628\u0644\u0627\u06a9.<\/p>\n<h3 id=\"heading-53-configure-vault-platform-seed-kv\">5.3: \u0648\u0627\u0644\u0679 \u06a9\u0646\u0641\u06cc\u06af\u0631\u06cc\u0634\u0646 (\u067e\u0644\u06cc\u0679 \u0641\u0627\u0631\u0645 + \u0633\u06cc\u0688 KV)<\/h3>\n<p>\u062f\u0648\u0646\u0648\u06ba \u0627\u0633\u06a9\u0631\u067e\u0679 \u06a9\u0648 \u062a\u0631\u062a\u06cc\u0628 \u0633\u06d2 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4 \u06c1\u0631 \u0627\u06cc\u06a9 \u06a9\u0648 \u067e\u0691\u06be\u06cc\u06ba <code>VAULT_TOKEN<\/code> \u0622\u067e \u06a9\u0627 <code>.env<\/code>.<\/p>\n<pre><code class=\"language-bash\">bash stages\/stage-5-secrets-management\/infra\/vault\/setup.sh\nbash stages\/stage-5-secrets-management\/infra\/vault\/seed-vault-secrets.sh\n<\/code><\/pre>\n<p><code>setup.sh<\/code>: \u06a9\u0644\u0633\u0679\u0631 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0648\u0627\u0644\u0679 \u06a9\u06cc \u062a\u06cc\u0627\u0631\u06cc: Kubernetes \u062a\u0648\u062b\u06cc\u0642\u060c KV \u062e\u0641\u06cc\u06c1 \u0627\u0633\u0679\u0648\u0631\u060c \u067e\u0627\u0644\u06cc\u0633\u06cc\u0627\u06ba \u0627\u0648\u0631 \u06a9\u0631\u062f\u0627\u0631 (\u062a\u0635\u062f\u06cc\u0642\/\u0644\u06cc\u062c\u0631 \u067e\u0648\u0688\u0632) <em>~ \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/em> \u0631\u0627\u0632 \u0628\u0639\u062f \u0645\u06cc\u06ba \u062d\u0627\u0635\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 \u06c1\u0645 \u0627\u0628\u06be\u06cc \u062a\u06a9 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u0627 \u067e\u0627\u0633 \u0648\u0631\u0688 \u0646\u06c1\u06cc\u06ba \u0644\u06a9\u06be\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u0648\u0631 \u06af\u0679 \u06a9\u0648 \u06a9\u0686\u06be \u0628\u06be\u06cc \u0646\u06c1\u06cc\u06ba \u062f\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><code>seed-vault-secrets.sh<\/code>: \u0644\u06d2 \u0644\u0648 <code>SEED_*<\/code> \u0644\u0627\u0626\u0646 <code>.env<\/code> \u0627\u0633\u06d2 \u0648\u0627\u0644\u0679 \u0645\u06cc\u06ba \u0645\u062d\u0641\u0648\u0638 \u06a9\u0631\u06cc\u06ba\u06d4 <code>clearledger\/data\/auth-service<\/code> \u0627\u0648\u0631 <code>clearledger\/data\/ledger-service<\/code>. \u0642\u062f\u0631 \u0679\u0631\u0645\u06cc\u0646\u0644 \u0645\u06cc\u06ba \u0638\u0627\u06c1\u0631 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u06a9\u0633\u06cc \u0628\u06be\u06cc \u0627\u0633\u06a9\u0631\u067e\u0679 \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0686\u0644\u0627\u0646\u0627 \u0645\u0634\u0642 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u062d\u0641\u0648\u0638 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u0645\u062a\u0648\u0642\u0639\u060c<\/strong> <code>setup.sh<\/code> <strong>(\u062f\u0645):<\/strong><\/p>\n<pre><code class=\"language-text\">==> Enabling Kubernetes auth method...\n==> Configuring Kubernetes auth...\n==> Enabling KV secrets engine...\n==> Creating Vault policies...\n==> Creating Kubernetes auth roles...\n==> Applying RBAC + ServiceAccounts...\n\n\u2713 Vault platform setup complete (no secrets written yet).\n  Next: bash stages\/stage-5-secrets-management\/infra\/vault\/seed-vault-secrets.sh\n<\/code><\/pre>\n<p><strong>\u0645\u062a\u0648\u0642\u0639\u060c<\/strong> <code>seed-vault-secrets.sh<\/code><strong>:<\/strong><\/p>\n<pre><code class=\"language-text\">==> Logging into Vault...\n==> Writing secrets to Vault KV (values are not printed)...\n======== Secret Path ========\nclearledger\/data\/auth-service\n======= Metadata =======\nKey                Value\n---                -----\ncreated_time       2026-06-01T15:31:53.538991153Z\nversion            1\n\u2713 Secrets stored at clearledger\/data\/auth-service and clearledger\/data\/ledger-service\n<\/code><\/pre>\n<p><strong>\u0635\u0631\u0641 \u0645\u06cc\u0679\u0627 \u0688\u06cc\u0679\u0627 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/strong> (\u062e\u0641\u06cc\u06c1 \u0642\u06cc\u0645\u062a \u067e\u0631\u0646\u0679 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2):<\/p>\n<pre><code class=\"language-bash\">kubectl exec -n vault vault-0 -- vault kv metadata get clearledger\/auth-service\n<\/code><\/pre>\n<pre><code class=\"language-text\">Key                     Value\n---                     -----\ncas_required            false\ncreated_time            2026-06-01T15:31:53.538991153Z\ncurrent_version         1\ndelete_version_after    0s\nmax_versions            0\noldest_version          0\nupdated_time            2026-06-01T15:31:53.538991153Z\n<\/code><\/pre>\n<h3 id=\"heading-54-gitops-update-clearledger-infra-fixes-argocd-outofsync\">5.4: GitOps: \u0627\u067e \u0688\u06cc\u0679 \u06a9\u0631\u06cc\u06ba\u06d4 <code>clearledger-infra<\/code> (\u0641\u06a9\u0633\u0688 ArgoCD OutOfSync)<\/h3>\n<p>ArgoCD \u06a9\u06cc \u062a\u0642\u0633\u06cc\u0645 \u06a9\u06cc \u062c\u0627\u062a\u06cc \u06c1\u06d2: <code>clearledger-infra<\/code> \u063a\u06cc\u0631 \u0637\u06d2 \u0634\u062f\u06c1 GitHub \u0630\u062e\u06cc\u0631\u06c1 <code>clearledger<\/code> \u0627\u06cc\u067e \u0631\u06cc\u067e\u0648\u0632\u0679\u0631\u06cc \u062c\u0633 \u067e\u0631 \u0645\u06cc\u06ba \u0641\u06cc \u0627\u0644\u062d\u0627\u0644 \u06a9\u0627\u0645 \u06a9\u0631 \u0631\u06c1\u0627 \u06c1\u0648\u06ba\u06d4 \u067e\u06c1\u0644\u06d2 \u06cc\u06c1\u0627\u06ba \u0645\u06cc\u0646\u06cc \u0641\u06cc\u0633\u0679 \u0645\u06cc\u06ba \u062a\u0631\u0645\u06cc\u0645 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u067e\u06be\u0631 \u0648\u06c1\u06cc \u062a\u0628\u062f\u06cc\u0644\u06cc\u0627\u06ba \u06a9\u0631\u06cc\u06ba\u06d4 <code>clearledger-infra<\/code> \u062a\u0627\u06a9\u06c1 ArgoCD \u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631 \u06c1\u0648 \u0633\u06a9\u06d2\u06d4 \u0622\u06c1\u0633\u062a\u06c1 \u0633\u06d2 \u06a9\u0627\u0645 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u06c1\u0631 \u0630\u06cc\u0644\u06cc \u0642\u062f\u0645 \u06a9\u06d2 \u0628\u0639\u062f \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-54a-update-manifests-in-the-app-repo-clearledger\">5.4a \u0627\u06cc\u067e \u0627\u0633\u0679\u0648\u0631 \u0645\u06cc\u06ba \u0627\u067e \u0688\u06cc\u0679 \u0645\u06cc\u0646\u06cc \u0641\u06cc\u0633\u0679 (<code>clearledger<\/code>)<\/h4>\n<pre><code class=\"language-bash\">cp stages\/stage-5-secrets-management\/infra\/manifests\/auth-service\/deployment.yaml \n   infra\/manifests\/auth-service\/deployment.yaml\n\ncp stages\/stage-5-secrets-management\/infra\/manifests\/ledger-service\/deployment.yaml \n   infra\/manifests\/ledger-service\/deployment.yaml\n\nmkdir -p infra\/manifests\/vault\n\ncp infra\/deferred-by-stage\/stage-5-secrets-management\/vault\/rotation-cronjob.yaml \n   infra\/manifests\/vault\/rotation-cronjob.yaml\n\nrm -f infra\/manifests\/auth-service\/secret.yaml infra\/manifests\/ledger-service\/secret.yaml\n<\/code><\/pre>\n<h4 id=\"heading-54b-edit-inframanifestskustomizationyaml-by-hand\">5.4b \u062a\u0631\u0645\u06cc\u0645 \u06a9\u0631\u06cc\u06ba <code>infra\/manifests\/kustomization.yaml<\/code> \u06c1\u0627\u062a\u06be \u0633\u06d2<\/h4>\n<p>\u0641\u0627\u0626\u0644 \u06a9\u0648 \u0627\u06cc\u0688\u06cc\u0679\u0631 \u0645\u06cc\u06ba \u06a9\u06be\u0648\u0644\u06cc\u06ba\u06d4 \u067e\u0631 <code>resources:<\/code> \u0627\u0646\u0648\u06cc\u0646\u0679\u0631\u06cc:<\/p>\n<ul>\n<li>\n<p><strong>\u06c1\u0679\u0627 \u062f\u06cc\u06ba<\/strong> \u0627\u06cc\u067e \u06a9\u06d2 \u0631\u0627\u0632: \u0627\u0646 \u062f\u0648 \u0644\u0627\u0626\u0646\u0648\u06ba \u06a9\u0648 \u062d\u0630\u0641 \u06a9\u0631\u06cc\u06ba \u06cc\u0627 \u0627\u0646 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u062a\u0628\u0635\u0631\u06c1 \u06a9\u0631\u06cc\u06ba: <code>#<\/code> (\u062f\u0648\u0646\u0648\u06ba \u06a9\u0627\u0645 \u06a9\u0631\u06cc\u06ba \u06af\u06d2 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u06a9\u0633\u0679\u0645\u0627\u0626\u0632 \u0627\u0646 \u06a9\u0648 \u0646\u0638\u0631 \u0627\u0646\u062f\u0627\u0632 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <code>#<\/code> \u0633\u0645\u0648\u0686):<\/p>\n<pre><code class=\"language-yaml\">- auth-service\/secret.yaml\n- ledger-service\/secret.yaml\n<\/code><\/pre>\n<\/li>\n<li>\n<p><strong>\u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba<\/strong> \u06cc\u06c1 \u0644\u0627\u0626\u0646 (\u062f\u06cc\u06af\u0631 \u0648\u0633\u0627\u0626\u0644 \u06a9\u06d2 \u0633\u0627\u062a\u06be):<\/p>\n<pre><code class=\"language-yaml\">- vault\/rotation-cronjob.yaml\n<\/code><\/pre>\n<\/li>\n<\/ul>\n<p>\u0686\u06be\u0648\u0691 \u062f\u0648 <code>postgres\/postgres-secret.yaml<\/code>\u06cc\u06c1 \u0635\u0631\u0641 \u067e\u0648\u0633\u0679\u06af\u0631\u06cc\u0633 \u0628\u0648\u0679\u0633\u0679\u0631\u06cc\u067e\u0646\u06af \u06a9\u06d2 \u0644\u06cc\u06d2 \u06c1\u06d2\u060c \u0627\u06cc\u067e \u06a9\u06cc \u0627\u0633\u0646\u0627\u062f \u0646\u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u062d\u0627\u0635\u0644 \u06a9\u0631\u06cc\u06ba \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba:<\/p>\n<pre><code class=\"language-bash\"># Active (uncommented) app secret lines must be gone \u2014 postgres-secret is OK\ngrep -E '^[[:space:]]*-[[:space:]]+(auth-service|ledger-service)\/secret.yaml' \n  infra\/manifests\/kustomization.yaml && echo \"STOP: app secrets still active\" || echo \"OK\"\n\ngrep vault\/rotation-cronjob.yaml infra\/manifests\/kustomization.yaml\ngrep vault.hashicorp infra\/manifests\/auth-service\/deployment.yaml | head -1\nkustomize build infra\/manifests >\/dev\/null && echo \"OK: kustomize build\"\n<\/code><\/pre>\n<p>\u0645\u062a\u0648\u0642\u0639: <code>OK<\/code>\u06af\u06be\u0648\u0645\u0646\u06d2 \u0648\u0627\u0644\u06cc \u06a9\u0631\u0648\u0646 \u062c\u0627\u0628\u0632 \u062f\u0631\u062c \u06c1\u06cc\u06ba\u060c \u067e\u06c1\u0644\u06cc \u0633\u0637\u0631 \u067e\u0631 \u0638\u0627\u06c1\u0631 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>vault.hashicorp.com\/agent-inject<\/code>\u06a9\u0633\u0679\u0645\u0627\u0626\u0632 \u06a9\u06cc \u062a\u0639\u0645\u06cc\u0631 \u06a9\u0627\u0645\u06cc\u0627\u0628 \u0631\u06c1\u06cc\u06d4<\/p>\n<p>\u0639\u0632\u0645 <strong>\u0627\u06cc\u067e<\/strong> \u062c\u0628 \u0622\u067e \u062a\u06cc\u0627\u0631 \u06c1\u0648\u06ba \u062a\u0648\u060c \u0630\u062e\u06cc\u0631\u06c1: <code>git add infra\/manifests && git commit -m \"feat(stage-5): Vault deployments in canonical manifests\"<\/code>.<\/p>\n<h4 id=\"heading-54c-push-the-same-changes-to-clearledger-infra\">5.4c \u0627\u0646\u06c1\u06cc \u062a\u0628\u062f\u06cc\u0644\u06cc\u0648\u06ba \u06a9\u0648 \u067e\u0634 \u06a9\u0631\u06cc\u06ba: <code>clearledger-infra<\/code><\/h4>\n<pre><code class=\"language-bash\">git clone https:\/\/github.com\/YOUR_USERNAME\/clearledger-infra.git \/tmp\/clearledger-infra\n<\/code><\/pre>\n<p>\u0627\u06af\u0631 \u06a9\u0644\u0648\u0646 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 <code>destination path '\/tmp\/clearledger-infra' already exists<\/code> \u0627\u0633 \u0641\u0648\u0644\u0688\u0631 \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba (\u0627\u06af\u0631 \u0622\u067e \u0646\u06d2 \u0627\u0633\u06d2 \u00a71.3 \u06cc\u0627 \u067e\u0686\u06be\u0644\u06d2 \u0645\u0631\u0627\u062d\u0644 \u0645\u06cc\u06ba \u06a9\u0644\u0648\u0646 \u06a9\u06cc\u0627 \u06c1\u06d2)\u06d4 \u0627\u0633\u06d2 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0646\u0642\u0644 \u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">cd \/tmp\/clearledger-infra && git pull && cd -\n<\/code><\/pre>\n<p>\u06cc\u0627 \u062a\u0627\u0632\u06c1 \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba: <code>rm -rf \/tmp\/clearledger-infra<\/code> \u067e\u06be\u0631 \u062f\u0648\u0691\u0648 <code>git clone<\/code> \u062f\u0648\u0628\u0627\u0631\u06c1<\/p>\n<p><strong>\u067e\u06be\u0627\u0646\u0633\u06cc<\/strong> <code>cp<\/code> <strong>\u0645\u06cc\u0646 \u0633\u06d2 \u06a9\u0645\u0627\u0646\u0688<\/strong> <code>clearledger<\/code> <strong>\u0627\u06cc\u067e \u0627\u0633\u0679\u0648\u0631<\/strong>\u0633\u06d2 \u0646\u06c1\u06cc\u06ba <code>\/tmp\/clearledger-infra<\/code>. \u0622\u067e \u06a9\u0627 \u0634\u06cc\u0644 \u067e\u0631\u0627\u0645\u067e\u0679 \u0627\u0633 \u0637\u0631\u062d \u0646\u0638\u0631 \u0622\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2: <code>clearledger<\/code>\u0646\u06c1\u06cc\u06ba <code>clearledger-infra<\/code>. \u0630\u0631\u06cc\u0639\u06c1 \u0631\u0627\u0633\u062a\u06c1 <code>infra\/manifests\/...<\/code> \u06cc\u06c1 \u0635\u0631\u0641 \u0627\u06cc\u067e \u0627\u0633\u0679\u0648\u0631 \u0645\u06cc\u06ba \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\">cd ~\/clearledger    # main app repo \u2014 adjust path if yours differs\n\ncp infra\/manifests\/auth-service\/deployment.yaml \/tmp\/clearledger-infra\/manifests\/auth-service\/\ncp infra\/manifests\/ledger-service\/deployment.yaml \/tmp\/clearledger-infra\/manifests\/ledger-service\/\nmkdir -p \/tmp\/clearledger-infra\/manifests\/vault\ncp infra\/manifests\/vault\/rotation-cronjob.yaml \/tmp\/clearledger-infra\/manifests\/vault\/\ncp infra\/manifests\/kustomization.yaml \/tmp\/clearledger-infra\/manifests\/kustomization.yaml\nrm -f \/tmp\/clearledger-infra\/manifests\/auth-service\/secret.yaml\nrm -f \/tmp\/clearledger-infra\/manifests\/ledger-service\/secret.yaml\n\ncd \/tmp\/clearledger-infra\ngit add -A\ngit status\ngit commit -m \"feat(stage-5): Vault injection; remove app secrets from GitOps\"\ngit push\ncd -\n<\/code><\/pre>\n<p><strong> \u0686\u06cc\u06a9 \u067e\u0648\u0627\u0626\u0646\u0679\u0633 \u06a9\u06cc \u0645\u0634\u0642 \u06a9\u0631\u06cc\u06ba\u06d4 \u0645\u0631\u062d\u0644\u06c1 5 \u0644\u06cc\u0646\u0688\u0646\u06af \u06af\u0679 \u0627\u0648\u067e\u0633<\/strong><\/p>\n<pre><code class=\"language-bash\">git clone --depth 1 https:\/\/github.com\/YOUR_USERNAME\/clearledger-infra.git \/tmp\/verify-s5\ntest ! -f \/tmp\/verify-s5\/manifests\/auth-service\/secret.yaml && echo \"OK: app secret removed from Git\"\ngrep vault.hashicorp \/tmp\/verify-s5\/manifests\/auth-service\/deployment.yaml | head -1\ngrep vault\/rotation-cronjob.yaml \/tmp\/verify-s5\/manifests\/kustomization.yaml\nrm -rf \/tmp\/verify-s5\n<\/code><\/pre>\n<p>\u0645\u062a\u0648\u0642\u0639: <code>OK<\/code>\u0645\u06cc\u0631\u06d2 \u067e\u0627\u0633 \u0648\u0627\u0644\u0679 \u062a\u0634\u0631\u06cc\u062d \u06c1\u06d2\u060c \u0627\u0648\u0631 \u06a9\u0648\u0679\u0648\u0645\u0627\u0626\u0632\u06cc\u0634\u0646 \u0645\u06cc\u06ba \u0633\u0631\u06a9\u0644\u0631 \u0627\u06cc\u06a9\u0634\u0646 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u0645\u062a\u0648\u0642\u0639\u060c<\/strong> <code>git status<\/code> <strong>\u06a9\u0645\u0679 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 (\u0645\u0631\u062d\u0644\u06c1 5.4c):<\/strong><\/p>\n<pre><code class=\"language-text\">modified:   manifests\/auth-service\/deployment.yaml\nmodified:   manifests\/ledger-service\/deployment.yaml\nmodified:   manifests\/kustomization.yaml\nnew file:   manifests\/vault\/rotation-cronjob.yaml\ndeleted:    manifests\/auth-service\/secret.yaml\ndeleted:    manifests\/ledger-service\/secret.yaml\n<\/code><\/pre>\n<p>\u0628\u0639\u062f \u0645\u06cc\u06ba <code>git push<\/code>ArgoCD \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u0648\u0627\u0644\u0679 \u0633\u06d2 \u0686\u0644\u0646\u06d2 \u0648\u0627\u0644\u06cc \u062a\u0642\u0633\u06cc\u0645 \u06a9\u0648 \u062c\u0627\u0631\u06cc \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <strong>\u00a75.5 \u062a\u06a9 \u062c\u0627\u0631\u06cc \u0631\u06a9\u06be\u06cc\u06ba<\/strong>. \u062a\u0648\u0642\u0639 \u0646\u06c1 \u06a9\u0631\u0648 <strong>\u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631<\/strong> \u062a\u0627\u06c1\u0645\u060c \u0627\u06cc\u067e \u06a9\u06d2 \u0631\u0627\u0632 \u0627\u0633 \u0648\u0642\u062a \u062a\u06a9 \u06a9\u0644\u0633\u0679\u0631 \u0645\u06cc\u06ba \u0631\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u0628 \u062a\u06a9 \u06a9\u06c1 \u0622\u067e \u0627\u0646\u06c1\u06cc\u06ba \u06a9\u0644\u0633\u0679\u0631 \u0633\u06d2 \u062d\u0630\u0641 \u0646\u06c1\u06cc\u06ba \u06a9\u0631 \u062f\u06cc\u062a\u06d2\u06d4<\/p>\n<p><strong>\u0639\u0627\u0645 \u0644\u0627\u0646\u0686 \u06a9\u06cc \u0646\u0627\u06a9\u0627\u0645\u06cc\u0627\u06ba:<\/strong><\/p>\n<table>\n<thead>\n<tr>\n<th>\u0639\u0644\u0627\u0645\u062a<\/th>\n<th>\u0679\u06be\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>Duplicate value: \"vault-secrets\"<\/code><\/td>\n<td>\u06a9\u0631\u0648 <strong>~ \u0646\u06c1\u06cc\u06ba<\/strong> \u0627\u0639\u0644\u0627\u0646 <code>vault-secrets<\/code> \u062d\u062c\u0645 <code>deployment.yaml<\/code>: \u0627\u0646\u062c\u06cc\u06a9\u0679\u0631 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06c1 \u062a\u06cc\u0627\u0631 \u06a9\u0631\u062f\u06c1\u06d4<\/td>\n<\/tr>\n<tr>\n<td><code>Service appeared 2 times<\/code><\/td>\n<td>\u0628\u0631\u0642\u0631\u0627\u0631 \u0631\u06a9\u06be\u0646\u0627 <code>Service<\/code> \u0635\u0631\u0641 \u0645\u06cc\u06ba <code>service.yaml<\/code>\u06cc\u06c1 \u0646\u06cc\u0686\u06d2 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 <code>deployment.yaml<\/code><\/td>\n<\/tr>\n<tr>\n<td>\u06a9\u06cc\u0628\u0631\u0646\u0648 <code>containers\/0<\/code> <code>runAsNonRoot<\/code><\/td>\n<td>\u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba <code>runAsNonRoot: true<\/code> \u06a9\u0648 <strong>\u0627\u06cc\u067e<\/strong> \u06a9\u0646\u0679\u06cc\u0646\u0631 <code>securityContext<\/code>\u06c1\u0627\u06ba <code>spec.securityContext<\/code><\/td>\n<\/tr>\n<tr>\n<td>\u0641\u0648\u0631\u0688 \u0631\u06a9 \u06af\u06cc\u0627\u06d4 <code>1\/1<\/code> (\u06a9\u0648\u0626\u06cc \u0633\u0627\u0626\u0688 \u06a9\u0627\u0631 \u0646\u06c1\u06cc\u06ba)<\/td>\n<td>\u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba <code>injector.enabled=true<\/code> \u0627\u0648\u0631 \u062a\u0642\u0633\u06cc\u0645 \u06a9\u06d2 \u0644\u06cc\u06d2 <code>vault.hashicorp.com\/agent-inject: \"true\"<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>permission denied<\/code> \u0648\u0627\u0644\u0679 \u0627\u06cc\u062c\u0646\u0679 \u06a9\u06d2 \u0622\u063a\u0627\u0632 \u0645\u06cc\u06ba<\/td>\n<td>\u0686\u0644\u0627\u0626\u06cc\u06ba <code>setup.sh<\/code> : K8s \u06a9\u06cc \u062a\u0648\u062b\u06cc\u0642 \u06a9\u0627 \u06a9\u0631\u062f\u0627\u0631 \u0633\u0631\u0648\u0633 \u0627\u06a9\u0627\u0624\u0646\u0679 \u06a9\u0627 \u067e\u0627\u0628\u0646\u062f \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/td>\n<\/tr>\n<tr>\n<td>\u0622\u0631\u06af\u0648 \u0633\u06cc \u0688\u06cc <strong>\u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631\u06cc \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u06af\u0626\u06cc<\/strong> \u06a9\u0648 <code>CronJob\/vault-secret-rotation<\/code><\/td>\n<td>Kyverno \u0646\u06d2 \u0622\u067e\u0631\u06cc\u0634\u0646 \u06a9\u0648 \u0631\u0648\u06a9 \u062f\u06cc\u0627 \u06c1\u06d2\u06d4 <code>infra\/manifests\/vault\/rotation-cronjob.yaml<\/code> \u0634\u0627\u0645\u0644 \u06c1\u0648\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4 <code>runAsNonRoot<\/code>, <code>allowPrivilegeEscalation: false<\/code>, <code>capabilities.drop: [ALL]<\/code>\u0627\u0648\u0631 CPU\/\u0645\u06cc\u0645\u0648\u0631\u06cc \u06a9\u06cc \u062d\u062f\u0648\u062f\u06d4 \u0627\u067e\u0646\u06cc \u062a\u0631\u0627\u0645\u06cc\u0645 \u06a9\u0648 \u0622\u06af\u06d2 \u0628\u0691\u06be\u0627\u0626\u06cc\u06ba: <code>clearledger-infra<\/code>.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3 id=\"heading-55-wait-for-vault-injected-pods-then-delete-k8s-app-secrets\">5.5: \u0648\u0627\u0644\u0679 \u0645\u06cc\u06ba \u067e\u0648\u0688 \u0644\u06af\u0627\u0626\u06d2 \u062c\u0627\u0646\u06d2 \u06a9\u06d2 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u06d2 \u0628\u0639\u062f K8s \u0627\u06cc\u067e \u06a9\u06d2 \u0631\u0627\u0632 \u06a9\u0648 \u062d\u0630\u0641 \u06a9\u0631\u0646\u0627<\/h3>\n<p><strong>\u0648\u0627\u0644\u0679 \u0633\u0627\u0626\u0688 \u06a9\u0627\u0631 \u06a9\u0648 \u0638\u0627\u06c1\u0631 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062a\u0635\u062f\u06cc\u0642\/\u0644\u06cc\u062c\u0631 \u06a9\u0627 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u06cc\u06ba\u06d4<\/strong> (<code>READY 2\/2<\/code> = \u0627\u06cc\u067e + \u0648\u0627\u0644\u0679 \u0627\u06cc\u062c\u0646\u0679):<\/p>\n<pre><code class=\"language-bash\">kubectl get pods -n clearledger -l app=auth-service\nkubectl get pods -n clearledger -l app=ledger-service\n<\/code><\/pre>\n<p><strong>\u0645\u062a\u0648\u0642\u0639:<\/strong><\/p>\n<pre><code class=\"language-text\">NAME                            READY   STATUS    RESTARTS   AGE\nauth-service-5756d9fcb9-bmdlr   2\/2     Running   0          2m\nauth-service-5756d9fcb9-jtgss   2\/2     Running   0          2m\n<\/code><\/pre>\n<p>\u0633\u0627\u0626\u0688 \u06a9\u0627\u0631 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u062d\u0627\u0635\u0644 \u06a9\u0631\u062f\u06c1 \u0631\u0627\u0632\u0648\u06ba \u06a9\u0627 \u0645\u0639\u0627\u0626\u0646\u06c1 \u06a9\u0631\u06cc\u06ba (\u06a9\u0646\u0679\u06cc\u0646\u0631 \u0644\u0627\u06af \u06a9\u0648 \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba)\u06d4<\/p>\n<pre><code class=\"language-bash\">kubectl logs -n clearledger \n  $(kubectl get pod -n clearledger -l app=auth-service -o name | head -1) \n  -c vault-agent-init\n# ... Authentication successful, rendering templates ...\n<\/code><\/pre>\n<p><strong>\u067e\u06be\u0644\u06cc \u06a9\u06d2 2\/2 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f \u06c1\u06cc<\/strong>\u0627\u06cc\u067e \u06a9\u06d2 \u0631\u0627\u0632 \u06a9\u0648 \u062d\u0630\u0641 \u06a9\u0631\u06cc\u06ba:<\/p>\n<pre><code class=\"language-bash\">kubectl delete secret auth-service-secret ledger-service-secret -n clearledger\n<\/code><\/pre>\n<p><strong>\u067e\u06cc\u0634\u06cc\u0646 \u06af\u0648\u0626\u06cc\u0627\u06ba: \u0628\u0627\u0642\u06cc \u0631\u0627\u0632:<\/strong><\/p>\n<pre><code class=\"language-bash\">kubectl get secret -n clearledger\n<\/code><\/pre>\n<pre><code class=\"language-text\">NAME              TYPE     DATA   AGE\npostgres-secret   Opaque   2      6d\n<\/code><\/pre>\n<p><code>postgres-secret<\/code> \u06cc\u06c1 \u0635\u0631\u0641 \u067e\u0648\u0633\u0679\u06af\u0631\u06cc\u0633 \u0628\u0648\u0679\u0633\u0679\u0631\u06cc\u067e\u0646\u06af \u06a9\u06d2 \u0644\u06cc\u06d2 \u06c1\u06d2\u060c \u0627\u06cc\u067e \u06a9\u06cc \u0627\u0633\u0646\u0627\u062f \u06a9\u06d2 \u0644\u06cc\u06d2 \u0646\u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0627\u0633 \u0648\u0642\u062a \u062a\u06a9 \u0627\u062b\u0631 \u0645\u06cc\u06ba \u0631\u06c1\u06d2 \u06af\u0627 \u062c\u0628 \u062a\u06a9 \u06a9\u06c1 \u0622\u067e \u067e\u0648\u0633\u0679\u06af\u0631\u06cc\u0633 \u06a9\u0648 \u0627\u0644\u06af \u0633\u06d2 \u0633\u062e\u062a \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u06d2\u06d4<\/p>\n<p>\u062c\u0628 \u0622\u067e \u06a9\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba \u062d\u0630\u0641 \u06a9\u0631\u06cc\u06ba\u06d4 <code>NotFound<\/code>: \u0631\u0627\u0632 \u067e\u06c1\u0644\u06d2 \u06c1\u06cc \u062d\u0630\u0641 \u06a9\u0631 \u062f\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4 \u00a75.6 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062c\u0627\u0631\u06cc \u0631\u06a9\u06be\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-55b-argocd-should-be-synced-after-secret-delete\">5.5b: \u062e\u0641\u06cc\u06c1 \u062d\u0630\u0641 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f ArgoCD \u06a9\u0648 \u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631 \u06c1\u0648\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4<\/h3>\n<p>\u00a75.5 \u06a9\u06d2 \u0628\u0639\u062f \u0686\u0644\u0627\u0626\u06cc\u06ba\u060c \u00a75.4 \u06a9\u06d2 \u0641\u0648\u0631\u0627\u064b \u0628\u0639\u062f \u0646\u06c1\u06cc\u06ba\u06d4 OutOfSync \u0645\u0639\u0645\u0648\u0644 \u06a9\u06cc \u0628\u0627\u062a \u06c1\u06d2 \u062c\u0628 \u062a\u06a9 \u06a9\u06c1 \u0622\u067e \u0627\u06cc\u067e \u06a9\u06d2 \u0631\u0627\u0632 \u06a9\u0648 \u062d\u0630\u0641 \u0646\u06c1\u06cc\u06ba \u06a9\u0631 \u062f\u06cc\u062a\u06d2\u06d4 Git \u0645\u0632\u06cc\u062f \u062f\u0631\u062c \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 <code>auth-service-secret<\/code> \/ <code>ledger-service-secret<\/code>\u062a\u0627\u06c1\u0645\u060c \u06cc\u06c1 \u06a9\u0644\u0633\u0679\u0631 \u0645\u06cc\u06ba \u0645\u0648\u062c\u0648\u062f \u0631\u06c1\u06d2 \u06af\u0627 \u062c\u0628 \u062a\u06a9 \u06a9\u06c1 \u0622\u067e \u0627\u0633\u06d2 \u0627\u0648\u067e\u0631 \u0648\u0627\u0644\u06d2 \u0645\u0631\u062d\u0644\u06d2 \u0645\u06cc\u06ba \u062d\u0630\u0641 \u0646\u06c1\u06cc\u06ba \u06a9\u0631 \u062f\u06cc\u062a\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\">kubectl get application clearledger -n argocd \n  -o jsonpath=\"sync={.status.sync.status} health={.status.health.status}{\"n\"}\"\n<\/code><\/pre>\n<p><strong>\u0631\u0627\u0632\u0648\u06ba \u06a9\u0648 \u062d\u0630\u0641 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2:<\/strong> \u062a\u0648\u0642\u0639 <code>sync=OutOfSync health=Healthy<\/code> \u06cc\u0627 <code>Progressing<\/code> \u062c\u0628\u06a9\u06c1 \u0648\u0627\u0644\u0679 \u067e\u0648\u0688\u0632 \u062c\u0627\u0631\u06cc \u06a9\u06cc\u06d2 \u062c\u0627 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u0622\u067e \u06a9\u06d2 \u067e\u0627\u0633 \u0633\u0631\u0679\u06cc\u0641\u06cc\u06a9\u06cc\u0634\u0646\/\u0644\u06cc\u062c\u0631 \u06c1\u06d2 \u062a\u0648 \u06cc\u06c1 \u0679\u06be\u06cc\u06a9 \u06c1\u06d2\u06d4 <strong>2\/2<\/strong>.<\/p>\n<p><strong>\u062e\u0641\u06cc\u06c1 \u067e\u06cc\u063a\u0627\u0645 \u06a9\u0648 \u062d\u0630\u0641 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f<\/strong>\u0631\u06cc\u0641\u0631\u06cc\u0634 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631\u06cc \u06a9\u0631\u06cc\u06ba \u0627\u06af\u0631 \u0627\u0628\u06be\u06cc \u0628\u06be\u06cc \u0622\u0624\u0679 \u0622\u0641 \u0633\u0646\u06a9 \u06c1\u06d2:<\/p>\n<pre><code class=\"language-bash\">kubectl annotate application clearledger -n argocd argocd.argoproj.io\/refresh=hard --overwrite\nargocd app sync clearledger --grpc-web --prune\n<\/code><\/pre>\n<p>\u0627\u06af\u0631 \u0622\u067e \u06a9\u06cc \u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631\u06cc \u0627\u0633 \u0637\u0631\u062d \u0646\u0638\u0631 \u0622\u062a\u06cc \u06c1\u06d2: <strong>\u062f\u06cc\u06af\u0631 \u06a9\u0627\u0645 \u067e\u06c1\u0644\u06d2 \u06c1\u06cc \u062c\u0627\u0631\u06cc \u06c1\u06cc\u06ba\u06d4<\/strong>\u0628\u0631\u0627\u06c1 \u06a9\u0631\u0645 \u0627\u06cc\u06a9 \u0644\u0645\u062d\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u06cc\u06ba\u06d4 ArgoCD \u0622\u0679\u0648 \u0633\u0646\u06a9\u0631\u0648\u0646\u0627\u0626\u0632\u06cc\u0634\u0646 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0686\u0644 \u0631\u06c1\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u0628\u0631\u0627\u06c1 \u06a9\u0631\u0645 \u0627\u0633 \u0648\u0642\u062a \u062a\u06a9 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u06cc\u06ba:<\/p>\n<pre><code class=\"language-bash\">kubectl get application clearledger -n argocd \n  -o jsonpath=\"{.status.sync.status} {.status.health.status}{\"n\"}\"\n# Synced Healthy\n<\/code><\/pre>\n<p>\u0627\u06af\u0644\u0627\u060c \u0627\u067e\u0646\u06cc \u0627\u06cc\u067e \u06a9\u06cc \u062a\u0642\u0633\u06cc\u0645 \u06a9\u0648 \u0627\u067e \u0688\u06cc\u0679 \u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4 <code>kubectl apply<\/code> ArgoCD \u06a9\u06cc \u0637\u0631\u0641 \u0633\u06d2 \u0645\u0646\u0638\u0645 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f. ArgoCD \u06a9\u0644\u0633\u0679\u0631\u0632 \u06a9\u0648 \u0627\u0633 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0645\u0637\u0627\u0628\u0642\u062a \u0631\u06a9\u06be\u062a\u0627 \u06c1\u06d2: <code>clearledger-infra<\/code>. \u0627\u06af\u0631 \u0622\u067e \u062e\u0648\u062f \u0627\u067e\u0646\u06cc \u062a\u0642\u0633\u06cc\u0645 \u06a9\u0648 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 ArgoCD \u0627\u0633\u06d2 \u0648\u0627\u067e\u0633 \u06a9\u0631 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u0645\u0631\u062d\u0644\u06c1 5 \u06a9\u06d2 \u0644\u06cc\u06d2\u060c Git \u0645\u06cc\u06ba \u0645\u06cc\u0646\u06cc \u0641\u06cc\u0633\u0679 \u06a9\u0648 \u0627\u067e \u0688\u06cc\u0679 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 ArgoCD \u06a9\u0648 \u0627\u067e\u0646\u06cc \u0648\u0627\u0644\u0679 \u0633\u06d2 \u0686\u0644\u0646\u06d2 \u0648\u0627\u0644\u06cc \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u06a9\u0648 \u0633\u0646\u06a9\u0631\u0648\u0646\u0627\u0626\u0632 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-56-login-and-injected-files\">5.6: \u0644\u0627\u06af \u0627\u0646 \u0627\u0648\u0631 \u0627\u0646\u062c\u06cc\u06a9\u0634\u0646 \u0641\u0627\u0626\u0644\u0632<\/h3>\n<pre><code class=\"language-bash\">kubectl exec -n clearledger \n  $(kubectl get pod -n clearledger -l app=auth-service -o name | head -1) \n  -c auth-service -- ls \/vault\/secrets\/\n<\/code><\/pre>\n<pre><code class=\"language-text\">database_url\njwt_secret\n<\/code><\/pre>\n<pre><code class=\"language-bash\">curl -s -X POST http:\/\/clearledger.local\/auth\/login \n  -H \"Content-Type: application\/json\" \n  -d '{\"email\":\"test@clearledger.io\",\"password\":\"SecurePass123\"}' | jq .\n<\/code><\/pre>\n<p><strong>\u0645\u062a\u0648\u0642\u0639:<\/strong><\/p>\n<pre><code class=\"language-json\">{\n  \"access_token\": \"<jwt-returned-by-auth-service>\",\n  \"token_type\": \"bearer\"\n}\n<\/jwt-returned-by-auth-service><\/code><\/pre>\n<p><strong>\u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679 \u0644\u06cc\u06ba:<\/strong> \u062c\u0627\u0628 \u0644\u0627\u06af \u0627\u0646 JSON + <code>kubectl get secret -n clearledger<\/code> \u0646\u0645\u0628\u0631 \u062f\u06a9\u06be\u0627 \u0631\u06c1\u0627 \u06c1\u06d2 <code>auth-service-secret<\/code> \/ <code>ledger-service-secret<\/code>.<\/p>\n<h3 id=\"heading-57-health-check\">5.7: \u0627\u0633\u0679\u06cc\u0679\u0633 \u0686\u06cc\u06a9<\/h3>\n<pre><code class=\"language-bash\">make check-5\n<\/code><\/pre>\n<p><strong>\u0622\u067e \u06a9\u0648 \u06a9\u06cc\u0627 \u062f\u06cc\u06a9\u06be\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2:<\/strong><\/p>\n<blockquote>\n<p><code>make check-5<\/code> \u062a\u0648\u0642\u0639 \u06c1\u06d2 \u06a9\u06c1 \u0644\u06cc\u0648\u0644 4 \u0627\u0633\u06a9\u06cc\u0646 \u067e\u06c1\u0644\u06d2 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0686\u0644\u0627\u06cc\u0627 \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4 \u06cc\u06c1 \u062f\u06cc\u06a9\u06be\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u06c1 \u0622\u06cc\u0627 \u0648\u0627\u0644\u0679 \u06a9\u0627\u0645 \u06a9\u0631 \u0631\u06c1\u0627 \u06c1\u06d2 \u0646\u06cc\u0686\u06d2 5 \u0642\u062f\u0645\u06cc \u0628\u0644\u0627\u06a9 \u06a9\u0648 \u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/blockquote>\n<pre><code class=\"language-text\">&#x25b6; Stage 4: Admission Control (Kyverno)\n  \u2713 Kyverno is running\n  \u2713 Policy disallow-root-containers \u2014 Enforce mode\n  ...\n  \u2713 kube-bench matches baseline (no new FAIL regressions)\n\n&#x25b6; Stage 5: Secrets Management (Vault)\n  \u2713 Vault pod is running\n  \u2713 Vault agent injector is running\n  \u2713 Vault is unsealed\n  \u2713 Vault Kubernetes auth method is enabled\n  \u2713 auth-service-secret removed \u2014 Vault is the secret source\n  \u2713 Vault injected \/vault\/secrets\/database_url into auth-service\n\nAll checks passed. Ready for the next stage.\n<\/code><\/pre>\n<p>\u0627\u06af\u0631 \u0648\u0627\u0644\u0679 \u0627\u0646\u062f\u0631\u0627\u062c \u06cc\u0627 ArgoCD \u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631\u06cc \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u062c\u0627\u062a\u06cc \u06c1\u06d2\u060c \u062a\u0648 \u062f\u0631\u062c \u0630\u06cc\u0644 \u062f\u06cc\u06a9\u06be\u06cc\u06ba: <code>troubleshooting.md<\/code>.<\/p>\n<h3 id=\"heading-stage-5-is-done-checklist-before-moving-to-stage-6\">\u0645\u0631\u062d\u0644\u06c1 5 \u0645\u06a9\u0645\u0644: \u0645\u0631\u062d\u0644\u06c1 6 \u067e\u0631 \u062c\u0627\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0686\u06cc\u06a9 \u0644\u0633\u0679<\/h3>\n<table>\n<thead>\n<tr>\n<th>#<\/th>\n<th>\u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba<\/th>\n<th>\u0686\u06cc\u06a9 \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0637\u0631\u06cc\u0642\u06c1<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>1<\/td>\n<td>\u0631\u0627\u0632 \u0635\u0631\u0641 \u0648\u0627\u0644\u0679 \u0645\u06cc\u06ba \u067e\u0627\u0626\u06d2 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/td>\n<td><code>vault kv metadata get clearledger\/auth-service<\/code> \u062f\u06a9\u06be\u0627\u0626\u06cc\u06ba <code>current_version >= 1<\/code><\/td>\n<\/tr>\n<tr>\n<td>2<\/td>\n<td>\u0627\u0646\u0641\u0631\u0627\u0633\u0679\u0631\u06a9\u0686\u0631 \u06af\u0679 \u06a9\u06d2 \u067e\u0627\u0633 \u06a9\u0648\u0626\u06cc \u0627\u06cc\u067e \u0631\u0627\u0632 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/td>\n<td><code>secret.yaml<\/code> \u063a\u06cc\u0631 \u0645\u0648\u062c\u0648\u062f\u06af\u06cc <code>clearledger-infra\/manifests\/auth-service\/<\/code> \u0627\u0648\u0631 <code>ledger-service\/<\/code><\/td>\n<\/tr>\n<tr>\n<td>3<\/td>\n<td>ArgoCD \u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631<\/td>\n<td><code>Synced Healthy<\/code> \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u062f\u06cc\u062a\u06d2 \u0648\u0642\u062a <code>clearledger<\/code><\/td>\n<\/tr>\n<tr>\n<td>4<\/td>\n<td>K8s \u0627\u06cc\u067e \u06a9\u0627 \u0631\u0627\u0632 \u062d\u0630\u0641 \u06a9\u0631 \u062f\u06cc\u0627 \u06af\u06cc\u0627\u06d4<\/td>\n<td><code>kubectl get secret -n clearledger<\/code> \u06a9\u0648\u0626\u06cc \u062a\u0648\u062b\u06cc\u0642\/\u0644\u06cc\u062c\u0631 \u0627\u06cc\u067e \u0631\u0627\u0632 \u0646\u06c1\u06cc\u06ba\u06d4<\/td>\n<\/tr>\n<tr>\n<td>5<\/td>\n<td>\u0627\u0646\u062c\u06a9\u0634\u0646 \u0622\u067e\u0631\u06cc\u0634\u0646<\/td>\n<td>\u062a\u0635\u062f\u06cc\u0642 \u067e\u0648\u0688 <code>2\/2<\/code>; <code>ls \/vault\/secrets\/<\/code> \u062f\u06a9\u06be\u0627\u0626\u06cc\u06ba <code>database_url<\/code>, <code>jwt_secret<\/code><\/td>\n<\/tr>\n<tr>\n<td>6<\/td>\n<td>\u0627\u06cc\u067e \u06a9\u0627\u0645 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4<\/td>\n<td>\u0644\u0627\u06af \u0627\u0646 curl \u0648\u0627\u067e\u0633\u06cc <code>access_token<\/code><\/td>\n<\/tr>\n<tr>\n<td>7<\/td>\n<td>\u0635\u062d\u062a \u06a9\u06cc \u062c\u0627\u0646\u0686<\/td>\n<td><code>make check-5<\/code> \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062e\u062a\u0645 \u06c1\u0648\u062a\u0627 \u06c1\u06d2 <code>All checks passed. Ready for the next stage.<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u0645\u0631\u062d\u0644\u06c1 5 \u0627\u06cc\u067e \u06a9\u06cc \u0627\u0633\u0646\u0627\u062f \u06a9\u0648 Git \u0627\u0648\u0631 Kubernetes Secrets \u0633\u06d2 \u0645\u0646\u062a\u0642\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u06c1\u0645 \u0627\u0628\u06be\u06cc \u062a\u06a9 \u0648\u0627\u0644\u0679 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u06af\u0631\u06cc\u0688 \u0646\u06c1\u06cc\u06ba \u0628\u0646\u0627 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u0633 \u0644\u06cc\u0628 \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u06c1\u0645 HA \u06cc\u0627 \u0622\u0679\u0648 \u0627\u0646\u0644\u0627\u06a9 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0648\u0627\u0644\u0679 \u0688\u06cc\u0648\u0644\u067e\u0645\u0646\u0679 \u0645\u0648\u0688 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u062c\u0627\u0631\u06cc \u0631\u06a9\u06be\u06cc\u06ba \u06af\u06d2\u06d4<\/p>\n<p>\u0645\u0632\u06cc\u062f \u0628\u0631\u0622\u06ba\u060c \u0686\u0644\u0646\u06d2 \u0648\u0627\u0644\u06cc \u067e\u0648\u0688\u0632 \u0646\u06cc\u0686\u06d2 \u06a9\u06cc \u0641\u0627\u0626\u0644\u0648\u06ba \u06a9\u0648 \u067e\u0691\u06be\u0646\u0627 \u062c\u0627\u0631\u06cc \u0631\u06a9\u06be \u0633\u06a9\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 <code>\/vault\/secrets\/<\/code> \u0627\u0633 \u06a9\u06cc \u0648\u062c\u06c1 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u0627\u06cc\u067e \u06a9\u0648 \u06a9\u0627\u0645 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0646 \u0627\u0633\u0646\u0627\u062f \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0639\u0627\u0645 \u0628\u0627\u062a \u06c1\u06d2\u06d4 \u0645\u0631\u062d\u0644\u06c1 6 \u0645\u0634\u06a9\u0648\u06a9 \u0631\u0646 \u0679\u0627\u0626\u0645 \u0631\u0633\u0627\u0626\u06cc \u06a9\u0627 \u067e\u062a\u06c1 \u0644\u06af\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 Falco \u06a9\u0648 \u0634\u0627\u0645\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-what-you-learned-in-stage-5\">\u0622\u067e \u0646\u06d2 \u0645\u0631\u062d\u0644\u06c1 5 \u0645\u06cc\u06ba \u06a9\u06cc\u0627 \u0633\u06cc\u06a9\u06be\u0627\u06d4<\/h3>\n<ul>\n<li>\n<p>Kubernetes \u06a9\u06d2 \u0631\u0627\u0632 \u062d\u0642\u06cc\u0642\u06cc \u062e\u0641\u06cc\u06c1 \u0627\u0646\u062a\u0638\u0627\u0645 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0627\u0641\u06cc \u0646\u06c1\u06cc\u06ba \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>Vault \u0627\u0628 \u0627\u06cc\u067e \u06a9\u06cc \u0627\u0633\u0646\u0627\u062f \u06a9\u0648 \u0627\u0633\u0679\u0648\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><code>.env<\/code> \u0648\u0627\u0644\u0679 \u0645\u06cc\u06ba \u067e\u06c1\u0644\u0627 \u0631\u0627\u0632 \u0644\u0648\u0688 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0635\u0631\u0641 \u0645\u0642\u0627\u0645\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0633 \u06a9\u0627 \u0627\u0631\u062a\u06a9\u0627\u0628 \u06a9\u0628\u06be\u06cc \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u0627\u06d4<\/p>\n<\/li>\n<li>\n<p>\u062c\u0628 \u0627\u06cc\u067e \u0634\u0631\u0648\u0639 \u06c1\u0648\u062a\u06cc \u06c1\u06d2 \u062a\u0648 \u0648\u0627\u0644\u0679 \u067e\u0648\u0688\u0632 \u0645\u06cc\u06ba \u0631\u0627\u0632\u0648\u06ba \u06a9\u0648 \u062f\u0627\u062e\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><code>clearledger-infra<\/code> \u0622\u067e \u06a9\u0648 \u0628\u0686\u062a \u06a9\u0648 \u0631\u0648\u06a9\u0646\u0627 \u06c1\u0648\u06af\u0627\u06d4 <code>secret.yaml<\/code>\u06a9\u06cc\u0648\u0646\u06a9\u06c1 ArgoCD \u0627\u0633 \u0630\u062e\u06cc\u0631\u06c1 \u0633\u06d2 \u062a\u0642\u0633\u06cc\u0645 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0622\u0631\u0688\u0631 \u0627\u06c1\u0645 \u06c1\u06d2\u06d4 Vault \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u060c \u0631\u0627\u0632 \u06a9\u0648 \u0633\u06cc\u0688 \u06a9\u0631\u06cc\u06ba\u060c GitOps \u06a9\u0648 \u0627\u067e \u0688\u06cc\u0679 \u06a9\u0631\u06cc\u06ba\u060c \u0635\u062d\u062a \u0645\u0646\u062f \u067e\u0648\u0688 \u06a9\u0627 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u06cc\u06ba\u060c \u0627\u0648\u0631 \u067e\u06be\u0631 Kubernetes \u06a9\u06d2 \u067e\u0631\u0627\u0646\u06d2 \u0631\u0627\u0632 \u06a9\u0648 \u062d\u0630\u0641 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u0627\u0628 \u0622\u067e \u0627\u06cc\u06a9 \u0627\u0646\u0679\u0631\u0648\u06cc\u0648 \u0645\u06cc\u06ba \u06a9\u06cc\u0627 \u06a9\u06c1\u06c1 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba:<\/strong><\/p>\n<blockquote>\n<p>\u06c1\u0645 \u0646\u06d2 HashiCorp Vault \u0627\u06cc\u062c\u0646\u0679 \u0627\u0646\u062c\u06cc\u06a9\u0634\u0646 \u0633\u06d2 Kubernetes Secrets \u06a9\u0648 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u06cc\u0627\u060c Git \u0627\u0648\u0631 Kubernetes Secrets \u0633\u06d2 \u0627\u06cc\u067e \u06a9\u06cc \u0627\u0633\u0646\u0627\u062f \u06a9\u0648 \u06c1\u0679\u0627 \u062f\u06cc\u0627\u060c \u0627\u0648\u0631 \u0627\u0633 \u0628\u0627\u062a \u06a9\u0648 \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u06cc\u0627 \u06a9\u06c1 \u0631\u0646 \u0679\u0627\u0626\u0645 \u067e\u0631 Vault \u06a9\u06cc \u062c\u0627\u0646\u0628 \u0633\u06d2 \u0627\u0633\u0646\u0627\u062f \u06a9\u06d2 \u0627\u0646\u062c\u06cc\u06a9\u0634\u0646 \u06a9\u06d2 \u0628\u0639\u062f \u0628\u06be\u06cc \u0627\u06cc\u067e \u06a9\u0627\u0645 \u06a9\u0631\u062a\u06cc \u0631\u06c1\u06d2\u06d4<\/p>\n<\/blockquote>\n<p>\u0627\u067e\u0646\u06cc \u062a\u0631\u0642\u06cc \u06a9\u0648 \u0628\u0686\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">make snapshot STAGE=5 && make snapshots\n<\/code><\/pre>\n<p>\u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba <code>clearledger.stage5<\/code> \u06cc\u06c1 \u0633\u0646\u06cc\u067e \u0634\u0627\u0679 \u06a9\u06cc \u0641\u06c1\u0631\u0633\u062a \u0645\u06cc\u06ba \u0638\u0627\u06c1\u0631 \u06c1\u0648\u06af\u0627\u06d4<\/p>\n<h2 id=\"heading-stage-6-runtime-security-falco\">\u0645\u0631\u062d\u0644\u06c1 6 - \u0631\u0646 \u0679\u0627\u0626\u0645 \u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc (\u0641\u0627\u0644\u06a9\u0648)<\/h2>\n<p>\u0645\u0631\u062d\u0644\u06c1 1 \u0633\u06d2 5 \u062a\u06a9 \u0645\u062d\u0641\u0648\u0638 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u06a9\u06cc\u0627 \u062a\u0642\u0633\u06cc\u0645 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0631\u0627\u0632 \u06a9\u0648 \u06a9\u06cc\u0633\u06d2 \u0645\u062d\u0641\u0648\u0638 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0645\u0631\u062d\u0644\u06c1 6 \u0645\u06cc\u06ba\u060c \u06c1\u0645 \u062f\u06cc\u06a9\u06be\u062a\u06d2 \u06c1\u06cc\u06ba \u06a9\u06c1 \u0686\u0644\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u06a9\u0646\u0679\u06cc\u0646\u0631 \u06a9\u06d2 \u0634\u0631\u0648\u0639 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f \u0627\u0633 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u06a9\u06cc\u0627 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0622\u067e \u06a9\u0627 \u0645\u0642\u0635\u062f \u06cc\u06c1 \u062c\u0627\u0646\u0646\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0631\u0646 \u0679\u0627\u0626\u0645 \u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u06a9\u06cc\u0627 \u067e\u06a9\u0691\u062a\u06cc \u06c1\u06d2 \u0627\u0648\u0631 \u06cc\u06c1 \u06a9\u06cc\u0648\u06ba \u0636\u0631\u0648\u0631\u06cc \u06c1\u06d2\u060c \u0627\u0648\u0631 \u067e\u06be\u0631 Falco \u0627\u0644\u0631\u0679 \u06a9\u0648 \u0645\u062a\u062d\u0631\u06a9 \u06a9\u0631\u06a9\u06d2 \u0627\u0648\u0631 \u0627\u0633\u06d2 \u0627\u0633 \u0637\u0631\u062d \u067e\u0691\u06be \u06a9\u0631 \u062c\u0633 \u0637\u0631\u062d \u06a9\u0627\u0644 \u067e\u0631 \u0627\u06cc\u06a9 \u0627\u0646\u062c\u06cc\u0646\u0626\u0631 \u0627\u0633\u06d2 \u067e\u0691\u06be\u062a\u0627 \u06c1\u06d2 \u0627\u0633\u06d2 \u062b\u0627\u0628\u062a \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>CI\u060c Kyverno\u060c \u0627\u0648\u0631 Vault \u0633\u0628\u06be\u06cc \u067e\u0648\u0688 \u06a9\u06d2 \u0622\u063a\u0627\u0632 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06cc\u0627 \u0627\u0633 \u067e\u0631 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 Falco \u0627\u0633 \u062e\u0644\u0627 \u06a9\u0648 \u067e\u064f\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0633\u06d2 \u0627\u0646\u06c1\u0648\u06ba \u0646\u06d2 \u06a9\u06be\u0644\u0627 \u0686\u06be\u0648\u0691 \u062f\u06cc\u0627 \u062a\u06be\u0627\u06d4 \u0645\u0627\u0646\u06cc\u0679\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0686\u0644\u0627\u0646\u06d2 \u0648\u0627\u0644\u0627 \u0633\u0627\u0641\u0679 \u0648\u06cc\u0626\u0631 \u062f\u0631\u0627\u0635\u0644 \u06a9\u0646\u0679\u06cc\u0646\u0631 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u06a9\u06cc\u0627 \u06a9\u0631 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0635\u0631\u0641 \u0627\u06cc\u06a9 \u0627\u0648\u0631 \u0686\u0627\u0631\u0679 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u060c \u06cc\u06c1 \u0648\u0627\u0642\u0639\u06c1 \u06a9\u06d2 \u0631\u062f\u0639\u0645\u0644 \u0627\u0648\u0631 \u0641\u0631\u0627\u0646\u0632\u06a9 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062f\u0644\u0686\u0633\u067e\u06cc \u06a9\u0627 \u0627\u06cc\u06a9 \u0639\u0644\u0627\u0642\u06c1 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u0645\u0631\u062d\u0644\u06c1 6 \u0634\u0631\u0648\u0639 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2:<\/strong><\/p>\n<p>\u0645\u0631\u062d\u0644\u06c1 6 \u0645\u06a9\u0645\u0644 \u06c1\u06d2 \u0627\u06af\u0631:<\/p>\n<p>\u067e\u06be\u0631 VM \u06a9\u0648 \u0645\u062d\u0641\u0648\u0638 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">make snapshot STAGE=6\nmake snapshots\n<\/code><\/pre>\n<h3 id=\"heading-do-the-steps-in-this-order\">\u0627\u0633 \u062a\u0631\u062a\u06cc\u0628 \u0645\u06cc\u06ba \u0627\u0642\u062f\u0627\u0645\u0627\u062a \u067e\u0631 \u0639\u0645\u0644 \u06a9\u0631\u06cc\u06ba:<\/h3>\n<p>\u06c1\u0631 \u0642\u062f\u0645 \u067e\u0686\u06be\u0644\u06d2 \u0645\u0631\u062d\u0644\u06d2 \u067e\u0631 \u0645\u0646\u062d\u0635\u0631 \u06c1\u06d2\u06d4 \u0645\u062a \u0628\u06be\u0627\u06af\u0648 <code>make check-6<\/code> \u00a76.4 \u062a\u06a9\u06d4 \u06a9\u0633\u06cc \u0628\u06be\u06cc \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u06a9\u06cc \u067e\u0627\u0644\u06cc\u0633\u06cc\u0648\u06ba \u06a9\u0648 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba \u062c\u0646 \u06a9\u0627 \u0622\u067e \u0646\u06d2 \u0627\u0628\u06be\u06cc \u062a\u06a9 \u0627\u0637\u0644\u0627\u0642 \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u0627 \u06c1\u06d2\u06d4<\/p>\n<ol>\n<li>\n<p><strong>\u00a76.1:<\/strong> <code>bash stages\/stage-6-runtime-security\/scripts\/install-falco.sh<\/code>. \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba <code>falco-*<\/code> \u067e\u06be\u0644\u06cc <code>2\/2 Running<\/code> \u0627\u067e\u0646\u06cc \u0645\u0631\u0636\u06cc \u06a9\u06d2 \u0642\u0648\u0627\u0646\u06cc\u0646 \u06a9\u0648 \u0644\u0648\u0688 \u06a9\u0631 \u062f\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2.<\/p>\n<\/li>\n<li>\n<p><strong>\u00a76.2:<\/strong> <code>make demo-6<\/code>:\u067e\u0691\u06be\u0646\u0627 <code>\u2713 Runtime detection confirmed<\/code> \u0679\u0631\u0645\u06cc\u0646\u0644 \u0645\u06cc\u06ba<\/p>\n<\/li>\n<li>\n<p><strong>\u00a76.3<\/strong> (\u0627\u062e\u062a\u06cc\u0627\u0631\u06cc) \u062f\u0633\u062a\u06cc \u0627\u0633\u0642\u0627\u0637 \u062d\u0645\u0644 \u06a9\u0627 \u0645\u0646\u0638\u0631 (\u0627\u06af\u0631 \u0686\u06be\u0648\u0691 \u062f\u06cc\u06ba) <code>make demo-6<\/code> \u067e\u06c1\u0644\u06d2 \u06c1\u06cc \u06a9\u0627\u0645 \u06a9\u0631 \u0686\u06a9\u06d2 \u06c1\u06cc\u06ba)<\/p>\n<\/li>\n<li>\n<p><strong>\u00a76.4:<\/strong> <code>kubectl apply -f infra\/deferred-by-stage\/stage-6-runtime-security\/netpol\/network-policies.yaml<\/code>. \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba <code>curl http:\/\/clearledger.local\/<\/code> 200 \u0644\u0648\u0679\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u00a76.6:<\/strong> <code>make check-6<\/code><\/p>\n<\/li>\n<\/ol>\n<p>\u0648\u0642\u062a \u0634\u0631\u0648\u0639 <strong>\u00a76.1<\/strong>. \u0627\u06af\u0631 \u06a9\u0686\u06be \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u062a\u0648 \u0628\u0631\u0627\u06c1 \u06a9\u0631\u0645 \u0627\u0633 \u0633\u06d2 \u0631\u062c\u0648\u0639 \u06a9\u0631\u06cc\u06ba\u06d4 <code>troubleshooting.md<\/code>.<\/p>\n<p><strong>\u067e\u0691\u06be\u0646\u06d2 \u06a9\u0627 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0631\u06cc\u06ba:<\/strong> \u0645\u0631\u062d\u0644\u06c1 6 \u06a9\u0633 \u0637\u0631\u062d \u0645\u062c\u0645\u0648\u0639\u06cc \u0627\u0633\u0679\u06cc\u06a9 \u0645\u06cc\u06ba \u0641\u0679 \u0628\u06cc\u0679\u06be\u062a\u0627 \u06c1\u06d2: Falco \u0627\u0648\u0631 netpol \u06a9\u06cc\u0648\u06ba \u0645\u0648\u062c\u0648\u062f \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0648\u06c1 3-5 \u0645\u0631\u0627\u062d\u0644 \u0633\u06d2 \u06a9\u06cc\u0633\u06d2 \u0645\u062e\u062a\u0644\u0641 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-if-you-get-stuck-in-stage-6\">\u0627\u06af\u0631 \u0622\u067e \u0645\u0631\u062d\u0644\u06c1 6 \u067e\u0631 \u067e\u06be\u0646\u0633 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/h3>\n<p>\u0645\u0631\u062d\u0644\u06c1 6 \u0645\u06cc\u06ba \u062a\u06cc\u0646 \u06a9\u0627\u0645 \u06c1\u06cc\u06ba:<\/p>\n<ol>\n<li>\n<p>\u0641\u0627\u0644\u06a9\u0648 \u06a9\u06cc \u062a\u0646\u0635\u06cc\u0628<\/p>\n<\/li>\n<li>\n<p>1 \u0679\u06cc\u0633\u0679 \u0646\u0648\u0679\u06cc\u0641\u06a9\u06cc\u0634\u0646 \u0679\u0631\u06af\u0631<\/p>\n<\/li>\n<li>\n<p>\u0646\u06cc\u0679 \u0648\u0631\u06a9 \u067e\u0627\u0644\u06cc\u0633\u06cc \u06a9\u0627 \u0627\u0637\u0644\u0627\u0642 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ol>\n<p>Falco UI \u0645\u06cc\u06ba \u06c1\u0631 \u0642\u0637\u0627\u0631 \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u0641\u06a9\u0631 \u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4 UI \u0634\u0648\u0631 \u062f\u06a9\u06be\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0645\u062c\u06be\u06d2 \u0679\u0631\u0645\u06cc\u0646\u0644 \u0645\u06cc\u06ba \u06cc\u0627 UI \u0645\u06cc\u06ba \u0688\u06cc\u0645\u0648 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0627\u0646\u062a\u0628\u0627\u06c1 \u0645\u0644 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u0645\u06cc\u06ba Falco \u06a9\u06d2 \u062d\u0635\u06d2 \u06a9\u0648 \u067e\u0627\u0633 \u06a9\u0631\u0648\u06ba \u06af\u0627\u06d4<\/p>\n<p>\u067e\u0648\u0631\u0679 \u0641\u0648\u0644\u06cc\u0648 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679\u0633 \u062f\u06cc\u06a9\u06be\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u06a9\u06be\u0648\u0644\u06cc\u06ba:<\/p>\n<p><code>http:\/\/falco.local<\/code><\/p>\n<p>\u0644\u0627\u06af \u0627\u0646:<\/p>\n<ul>\n<li>\n<p>\u0635\u0627\u0631\u0641 \u06a9\u0627 \u0646\u0627\u0645: <code>admin<\/code><\/p>\n<\/li>\n<li>\n<p>\u067e\u0627\u0633 \u0648\u0631\u0688: <code>admin<\/code><\/p>\n<\/li>\n<\/ul>\n<p>\u0688\u06cc\u0645\u0648 \u0646\u0648\u0679\u06cc\u0641\u06a9\u06cc\u0634\u0646 \u062f\u06cc\u06a9\u06be\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f \u06c1\u06cc \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679\u0633 \u0644\u06cc\u06ba\u06d4<\/p>\n<p><strong>\u0639\u0627\u0645 \u0631\u06a9\u0627\u0648\u0679 \u067e\u0648\u0627\u0626\u0646\u0679\u0633<\/strong><\/p>\n<table>\n<thead>\n<tr>\n<th>\u0622\u067e \u0633\u0648\u0686\u062a\u06d2 \u06c1\u06cc\u06ba\u2026<\/th>\n<th>\u0627\u0635\u0644 \u0645\u06cc\u06ba \u06a9\u06cc\u0627 \u0633\u0686 \u06c1\u06d2<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>\"UI 200 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0627\u06c1\u0645 \u0627\u0646\u062a\u0628\u0627\u06c1\u0627\u062a \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u06c1\u0648 \u0633\u06a9\u062a\u0627 \u06c1\u06d2 \u0645\u06cc\u06ba \u0646\u06d2 \u06a9\u0686\u06be \u062a\u0648\u0691\u0627 \u06c1\u0648\u06d4\"<\/td>\n<td>\u0646\u06c1\u06cc\u06ba <code>postgres-0<\/code> \u067e\u0691\u06be\u06cc\u06ba <code>\/etc\/passwd<\/code> \u0644\u0648\u067e \u0645\u06cc\u06ba\u060c Falco \u062c\u06be\u0646\u0688\u06d2. \u0627\u0633 \u0644\u0627\u0626\u0646 \u06a9\u0648 \u0646\u0638\u0631 \u0627\u0646\u062f\u0627\u0632 \u06a9\u0631\u06cc\u06ba\u06d4<\/td>\n<\/tr>\n<tr>\n<td>\"\u0688\u06cc\u0645\u0648 \u0627\u0637\u0644\u0627\u0639 \u0646\u06c1\u06cc\u06ba \u0645\u0644\u06cc\u06d4\"<\/td>\n<td>\u0627\u06af\u0644\u0627\u060c UI \u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba\u06d4 <strong>Command+F \u2192<\/strong> <code>Shell Spawned<\/code>\u06cc\u0627 <strong>\u0679\u0631\u0645\u06cc\u0646\u0644 grep<\/strong> \u0627\u0648\u067e\u0631 \u0645\u0631\u062d\u0644\u06c1 4 \u0633\u06d2\u06d4 \u062c\u0628 grep \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2\u06d4 <code>auth-service<\/code> + <code>id && exit<\/code>\u0622\u067e \u067e\u0627\u0633 \u06c1\u0648 \u06af\u0626\u06d2\u06d4<\/td>\n<\/tr>\n<tr>\n<td>\"<code>make check-6<\/code> \"\u0646\u06cc\u0679 \u0648\u0631\u06a9 \u067e\u0627\u0644\u06cc\u0633\u06cc \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u06af\u0626\u06cc\u06d4\"<\/td>\n<td>\u0622\u067e \u0646\u06d2 \u0686\u06cc\u06a9 \u0686\u0644\u0627\u06cc\u0627 <strong>\u00a76.4 \u0633\u06d2 \u067e\u06c1\u0644\u06d2<\/strong>. \u067e\u06c1\u0644\u06d2 \u0646\u06cc\u0679 \u067e\u0648\u0644 \u0644\u06af\u0627\u0626\u06cc\u06ba \u0627\u0648\u0631 \u067e\u06be\u0631 \u0627\u0633\u06d2 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4<\/td>\n<\/tr>\n<tr>\n<td>\"\u00a76.3 \u0627\u0648\u0631 \u00a76.2 \u2014 \u0645\u062c\u06be\u06d2 \u06a9\u0633 \u067e\u0631 \u0639\u0645\u0644 \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2\u061f\"<\/td>\n<td>\u0686\u0644\u0627\u0626\u06cc\u06ba <code>make demo-6<\/code> <strong>(\u00a76.2)<\/strong> \u0635\u0631\u0641 \u00a76.3 \u0648\u06c1\u06cc \u062d\u0645\u0644\u06c1 \u06c1\u06d2 \u062c\u06cc\u0633\u0627 \u06a9\u06c1 \u062f\u0633\u062a\u06cc \u06a9\u0645\u0627\u0646\u0688 \u06c1\u06d2\u06d4 \u0627\u06af\u0631 Demo-6 \u067e\u06c1\u0644\u06d2 \u06c1\u06cc \u06a9\u0627\u0645 \u06a9\u0631 \u0686\u06a9\u0627 \u06c1\u06d2 \u062a\u0648 \u0627\u0633\u06d2 \u0686\u06be\u0648\u0691 \u062f\u06cc\u06ba\u06d4<\/td>\n<\/tr>\n<tr>\n<td>\"\u0634\u06cc\u0644 \u062a\u062e\u0644\u06cc\u0642 \u06a9\u06cc\u0627 \u06c1\u06d2\u061f\"<\/td>\n<td>\u0641\u0627\u0644\u06a9\u0648 \u0646\u06d2 \u062f\u06cc\u06a9\u06be\u0627 <code>sh<\/code> <strong>\u0639\u0645\u0644 \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba\u06d4<\/strong> \u0627\u0646\u062f\u0631 <code>auth-service<\/code>. \u067e\u06cc\u062f\u0627\u0648\u0627\u0631\u06cc \u0639\u0645\u0644 \u0645\u0634\u06a9\u0648\u06a9 \u06c1\u06d2\u06d4 \u0644\u06cc\u0628 \u0645\u06cc\u06ba <strong>\u0622\u067e<\/strong> \u0645\u06cc\u06ba \u0646\u06d2 \u062c\u0627\u0646 \u0628\u0648\u062c\u06be \u06a9\u0631 \u0627\u06cc\u0633\u0627 \u06a9\u06cc\u0627\u06d4 \u00a76.2 \u062f\u06cc\u06a9\u06be\u06cc\u06ba\u06d4<\/td>\n<\/tr>\n<tr>\n<td>\"\u0645\u0646\u0638\u0631 \u0646\u0627\u0645\u06c1 4 \u062e\u062a\u0645 \u06a9\u0631 \u062f\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2 \u06cc\u0627 137 \u06a9\u0648 \u062e\u062a\u0645 \u06a9\u0631 \u062f\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4\"<\/td>\n<td>\u0642\u0627\u0628\u0644 \u0627\u062d\u062a\u0631\u0627\u0645 <code>wget<\/code> \u06a9\u0645\u0627\u0646\u0688 + <strong>\u0628\u0646\u062f \u06c1\u0648 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4<\/strong> \u067e\u06cc \u0627\u0648 \u0688\u06cc \u0645\u0646\u0638\u0631 \u0646\u0627\u0645\u06c1 4 \u06a9\u0648 \u0686\u06be\u0648\u0691\u06cc\u06ba \u06cc\u0627 <strong>Python3<\/strong> \u00a76.4 \u0645\u06cc\u06ba \u0622\u0631\u0688\u0631\u0632\u06d4 \u0686\u06cc\u06a9 \u067e\u0648\u0627\u0626\u0646\u0679+ <code>make check-6<\/code> \u06a9\u0627\u0641\u06cc<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3 id=\"heading-61-install-falco-and-falcosidekick-ui\">6.1: Falco \u0627\u0648\u0631 Falcosidekick UI \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/h3>\n<pre><code class=\"language-bash\">bash stages\/stage-6-runtime-security\/scripts\/install-falco.sh\n<\/code><\/pre>\n<p>\u06cc\u06c1 \u0686\u0644\u062a\u0627 \u06c1\u06d2\u06d4 <code>helm upgrade --install<\/code> \u06a9\u06d2 \u0633\u0627\u062a\u06be <code>modern_ebpf<\/code>Falcosidekick + Web UI \u06a9\u0648 \u0686\u0627\u0644\u0648 \u06a9\u0631\u06cc\u06ba\u060c <strong>k8s - \u0645\u06cc\u0679\u0627 \u06a9\u0644\u06cc\u06a9\u0679\u0631<\/strong> (<code>collectors.kubernetes.enabled: true<\/code>) \u062a\u0627\u06a9\u06c1 \u062d\u0633\u0628 \u0636\u0631\u0648\u0631\u062a \u0627\u0635\u0648\u0644 \u0645\u0644 \u0633\u06a9\u06cc\u06ba\u06d4 <code>k8smeta.ns.name = clearledger<\/code>\u0633\u06d2 \u0644\u0648\u0688 \u0642\u0648\u0627\u0646\u06cc\u0646: <code>infra\/falco\/clearledger-rules-content.yaml<\/code>ConfigMap \u0627\u0648\u0631 \u0627\u0646\u062f\u0631\u0627\u062c \u06a9\u06d2 \u0642\u0648\u0627\u0639\u062f \u06a9\u0627 \u0627\u0637\u0644\u0627\u0642 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u06af\u0631 \u0622\u067e \u06a9\u06d2 \u067e\u0627\u0633 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 Falco \u0627\u0646\u0633\u0679\u0627\u0644 \u06c1\u06d2\u060c \u062a\u0648 \u0627\u0633\u06a9\u0631\u067e\u0679 \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0686\u0644\u0627\u0646\u0627 (\u0627\u067e \u06af\u0631\u06cc\u0688) \u06a9\u0631\u0646\u0627 \u0645\u062d\u0641\u0648\u0638 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u0641\u0627\u0644\u06a9\u0648 \u067e\u0648\u0688 \u06a9\u0648 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/strong><\/p>\n<pre><code class=\"language-bash\">kubectl get pods -n falco\n<\/code><\/pre>\n<p><strong>\u0645\u062a\u0648\u0642\u0639 \u067e\u06cc\u062f\u0627\u0648\u0627\u0631:<\/strong><\/p>\n<pre><code class=\"language-text\">NAME                                      READY   STATUS    RESTARTS   AGE\nfalco-w4fh6                               2\/2     Running   0          2m\nfalco-falcosidekick-...                   1\/1     Running   0          2m\nfalco-falcosidekick-ui-...                1\/1     Running   0          2m\nfalco-falcosidekick-ui-redis-0            1\/1     Running   0          2m\n<\/code><\/pre>\n<p>\u0622\u067e \u06a9\u0648 \u0627\u067e\u0646\u06d2 Falco DaemonSet \u0645\u06cc\u06ba \u062f\u0631\u062c \u0630\u06cc\u0644 \u06a9\u0648 \u062f\u06cc\u06a9\u06be\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2: <strong>2\/2 \u0631\u0646<\/strong>. \u0622\u067e \u06a9\u0648 \u0628\u0627\u0644\u062a\u0631\u062a\u06cc\u0628 Sidekick\u060c UI\u060c \u0627\u0648\u0631 Redis pods \u062f\u06cc\u06a9\u06be\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4 <strong>1\/1 \u0631\u0646<\/strong>. \u06a9\u0644\u0633\u0679\u0631 \u06a9\u0627 \u067e\u0648\u0688 \u0646\u0627\u0645 \u06a9\u0627 \u0644\u0627\u062d\u0642\u06c1 \u0645\u062b\u0627\u0644 \u0633\u06d2 \u0645\u062e\u062a\u0644\u0641 \u06c1\u06d2\u06d4<\/p>\n<p>\u06a9\u06be\u0644\u0627 <code>http:\/\/falco.local<\/code>. Falcosidekick UI \u0688\u0633\u067e\u0644\u06d2 \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4 \u0686\u0627\u0631\u0679 \u0688\u06cc\u0641\u0627\u0644\u0679\u0633 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0644\u0627\u06af \u0627\u0646 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<table>\n<thead>\n<tr>\n<th>\u0645\u06cc\u062f\u0627\u0646<\/th>\n<th>\u0642\u062f\u0631<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>\u0644\u0627\u06af \u0627\u0646<\/strong><\/td>\n<td><code>admin<\/code><\/td>\n<\/tr>\n<tr>\n<td><strong>\u067e\u0627\u0633 \u0648\u0631\u0688<\/strong><\/td>\n<td><code>admin<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u0627\u06af\u0631 \u0622\u067e \u0644\u06cc\u0628 \u0688\u06cc\u0641\u0627\u0644\u0679\u0633 \u067e\u0631 \u0628\u06be\u0631\u0648\u0633\u06c1 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0627\u067e\u0646\u06d2 \u06a9\u0644\u0633\u0679\u0631 \u0633\u06d2 \u0627\u0633\u0646\u0627\u062f \u067e\u0691\u06be\u0646\u0627 \u0686\u0627\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0648 \u0627\u0646 \u06c1\u062f\u0627\u06cc\u0627\u062a \u067e\u0631 \u0639\u0645\u0644 \u06a9\u0631\u06cc\u06ba:<\/p>\n<pre><code class=\"language-bash\">kubectl get secret falco-falcosidekick-ui -n falco \n  -o jsonpath=\"{.data.FALCOSIDEKICK_UI_USER}\" | base64 -d && echo\n# admin:admin\n<\/code><\/pre>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/07\/1785194532_327_Homelab-\u0633\u06d2-AWS-\u062a\u06a9-\u067e\u0631\u0648\u0688\u06a9\u0634\u0646-\u06a9\u06d2-\u0644\u06cc\u06d2-\u062a\u06cc\u0627\u0631-DevSecOps-\u067e\u0644\u06cc\u0679.png\" alt=\"Falco UI \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679\" style=\"display:block;margin:0 auto\" width=\"1293\" height=\"1318\" loading=\"lazy\" title=\"\"><\/p>\n<h4 id=\"heading-falcosidekick-ui-quick-orientation\">Falcosidekick UI: \u0641\u0648\u0631\u06cc \u0648\u0627\u0642\u0641\u06cc\u062a \u0633\u06cc\u0679 \u0627\u067e<\/h4>\n<p>\u0644\u0627\u06af \u0627\u0646 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f <strong>\u0648\u0627\u0642\u0639\u06c1<\/strong> \u0679\u06cc\u06af \u0688\u06cc\u0645\u0648 \u0686\u0644\u0627\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0679\u06cc\u0628\u0644 \u0645\u0635\u0631\u0648\u0641 \u0646\u0638\u0631 \u0622 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0639\u0627\u0645 \u0628\u0627\u062a \u06c1\u06d2\u06d4<\/p>\n<ul>\n<li>\n<p><strong>\u062d\u06a9\u0645\u0631\u0627\u0646\u06cc<\/strong>: \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0627 \u0646\u0627\u0645 (\u067e\u06be\u0627\u0646\u0633\u06cc \u0634\u062f\u06c1 \u0634\u06d2)<\/p>\n<\/li>\n<li>\n<p><strong>\u062a\u0631\u062c\u06cc\u062d\u0627\u062a<\/strong>: <strong>\u062a\u0646\u0642\u06cc\u062f\u06cc<\/strong> \/ <strong>\u0627\u0646\u062a\u0628\u0627\u06c1<\/strong> \/ <strong>\u0646\u0648\u0679\u0633<\/strong> (\u06cc\u06c1 \u0644\u06cc\u0628 \u062a\u0646\u0642\u06cc\u062f\u06cc \u0627\u0648\u0631 \u0627\u0646\u062a\u0628\u0627\u06c1 \u067e\u0631 \u0645\u0631\u06a9\u0648\u0632 \u06c1\u06d2\u06d4)<\/p>\n<\/li>\n<li>\n<p><strong>\u062d\u0633\u0627\u0628<\/strong>: \u067e\u0648\u0688 \u06a9\u0627 \u0646\u0627\u0645\u060c \u0641\u0627\u0626\u0644\u060c \u06cc\u0627 \u06a9\u0645\u0627\u0646\u0688 \u06a9\u06cc \u062a\u0641\u0635\u06cc\u0644\u0627\u062a<\/p>\n<\/li>\n<li>\n<p><strong>\u0679\u06cc\u06af<\/strong>: \u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba\u06d4 <code>clearledger<\/code> \u0644\u06cc\u0628 \u0627\u0644\u0631\u0679 \u067e\u0631<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u0646\u0627\u0642\u0627\u0628\u0644 \u062a\u0648\u062c\u06c1 \u067e\u0633 \u0645\u0646\u0638\u0631 \u06a9\u0627 \u0634\u0648\u0631:<\/strong> ArgoCD \u067e\u0631 \u0642\u0637\u0627\u0631\u06cc\u06ba \u062f\u06cc\u06a9\u06be\u06cc\u06ba\u06d4 <strong>\u062a\u0646\u0642\u06cc\u062f\u06cc<\/strong> <strong>\u062d\u0633\u0627\u0633 \u0641\u0627\u0626\u0644\u06cc\u06ba \u067e\u0691\u06be\u06cc\u06ba<\/strong> \u0644\u0627\u0626\u0646 <code>postgres-0<\/code> \u067e\u0691\u06be\u0646\u0627 <code>\/etc\/passwd<\/code> (\u06c1\u0631 \u0686\u0646\u062f \u0633\u06cc\u06a9\u0646\u0688 \u0645\u06cc\u06ba \u062f\u06c1\u0631\u0627\u0626\u06cc\u06ba)\u06d4 \u0688\u06cc\u0645\u0648 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0645\u062e\u062a\u0644\u0641 \u06c1\u06cc\u06ba\u06d4 \u00a76.2 \u062f\u06cc\u06a9\u06be\u06cc\u06ba\u06d4<\/p>\n<p><strong>\u0628\u06be\u0631\u06cc \u06c1\u0648\u0626\u06cc \u062d\u0633\u0628 \u0636\u0631\u0648\u0631\u062a \u0642\u0648\u0627\u0639\u062f \u06a9\u0648 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/strong> (\u00a76.2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06a9\u06cc\u0627 \u06af\u06cc\u0627):<\/p>\n<pre><code class=\"language-bash\">kubectl get pods -n falco                                    # Falco pod 2\/2 Running\nkubectl get configmap clearledger-falco-rules -n falco\nkubectl logs -n falco -l app.kubernetes.io\/name=falco -c falco --tail=200 \n  | grep 'rules.d\/clearledger_rules'\n<\/code><\/pre>\n<p><strong>\u0645\u062a\u0648\u0642\u0639:<\/strong> <code>clearledger_rules.yaml | schema validation: ok<\/code><\/p>\n<p>\u062e\u0627\u0644\u06cc grep <code>--tail=30<\/code> \u0622\u067e \u0627\u06a9\u06cc\u0644\u06d2 \u0646\u0627\u06a9\u0627\u0645 \u0646\u06c1\u06cc\u06ba \u06c1\u06cc\u06ba\u06d4 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba <code>--tail=200<\/code>. \u0627\u06af\u0631 \u0622\u067e \u062f\u06cc\u06a9\u06be\u062a\u06d2 \u06c1\u06cc\u06ba <code>LOAD_ERR_COMPILE_CONDITION<\/code>\u062f\u06cc\u06a9\u06be\u06cc\u06ba <code>troubleshooting.md<\/code>.<\/p>\n<p>\u0627\u06af\u0631 \u0642\u0648\u0627\u0646\u06cc\u0646 \u06a9\u0648 \u0644\u0648\u0688 \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u062a\u0648\u060c \u00a76.2 \u0627\u0648\u0631 \u00a76.3 \u06af\u0632\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u062f\u06a9\u06be\u0627\u0626\u06cc \u062f\u06cc\u06ba \u06af\u06d2 \u062c\u0628 \u06a9\u0686\u06be \u0628\u06be\u06cc \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-62-guided-demo-make-demo-6\">6.2: \u06af\u0627\u0626\u06cc\u0688\u0688 \u0688\u06cc\u0645\u0648 (<code>make demo-6<\/code>)<\/h3>\n<p>\u06cc\u06c1 \u0686\u0644\u0627\u0626\u06cc\u06ba <strong>~ \u0628\u0639\u062f<\/strong> \u00a76.1 (\u0641\u0627\u0644\u06a9\u0648 \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u060c \u0631\u0648\u0644\u0632 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u060c UI \u06a9\u06be\u0648\u0644\u06cc\u06ba: <code>http:\/\/falco.local<\/code>)\u06d4<\/p>\n<pre><code class=\"language-bash\">make demo-6\n# or:\nbash stages\/stage-6-runtime-security\/scripts\/demo-falco-alerts.sh\n<\/code><\/pre>\n<h4 id=\"heading-what-the-demo-script-does\">\u0688\u06cc\u0645\u0648 \u0627\u0633\u06a9\u0631\u067e\u0679 \u06a9\u06cc \u062e\u0635\u0648\u0635\u06cc\u0627\u062a<\/h4>\n<p>\u0688\u06cc\u0645\u0648 \u06cc\u06c1 \u0638\u0627\u06c1\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 Falco \u0686\u0644\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u06a9\u0646\u0679\u06cc\u0646\u0631 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0645\u0634\u06a9\u0648\u06a9 \u0633\u0631\u06af\u0631\u0645\u06cc \u06a9\u0627 \u067e\u062a\u06c1 \u0644\u06af\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0633\u06a9\u0631\u067e\u0679 \u0686\u06cc\u06a9 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0622\u06cc\u0627 Falco \u0686\u0644 \u0631\u06c1\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0633\u06d2 \u06a9\u06be\u0648\u0644\u062a\u0627 \u06c1\u06d2\u06d4 <code>http:\/\/falco.local<\/code>\u0627\u0633 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0644\u0627\u06af \u0627\u0646 \u06c1\u0648\u0646\u06d2 \u062a\u06a9 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u06cc\u06ba:<\/p>\n<ul>\n<li>\n<p>\u0635\u0627\u0631\u0641 \u06a9\u0627 \u0646\u0627\u0645: <code>admin<\/code><\/p>\n<\/li>\n<li>\n<p>\u067e\u0627\u0633 \u0648\u0631\u0688: <code>admin<\/code><\/p>\n<\/li>\n<\/ul>\n<p>\u067e\u06be\u0631 \u0627\u0633 \u0679\u06cc\u0633\u0679 \u06a9\u0645\u0627\u0646\u0688 \u06a9\u0648 \u0627\u0646\u062f\u0631 \u0686\u0644\u0627\u0626\u06cc\u06ba: <code>auth-service<\/code> \u06a9\u0646\u0679\u06cc\u0646\u0631:<\/p>\n<pre><code class=\"language-bash\">kubectl exec -n clearledger \n  auth-service-<pod-suffix> \n  -c auth-service -- \/bin\/sh -c 'id && exit'\n<\/pod-suffix><\/code><\/pre>\n<p>\u0627\u0633\u06a9\u0631\u067e\u0679 \u0627\u0635\u0644 \u067e\u0648\u0688 \u06a9\u0627 \u0646\u0627\u0645 \u0644\u06cc\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u063a\u06cc\u0631 \u0627\u0646\u0679\u0631\u0627\u06cc\u06a9\u0679\u0648<\/strong> (\u06a9\u0648\u0626\u06cc CI \u06cc\u0627 Enter \u067e\u0631\u0627\u0645\u067e\u0679 \u0646\u06c1\u06cc\u06ba): <code>SKIP_PROMPT=1 make demo-6<\/code>.<\/p>\n<p>\u06cc\u06c1 \u0627\u06cc\u067e \u06a9\u0646\u0679\u06cc\u0646\u0631 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0627\u06cc\u06a9 \u0634\u06cc\u0644 \u0634\u0631\u0648\u0639 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06cc\u067e \u06a9\u0646\u0679\u06cc\u0646\u0631\u0632 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u0645\u06cc\u06ba \u0642\u0627\u0628\u0644 \u0627\u0639\u062a\u0631\u0627\u0636 \u06c1\u06cc\u06ba \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u0627\u0646\u06c1\u06cc\u06ba \u0634\u06cc\u0644 \u06a9\u06be\u0648\u0644\u06d2 \u0628\u063a\u06cc\u0631 \u0627\u06cc\u067e \u06a9\u0648 \u0686\u0644\u0627\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4 Falco \u06a9\u0648 \u0627\u0633 \u06a9\u0627 \u067e\u062a\u06c1 \u0644\u06af\u0627\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2 \u0627\u0648\u0631 \u0627\u0633 \u0637\u0631\u062d \u0627\u06cc\u06a9 \u0627\u0646\u062a\u0628\u0627\u06c1 \u067e\u06cc\u062f\u0627 \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2:<\/p>\n<p><code>Shell Spawned in ClearLedger Container<\/code><\/p>\n<p>\u062c\u0628 \u0627\u0633\u06a9\u0631\u067e\u0679 \u067e\u0631\u0646\u0679 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2:<\/p>\n<pre><code class=\"language-text\">\u2713 Runtime detection confirmed\n<\/code><\/pre>\n<p>Falco UI \u06a9\u0648 \u0631\u06cc\u0641\u0631\u06cc\u0634 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u062f\u0631\u062c \u0630\u06cc\u0644 \u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba: <strong>\u062a\u0646\u0642\u06cc\u062f\u06cc<\/strong> \u0627\u0646\u062a\u0628\u0627\u06c1:<\/p>\n<p>\u062f\u0631\u062c \u0630\u06cc\u0644 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u06a9\u0648 \u0646\u0638\u0631 \u0627\u0646\u062f\u0627\u0632 \u06a9\u0631\u06cc\u06ba: <code>postgres-0<\/code>\u062e\u0627\u0635 \u0637\u0648\u0631 \u067e\u0631 <code>Sensitive File Read<\/code>. \u06cc\u06c1 \u0627\u0633 \u0645\u0634\u0642 \u06a9\u06d2 \u067e\u0633 \u0645\u0646\u0638\u0631 \u06a9\u0627 \u0634\u0648\u0631 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u06af\u0631 \u0622\u067e \u06a9\u0627 UI \u0634\u0648\u0631 \u0648\u0627\u0644\u0627 \u06c1\u06d2 \u062a\u0648 \u0627\u067e\u0646\u06d2 \u0635\u0641\u062d\u06c1 \u067e\u0631 \u062f\u0631\u062c \u0630\u06cc\u0644 \u06a9\u0648 \u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba: <code>Shell Spawned<\/code> \u06cc\u0627 \u0627\u0633\u06d2 \u0679\u0631\u0645\u06cc\u0646\u0644 \u0645\u06cc\u06ba \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">kubectl logs -n falco -l app.kubernetes.io\/name=falco -c falco --tail=500 \n  | grep 'Shell Spawned'\n<\/code><\/pre>\n<p>\u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2 <code>Shell Spawned<\/code> \u062e\u0628\u0631\u062f\u0627\u0631 \u06a9\u0631\u0646\u0627 <code>auth-service<\/code>.<\/p>\n<h3 id=\"heading-63-break-it-scenarios-manual-optional\">6.3: \u0628\u0631\u06cc\u06a9\u06cc\u0679 \u0633\u06cc\u0646\u0627\u0631\u06cc\u0648 (\u062f\u0633\u062a\u06cc\u060c \u0627\u062e\u062a\u06cc\u0627\u0631\u06cc)<\/h3>\n<p>\u06cc\u06c1 \u00a76.2 \u062c\u06cc\u0633\u0627 \u06c1\u06cc \u067e\u062a\u06c1 \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u06c1\u0631 \u06a9\u0645\u0627\u0646\u0688 \u06a9\u0648 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0639\u0645\u0644 \u0645\u06cc\u06ba \u0644\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0622\u067e \u067e\u06c1\u0644\u06d2 \u06c1\u06cc \u06cc\u06c1 \u06a9\u0631 \u0686\u06a9\u06d2 \u06c1\u06cc\u06ba \u062a\u0648 \u0627\u0633 \u0633\u06cc\u06a9\u0634\u0646 \u06a9\u0648 \u0686\u06be\u0648\u0691 \u062f\u06cc\u06ba\u06d4 <code>make demo-6<\/code>.<\/p>\n<table>\n<thead>\n<tr>\n<th>\u0627\u0635\u0648\u0644 \u06a9\u0627 \u0646\u0627\u0645<\/th>\n<th>\u0622\u067e \u0627\u0633\u06d2 \u0645\u062a\u062d\u0631\u06a9 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u2026<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>ClearLedger \u06a9\u0646\u0679\u06cc\u0646\u0631 \u0633\u06d2 \u062a\u06cc\u0627\u0631 \u06a9\u0631\u062f\u06c1 \u0634\u06cc\u0644<\/strong><\/td>\n<td>\u0645\u0646\u0638\u0631\u0646\u0627\u0645\u06c1 1 - <code>kubectl exec \u2026 \/bin\/sh<\/code><\/td>\n<\/tr>\n<tr>\n<td><strong>ClearLedger \u0645\u06cc\u06ba \u062d\u0633\u0627\u0633 \u0641\u0627\u0626\u0644\u0648\u06ba \u06a9\u0648 \u067e\u0691\u06be\u0646\u0627<\/strong><\/td>\n<td>\u0645\u0646\u0638\u0631 \u0646\u0627\u0645\u06c1 2 - <code>cat \/etc\/passwd<\/code><\/td>\n<\/tr>\n<tr>\n<td><strong>\u067e\u06cc\u06a9\u06cc\u062c \u0645\u06cc\u0646\u06cc\u062c\u0631 \/ \u0622\u0624\u0679 \u0628\u0627\u0624\u0646\u0688 \u06a9\u0646\u06a9\u0634\u0646\u0632<\/strong><\/td>\n<td>\u0645\u0646\u0638\u0631 \u0646\u0627\u0645\u06c1 3 - <code>wget<\/code> \u06cc\u0627 <code>curl<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u06c1\u0631 \u06a9\u0645\u0627\u0646\u0688 \u06a9\u06d2 \u0628\u0639\u062f \u0631\u06cc\u0641\u0631\u06cc\u0634 \u06a9\u0631\u06cc\u06ba\u06d4 <code>http:\/\/falco.local<\/code> \u0645\u062a\u0628\u0627\u062f\u0644 \u0637\u0648\u0631 \u067e\u0631\u060c \u00a76.2 \u0633\u06d2 \u062a\u0644\u0627\u0634 \u06a9\u0627 \u0637\u0631\u06cc\u0642\u06c1 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-scenario-1-shell-in-a-running-pod-command-injection-simulation\">\u0645\u0646\u0638\u0631 \u0646\u0627\u0645\u06c1 1 - \u0686\u0644\u062a\u06cc \u06c1\u0648\u0626\u06cc \u067e\u0648\u0688 \u06a9\u0627 \u0634\u06cc\u0644 (\u0633\u0645\u067e\u0644\u06cc\u0679\u0646\u06af \u06a9\u0645\u0627\u0646\u0688 \u0627\u0646\u062c\u06cc\u06a9\u0634\u0646):<\/h4>\n<pre><code class=\"language-bash\">kubectl exec -n clearledger \n  $(kubectl get pod -n clearledger -l app=auth-service -o name | head -1) \n  -c auth-service -- \/bin\/sh -c \"id && exit\"\n<\/code><\/pre>\n<p><strong>Falco UI\/logs \u0633\u06d2 \u0645\u062a\u0648\u0642\u0639<\/strong> (~10 \u0633\u06cc\u06a9\u0646\u0688 \u06cc\u0627 \u0627\u0633 \u0633\u06d2 \u06a9\u0645):<\/p>\n<pre><code class=\"language-text\">CRITICAL: Shell spawned in ClearLedger container\n  user=... container=auth-service pod=auth-service-... cmd=sh -c id && exit\n<\/code><\/pre>\n<p><strong>\u0627\u0633 \u06a9\u0627 \u06a9\u06cc\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2:<\/strong> \u0641\u06cc\u0632 4 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u0634\u062f\u06c1 \u067e\u0648\u0688\u0632 (\u062a\u0639\u0645\u06cc\u0644)\u06d4 \u0633\u0637\u062d 6 \u06a9\u0627 \u067e\u062a\u06c1 \u0686\u0644\u0627 <em>\u0627\u0646\u062f\u0631\u0648\u0646\u06cc \u06a9\u0627\u0631\u0631\u0648\u0627\u0626\u06cc<\/em> \u067e\u0648\u0688: \u06cc\u06c1 \u0628\u0627\u0644\u06a9\u0644 \u0648\u06c1\u06cc \u06c1\u06d2 \u062c\u0648 \u0627\u06cc\u06a9 \u062d\u0645\u0644\u06c1 \u0622\u0648\u0631 \u06a9\u0645\u0627\u0646\u0688 \u0627\u0646\u062c\u06cc\u06a9\u0634\u0646 \u06a9\u06d2 \u0628\u0639\u062f \u06a9\u0631\u06d2 \u06af\u0627\u06d4<\/p>\n<p><strong>\u0627\u06af\u0631 \u0622\u067e \u06a9\u0648 \u06a9\u0648\u0626\u06cc \u0627\u0637\u0644\u0627\u0639 \u0646\u0638\u0631 \u0646\u06c1\u06cc\u06ba \u0622\u062a\u06cc \u06c1\u06d2:<\/strong> \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u0634\u062f\u06c1 exec \u06a9\u0648 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 <code>-c auth-service<\/code> (\u0648\u0627\u0644\u0679 \u0627\u06cc\u062c\u0646\u0679 \u0633\u0627\u0626\u0688\u06a9\u0627\u0631 \u0646\u06c1\u06cc\u06ba)\u060c \u0642\u0648\u0627\u0639\u062f \u062f\u06a9\u06be\u0627\u0626\u06cc\u06ba\u06d4 <code>schema validation: ok<\/code>\u067e\u0648\u0688 \u062a\u0635\u0648\u06cc\u0631\u06cc \u0646\u0627\u0645\u0648\u06ba \u0645\u06cc\u06ba \u0634\u0627\u0645\u0644 \u06c1\u06cc\u06ba: <code>clearledger<\/code>.<\/p>\n<h4 id=\"heading-scenario-2-read-a-sensitive-file-reconnaissance\">\u0645\u0646\u0638\u0631 \u0646\u0627\u0645\u06c1 2 - \u062d\u0633\u0627\u0633 \u0641\u0627\u0626\u0644\u0648\u06ba \u06a9\u0648 \u067e\u0691\u06be\u0646\u0627 (\u0631\u06cc\u06a9\u0646\u06cc\u0633\u0646\u0633):<\/h4>\n<pre><code class=\"language-bash\">kubectl exec -n clearledger \n  $(kubectl get pod -n clearledger -l app=auth-service -o name | head -1) \n  -c auth-service -- cat \/etc\/passwd\n<\/code><\/pre>\n<p><strong>\u0645\u062a\u0648\u0642\u0639:<\/strong><\/p>\n<pre><code class=\"language-text\">CRITICAL: Sensitive file read in ClearLedger\n  file=\/etc\/passwd container=auth-service pod=auth-service-...\n<\/code><\/pre>\n<h4 id=\"heading-scenario-3-download-tool-at-runtime-optional\">\u0645\u0646\u0638\u0631 \u0646\u0627\u0645\u06c1 3 - \u0631\u0646 \u0679\u0627\u0626\u0645 \u067e\u0631 \u0679\u0648\u0644\u0632 \u0688\u0627\u0624\u0646 \u0644\u0648\u0688 \u06a9\u0631\u06cc\u06ba (\u0627\u062e\u062a\u06cc\u0627\u0631\u06cc):<\/h4>\n<pre><code class=\"language-bash\">kubectl exec -n clearledger \n  $(kubectl get pod -n clearledger -l app=auth-service -o name | head -1) \n  -c auth-service -- sh -c \"wget -q ifconfig.me -O - 2>\/dev\/null || true\"\n<\/code><\/pre>\n<p>\u0627\u0633 \u06a9\u06d2 \u0646\u062a\u06cc\u062c\u06d2 \u0645\u06cc\u06ba \u067e\u06cc\u06a9\u06cc\u062c \u0645\u06cc\u0646\u06cc\u062c\u0631 \u0686\u0644 \u0633\u06a9\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631\/\u06cc\u0627 \u063a\u06cc\u0631 \u0645\u062a\u0648\u0642\u0639 \u0622\u0624\u0679 \u0628\u0627\u0624\u0646\u0688 \u06a9\u0646\u06a9\u0634\u0646 (\u0627\u0646\u062a\u0628\u0627\u06c1\u0627\u062a)\u06d4<\/p>\n<p>\u0645\u0646\u0638\u0631\u0646\u0627\u0645\u06d2 1 \u0627\u0648\u0631 2 \u06a9\u06d2 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679\u0633 \u0644\u06cc\u06ba: \u0631\u0646 \u0679\u0627\u0626\u0645 \u06a9\u0627 \u067e\u062a\u06c1 \u0644\u06af\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u067e\u0648\u0631\u0679 \u0641\u0648\u0644\u06cc\u0648 \u062b\u0628\u0648\u062a\u06d4<\/p>\n<h3 id=\"heading-64-apply-network-policies-zero-trust-segmentation\">6.4: \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u067e\u0627\u0644\u06cc\u0633\u06cc \u0627\u0646\u0641\u0648\u0631\u0633\u0645\u0646\u0679 (\u0632\u06cc\u0631\u0648 \u0679\u0631\u0633\u0679 \u0633\u06cc\u06af\u0645\u0646\u0679\u06cc\u0634\u0646)<\/h3>\n<p>\u0646\u06cc\u0679 \u0648\u0631\u06a9 \u06a9\u06cc \u067e\u0627\u0644\u06cc\u0633\u06cc\u0627\u06ba \u067e\u0648\u0688 \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u0641\u0627\u0626\u0631 \u0648\u0627\u0644 \u06a9\u06d2 \u0627\u0635\u0648\u0644 \u06c1\u06cc\u06ba\u06d4 Falco \u0688\u06cc\u0645\u0648 \u06a9\u06d2 \u0628\u0639\u062f \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u062f\u06cc\u06ba\u06d4<\/p>\n<p><code>make check-6<\/code> \u0628\u0631\u0627\u06c1 \u06a9\u0631\u0645 \u0635\u0631\u0641 \u0627\u0633 \u0633\u06cc\u06a9\u0634\u0646 \u06a9\u06d2 \u0628\u0639\u062f \u0686\u0644\u0627\u0626\u06cc\u06ba \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u0622\u067e \u0627\u0646 \u067e\u0627\u0644\u06cc\u0633\u06cc\u0648\u06ba \u06a9\u06cc \u062c\u0627\u0646\u0686 \u06a9\u0631 \u0631\u06c1\u06d2 \u06c1\u0648\u06ba \u06af\u06d2\u06d4 \u06a9\u06c1 <code>default-deny-all<\/code> \u067e\u0627\u0644\u06cc\u0633\u06cc \u0679\u0631\u06cc\u0641\u06a9 \u06a9\u0648 \u0628\u0637\u0648\u0631 \u0688\u06cc\u0641\u0627\u0644\u0679 \u0628\u0644\u0627\u06a9 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u06a9\u06c1 <code>allow-*<\/code> \u067e\u0627\u0644\u06cc\u0633\u06cc\u0627\u06ba \u0635\u0631\u0641 \u0648\u06c1 \u0631\u0627\u0633\u062a\u06d2 \u06a9\u06be\u0648\u0644\u062a\u06cc \u06c1\u06cc\u06ba \u062c\u0646 \u067e\u0631 ClearLedger \u06a9\u0648 \u06a9\u0627\u0645 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4 Falco \u0645\u0634\u06a9\u0648\u06a9 \u0631\u0648\u06cc\u06d2 \u06a9\u0627 \u067e\u062a\u06c1 \u0644\u06af\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u06a9\u06cc \u067e\u0627\u0644\u06cc\u0633\u06cc\u0627\u06ba \u0645\u062d\u062f\u0648\u062f \u06a9\u0631\u062a\u06cc \u06c1\u06cc\u06ba \u06a9\u06c1 \u067e\u0648\u0688 \u06a9\u06c1\u0627\u06ba \u062c\u0691 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p><strong>\u0644\u0627\u06af\u0648 \u06a9\u0631\u06cc\u06ba:<\/strong><\/p>\n<pre><code class=\"language-bash\">kubectl apply -f infra\/deferred-by-stage\/stage-6-runtime-security\/netpol\/network-policies.yaml\nkubectl get networkpolicy -n clearledger\n<\/code><\/pre>\n<p><strong>\u0645\u062a\u0648\u0642\u0639:<\/strong> 7 \u067e\u0627\u0644\u06cc\u0633\u06cc\u0627\u06ba: <code>default-deny-all<\/code> \u067e\u0644\u0633 6 <code>allow-*<\/code> (<code>auth-service<\/code>, <code>ledger-service<\/code>, <code>notification-service<\/code>, <code>postgres<\/code>, <code>redis<\/code>, <code>frontend<\/code>)\u06d4<\/p>\n<p>\u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u0622\u06cc\u0627 \u0627\u06cc\u067e \u0627\u0628 \u0628\u06be\u06cc \u06a9\u0627\u0645 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\">curl -s http:\/\/clearledger.local\/auth\/health | jq .\n# {\"status\":\"ok\",\"service\":\"auth-service\"}\n\ncurl -s http:\/\/clearledger.local\/notifications\/health | jq .\n# {\"status\":\"ok\",...}\n<\/code><\/pre>\n<p><strong>\u0686\u06cc\u06a9 \u067e\u0648\u0627\u0626\u0646\u0679 (\u0636\u0631\u0648\u0631\u06cc)<\/strong>: \u062b\u0627\u0628\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0646\u06cc\u0679 \u067e\u0648\u0644 \u0646\u06d2 \u0627\u0635\u0644 \u0627\u06cc\u067e \u0633\u06d2 \u0633\u0645\u062c\u06be\u0648\u062a\u06c1 \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u0627\u06d4<\/p>\n<pre><code class=\"language-bash\">kubectl get networkpolicy -n clearledger\ncurl -s -o \/dev\/null -w \"%{http_code}n\" http:\/\/clearledger.local\/\nkubectl get pods -n clearledger --field-selector=status.phase!=Running\n<\/code><\/pre>\n<table>\n<thead>\n<tr>\n<th>\u0646\u062a\u06cc\u062c\u06c1<\/th>\n<th>\u0645\u0639\u0646\u06cc<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>7 \u067e\u0627\u0644\u06cc\u0633\u06cc\u0627\u06ba \u062f\u0631\u062c \u06c1\u06cc\u06ba\u06d4<\/td>\n<td>\u0646\u06cc\u0679 \u067e\u0648\u0644 \u0644\u06af\u0627\u0626\u06cc\u06ba\u06d4<\/td>\n<\/tr>\n<tr>\n<td><code>200<\/code> curl \u0633\u06d2<\/td>\n<td>\u0635\u0627\u0631\u0641\u06cc\u0646 \u0627\u0628 \u0628\u06be\u06cc \u0622\u067e\u0679 \u0627\u0646 \u06a9\u0631 \u06a9\u06d2 \u0627\u06cc\u067e \u062a\u06a9 \u0631\u0633\u0627\u0626\u06cc \u062d\u0627\u0635\u0644 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/td>\n<\/tr>\n<tr>\n<td>\u062a\u06cc\u0633\u0631\u06cc \u06a9\u0645\u0627\u0646\u0688 \u067e\u0631\u0646\u0679 \u06a9\u0631\u06cc\u06ba\u06d4 <strong>\u06a9\u0686\u06be \u0646\u06c1\u06cc\u06ba<\/strong><\/td>\n<td>\u06a9\u0648\u0626\u06cc \u067e\u0648\u0688 \u06a9\u0631\u06cc\u0634 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u0627\u06d4<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u0627\u06af\u0631 \u0646\u06cc\u0679 \u067e\u0648\u0644 \u06a9\u06d2 \u0628\u0639\u062f \u062a\u0635\u062f\u06cc\u0642 \u06cc\u0627 \u0644\u06cc\u062c\u0631 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0634\u0631\u0648\u0639 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u0622\u067e \u06a9\u06d2 \u0627\u062e\u0631\u0627\u062c \u06a9\u06d2 \u0627\u0635\u0648\u0644 \u0628\u06c1\u062a \u0633\u062e\u062a \u06c1\u06cc\u06ba\u06d4 \u062f\u06cc\u06a9\u06be\u06cc\u06ba <code>troubleshooting.md<\/code>.<\/p>\n<h4 id=\"heading-scenario-4-blocked-cross-service-traffic-optional\">\u0645\u0646\u0638\u0631 \u0646\u0627\u0645\u06c1 4 - \u0628\u0644\u0627\u06a9 \u06a9\u0631\u0627\u0633 \u0633\u0631\u0648\u0633 \u0679\u0631\u06cc\u0641\u06a9 (\u0627\u062e\u062a\u06cc\u0627\u0631\u06cc)<\/h4>\n<p>\u0627\u06af\u0631 \u0622\u067e \u0686\u0648\u06a9\u06cc \u0633\u06d2 \u06af\u0632\u0631\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0633\u06d2 \u0686\u0644\u0627\u0646\u0627 \u0686\u0627\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0648 \u0627\u0633\u06d2 \u0686\u06be\u0648\u0691 \u062f\u06cc\u06ba\u06d4 <code>make check-6<\/code>. \u0627\u0633 \u0633\u06d2 \u062b\u0627\u0628\u062a \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0644\u06cc\u062c\u0631 \u0646\u0648\u0679\u06cc\u0641\u06a9\u06cc\u0634\u0646 \u06a9\u0648 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u06a9\u0627\u0644 \u0646\u06c1\u06cc\u06ba \u06a9\u0631 \u0633\u06a9\u062a\u0627 (\u0627\u0633 \u0631\u0627\u0633\u062a\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u062c\u0627\u0632\u062a \u06a9\u06d2 \u06a9\u0648\u0626\u06cc \u0627\u0635\u0648\u0644 \u0646\u06c1\u06cc\u06ba \u06c1\u06cc\u06ba)\u06d4 \u06a9\u0646\u06a9\u0634\u0646 \u06a9\u06cc \u0646\u0627\u06a9\u0627\u0645\u06cc \u0627\u06cc\u06a9 \u06a9\u0627\u0645\u06cc\u0627\u0628\u06cc \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u067e\u0631\u0627\u0646\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u0646\u06c1 \u06a9\u0631\u06cc\u06ba<\/strong> <code>wget<\/code> <strong>\u0627\u06cc\u06a9 \u0644\u0627\u0626\u0646\u0631<\/strong>: \u0644\u06cc\u062c\u0631 \u0627\u0645\u06cc\u062c \u0645\u06cc\u06ba \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 <code>wget<\/code>\/<code>curl<\/code>\u0627\u0648\u0631 <code>head -1<\/code> \u0622\u067e \u067e\u0648\u0688 \u06a9\u0648 \u062e\u062a\u0645 \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba (exec \u06cc\u0627 \u062a\u0648 \u0644\u0679\u06a9 \u062c\u0627\u0626\u06d2 \u06af\u0627 \u06cc\u0627 \u062e\u062a\u0645 \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u06af\u0627)\u06d4 <strong>137<\/strong>)\u06d4<\/p>\n<pre><code class=\"language-bash\">LEDGER_POD=$(kubectl get pods -n clearledger -l app=ledger-service --no-headers \n  | awk '$2==\"2\/2\" && $3==\"Running\" {print $1; exit}')\n\necho \"Using pod: $LEDGER_POD\"\n\nkubectl exec -n clearledger \"$LEDGER_POD\" -c ledger-service -- python3 -c \"\nimport urllib.request\ntry:\n    urllib.request.urlopen('http:\/\/notification-service\/', timeout=5)\n    print('UNEXPECTED: connection succeeded')\nexcept Exception as e:\n    print('BLOCKED (expected):', e)\n\"\n<\/code><\/pre>\n<p><strong>\u0645\u062a\u0648\u0642\u0639:<\/strong><\/p>\n<pre><code class=\"language-text\">BLOCKED (expected): <urlopen error=\"\" timed=\"\" out=\"\">\n<\/urlopen><\/code><\/pre>\n<p>\u06cc\u0627 <code>Connection refused<\/code>, <strong>~ \u0646\u06c1\u06cc\u06ba<\/strong> <code>UNEXPECTED: connection succeeded<\/code>.<\/p>\n<h3 id=\"heading-66-health-check\">6.6: \u0627\u0633\u0679\u06cc\u0679\u0633 \u0686\u06cc\u06a9<\/h3>\n<p>\u06cc\u06c1 \u0686\u0644\u0627\u0626\u06cc\u06ba <strong>\u00a76.4 \u0622\u06af\u06d2<\/strong> (\u0646\u06cc\u0679 \u0648\u0631\u06a9 \u067e\u0627\u0644\u06cc\u0633\u06cc)\u06d4 \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u0626\u06cc\u06ba \u06a9\u06c1 Falco\u060c \u06a9\u0633\u0679\u0645 \u0631\u0648\u0644\u0632\u060c \u0627\u0648\u0631 \u0646\u06cc\u0679 \u067e\u0648\u0644 \u0627\u0646\u0633\u0679\u0627\u0644 \u06c1\u06cc\u06ba\u06d4 \u06c1\u0627\u06ba <strong>~ \u0646\u06c1\u06cc\u06ba<\/strong> \u062b\u0627\u0628\u062a \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u0627\u06cc\u06a9 \u0627\u0646\u062a\u0628\u0627\u06c1 \u06c1\u0648\u0627 \u06c1\u06d2 (\u06cc\u0639\u0646\u06cc \u00a76.2)\u06d4<\/p>\n<pre><code class=\"language-bash\">make check-6\n<\/code><\/pre>\n<p><strong>\u0622\u067e \u06a9\u0648 \u06a9\u06cc\u0627 \u062f\u06cc\u06a9\u06be\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2:<\/strong><\/p>\n<pre><code class=\"language-text\">&#x25b6; Stage 6 \u2014 Runtime Security (Falco)\n  \u2713 Falco DaemonSet: 1\/1 nodes\n  \u2713 ClearLedger custom Falco rules ConfigMap exists\n  \u2713 NetworkPolicy default-deny-all exists\n  \u2713 NetworkPolicy allow-auth-service exists\n  \u2713 NetworkPolicy allow-ledger-service exists\n  \u2713 NetworkPolicy allow-notification-service exists\n  \u2713 auth-service reachable after network policies\n  \u2713 notification-service reachable after network policies\n\nAll checks passed. Ready for the next stage.\n<\/code><\/pre>\n<h3 id=\"heading-how-stage-6-fits-the-full-stack-optional-reading\">\u0645\u0631\u062d\u0644\u06c1 6 \u0622\u067e \u06a9\u06d2 \u067e\u0648\u0631\u06d2 \u0627\u0633\u0679\u06cc\u06a9 \u06a9\u0648 \u06a9\u06cc\u0633\u06d2 \u0641\u0679 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 (\u0627\u062e\u062a\u06cc\u0627\u0631\u06cc \u067e\u0691\u06be\u0646\u0627)<\/h3>\n<p>\u06c1\u0631 \u0645\u0631\u062d\u0644\u06c1 \u0632\u0646\u062f\u06af\u06cc \u06a9\u06d2 \u0686\u06a9\u0631 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0645\u062e\u062a\u0644\u0641 \u0646\u0642\u0637\u06c1 \u06a9\u06cc \u062d\u0641\u0627\u0638\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u067e\u0648\u0688 \u0627\u0633\u0679\u0627\u0631\u0679 \u0627\u067e \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06cc\u0627 \u0627\u0633 \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646 \u0645\u0631\u0627\u062d\u0644 1-5 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0645\u0631\u062d\u0644\u06c1 6 \u0645\u06cc\u06ba\u060c \u06c1\u0645 \u0645\u0634\u0627\u06c1\u062f\u06c1 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u06a9\u06c1 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0686\u0644\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u06a9\u0646\u0679\u06cc\u0646\u0631 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u06a9\u06cc\u0627 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<ul>\n<li>\n<p><strong>\u0645\u0631\u062d\u0644\u06c1 3 \u0645\u06cc\u06ba<\/strong> CI \u062e\u0631\u0627\u0628 \u06a9\u0648\u0688 \u0627\u0648\u0631 \u062a\u0635\u0627\u0648\u06cc\u0631 \u067e\u06a9\u0691\u062a\u0627 \u06c1\u06d2\u06d4 <code>git push<\/code>.<\/p>\n<\/li>\n<li>\n<p><strong>\u0645\u0631\u062d\u0644\u06c1 4\u060c<\/strong> Kyverno \u062f\u0627\u062e\u0644\u06c1 \u06a9\u06d2 \u0628\u0639\u062f \u0628\u062f\u0645\u0639\u0627\u0634 \u067e\u06be\u0644\u06cc\u0648\u06ba \u06a9\u0648 \u0631\u0648\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0645\u0631\u062d\u0644\u06c1 5\u060c<\/strong> \u0648\u0627\u0644\u0679 \u0633\u0679\u0627\u0631\u0679 \u0627\u067e \u0645\u06cc\u06ba \u0631\u0627\u0632 \u06a9\u0648 \u0627\u0646\u062c\u06cc\u06a9\u0634\u0646 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0645\u0631\u062d\u0644\u06c1 6\u060c<\/strong> \u0641\u0627\u0644\u06a9\u0648 \u067e\u0648\u0688 \u06a9\u06d2 \u0686\u0644\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f \u0633\u06cc\u0633\u06a9\u0627\u0644\u0632 \u06a9\u0648 \u062f\u06cc\u06a9\u06be\u062a\u0627 \u06c1\u06d2 (\u0634\u06cc\u0644 \u0633\u067e\u0648\u0646 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u062d\u0633\u0627\u0633 \u0641\u0627\u0626\u0644\u0648\u06ba \u06a9\u0648 \u067e\u0691\u06be\u062a\u0627 \u06c1\u06d2)\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0645\u0631\u062d\u0644\u06c1 6\u060c<\/strong> \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u06a9\u06cc \u067e\u0627\u0644\u06cc\u0633\u06cc\u0627\u06ba \u067e\u06be\u0644\u06cc\u0648\u06ba \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u0679\u0631\u06cc\u0641\u06a9 \u06a9\u0648 \u0641\u0644\u0679\u0631 \u06a9\u0631\u062a\u06cc \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ul>\n<p>\u0648\u06c1 \u062a\u06cc\u0646 \u0645\u062e\u062a\u0644\u0641 \u0633\u0648\u0627\u0644\u0648\u06ba \u06a9\u06d2 \u062c\u0648\u0627\u0628 \u062f\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 Kyverno \u067e\u0648\u0686\u06be\u06d2 \u06af\u0627 \u06a9\u06c1 \u06a9\u06cc\u0627 \u06cc\u06c1 \u0627\u0633 \u067e\u0648\u0688 \u06a9\u0648 \u0628\u0646\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u0641\u0627\u0644\u06a9\u0648 \u067e\u0648\u0686\u06be\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0641\u0648\u0631\u0688 \u0627\u0628 \u06a9\u06cc\u0627 \u06a9\u0631 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4 \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u067e\u0627\u0644\u06cc\u0633\u06cc \u067e\u0648\u0686\u06be\u062a\u06cc \u06c1\u06d2 \u06a9\u06c1 \u067e\u0648\u0688 \u06a9\u0633 \u0633\u06d2 \u0628\u0627\u062a \u06a9\u0631 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>Falco CI \u06cc\u0627 Kyverno \u06a9\u06cc \u062c\u06af\u06c1 \u0646\u06c1\u06cc\u06ba \u0644\u06cc\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0622\u067e 3-5 \u0645\u0631\u0627\u062d\u0644 \u06a9\u0648 \u0686\u06be\u0648\u0691\u062a\u06d2 \u06c1\u06cc\u06ba\u060c Falco \u067e\u06be\u0631 \u0628\u06be\u06cc \u0622\u067e \u06a9\u0648 \u0645\u062a\u0646\u0628\u06c1 \u06a9\u0631\u06d2 \u06af\u0627\u060c \u0644\u06cc\u06a9\u0646 \u0622\u067e Git \u06a9\u0648 \u067e\u06c1\u0644\u06d2 \u06c1\u06cc \u06a9\u0645\u0632\u0648\u0631 \u06a9\u0648\u0688 \u0627\u0648\u0631 \u0631\u0627\u0632 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631 \u0686\u06a9\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-stage-6-is-complete-proceed-to-stage-65-or-7\">\u0645\u0631\u062d\u0644\u06c1 6 \u0645\u06a9\u0645\u0644 \u06c1\u0648 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4 \u0645\u0631\u062d\u0644\u06c1 6.5 \u06cc\u0627 \u0645\u0631\u062d\u0644\u06c1 7 \u067e\u0631 \u062c\u0627\u0626\u06cc\u06ba\u06d4<\/h3>\n<table>\n<thead>\n<tr>\n<th>#<\/th>\n<th>\u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba<\/th>\n<th>\u0686\u06cc\u06a9 \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0637\u0631\u06cc\u0642\u06c1<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>1<\/td>\n<td>\u0641\u0627\u0644\u06a9\u0648 \u0631\u0646<\/td>\n<td><code>kubectl get pods -n falco<\/code> - \u0688\u06cc\u0645\u0646 \u0633\u06cc\u0679 <code>2\/2<\/code><\/td>\n<\/tr>\n<tr>\n<td>2<\/td>\n<td>\u0627\u067e\u0646\u06cc \u0645\u0631\u0636\u06cc \u06a9\u06d2 \u0642\u0648\u0627\u0646\u06cc\u0646 \u06a9\u0648 \u0644\u0648\u0688 \u06a9\u0631 \u062f\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2.<\/td>\n<td>`kubectl log -n falco -l app.kubernetes.io\/name=falco -c falco --tail=200<\/td>\n<\/tr>\n<tr>\n<td>3<\/td>\n<td>\u0634\u06cc\u0644 \u0648\u0627\u0631\u0646\u0646\u06af \u062c\u0627\u0631\u06cc \u06a9\u06cc \u06af\u0626\u06cc\u06d4 <strong>\u0627\u0648\u0631 \u0622\u067e \u0627\u0633\u06d2 \u067e\u0691\u06be\u062a\u06d2 \u06c1\u06cc\u06ba<\/strong><\/td>\n<td><code>make demo-6<\/code> \u2192 \u0627\u06c1\u0645 \u0644\u0627\u0626\u0646\u0632 <code>cmd=sh -c id && exit<\/code>\u0641\u0648\u0631\u0688 <code>auth-service-\u2026<\/code> \u2014 \u00a76.2<\/td>\n<\/tr>\n<tr>\n<td>4<\/td>\n<td>\u0646\u06cc\u0679 \u0648\u0631\u06a9 \u067e\u0627\u0644\u06cc\u0633\u06cc \u0644\u0627\u06af\u0648 \u06c1\u0648 \u06af\u0626\u06cc\u06d4<\/td>\n<td><code>kubectl get networkpolicy -n clearledger<\/code> \u2014 \u00a76.4<\/td>\n<\/tr>\n<tr>\n<td>5<\/td>\n<td>\u0627\u06cc\u067e \u0627\u0628 \u0628\u06be\u06cc \u0635\u062d\u062a \u0645\u0646\u062f \u06c1\u06d2\u06d4<\/td>\n<td><code>curl<\/code> \u062a\u0648\u062b\u06cc\u0642 + \u0646\u0648\u0679\u06cc\u0641\u06a9\u06cc\u0634\u0646 \u0627\u0633\u0679\u06cc\u0679\u0633 \u0631\u06cc\u0679\u0631\u0646 200<\/td>\n<\/tr>\n<tr>\n<td>6<\/td>\n<td>\u0635\u062d\u062a \u06a9\u06cc \u062c\u0627\u0646\u0686<\/td>\n<td><code>make check-6<\/code> \u0633\u0628\u0632 \u2014 \u00a76.6<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><strong>\u067e\u0648\u0631\u0679 \u0641\u0648\u0644\u06cc\u0648 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679 (\u0627\u062e\u062a\u06cc\u0627\u0631\u06cc):<\/strong> \u06a9\u0646\u0679\u06cc\u0646\u0631 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0634\u06cc\u0644 \u0648\u0627\u0631\u0646\u0646\u06af \u00b7 Falco UI \u0645\u06cc\u06ba \u062d\u0633\u0627\u0633 \u0641\u0627\u0626\u0644 \u0631\u06cc\u0688 \u0648\u0627\u0631\u0646\u0646\u06af\u06d4<\/p>\n<p>\u0627\u06af\u0644\u06d2 \u0645\u0631\u0627\u062d\u0644: \u0645\u0631\u062d\u0644\u06c1 6 Falco \u0627\u0644\u0631\u0679\u0633 \u0627\u0648\u0631 \u0628\u0646\u06cc\u0627\u062f\u06cc \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u067e\u0627\u0644\u06cc\u0633\u06cc\u0627\u06ba \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0622\u067e \u0627\u067e\u0646\u06cc \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u067e\u0627\u0644\u06cc\u0633\u06cc \u06a9\u0648 \u0628\u0639\u062f \u0645\u06cc\u06ba \u0628\u06c1\u062a\u0631 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0645\u0631\u062d\u0644\u06c1 6.5 \u0644\u0679\u0645\u0633 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0627\u06cc\u06a9 \u0627\u062e\u062a\u06cc\u0627\u0631\u06cc \u0627\u0641\u0631\u0627\u062a\u0641\u0631\u06cc \u06a9\u0627 \u0627\u0645\u062a\u062d\u0627\u0646 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0645\u0631\u062d\u0644\u06c1 7 \u0648\u0642\u062a \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u06a9\u06d2 \u0648\u0627\u0642\u0639\u0627\u062a \u062f\u06cc\u06a9\u06be\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06af\u0631\u0627\u0641\u0627\u0646\u0627 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u06a9\u0627 \u0627\u0636\u0627\u0641\u06c1 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-what-you-learned-in-stage-6\">\u0622\u067e \u0646\u06d2 \u0645\u0631\u062d\u0644\u06c1 6 \u0645\u06cc\u06ba \u06a9\u06cc\u0627 \u0633\u06cc\u06a9\u06be\u0627\u06d4<\/h3>\n<ul>\n<li>\n<p>\u0631\u0646 \u0679\u0627\u0626\u0645 \u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u062c\u0633\u06d2 CI \u0627\u0648\u0631 \u062f\u0627\u062e\u0644\u06c1 \u06a9\u0646\u0679\u0631\u0648\u0644 \u0646\u06c1\u06cc\u06ba \u067e\u06a9\u0691\u062a\u06d2: \u06a9\u0646\u0679\u06cc\u0646\u0631\u0632 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0633\u06d2 \u062e\u0637\u0631\u0627\u062a<\/p>\n<\/li>\n<li>\n<p>Falco \u06a9\u06cc\u0627 \u06c1\u06d2: \u0627\u067e\u0646\u06cc \u0645\u0631\u0636\u06cc \u06a9\u06d2 \u0645\u0637\u0627\u0628\u0642 YAML \u0642\u0648\u0627\u0639\u062f \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 eBPF \u0633\u06cc\u0633\u06a9\u0627\u0644 \u06a9\u06cc \u0646\u06af\u0631\u0627\u0646\u06cc \u06a9\u0631\u0646\u0627<\/p>\n<\/li>\n<li>\n<p>\u0646\u06cc\u0679 \u0648\u0631\u06a9 \u067e\u0627\u0644\u06cc\u0633\u06cc \u06a9\u06cc\u0627 \u06c1\u06d2\u061f \u067e\u06be\u0644\u06cc\u0648\u06ba \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 Kubernetes \u0641\u0627\u0626\u0631 \u0648\u0627\u0644 \u06a9\u06d2 \u0627\u0635\u0648\u0644<\/p>\n<\/li>\n<li>\n<p>\u0627\u0646\u062a\u0628\u0627\u06c1\u0627\u062a \u06a9\u0648 \u0645\u062a\u062d\u0631\u06a9 \u06a9\u0631\u0646\u06d2 \u0627\u0648\u0631 \u0627\u0646 \u06a9\u06cc \u062a\u0634\u0631\u06cc\u062d \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0637\u0631\u06cc\u0642\u06c1: \u0648\u0627\u0642\u0639\u06c1 \u06a9\u06d2 \u062c\u0648\u0627\u0628 \u06a9\u06cc \u062a\u06a9\u0646\u06cc\u06a9<\/p>\n<\/li>\n<li>\n<p><strong>\u0645\u06a9\u0645\u0644 \u0627\u0633\u0679\u06cc\u06a9:<\/strong> \u0631\u0646 \u0679\u0627\u0626\u0645 \u06a9\u0627 \u067e\u062a\u06c1 \u0644\u06af\u0627\u0646\u06d2 \u0633\u06d2 \u06a9\u0648\u0688 \u0627\u0633\u06a9\u06cc\u0646\u0646\u06af\u060c \u062f\u0627\u062e\u0644\u06c1 \u06a9\u0646\u0679\u0631\u0648\u0644\u060c \u062e\u0641\u06cc\u06c1 \u0627\u0646\u062a\u0638\u0627\u0645\u060c \u0627\u0648\u0631 (\u0627\u06af\u0644\u0627) \u0645\u0634\u0627\u06c1\u062f\u06c1 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u0627\u0628 \u0622\u067e \u0627\u067e\u0646\u06d2 \u062a\u062c\u0631\u0628\u06d2 \u06a9\u06cc \u0641\u06c1\u0631\u0633\u062a \u0645\u06cc\u06ba \u06a9\u06cc\u0627 \u0688\u0627\u0644 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\/\u0627\u06cc\u06a9 \u0627\u0646\u0679\u0631\u0648\u06cc\u0648 \u0645\u06cc\u06ba \u06a9\u06c1\u06c1 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba:<\/strong><\/p>\n<blockquote>\n<p>\u0622\u067e \u0627\u067e\u0646\u06cc \u0645\u0631\u0636\u06cc \u06a9\u06d2 \u0627\u0635\u0648\u0644\u0648\u06ba \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0631\u0646 \u0679\u0627\u0626\u0645 \u062e\u0637\u0631\u06d2 \u06a9\u0627 \u067e\u062a\u06c1 \u0644\u06af\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 Falco \u06a9\u0648 \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u06a9\u0646\u0679\u06cc\u0646\u0631\u0632 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0634\u06cc\u0644\u0632 \u06cc\u0627 \u062d\u0633\u0627\u0633 \u0641\u0627\u0626\u0644 \u0631\u06cc\u0688\u0646\u06af \u067e\u0631 \u0627\u0644\u0631\u0679\u0633 \u06a9\u0648 \u0645\u062a\u062d\u0631\u06a9 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0622\u0646 \u06a9\u0627\u0644 \u0627\u0646\u062c\u06cc\u0646\u0626\u0631\u0632 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u067e\u0691\u06be\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/blockquote>\n<p><code>make snapshot STAGE=6 && make snapshots<\/code>. \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba <code>clearledger.stage6<\/code>. \u062f\u06cc\u06a9\u06be\u06cc\u06ba \u06a9\u06c1 \u0627\u067e\u0646\u06cc \u062a\u0631\u0642\u06cc \u06a9\u0648 \u06a9\u06cc\u0633\u06d2 \u0628\u0686\u0627\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4<\/p>\n<h2 id=\"heading-stage-65-chaos-engineering-optional\">\u0645\u0631\u062d\u0644\u06c1 6.5 \u2014 \u0627\u0641\u0631\u0627\u062a\u0641\u0631\u06cc \u0627\u0646\u062c\u06cc\u0646\u0626\u0631\u0646\u06af (\u0627\u062e\u062a\u06cc\u0627\u0631\u06cc)<\/h2>\n<p><strong>\u0632\u06cc\u0627\u062f\u06c1 \u062a\u0631 \u0633\u06cc\u06a9\u06be\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0627\u0633\u06d2 \u0686\u06be\u0648\u0691 \u062f\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/strong> \u0645\u0631\u062d\u0644\u06c1 6 \u0645\u06a9\u0645\u0644 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f <code>make check-6<\/code> \u0627\u06af\u0631 \u0622\u067e \u06af\u0632\u0631 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0622\u067e \u0633\u06cc\u062f\u06be\u06d2 \u0642\u062f\u0645 7 \u067e\u0631 \u062c\u0627\u0626\u06cc\u06ba \u06af\u06d2\u06d4 7 \u0627\u0648\u0631 8 \u0645\u0631\u062d\u0644\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0644\u0679\u0645\u0633 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u0627\u06af\u0631 \u0622\u067e \u0627\u0641\u0631\u0627\u062a\u0641\u0631\u06cc \/ \u0627\u0686\u06be\u0627\u0644 \u0686\u0627\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba (~ 1 \u06af\u06be\u0646\u0679\u06c1):<\/strong> LitmusChaos \u0627\u06cc\u06a9 \u06a9\u0648 \u062d\u0630\u0641 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <code>auth-service<\/code> \u0641\u0648\u0631\u0688 \u0627\u0648\u0631 \u062b\u0628\u0648\u062a <code>\/auth\/health<\/code> \u0642\u06cc\u0627\u0645 <strong>200<\/strong> Kubernetes \u0627\u0633 \u06a9\u06cc \u062c\u06af\u06c1 \u0644\u06d2 \u0644\u06cc\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-do-the-steps-in-this-order\">\u0627\u0633 \u062a\u0631\u062a\u06cc\u0628 \u0645\u06cc\u06ba \u0627\u0642\u062f\u0627\u0645\u0627\u062a \u067e\u0631 \u0639\u0645\u0644 \u06a9\u0631\u06cc\u06ba:<\/h3>\n<table>\n<thead>\n<tr>\n<th>\u0642\u062f\u0645<\/th>\n<th>\u067e\u0627\u0631\u0679 \u0679\u0627\u0626\u0645 \u0646\u0648\u06a9\u0631\u06cc<\/th>\n<th>\u0622\u067e \u06a9\u06cc\u0627 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>1<\/td>\n<td>\u00a76.5.0<\/td>\n<td><code>make fix-65-prereqs<\/code> - \u062a\u0635\u062f\u06cc\u0642\u06cc \u067e\u0648\u0688 <strong>2\/2 \u062a\u06cc\u0627\u0631\u06cc<\/strong><\/td>\n<\/tr>\n<tr>\n<td>2<\/td>\n<td>\u00a76.5.1<\/td>\n<td><code>bash ...install-litmus.sh<\/code> - UI \u0634\u0648 <strong>\u0641\u0639\u0627\u0644 1<\/strong><\/td>\n<\/tr>\n<tr>\n<td>3<\/td>\n<td>\u00a76.5.2<\/td>\n<td>UI: \u067e\u0648\u0688 \u0688\u06cc\u0644\u06cc\u0679 \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u062a\u062c\u0631\u0628\u06c1 + <code>curl<\/code> 200 \u0631\u06a9\u06be\u06cc\u06ba<\/td>\n<\/tr>\n<tr>\n<td>4<\/td>\n<td>\u00a76.5.7<\/td>\n<td><code>make check-65<\/code>\u0633\u0646\u06cc\u067e \u0634\u0627\u0679<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><strong>\u0627\u062e\u062a\u06cc\u0627\u0631\u06cc:<\/strong> \u00a76.5.3: \u0627\u0633\u06cc \u0679\u06cc\u0633\u0679 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 <code>make demo-65<\/code> UI \u0648\u0632\u0631\u0688 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 (\u0679\u0631\u0645\u06cc\u0646\u0644 \u067e\u0627\u062a\u06be) \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-650-before-you-start-auth-pods-must-be-22\">6.5.0: \u0634\u0631\u0648\u0639 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 (\u062a\u0648\u062b\u06cc\u0642 \u067e\u0648\u0688\u0632 2\/2 \u06c1\u0648\u0646\u06d2 \u0686\u0627\u06c1\u0626\u06cc\u06ba)<\/h3>\n<p>\u0627\u0641\u0631\u0627\u062a\u0641\u0631\u06cc \u067e\u06be\u0644\u06cc \u06a9\u0648 \u062d\u0630\u0641 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0645\u062a\u0628\u0627\u062f\u0644 \u0634\u0631\u0648\u0639 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u062a\u0648 \u0644\u0686\u06a9 \u0633\u06cc\u06a9\u06be\u0646\u06d2 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 CrashLoopBackOff \u06a9\u0648 \u0688\u06cc\u0628\u06af \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">export GITHUB_OWNER=YOUR_GITHUB_USERNAME   # required \u2014 without this, fix-argocd breaks ArgoCD repoURL\nmake fix-65-prereqs\nkubectl get pods -n clearledger -l app=auth-service\n<\/code><\/pre>\n<p><strong>\u067e\u0627\u0633:<\/strong> \u062f\u0648 \u067e\u06be\u0644\u06cc\u060c \u062f\u0648\u0646\u0648\u06ba <strong>2\/2 \u062a\u06cc\u0627\u0631\u06cc<\/strong>. \u062c\u0628 \u062a\u06a9 \u0627\u06cc\u0633\u0627 \u0646\u06c1 \u06c1\u0648 \u0644\u0679\u0645\u0633 \u06a9\u0648 \u0627\u0646\u0633\u0679\u0627\u0644 \u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p><strong>\u0627\u06af\u0631 \u06a9\u0686\u06be \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u062c\u0627\u062a\u0627 \u06c1\u06d2:<\/strong><\/p>\n<table>\n<thead>\n<tr>\n<th>\u0639\u0644\u0627\u0645\u062a<\/th>\n<th>\u0679\u06be\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>\u0622\u0631\u06af\u0648 \u0633\u06cc \u0688\u06cc <strong>\u0645\u0648\u0627\u0632\u0646\u06c1 \u06a9\u06cc \u063a\u0644\u0637\u06cc<\/strong> ~ \u0628\u0639\u062f <code>fix-65-prereqs<\/code><\/td>\n<td><code>kubectl apply -f stages\/stage-2-gitops\/argocd\/clearledger-app.yaml<\/code><\/td>\n<\/tr>\n<tr>\n<td>\u0633\u0631\u0679\u06cc\u0641\u06cc\u06a9\u06cc\u0634\u0646 <strong>\u0631\u06cc \u0633\u06cc\u0679 \u06a9\u0631\u06cc\u06ba: 0\/1<\/strong>\u0645\u062d\u0641\u0648\u0638 <code>permission denied<\/code><\/td>\n<td>\u0645\u0631\u062d\u0644\u06c1 5 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4 <code>setup.sh<\/code> + <code>seed-vault-secrets.sh<\/code>\u062a\u0635\u062f\u06cc\u0642\/\u0644\u06cc\u062c\u0631 \u067e\u0648\u0688 \u06a9\u0648 \u062d\u0630\u0641 \u06a9\u0631\u06cc\u06ba\u06d4<\/td>\n<\/tr>\n<tr>\n<td>\u0633\u0631\u0679\u06cc\u0641\u06cc\u06a9\u06cc\u0634\u0646 <strong>1\/2<\/strong> \u06cc\u0627 \u067e\u0648\u0633\u0679\u06af\u0631\u06cc\u0633 \u0679\u0627\u0626\u0645 \u0622\u0624\u0679<\/td>\n<td><code>make fix-65-prereqs<\/code> \u062f\u0648\u0628\u0627\u0631\u06c1 (netpol + start probe \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba)<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3 id=\"heading-651-install-litmuschaos-operator-ui-cluster-connection\">6.5.1: LitmusChaos \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u06cc\u06ba (\u0622\u067e\u0631\u06cc\u0679\u0631\u060c UI\u060c \u06a9\u0644\u0633\u0679\u0631 \u06a9\u0646\u06a9\u0634\u0646)<\/h3>\n<pre><code class=\"language-bash\">bash stages\/stage-6.5-chaos-engineering\/scripts\/install-litmus.sh\nkubectl get pods -n litmus\nopen http:\/\/litmus.local    # login: admin \/ litmus\n<\/code><\/pre>\n<p><strong>\u00a76.5.2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u067e\u0627\u0633 \u06a9\u06cc\u0627 \u06af\u06cc\u0627:<\/strong> \u062c\u0627\u0626\u0632\u06c1 \u0628\u0646\u06cc\u0627\u062f\u06cc \u0688\u06be\u0627\u0646\u0686\u06c1 \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2: \u0627\u06cc\u06a9\u0679\u0648 1 (0 \u0646\u06c1\u06cc\u06ba\u060c \u0632\u06cc\u0631 \u0627\u0644\u062a\u0648\u0627\u0621 \u0646\u06c1\u06cc\u06ba)\u06d4<\/p>\n<p><strong>\u0627\u067e\u0646\u0627 \u067e\u0648\u0688 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba:<\/strong><\/p>\n<pre><code class=\"language-bash\">kubectl get pods -n litmus\n# litmus-core, chaos frontend\/server, mongodb, subscriber \u2014 all Running\n<\/code><\/pre>\n<h4 id=\"heading-if-overview-shows-0-infrastructures-or-pending\">\u0627\u06af\u0631 \u062c\u0627\u0626\u0632\u06c1 0 \u0627\u0646\u0641\u0631\u0627\u0633\u0679\u0631\u06a9\u0686\u0631 \u06cc\u0627 \u0632\u06cc\u0631 \u0627\u0644\u062a\u0648\u0627\u0621 \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/h4>\n<p>UI \u0627\u0633 \u0648\u0642\u062a \u062a\u06a9 \u062e\u0627\u0644\u06cc \u06c1\u06d2 \u062c\u0628 \u062a\u06a9 \u06a9\u06c1 \u0633\u0628\u0633\u06a9\u0631\u0627\u0626\u0628\u0631 \u0627\u06cc\u062c\u0646\u0679 \u06a9\u0644\u0633\u0679\u0631 \u0633\u06d2 \u0645\u0646\u0633\u0644\u06a9 \u0646\u06c1 \u06c1\u0648 \u062c\u0627\u0626\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\">export LITMUS_PASSWORD='litmus'   # only if you changed the default\nbash stages\/stage-6.5-chaos-engineering\/scripts\/connect-litmus-infra.sh\n<\/code><\/pre>\n<p>\u0627\u067e\u0646\u06d2 \u0628\u0631\u0627\u0624\u0632\u0631 \u06a9\u0648 \u0631\u06cc\u0641\u0631\u06cc\u0634 \u06a9\u0631\u06cc\u06ba\u06d4 \u0648\u0642\u062a \u0634\u0631\u0648\u0639 <strong>http:\/\/litmus.local<\/strong> \u0628\u0633 \u0628\u0648\u0691\u06be\u0627 \u0646\u06c1\u06cc\u06ba\u06d4 <code>\/account\/...\/settings<\/code> \u0628\u06a9 \u0645\u0627\u0631\u06a9\u06d4<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/07\/1785194532_238_Homelab-\u0633\u06d2-AWS-\u062a\u06a9-\u067e\u0631\u0648\u0688\u06a9\u0634\u0646-\u06a9\u06d2-\u0644\u06cc\u06d2-\u062a\u06cc\u0627\u0631-DevSecOps-\u067e\u0644\u06cc\u0679.png\" alt=\"\u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679 \u0644\u0679\u0645\u0633 UI \u062f\u06a9\u06be\u0627 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4\" style=\"display:block;margin:0 auto\" width=\"1255\" height=\"627\" loading=\"lazy\" title=\"\"><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/07\/1785194532_912_Homelab-\u0633\u06d2-AWS-\u062a\u06a9-\u067e\u0631\u0648\u0688\u06a9\u0634\u0646-\u06a9\u06d2-\u0644\u06cc\u06d2-\u062a\u06cc\u0627\u0631-DevSecOps-\u067e\u0644\u06cc\u0679.png\" alt=\"\u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679 \u0644\u0679\u0645\u0633 UI \u062f\u06a9\u06be\u0627 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4\" style=\"display:block;margin:0 auto\" width=\"1267\" height=\"951\" loading=\"lazy\" title=\"\"><\/p>\n<h4 id=\"heading-ui-navigation-click-order-for-652\">UI \u0646\u06cc\u0648\u06cc\u06af\u06cc\u0634\u0646 (\u00a76.5.2 \u0645\u06cc\u06ba \u0622\u0631\u0688\u0631 \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba)<\/h4>\n<ol>\n<li>\n<p><strong>\u062e\u0627\u06a9\u06c1<\/strong>: \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 <strong>\u0641\u0639\u0627\u0644 1<\/strong><\/p>\n<\/li>\n<li>\n<p><strong>\u0627\u0641\u0631\u0627\u062a\u0641\u0631\u06cc \u06a9\u0627 \u0645\u0631\u06a9\u0632<\/strong>, <strong>\u067e\u0648\u0688 \u06a9\u0648 \u062d\u0630\u0641 \u06a9\u0631\u06cc\u06ba<\/strong>, <strong>\u062a\u062c\u0631\u0628\u06c1 \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba\u06d4<\/strong><\/p>\n<\/li>\n<li>\n<p><strong>\u0627\u0641\u0631\u0627\u062a\u0641\u0631\u06cc \u06a9\u0627 \u062a\u062c\u0631\u0628\u06c1<\/strong>:\u062f\u06cc\u06a9\u06be\u0646\u0627 <strong>\u062a\u06a9\u0645\u06cc\u0644 \u06a9\u06cc \u0637\u0631\u0641 \u062f\u0648\u0691 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4<\/strong><\/p>\n<\/li>\n<\/ol>\n<p>\u0628\u0627\u0626\u06cc\u06ba \u0646\u06cc\u0648\u06cc\u06af\u06cc\u0634\u0646: <strong>\u062e\u0627\u06a9\u06c1<\/strong>, <strong>\u0645\u0627\u062d\u0648\u0644<\/strong>, <strong>\u0627\u0641\u0631\u0627\u062a\u0641\u0631\u06cc \u06a9\u0627 \u0645\u0631\u06a9\u0632<\/strong>, <strong>\u0627\u0641\u0631\u0627\u062a\u0641\u0631\u06cc \u06a9\u0627 \u062a\u062c\u0631\u0628\u06c1<\/strong>. \u0686\u06be\u0648\u0691\u06cc\u06ba <strong>\u0644\u0686\u06a9 \u06a9\u06cc \u062a\u062d\u0642\u06cc\u0642\u0627\u062a<\/strong> \u0627\u0648\u0631 \u06af\u06c1\u0631\u0627 <strong>\u062a\u0631\u062a\u06cc\u0628<\/strong> \u06cc\u06c1 \u0627\u0633 \u0644\u06cc\u0628 \u06a9\u0627 URL \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-652-run-your-first-experiment-pod-delete\">6.5.2: \u0627\u067e\u0646\u0627 \u067e\u06c1\u0644\u0627 \u062a\u062c\u0631\u0628\u06c1 \u0686\u0644\u0627\u0626\u06cc\u06ba (\u067e\u0648\u0688 \u06a9\u0648 \u062d\u0630\u0641 \u06a9\u0631\u06cc\u06ba)<\/h3>\n<p><strong>\u06c1\u062f\u0641:<\/strong> \u0627\u06cc\u06a9 \u06a9\u0648 \u0645\u0627\u0631 \u0688\u0627\u0644\u0648 <code>auth-service<\/code> \u0641\u0648\u0631\u0688 \u0627\u0648\u0631 \u062b\u0628\u0648\u062a <code>\/auth\/health<\/code> \u0642\u06cc\u0627\u0645 <strong>200<\/strong>.<\/p>\n<p><strong>UI \u0645\u06cc\u06ba \u0686\u0644\u0627\u0626\u06cc\u06ba \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2<\/strong>\u062f\u0648 \u0679\u0631\u0645\u06cc\u0646\u0644\u0632 \u06a9\u06be\u0648\u0644\u06cc\u06ba:<\/p>\n<pre><code class=\"language-bash\"># Terminal A \u2014 watch pods\nkubectl get pods -n clearledger -l app=auth-service -w\n\n# Terminal B \u2014 watch health every 5 seconds\nwhile true; do\n  date +%H:%M:%S\n  curl -s -o \/dev\/null -w \"health=%{http_code}n\" http:\/\/clearledger.local\/auth\/health\n  sleep 5\ndone\n<\/code><\/pre>\n<p><strong>UI(<\/strong><code>http:\/\/litmus.local<\/code><strong>):<\/strong> \u0628\u0627\u0626\u06cc\u06ba \u0646\u06cc\u0648\u06cc\u06af\u06cc\u0634\u0646 \u2192 ChaosHubs \u2192 Delete Pod card \u2192 \u062a\u062c\u0631\u0628\u06c1 \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/07\/1785194532_570_Homelab-\u0633\u06d2-AWS-\u062a\u06a9-\u067e\u0631\u0648\u0688\u06a9\u0634\u0646-\u06a9\u06d2-\u0644\u06cc\u06d2-\u062a\u06cc\u0627\u0631-DevSecOps-\u067e\u0644\u06cc\u0679.png\" alt=\"\u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679 \u0644\u0679\u0645\u0633 UI \u062f\u06a9\u06be\u0627 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4\" style=\"display:block;margin:0 auto\" width=\"1267\" height=\"951\" loading=\"lazy\" title=\"\"><\/p>\n<p><strong>\u0644\u0679\u0645\u0633 UI \u0646\u0648\u0679\u0633:<\/strong> ChaosCenter \u06a9\u06d2 \u0644\u06cc\u0628\u0644 \u0648\u0631\u0698\u0646 \u0633\u06d2 \u062f\u0648\u0633\u0631\u06d2 \u0648\u0631\u0698\u0646 \u0645\u06cc\u06ba \u062a\u0628\u062f\u06cc\u0644 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba (\u062c\u06cc\u0633\u06d2 \"\u06a9\u0648\u0622\u0631\u0688\u06cc\u0646\u06cc\u0634\u0646 \u0627\u06cc\u0631\u0631\"\u060c \"\u0679\u0627\u0631\u06af\u0679 \u0633\u0644\u06cc\u06a9\u0634\u0646\"\u060c \"Chaos Experiment\")\u06d4 \u0641\u06cc\u0644\u0688 \u0645\u06cc\u0686\u0646\u06af \u06a9\u0627 \u0645\u0639\u06cc\u0627\u0631 <strong>\u062a\u0635\u0648\u0631<\/strong>\u06cc\u06c1 \u062f\u0631\u0633\u062a \u0628\u0679\u0646 \u0645\u062a\u0646 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0646\u06cc\u0686\u06d2 \u062f\u06cc\u06d2 \u06af\u0626\u06d2 \u062c\u062f\u0648\u0644 \u0645\u06cc\u06ba \u06a9\u0648\u0626\u06cc \u0642\u062f\u0631 \u062f\u0631\u062c \u0646\u06c1\u06cc\u06ba \u06c1\u06d2 \u062a\u0648 \u0648\u0632\u0631\u0688 \u0688\u06cc\u0641\u0627\u0644\u0679 \u06a9\u0648 \u0642\u0628\u0648\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u0644\u0679\u0645\u0633 UI \u0645\u06cc\u06ba\u060c \u06a9\u06be\u0648\u0644\u06cc\u06ba:<\/p>\n<p><code>ChaosHubs<\/code> \u2192 <code>Pod Delete<\/code> \u2192 <code>Launch Experiment<\/code><\/p>\n<p>\u0627\u0633 \u0633\u06d2 \u062a\u062c\u0631\u0628\u0627\u062a\u06cc \u0648\u0632\u0631\u0688 \u06a9\u06be\u0644 \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4 \u062c\u0628 \u0648\u0632\u0631\u0688 \u067e\u0648\u0686\u06be\u06d2 \u062a\u0648 \u062f\u0631\u062c \u0630\u06cc\u0644 \u0627\u0642\u062f\u0627\u0631 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba:<\/p>\n<ul>\n<li>\n<p>\u0628\u0646\u06cc\u0627\u062f\u06cc \u0688\u06be\u0627\u0646\u0686\u06c1: <code>clearledger-cluster<\/code> \u0627\u0648\u0631 \u06cc\u06c1 \u06c1\u0648\u0646\u0627 \u0636\u0631\u0648\u0631\u06cc \u06c1\u06d2 <code>Active<\/code><\/p>\n<\/li>\n<li>\n<p>\u0646\u0627\u0645 \u06a9\u06cc \u062c\u06af\u06c1: <code>clearledger<\/code><\/p>\n<\/li>\n<li>\n<p>\u06c1\u062f\u0641 \u06a9\u0627 \u0644\u06cc\u0628\u0644: <code>app=auth-service<\/code><\/p>\n<\/li>\n<li>\n<p>\u06c1\u062f\u0641 \u06a9\u06cc \u0642\u0633\u0645: <code>Deployment<\/code><\/p>\n<\/li>\n<li>\n<p>\u0645\u062a\u0627\u062b\u0631\u06c1 \u067e\u06be\u0644\u06cc\u0627\u06ba: <code>50%<\/code><\/p>\n<\/li>\n<li>\n<p>\u062c\u0627\u0631\u06cc \u0631\u06a9\u06be\u06cc\u06ba: <code>30<\/code> \u0645\u0648\u0645 \u0628\u062a\u06cc<\/p>\n<\/li>\n<li>\n<p>\u063a\u0644\u0637\u06cc\/\u062a\u062c\u0631\u0628\u06c1 \u06a9\u0627 \u0646\u0627\u0645: <code>pod-delete<\/code><\/p>\n<\/li>\n<\/ul>\n<p>\u0645\u062d\u0641\u0648\u0638 \u06a9\u0631\u06cc\u06ba \u06cc\u0627 \u062a\u062e\u0644\u06cc\u0642 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0648\u0632\u0631\u0688 \u06a9\u0648 \u0645\u06a9\u0645\u0644 \u06a9\u0631\u06cc\u06ba\u060c \u0627\u0648\u0631 \u067e\u06be\u0631 \u0686\u0644\u0627\u0626\u06cc\u06ba \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 \u0645\u0646\u062a\u062e\u0628 \u0646\u06c1 \u06a9\u0631\u06cc\u06ba <strong>\u0634\u06cc\u0688\u0648\u0644<\/strong>.<\/p>\n<p><strong>\u06a9\u0627\u0645\u06cc\u0627\u0628\u06cc \u06a9\u06cc\u0633\u06cc \u0646\u0638\u0631 \u0622\u062a\u06cc \u06c1\u06d2:<\/strong><\/p>\n<table>\n<thead>\n<tr>\n<th>\u06a9\u06c1\u0627\u06ba<\/th>\n<th>\u0627\u0686\u06be\u06cc \u0639\u0644\u0627\u0645\u062a<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>\u0679\u0631\u0645\u06cc\u0646\u0644 \u0627\u06d2<\/td>\n<td>1 \u067e\u06be\u0644\u06cc <strong>\u0628\u0646\u062f \u06c1\u0648 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4<\/strong>\u067e\u06be\u0631 \u062f\u0648\u0628\u0627\u0631\u06c1 <strong>2\/2 \u062a\u06cc\u0627\u0631\u06cc<\/strong><\/td>\n<\/tr>\n<tr>\n<td>\u0679\u0631\u0645\u06cc\u0646\u0644 \u0628\u06cc<\/td>\n<td><code>health=200<\/code> \u06cc\u06c1\u0627\u06ba \u062a\u06a9 \u06a9\u06c1 \u062c\u0628 \u0627\u06cc\u06a9 \u067e\u0648\u0688 \u0646\u06cc\u0686\u06d2 \u06c1\u06d2\u06d4<\/td>\n<\/tr>\n<tr>\n<td>\u0644\u0679\u0645\u0633 UI<\/td>\n<td>\u062a\u062c\u0631\u0628\u06c1 <strong>\u0686\u0644 \u0631\u06c1\u0627 \u06c1\u06d2 \u2192 \u0645\u06a9\u0645\u0644<\/strong><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><strong>\u06a9\u06cc\u0627 \u0622\u067e UI \u067e\u0631 \u0679\u0631\u0645\u06cc\u0646\u0644 \u06a9\u0648 \u062a\u0631\u062c\u06cc\u062d \u062f\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba\u061f<\/strong> \u0648\u0632\u0631\u0688 \u06a9\u0648 \u0686\u06be\u0648\u0691\u06cc\u06ba \u0627\u0648\u0631 \u062f\u06cc\u06a9\u06be\u06cc\u06ba \u00a76.5.3(<code>make demo-65<\/code>\u0627\u0633 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2\u06d4<\/p>\n<h3 id=\"heading-653-same-experiment-from-the-terminal-make-demo-65-optional\">6.5.3 \u2014 \u0679\u0631\u0645\u06cc\u0646\u0644 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u06c1\u06cc \u062a\u062c\u0631\u0628\u06c1 (<code>make demo-65<\/code>) - \u0627\u062e\u062a\u06cc\u0627\u0631\u06cc\u06d4<\/h3>\n<p>\u0644\u0679\u0645\u0633 UI \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u06cc\u06d2 \u0628\u063a\u06cc\u0631 \u067e\u0648\u0688 \u0688\u06cc\u0644\u06cc\u0679 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0679\u06cc\u0633\u0679 \u0686\u0644\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633 \u0627\u062e\u062a\u06cc\u0627\u0631 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u0633\u0628 \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u060c \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u062a\u0635\u062f\u06cc\u0642\u06cc \u067e\u0648\u0688 \u0635\u062d\u062a \u0645\u0646\u062f \u06c1\u06d2.<\/p>\n<pre><code class=\"language-bash\">make fix-65-prereqs\n<\/code><\/pre>\n<p>\u067e\u06be\u0631 \u0688\u06cc\u0645\u0648 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">make demo-65\n<\/code><\/pre>\n<p>\u0633\u06a9\u0631\u067e\u0679 \u06c1\u06d2 <code>auth-service-pod-delete<\/code> \u0627\u0641\u0631\u0627\u062a\u0641\u0631\u06cc \u06a9\u0627 \u0627\u0646\u062c\u0646 <code>litmus<\/code> \u0646\u0627\u0645 \u06a9\u06cc \u062c\u06af\u06c1\u06d4 \u0644\u0679\u0645\u0633 \u0627\u06cc\u06a9 \u06a9\u0648 \u062d\u0630\u0641 \u06a9\u0631\u06cc\u06ba\u06d4 <code>auth-service<\/code> \u0627\u06af\u0631 \u06a9\u0648\u0626\u06cc Pod \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2 \u062a\u0648 Kubernetes \u0627\u0633\u06d2 \u0628\u062f\u0644 \u062f\u06d2 \u06af\u0627 \u0627\u0648\u0631 \u0627\u0633\u06a9\u0631\u067e\u0679 \u0627\u0633 \u06a9\u06cc \u062c\u0627\u0646\u0686 \u06a9\u0631\u06d2 \u06af\u0627\u06d4 <code>\/auth\/health<\/code> \u0648\u0627\u067e\u0633 \u0622\u062a\u06d2 \u0631\u06c1\u06cc\u06ba <code>200<\/code>.<\/p>\n<p>\u0627\u06cc\u06a9 \u0628\u0627\u0631 \u0645\u06a9\u0645\u0644 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f\u060c \u0646\u062a\u0627\u0626\u062c \u06a9\u0648 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">kubectl get chaosresult -n litmus\nkubectl get pods -n clearledger -l app=auth-service\n<\/code><\/pre>\n<p>\u0627\u06af\u0631 \u0627\u0633\u06a9\u0631\u067e\u0679 \u0627\u0633 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062e\u062a\u0645 \u06c1\u0648\u062a\u0627 \u06c1\u06d2: <code>PASS<\/code>, <code>ChaosResult<\/code> \u06c1\u06d2 <code>Completed \/ Pass<\/code>\u0627\u0648\u0631 \u062f\u0648 <code>auth-service<\/code> \u067e\u06be\u0644\u06cc \u062f\u0648\u0628\u0627\u0631\u06c1 \u0686\u0644 \u0631\u06c1\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u0622\u067e \u0627\u0633\u06d2 \u0644\u0679\u0645\u0633 UI \u0645\u06cc\u06ba \u0628\u06be\u06cc \u062f\u06cc\u06a9\u06be \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <strong>\u0627\u0641\u0631\u0627\u062a\u0641\u0631\u06cc \u06a9\u0627 \u062a\u062c\u0631\u0628\u06c1<\/strong> \u2192 \u0631\u06cc\u0641\u0631\u06cc\u0634 \u2192 \u062a\u0627\u0632\u06c1 \u062a\u0631\u06cc\u0646 \u0631\u0646 \u06a9\u06be\u0648\u0644\u06cc\u06ba\u06d4<\/p>\n<p>\u062c\u0628 \u0627\u06cc\u06a9 \u0646\u0626\u06d2 \u062a\u0635\u062f\u06cc\u0642\u06cc \u067e\u0648\u0688 \u0645\u06cc\u06ba \u062e\u0644\u0644 \u067e\u0691\u062a\u0627 \u06c1\u06d2\u06d4 <code>Init:0\/1<\/code>\u0645\u0631\u062d\u0644\u06c1 6 \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u067e\u0627\u0644\u06cc\u0633\u06cc \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0644\u0627\u06af\u0648 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">kubectl apply -f infra\/deferred-by-stage\/stage-6-runtime-security\/netpol\/network-policies.yaml\n<\/code><\/pre>\n<h3 id=\"heading-653a-real-output-examples-verified-on-the-lab-cluster\">6.5.3a: \u0627\u0635\u0644 \u0622\u0624\u0679 \u067e\u0679 \u0645\u062b\u0627\u0644 (\u062c\u06cc\u0633\u0627 \u06a9\u06c1 \u0644\u06cc\u0628 \u06a9\u0644\u0633\u0679\u0631 \u067e\u0631 \u062f\u06cc\u06a9\u06be\u0627 \u06af\u06cc\u0627 \u06c1\u06d2)<\/h3>\n<p>\u06cc\u06c1 \u0646\u0645\u0648\u0646\u06c1 \u06a9\u0627\u0645 \u06a9\u06d2 \u0628\u0648\u062c\u06be \u06a9\u06d2 \u062f\u0631\u062c \u0630\u06cc\u0644 \u06a9\u0644\u0633\u0679\u0631 \u0633\u06d2 \u0644\u06cc\u0627 \u06af\u06cc\u0627 \u062a\u06be\u0627\u06d4 <code>make fix-65-prereqs<\/code>, <code>make connect-litmus<\/code>\u0627\u0648\u0631 <code>make demo-65<\/code>.<\/p>\n<h4 id=\"heading-make-check-65\"><code>make check-65<\/code><\/h4>\n<pre><code class=\"language-text\">&#x25b6; Stage 6.5 \u2014 Chaos Engineering (LitmusChaos)\n  \u2713 litmus namespace exists\n  \u2713 litmus-admin ServiceAccount exists in litmus\n  \u2713 pod-delete ChaosExperiment installed in litmus\n  \u2713 Litmus chaos operator is running\n  \u2713 Litmus ChaosCenter reachable at http:\/\/litmus.local\n  \u2713 Litmus subscriber running (UI connected to cluster)\n  \u2713 auth-service healthy (baseline before chaos)\n  \u2713 auth-service has 2\/2 Ready replicas (stable for chaos)\n  \u2713 allow-postgres NetworkPolicy exists (Stage 6 fix)\n\nAll checks passed. Ready for the next stage.\n<\/code><\/pre>\n<h4 id=\"heading-make-demo-65-captured-from-a-real-run-2026-06-01\"><code>make demo-65<\/code> \u0627\u0635\u0644 \u062f\u0648\u0691 \u0633\u06d2 \u067e\u06a9\u0691\u0627 \u06af\u06cc\u0627 (2026-06-01)<\/h4>\n<pre><code class=\"language-text\">Stage 6.5 \u2014 auth-service pod-delete\n\nPreflight: 2 auth-service pods Running\n\nApplying ChaosEngine auth-service-pod-delete (namespace litmus)\n\nWatching http:\/\/clearledger.local\/auth\/health\n\n  10s  health=200  pods=2\n  20s  health=200  pods=1\n  30s  health=200  pods=1\n  40s  health=200  pods=2\n  50s  health=200  pods=2\n  60s  health=200  pods=2\n\nResult:\n  ChaosResult: Completed \/ Pass\n  Recovery:    2 auth-service pod(s) Running\n  Health:      6\/6 checks returned 200\n\nPASS\n<\/code><\/pre>\n<p>\u0627\u06af\u0631 \u0622\u067e \u06a9\u0648 \u06c1\u06cc\u0644\u062a\u06be \u0644\u0627\u0626\u0646 \u0646\u0638\u0631 \u0622\u062a\u06cc \u06c1\u06d2\u06d4 <code>000<\/code>\u0686\u0644\u0627\u0626\u06cc\u06ba <code>bash scripts\/setup-hosts.sh<\/code> \u0627\u0633\u06d2 \u0627\u067e\u0646\u06d2 \u0645\u06cc\u06a9 \u067e\u0631 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0686\u0644\u0627\u0646\u06d2 \u06a9\u06cc \u06a9\u0648\u0634\u0634 \u06a9\u0631\u06cc\u06ba\u06d4 \u0645\u06cc\u06ba \u0627\u0633\u06a9\u0631\u067e\u0679 \u06a9\u0648 \u0628\u06be\u06cc \u0622\u0632\u0645\u0627\u062a\u0627 \u06c1\u0648\u06ba: <code>multipass exec clearledger -- curl<\/code> \u062c\u0628 VM \u0645\u0648\u062c\u0648\u062f \u06c1\u0648\u06d4<\/p>\n<h4 id=\"heading-terminal-b-health-loop-expected-output\">\u0679\u0631\u0645\u06cc\u0646\u0644 \u0628\u06cc (\u0627\u0633\u0679\u06cc\u0679 \u0644\u0648\u067e\u060c \u0645\u062a\u0648\u0642\u0639 \u0622\u0624\u0679 \u067e\u0679)<\/h4>\n<pre><code class=\"language-text\">22:05:01\nhealth=200\n22:05:06\nhealth=200\n22:05:11\nhealth=200\n<\/code><\/pre>\n<p>\u067e\u06be\u0644\u06cc \u06a9\u06cc \u06af\u0646\u062a\u06cc \u0638\u0627\u06c1\u0631 \u06a9\u06cc \u062c\u0627 \u0633\u06a9\u062a\u06cc \u06c1\u06d2\u06d4 <strong>1<\/strong> \u06cc\u06c1 \u0627\u0633 \u0648\u0642\u062a \u0645\u062a\u0648\u0642\u0639 \u06c1\u06d2 \u062c\u0628 \u0645\u062a\u0628\u0627\u062f\u0644 \u067e\u0648\u0688 \u0644\u0627\u0646\u0686 \u06a9\u06cc\u0627 \u062c\u0627 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-terminal-a-during-chaos-kubectl-get-pods-w\">\u0679\u0631\u0645\u06cc\u0646\u0644 A \u0627\u0641\u0631\u0627\u062a\u0641\u0631\u06cc \u0645\u06cc\u06ba (<code>kubectl get pods -w<\/code>)<\/h4>\n<pre><code class=\"language-text\">NAME                            READY   STATUS        RESTARTS   AGE\nauth-service-84cc988c4d-hdb45   2\/2     Running       0          67m\nauth-service-84cc988c4d-b59sj   2\/2     Terminating   0          15m    \u2190 killed\nauth-service-84cc988c4d-dxz9q   0\/2     Pending       0          0s     \u2190 replacement\nauth-service-84cc988c4d-dxz9q   0\/2     Init:0\/1      0          2s\nauth-service-84cc988c4d-dxz9q   2\/2     Running       0          90s\n<\/code><\/pre>\n<h4 id=\"heading-after-demo-verify\">\u0688\u06cc\u0645\u0648 \u06a9\u06d2 \u0628\u0639\u062f: \u0679\u06be\u06cc\u06a9 \u06c1\u06d2\u06d4<\/h4>\n<pre><code class=\"language-bash\">kubectl get chaosresult -n litmus\n# auth-service-pod-delete-pod-delete   Completed   Pass\n\nkubectl get pods -n clearledger -l app=auth-service\n# auth-service-84cc988c4d-xxxxx   2\/2   Running\n# auth-service-84cc988c4d-yyyyy   2\/2   Running\n\nkubectl get cm subscriber-config -n litmus -o jsonpath=\"{.data.IS_INFRA_CONFIRMED}\"\n# true\n<\/code><\/pre>\n<h4 id=\"heading-subscriber-connected-infrastructure-active-in-ui\">\u0633\u0628\u0633\u06a9\u0631\u0627\u0626\u0628\u0631 \u0645\u0646\u0633\u0644\u06a9 (UI \u0645\u06cc\u06ba \u0628\u0646\u06cc\u0627\u062f\u06cc \u0688\u06be\u0627\u0646\u0686\u06c1 \u0641\u0639\u0627\u0644)<\/h4>\n<pre><code class=\"language-text\">kubectl logs -n litmus -l app.kubernetes.io\/name=subscriber --tail=3\nlevel=info msg=\"AgentID: a63c2a2c-... has been confirmed\"\nlevel=info msg=\"Server connection established, Listening....\"\n<\/code><\/pre>\n<h3 id=\"heading-654-understand-the-yaml-files-read-before-running\">6.5.4: YAML \u0641\u0627\u0626\u0644\u0648\u06ba \u06a9\u0648 \u0633\u0645\u062c\u06be\u0646\u0627 (\u0639\u0645\u0644 \u062f\u0631\u0622\u0645\u062f \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u067e\u0691\u06be\u06cc\u06ba)<\/h3>\n<p>\u06c1\u0631 \u0641\u0627\u0626\u0644 \u06c1\u06d2\u06d4 <code>ChaosEngine<\/code>: \u0644\u0679\u0645\u0633 \u0633\u06d2 \u062f\u0631\u062e\u0648\u0627\u0633\u062a: \"\u0627\u06cc\u067e Y \u06a9\u06d2 \u0644\u06cc\u06d2 Z \u0633\u06cc\u06a9\u0646\u0688\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2 X \u062a\u062c\u0631\u0628\u06c1 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4\"<\/p>\n<h4 id=\"heading-litmus-installyaml\"><code>litmus-install.yaml<\/code><\/h4>\n<p>\u06cc\u06c1 \u06c1\u06d2 <code>litmus<\/code> \u0635\u0631\u0641 \u0646\u0627\u0645 \u06a9\u06cc \u062c\u06af\u06c1\u06d4 \u067e\u0644\u06cc\u0679 \u0641\u0627\u0631\u0645 \u06a9\u06d2 \u06a9\u0627\u0645 \u06a9\u0627 \u0628\u0648\u062c\u06be \u06cc\u06c1\u0627\u06ba \u0633\u06d2 \u0627\u0644\u06af \u0633\u06d2 \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2: <code>clearledger<\/code> \u0627\u06cc\u067e \u067e\u0648\u0688\u06d4<\/p>\n<h4 id=\"heading-litmus-rbacyaml\"><code>litmus-rbac.yaml<\/code><\/h4>\n<table>\n<thead>\n<tr>\n<th>\u0645\u0631\u0636\u06cc<\/th>\n<th>\u0641\u0646\u06a9\u0634\u0646<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>ServiceAccount litmus-admin<\/code> (\u0646\u0627\u0645 \u06a9\u06cc \u062c\u06af\u06c1 <code>litmus<\/code>)<\/td>\n<td>\u0644\u0679\u0645\u0633 \u0631\u0646\u0631 \u067e\u0648\u0688 \u06a9\u06cc \u0634\u0646\u0627\u062e\u062a<\/td>\n<\/tr>\n<tr>\n<td><code>ClusterRoleBinding \u2192 cluster-admin<\/code><\/td>\n<td>\u067e\u0648\u0688 \u06a9\u0648 \u062d\u0630\u0641 \u06a9\u0631\u0646\u06d2 \/ \u063a\u0644\u0637\u06cc \u06a9\u06d2 \u0627\u0646\u062c\u06cc\u06a9\u0634\u0646 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u06ba\u06d4 <code>clearledger<\/code> (\u0644\u06cc\u0628 \u06a9\u06cc \u0622\u0633\u0627\u0646\u06cc\u0627\u06ba\u06d4 \u067e\u06cc\u062f\u0627\u0648\u0627\u0631 \u0645\u06cc\u06ba \u06a9\u0645 \u0633\u06d2 \u06a9\u0645 \u0627\u0633\u062a\u062d\u0642\u0627\u0642 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba)<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h4 id=\"heading-auth-service-pod-deleteyaml-experiment-1-used-by-demo\"><code>auth-service-pod-delete.yaml<\/code> (\u062a\u062c\u0631\u0628\u06c1 1: \u0688\u06cc\u0645\u0648 \u0645\u06cc\u06ba \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0627 \u06af\u06cc\u0627)<\/h4>\n<pre><code class=\"language-yaml\">metadata:\n  namespace: litmus          # engine lives here (Kyverno-safe)\nspec:\n  appinfo:\n    appns: clearledger       # target app namespace\n    applabel: app=auth-service\n    appkind: deployment\n  experiments:\n    - name: pod-delete\n      spec:\n        components:\n          env:\n            - name: PODS_AFFECTED_PERC\n              value: \"50\"    # 50% of 2 replicas = 1 pod killed\n            - name: TOTAL_CHAOS_DURATION\n              value: \"30\"    # chaos window in seconds\n<\/code><\/pre>\n<p>\u062c\u0628 \u0645\u06cc\u06ba \u0627\u0633\u06d2 \u0644\u0627\u06af\u0648 \u06a9\u0631\u062a\u0627 \u06c1\u0648\u06ba \u062a\u0648 \u06a9\u06cc\u0627 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u061f<\/p>\n<ol>\n<li>\n<p>\u0622\u067e\u0631\u06cc\u0679\u0631 \u067e\u0691\u06be\u062a\u0627 \u06c1\u06d2\u06d4 <code>ChaosEngine<\/code> \u0627\u0648\u0631 \u062a\u062e\u0644\u06cc\u0642 \u06a9\u0631\u06cc\u06ba <code>auth-service-pod-delete-runner<\/code> \u0646\u06cc\u0686\u06d2 \u0627\u0648\u0631 <code>litmus<\/code><\/p>\n<\/li>\n<li>\n<p>\u0631\u0646\u0631 \u0627\u06cc\u06a9 \u06a9\u0627 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0631\u06cc\u06ba\u06d4 <code>auth-service<\/code> \u0646\u06cc\u0686\u06d2 \u0627\u0648\u0631 <code>clearledger<\/code> SIGTERM\/delete \u0628\u06be\u06cc\u062c\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>Kubernetes \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u06a9\u0646\u0679\u0631\u0648\u0644\u0631 1\/2 \u0646\u0642\u0644\u0648\u06ba \u06a9\u06cc \u062c\u0627\u0646\u0686 \u067e\u0691\u062a\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0645\u062a\u0628\u0627\u062f\u0644 \u067e\u0648\u0688\u0632 \u06a9\u0648 \u0634\u06cc\u0688\u0648\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0633\u0631\u0648\u0633 \u0679\u0631\u06cc\u0641\u06a9 \u06a9\u0648 \u0627\u0633 \u0637\u0631\u0641 \u0644\u06d2 \u062c\u0627\u062a\u06cc \u06c1\u06d2: <strong>\u0632\u0646\u062f\u06c1 \u0631\u06c1\u0646\u0627<\/strong> \u0628\u0627\u0632\u06cc\u0627\u0641\u062a \u0645\u06cc\u06ba \u0646\u0642\u0644<\/p>\n<\/li>\n<li>\n<p><code>ChaosResult<\/code> \u0644\u0679\u0645\u0633 \u06a9\u06d2 \u0646\u0642\u0637\u06c1 \u0646\u0638\u0631 \u0633\u06d2 \u067e\u0627\u0633\/\u0641\u06cc\u0644 CR \u0631\u06cc\u06a9\u0627\u0631\u0688<\/p>\n<\/li>\n<\/ol>\n<h4 id=\"heading-ledger-service-network-latencyyaml-experiment-2-manual\"><code>ledger-service-network-latency.yaml<\/code> (\u062a\u062c\u0631\u0628\u06c1 2 - \u062f\u0633\u062a\u06cc)<\/h4>\n<p>\u0627\u0636\u0627\u0641\u06c1 <strong>2000ms<\/strong> \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u06a9\u06cc \u062a\u0627\u062e\u06cc\u0631 <code>ledger-service<\/code> \u067e\u0648\u0688 \u06a9\u0648 60 \u0633\u06cc\u06a9\u0646\u0688 \u062a\u06a9 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 \u062b\u0627\u0628\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0679\u0627\u0626\u0645 \u0622\u0624\u0679 \u0648\u0627\u067e\u0633 \u0622 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4 <strong>503<\/strong> UI \u06a9\u0648 \u0645\u0639\u0644\u0642 \u0686\u06be\u0648\u0691\u0646\u06d2 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2\u06d4<\/p>\n<h4 id=\"heading-notification-service-memory-hogyaml-experiment-3-manual\"><code>notification-service-memory-hog.yaml<\/code> (\u062a\u062c\u0631\u0628\u06c1 3 - \u062f\u0633\u062a\u06cc)<\/h4>\n<p>\u0628\u06be\u0631\u0646\u0627 <strong>80%<\/strong> \u067e\u0648\u0688 \u0645\u06cc\u0645\u0648\u0631\u06cc \u06a9\u06cc \u062d\u062f\u06cc\u06ba 60 \u0633\u06cc\u06a9\u0646\u0688 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0644\u0627\u06af\u0648 \u06c1\u0648\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 OOMKill + \u062f\u0648\u0628\u0627\u0631\u06c1 \u0634\u0631\u0648\u0639 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0631\u0648\u06cc\u06d2 \u06a9\u0648 \u0638\u0627\u06c1\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u0627\u06cc\u06a9 \u06c1\u06cc \u0648\u0642\u062a \u0645\u06cc\u06ba \u062a\u06cc\u0646\u0648\u06ba \u06a9\u0627 \u0627\u0637\u0644\u0627\u0642 \u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4<\/strong> \u0627\u06cc\u06a9 \u062a\u062c\u0631\u0628\u06c1 \u0686\u0644\u0627\u0626\u06cc\u06ba\u060c \u0628\u0627\u0632\u06cc\u0627\u0628\u06cc \u06a9\u06cc \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631\u06cc\u06ba\u060c \u0627\u0648\u0631 \u067e\u06be\u0631 \u0627\u06af\u0644\u0627 \u062a\u062c\u0631\u0628\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-655-after-the-demo-what-to-look-for-do-not-skip\">6.5.5: \u0688\u06cc\u0645\u0648 \u06a9\u06d2 \u0628\u0639\u062f \u06a9\u06cc\u0627 \u062f\u06cc\u06a9\u06be\u0646\u0627 \u06c1\u06d2 (\u0627\u0633\u06d2 \u0646\u06c1 \u0686\u06be\u0648\u0691\u06cc\u06ba)<\/h3>\n<p><strong>1. \u0627\u0641\u0631\u0627\u062a\u0641\u0631\u06cc \u0645\u06cc\u06ba: \u062f\u0633\u062a\u06cc\u0627\u0628\u06cc<\/strong><\/p>\n<table>\n<thead>\n<tr>\n<th>\u0633\u06af\u0646\u0644<\/th>\n<th>\u0627\u0686\u06be\u0627<\/th>\n<th>\u0628\u0631\u0627<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>curl http:\/\/clearledger.local\/auth\/health<\/code><\/td>\n<td><strong>200<\/strong> \u062c\u0628\u06a9\u06c1 \u0627\u06cc\u06a9 \u067e\u0648\u0688 \u0646\u06cc\u0686\u06d2 \u06c1\u06d2\u06d4<\/td>\n<td>502\/503\/\u0648\u0642\u062a \u062e\u062a\u0645<\/td>\n<\/tr>\n<tr>\n<td><code>kubectl get pods -l app=auth-service<\/code><\/td>\n<td>1 \u0686\u0644 \u0631\u06c1\u0627 \u06c1\u06d2 + 1 \u0631\u06cc \u0633\u06cc\u0679\/\u0632\u06cc\u0631 \u0627\u0644\u062a\u0648\u0627\u0621 (\u0645\u062a\u0628\u0627\u062f\u0644 \u0634\u0631\u0648\u0639)<\/td>\n<td>0 \u0686\u0644 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><strong>2. \u0627\u0641\u0631\u0627\u062a\u0641\u0631\u06cc \u06a9\u06d2 \u0628\u0639\u062f: \u0628\u062d\u0627\u0644\u06cc<\/strong><\/p>\n<table>\n<thead>\n<tr>\n<th>\u0633\u06af\u0646\u0644<\/th>\n<th>\u0627\u0686\u06be\u0627<\/th>\n<th>\u0628\u0631\u0627<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>\u067e\u06be\u0644\u06cc\u0648\u06ba \u06a9\u06cc \u062a\u0639\u062f\u0627\u062f<\/td>\n<td>2\/2 <strong>\u062a\u06cc\u0627\u0631<\/strong> (\u0627\u0633 \u0645\u06cc\u06ba 1-2 \u0645\u0646\u0679 \u0644\u06af \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u2014 \u0648\u0627\u0644\u0679 \u0627\u06cc\u062c\u0646\u0679 \u06a9\u06cc \u0634\u0631\u0648\u0639\u0627\u062a)<\/td>\n<td>1 \u0646\u0642\u0644 \u067e\u0631 \u067e\u06be\u0646\u0633 \u06af\u06cc\u0627\u06d4<\/td>\n<\/tr>\n<tr>\n<td>\u0648\u0627\u0642\u0639\u06c1<\/td>\n<td><code>Killing<\/code> \u067e\u06be\u0631 <code>Scheduled<\/code> \/ <code>Started<\/code> \u0627\u06cc\u06a9 \u0646\u0626\u06cc \u067e\u0648\u0688 \u0645\u06cc\u06ba<\/td>\n<td>\u0628\u0627\u0631 \u0628\u0627\u0631 \u06a9\u0631\u06cc\u0634 \u0644\u0648\u067e \u0628\u06cc\u06a9 \u0622\u0641<\/td>\n<\/tr>\n<tr>\n<td>\u0622\u0631\u06af\u0648 \u0633\u06cc \u0688\u06cc<\/td>\n<td>\u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631<\/td>\n<td>-<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><strong>3. \u0644\u0679\u0645\u0633<\/strong> <code>ChaosResult<\/code> <strong>\u0641\u06cc\u0635\u0644\u06c1<\/strong><\/p>\n<pre><code class=\"language-bash\">kubectl get chaosresult -n litmus\n<\/code><\/pre>\n<p><strong>\u067e\u0627\u0633 \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0645\u0639\u06cc\u0627\u0631:<\/strong><\/p>\n<ul>\n<li>\n<p><code>\/auth\/health<\/code> \u0648\u0627\u067e\u0633\u06cc <strong>200<\/strong> \u0627\u0641\u0631\u0627\u062a\u0641\u0631\u06cc \u06a9\u06d2 \u0646\u06cc\u0632\u06d2 \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646 \u06a9\u0645 \u0627\u0632 \u06a9\u0645 \u0627\u06cc\u06a9 \u0628\u0627\u0631<\/p>\n<\/li>\n<li>\n<p>\u067e\u06be\u0644\u06cc\u0627\u06ba \u062f\u0631\u062c \u0630\u06cc\u0644 \u06c1\u06cc\u06ba: <strong>\u0645\u0631 \u0631\u06c1\u0627 \u06c1\u06d2<\/strong> (\u0648\u0627\u0642\u0639\u06c1 \u062f\u06cc\u06a9\u06be\u06cc\u06ba)<\/p>\n<\/li>\n<li>\n<p>\u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u0648\u0627\u067e\u0633 \u0622\u062a\u06cc \u06c1\u06d2\u06d4 <strong>2 \u0646\u0642\u0644\u06cc\u06ba<\/strong><\/p>\n<\/li>\n<\/ul>\n<h3 id=\"heading-656-manual-experiments-after-experiment-1-succeeds\">6.5.6 \u062f\u0633\u062a\u06cc \u062a\u062c\u0631\u0628\u06c1 (\u06a9\u0627\u0645\u06cc\u0627\u0628 \u062a\u062c\u0631\u0628\u06c1 1 \u06a9\u06d2 \u0628\u0639\u062f)<\/h3>\n<p>\u062f\u0648\u0646\u0648\u06ba \u062a\u0635\u062f\u06cc\u0642\u06cc \u0633\u0631\u0648\u0633 \u067e\u0648\u0688 \u0638\u0627\u06c1\u0631 \u06c1\u0648\u0646\u06d2 \u062a\u06a9 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u06cc\u06ba\u06d4 <strong>2\/2 \u062a\u06cc\u0627\u0631\u06cc<\/strong>\u067e\u06be\u0631 \u062f\u0648\u0691\u0648 <strong>\u0627\u06cc\u06a9<\/strong> \u0627\u0633\u06d2 \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u0622\u0632\u0645\u0627\u0626\u06cc\u06ba:<\/p>\n<pre><code class=\"language-bash\"># Experiment 2 \u2014 2s network latency on ledger-service (60s)\nkubectl delete chaosengine ledger-service-network-latency -n litmus --ignore-not-found\nkubectl apply -f stages\/stage-6.5-chaos-engineering\/infra\/chaos\/ledger-service-network-latency.yaml\n\n# Experiment 3 \u2014 memory pressure on notification-service (60s)\nkubectl delete chaosengine notification-service-memory-hog -n litmus --ignore-not-found\nkubectl apply -f stages\/stage-6.5-chaos-engineering\/infra\/chaos\/notification-service-memory-hog.yaml\n<\/code><\/pre>\n<table>\n<thead>\n<tr>\n<th>\u062a\u062c\u0631\u0628\u06c1<\/th>\n<th>\u0641\u0627\u0626\u0644<\/th>\n<th>\u06a9\u06cc\u0627 \u0686\u06cc\u06a9 \u06a9\u0631\u0646\u0627 \u06c1\u06d2\u06d4<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>\u067e\u0648\u0688 \u06a9\u0648 \u062d\u0630\u0641 \u06a9\u0631\u06cc\u06ba<\/td>\n<td><code>auth-service-pod-delete.yaml<\/code><\/td>\n<td>\u0642\u062a\u0644 \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646 200 \u0635\u062d\u062a\u060c \u067e\u06be\u0631 2 \u06a9\u0644\u0648\u0646\u06d4<\/td>\n<\/tr>\n<tr>\n<td>\u0646\u06cc\u0679 \u0648\u0631\u06a9 \u06a9\u06cc \u062a\u0627\u062e\u06cc\u0631<\/td>\n<td><code>ledger-service-network-latency.yaml<\/code><\/td>\n<td>API \u0644\u0627\u0645\u062d\u062f\u0648\u062f \u06c1\u06cc\u0646\u06af \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 503\/\u0679\u0627\u0626\u0645 \u0622\u0624\u0679 \u0648\u0627\u067e\u0633 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/td>\n<\/tr>\n<tr>\n<td>\u0645\u06cc\u0645\u0648\u0631\u06cc \u0633\u0648\u0631<\/td>\n<td><code>notification-service-memory-hog.yaml<\/code><\/td>\n<td>Pod OOMKill \u0627\u0648\u0631 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba\u060c Redis \u0633\u0628\u0633\u06a9\u0631\u067e\u0634\u0646 \u0628\u0627\u0632\u06cc\u0627\u0641\u062a \u06a9\u0631\u06cc\u06ba\u06d4<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u062a\u062c\u0631\u0628\u06d2 \u06a9\u0648 \u0645\u0646\u0638\u0645 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">kubectl delete chaosengine auth-service-pod-delete -n litmus\n<\/code><\/pre>\n<h3 id=\"heading-657-health-check\">6.5.7: \u0627\u0633\u0679\u06cc\u0679\u0633 \u0686\u06cc\u06a9<\/h3>\n<pre><code class=\"language-bash\">make check-65\n<\/code><\/pre>\n<p><strong>\u0645\u062a\u0648\u0642\u0639:<\/strong> \u0645\u06a9\u0645\u0644 \u0646\u0645\u0648\u0646\u06c1 \u00a76.5.3a \u0645\u06cc\u06ba \u062f\u06cc\u06a9\u06be\u06cc\u06ba (<code>make check-65<\/code> \u0628\u0644\u0627\u06a9)\u06d4 \u06a9\u0645 \u0627\u0632 \u06a9\u0645:<\/p>\n<pre><code class=\"language-text\">&#x25b6; Stage 6.5 Chaos Engineering (LitmusChaos)\n  \u2713 Litmus subscriber running (UI connected to cluster)\n  \u2713 auth-service has 2\/2 Ready replicas (stable for chaos)\n  ...\nAll checks passed. Ready for the next stage.\n<\/code><\/pre>\n<h3 id=\"heading-stage-65-complete-checklist\">\u0645\u0631\u062d\u0644\u06c1 6.5 \u0645\u06a9\u0645\u0644: \u0686\u06cc\u06a9 \u0644\u0633\u0679<\/h3>\n<table>\n<thead>\n<tr>\n<th>#<\/th>\n<th>\u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba<\/th>\n<th>\u0686\u06cc\u06a9 \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0637\u0631\u06cc\u0642\u06c1<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>1<\/td>\n<td>\u0644\u0679\u0645\u0633 \u0622\u067e\u0631\u06cc\u0679\u0631 \u0686\u0644 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4<\/td>\n<td><code>kubectl get pods -n litmus<\/code> - <code>litmus-*<\/code> \u0686\u0644 \u0631\u06c1\u0627 \u06c1\u06d2<\/td>\n<\/tr>\n<tr>\n<td>2<\/td>\n<td>\u0646\u0635\u0628 \u062a\u062c\u0631\u0628\u06c1<\/td>\n<td><code>kubectl get chaosexperiment pod-delete -n litmus<\/code><\/td>\n<\/tr>\n<tr>\n<td>3<\/td>\n<td>Pod Deletion Demo \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4<\/td>\n<td><code>make demo-65<\/code> \u0627\u0641\u0631\u0627\u062a\u0641\u0631\u06cc \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646 \u0627\u0633\u0679\u06cc\u0645\u06cc\u0646\u0627 200<\/td>\n<\/tr>\n<tr>\n<td>4<\/td>\n<td>\u0628\u062d\u0627\u0644\u06cc \u06a9\u0627 \u0645\u0634\u0627\u06c1\u062f\u06c1 \u06a9\u06cc\u0627 \u06af\u06cc\u0627\u06d4<\/td>\n<td>\u062a\u0635\u062f\u06cc\u0642\u06cc \u062e\u062f\u0645\u062a \u06a9\u06cc \u062f\u0648 \u0646\u0642\u0644\u06cc\u06ba \u062a\u06cc\u0627\u0631 \u06c1\u06cc\u06ba\u06d4 \u0642\u062a\u0644\/\u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0637\u06d2 \u0634\u062f\u06c1 \u06a9\u06cc\u0633<\/td>\n<\/tr>\n<tr>\n<td>5<\/td>\n<td>\u0634\u0648\u0627\u06c1\u062f \u0645\u062d\u0641\u0648\u0638 \u06a9\u0631 \u0644\u06cc\u06d2 \u06af\u0626\u06d2 \u06c1\u06cc\u06ba\u06d4<\/td>\n<td>\u0679\u0631\u0645\u06cc\u0646\u0644 \u0622\u0624\u0679 \u067e\u0679 <code>run-chaos.sh<\/code> (DORA artifact)<\/td>\n<\/tr>\n<tr>\n<td>6<\/td>\n<td>\u0635\u062d\u062a \u06a9\u06cc \u062c\u0627\u0646\u0686<\/td>\n<td><code>make check-65<\/code> \u0633\u0628\u0632<\/td>\n<\/tr>\n<tr>\n<td>7<\/td>\n<td>UI \u0627\u0646\u0641\u0631\u0627\u0633\u0679\u0631\u06a9\u0686\u0631 \u0645\u0646\u0633\u0644\u06a9 \u06c1\u06d2\u06d4<\/td>\n<td>\u062c\u0627\u0626\u0632\u06c1 \u2192 <strong>\u0641\u0639\u0627\u0644: 1<\/strong> (\u00a76.5.2)<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3 id=\"heading-what-you-learned-in-stage-65\">\u06c1\u0645 \u0646\u06d2 \u0645\u0631\u062d\u0644\u06c1 6.5 \u0645\u06cc\u06ba \u06a9\u06cc\u0627 \u0633\u06cc\u06a9\u06be\u0627\u06d4<\/h3>\n<ul>\n<li>\n<p><strong>\u067e\u062a\u06c1 \u0644\u06af\u0627\u0646\u0627 \u2260 \u0644\u0686\u06a9<\/strong>: Falco \u0648\u0627\u0631\u0646\u0646\u06af HA \u062b\u0627\u0628\u062a \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u06cc\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0646\u0642\u0644 + \u0633\u0631\u0648\u0633 + \u062a\u062d\u0642\u06cc\u0642\u0627\u062a<\/strong>: \u06a9\u06cc\u0648\u06ba\u061f <code>replicas: 2<\/code> \u06cc\u06c1 \u06a9\u0627\u0633\u0645\u06cc\u0679\u06a9 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0627\u0641\u0631\u0627\u062a\u0641\u0631\u06cc \u06a9\u0627 \u0627\u0646\u062c\u0646 YAML<\/strong>: \u06a9\u0648\u0688 \u0645\u06cc\u06ba \u0627\u0639\u0644\u0627\u0646\u06cc\u06c1 \u0646\u0627\u06a9\u0627\u0645\u06cc\u0648\u06ba \u06a9\u0627 \u0627\u0646\u062c\u06cc\u06a9\u0634\u0646 \u0644\u06af\u0627\u0646\u0627<\/p>\n<\/li>\n<li>\n<p><strong>\u067e\u0644\u06cc\u0679 \u0641\u0627\u0631\u0645 \u0627\u0648\u0631 \u0627\u06cc\u067e \u06a9\u06cc \u0646\u0627\u0645 \u06a9\u06cc \u062c\u06af\u06c1<\/strong>: Kyverno \u0628\u0644\u0627\u06a9\u0633 Chaos Runners. <code>clearledger<\/code>\u0627\u0646\u062c\u0646 \u0686\u0644 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4 <code>litmus<\/code><\/p>\n<\/li>\n<li>\n<p><strong>\u0627\u06cc\u0645 \u0679\u06cc \u0679\u06cc \u0622\u0631<\/strong>: \u067e\u0648\u0688 \u0645\u0627\u0631\u0646\u06d2 \u0633\u06d2 \u0644\u06d2 \u06a9\u0631 2\/2 \u062a\u06a9 \u062a\u06cc\u0627\u0631 \u0648\u0642\u062a (\u0645\u0631\u062d\u0644\u06c1 7 \u0645\u06cc\u06ba \u06af\u0631\u0627\u0641 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2)<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u0627\u0628 \u0622\u067e \u0627\u067e\u0646\u06d2 \u062a\u062c\u0631\u0628\u06d2 \u06a9\u06cc \u0641\u06c1\u0631\u0633\u062a \u0645\u06cc\u06ba \u06a9\u06cc\u0627 \u0688\u0627\u0644 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\/\u0627\u06cc\u06a9 \u0627\u0646\u0679\u0631\u0648\u06cc\u0648 \u0645\u06cc\u06ba \u06a9\u06c1\u06c1 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba:<\/strong><\/p>\n<blockquote>\n<p>\u06c1\u0645 \u0646\u06d2 LitmusChaos (\u067e\u0648\u0688 \u0688\u06cc\u0644\u06cc\u0679\u06cc\u0634\u0646\u060c \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u0644\u06cc\u0679\u0646\u0633\u06cc\u060c \u0645\u06cc\u0645\u0648\u0631\u06cc \u067e\u0631\u06cc\u0634\u0631) \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0627\u0641\u0631\u0627\u062a\u0641\u0631\u06cc \u06a9\u06d2 \u062a\u062c\u0631\u0628\u0627\u062a \u06a9\u06cc\u06d2 \u062a\u0627\u06a9\u06c1 \u06cc\u06c1 \u0638\u0627\u06c1\u0631 \u06a9\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u06d2 \u06a9\u06c1 \u0633\u0633\u0679\u0645 \u0679\u06be\u06cc\u06a9 \u06c1\u0648 \u0633\u06a9\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u067e\u062a\u06c1 \u0644\u06af\u0627\u0646\u06d2 \u0627\u0648\u0631 \u0644\u0686\u06a9 \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u0641\u0631\u0642 \u06a9\u0631 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/blockquote>\n<p><code>make snapshot STAGE=65 && make snapshots<\/code>. \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba <code>clearledger.stage65<\/code>. \u062f\u06cc\u06a9\u06be\u06cc\u06ba \u06a9\u06c1 \u0627\u067e\u0646\u06cc \u062a\u0631\u0642\u06cc \u06a9\u0648 \u06a9\u06cc\u0633\u06d2 \u0628\u0686\u0627\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4<\/p>\n<h2 id=\"heading-stage-7-security-observability\">\u0645\u0631\u062d\u0644\u06c1 7 - \u062d\u0641\u0627\u0638\u062a\u06cc \u0645\u0634\u0627\u06c1\u062f\u06c1<\/h2>\n<p>\u0633\u06cc\u06a9\u0648\u0631\u0679\u06cc \u06a9\u06cc \u067e\u06cc\u0645\u0627\u0626\u0634 \u06cc\u0627 \u062b\u0627\u0628\u062a \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u062a\u0627.<\/p>\n<p>\u06cc\u06c1\u0627\u06ba \u0645\u0642\u0635\u062f \u06cc\u06c1 \u0633\u0645\u062c\u06be\u0646\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0645\u06cc\u0679\u0631\u06a9\u0633\u060c \u0644\u0627\u06af\u0632 \u0627\u0648\u0631 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688\u0632 \u0627\u06cc\u06a9 \u0633\u0627\u062a\u06be \u06a9\u06cc\u0633\u06d2 \u0641\u0679 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u067e\u06be\u0631 \u0679\u0631\u0645\u06cc\u0646\u0644 \u0645\u06cc\u06ba \u06a9\u0645\u0627\u0646\u0688 \u0686\u0644\u0627 \u06a9\u0631 \u0627\u0648\u0631 \u06af\u0631\u0627\u0641\u0627\u0646\u0627 \u0645\u06cc\u06ba \u0638\u0627\u06c1\u0631 \u06c1\u0648\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0627\u0646\u06c1\u06cc \u0648\u0627\u0642\u0639\u0627\u062a \u06a9\u0627 \u0645\u0634\u0627\u06c1\u062f\u06c1 \u06a9\u0631\u06a9\u06d2\u060c \u06c1\u0631 \u067e\u06cc\u0646\u0644 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u0628\u062a\u0627\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0627\u0633\u06d2 \u062b\u0627\u0628\u062a \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u06cc\u06c1 \u0645\u0631\u062d\u0644\u06c1 \"Grafana \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0622\u06af\u06d2 \u0628\u0691\u06be\u06cc\u06ba\" \u0645\u0631\u062d\u0644\u06c1 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0645\u0631\u062d\u0644\u06c1 7 \u0627\u0633 \u0648\u0642\u062a \u062a\u06a9 \u0645\u06a9\u0645\u0644 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u0627 \u062c\u0628 \u062a\u06a9 \u06a9\u06c1 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u0627\u0635\u0644 Kyverno \u06a9\u06cc \u062e\u0644\u0627\u0641 \u0648\u0631\u0632\u06cc \u0627\u0648\u0631 Falco \u0627\u0644\u0631\u0679 \u062c\u0648 \u06a9\u06c1 \u0645\u0631\u062d\u0644\u06c1 7.4 \u0645\u06cc\u06ba \u0645\u062a\u062d\u0631\u06a9 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u0627\u060c \u0646\u06cc\u0632 \u067e\u0648\u0631\u0679 \u0641\u0648\u0644\u06cc\u0648 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679 (\u00a77.6) \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2\u06d4 <code>make check-7<\/code> \u06cc\u06c1 \u0635\u0631\u0641 \u062b\u0627\u0628\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0627\u0633\u0679\u06cc\u06a9 \u06a9\u0627\u0645 \u06a9\u0631 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u062b\u0627\u0628\u062a \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u0627 \u06a9\u06c1 \u0633\u06cc\u06a9\u0648\u0631\u0679\u06cc \u06a9\u06d2 \u0648\u0627\u0642\u0639\u0627\u062a \u06a9\u0627 \u067e\u062a\u06c1 \u0644\u06af\u0627\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u0634\u0631\u0648\u0639 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2:<\/strong> <code>make check-6<\/code> \u0622\u067e \u06a9\u0648 \u067e\u0627\u0633 \u06a9\u0631\u0646\u0627 \u06c1\u0648\u06af\u0627 (\u0645\u0631\u062d\u0644\u06c1 6.5 \u0627\u062e\u062a\u06cc\u0627\u0631\u06cc \u06c1\u06d2\u061b \u0628\u0644\u0627 \u062c\u06be\u062c\u06be\u06a9 \u0627\u0633\u06d2 \u0686\u06be\u0648\u0691 \u062f\u06cc\u06ba)\u06d4 \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u0626\u06cc\u06ba \u06a9\u06c1 VM \u0627\u0648\u0648\u0631\u0644\u0648\u0688 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 <code>multipass exec clearledger -- uptime<\/code>. \u0627\u06af\u0631 \u0622\u067e \u0646\u06d2 \u0627\u0633\u0679\u06cc\u062c 6.5 \u0686\u0644\u0627\u06cc\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u0644\u0679\u0645\u0633 \u06a9\u0648 \u06a9\u0645 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u067e\u06c1\u0644\u06d2 \u00a77.0 \u067e\u0631\u0641\u0627\u0631\u0645 \u06a9\u0631\u06cc\u06ba\u06d4 \u062a\u0642\u0631\u06cc\u0628\u0627\u064b \u0622\u062f\u06be\u06d2 \u062f\u0646 \u06a9\u0627 \u0645\u0646\u0635\u0648\u0628\u06c1 \u0628\u0646\u0627\u0626\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0648\u0627\u062d\u062f \u0646\u0648\u0688 VM \u067e\u0631 \u0633\u0628 \u0633\u06d2 \u0628\u06be\u0627\u0631\u06cc \u0642\u062f\u0645 \u06c1\u06d2\u06d4<\/p>\n<p>\u00a77.6 \u0645\u06a9\u0645\u0644 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f\u060c \u0622\u067e \u06a9\u0627 \u06a9\u0627\u0645 \u06c1\u0648 \u06af\u06cc\u0627\u06d4 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u062e\u0627\u0644\u06cc \u067e\u06cc\u0646\u0644 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 Kyverno \u0645\u0633\u062a\u0631\u062f \u0627\u0648\u0631 Falco \u0648\u0627\u0631\u0646\u0646\u06af \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u067e\u06be\u0631 <code>make check-7<\/code> (\u00a77.7)\u060c <code>make snapshot STAGE=7<\/code>\u0627\u0648\u0631 <code>make snapshots<\/code> (\u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba <code>clearledger.stage7<\/code>)\u06d4<\/p>\n<p><strong>\u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0627\u0646\u0633\u0679\u0627\u0644 \u06c1\u06d2\u061f<\/strong> \u0627\u06af\u0631 <code>kubectl get pods -n monitoring<\/code> \u0645\u062c\u06be\u06d2 \u06af\u0631\u0627\u0641\u0627\u0646\u0627 \u062f\u06a9\u06be\u0627\u0626\u06cc\u06ba\u06d4 <strong>3\/3<\/strong> \u0627\u0648\u0631 \u0644\u0648\u06a9\u06cc <strong>1\/1<\/strong>\u00a77.1 \u06a9\u0648 \u0686\u06be\u0648\u0691\u06cc\u06ba\u06d4 \u00a77.2 (\u0627\u0633\u0679\u06cc\u06a9 \u0686\u06cc\u06a9) \u0633\u06d2 \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u067e\u06be\u0631 \u00a77.4 (\u06c1\u06cc\u0646\u0688\u0632 \u0622\u0646 \u0644\u06cc\u0628) \u067e\u0631 \u062c\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-what-you-need-to-know-first\">\u0622\u067e \u06a9\u0648 \u067e\u06c1\u0644\u06d2 \u06a9\u06cc\u0627 \u062c\u0627\u0646\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4<\/h3>\n<p>\u0627\u0628 \u062a\u06a9\u060c \u06a9\u0644\u0633\u0679\u0631 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06c1\u0631 \u0642\u062f\u0645 \u06a9\u06cc \u0627\u067e\u0646\u06cc \u06a9\u06be\u0691\u06a9\u06cc \u062a\u06be\u06cc\u06d4 \u0645\u0631\u062d\u0644\u06c1 3 \u0645\u06cc\u06ba\u060c CI \u0627\u0633\u06a9\u06cc\u0646 \u06a9\u06d2 \u0646\u062a\u0627\u0626\u062c GitHub \u0627\u06cc\u06a9\u0634\u0646\u0632 \u06a9\u0648 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u06cc\u06d2 \u06af\u0626\u06d2 \u062a\u06be\u06d2\u06d4 \u0641\u06cc\u0632 4 \u0646\u06d2 Kyverno \u06a9\u0648 \u0679\u0631\u0645\u06cc\u0646\u0644\u0632 \u06a9\u06cc \u063a\u0644\u0637 \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u06a9\u0648 \u0631\u0648\u06a9\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u062f\u06a9\u06be\u0627\u06cc\u0627\u06d4 \u0645\u0631\u062d\u0644\u06c1 6 \u0645\u06cc\u06ba\u060c Falco \u0648\u0627\u0631\u0646\u0646\u06af\u0632 UI \u0645\u06cc\u06ba \u0641\u0631\u0627\u06c1\u0645 \u06a9\u06cc \u06af\u0626\u06cc \u062a\u06be\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0646\u06c1\u06cc\u06ba \u06a9\u0633\u06cc \u0628\u06be\u06cc \u0648\u0642\u062a \u0645\u062a\u062d\u0631\u06a9 \u06a9\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 <code>kubectl logs<\/code> \u0641\u0648\u0631\u0688 \u06a9\u0648\u06d4 \u06cc\u06c1 \u062e\u06cc\u0627\u0644\u0627\u062a \u0645\u0641\u06cc\u062f \u06c1\u06cc\u06ba \u0644\u06cc\u06a9\u0646 \u0628\u06a9\u06be\u0631\u06d2 \u06c1\u0648\u0626\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0645\u0631\u062d\u0644\u06c1 7 \u06cc\u06c1 \u0633\u0628 \u0627\u06cc\u06a9 \u062c\u06af\u06c1 \u067e\u0631 \u0627\u06a9\u0679\u06be\u0627 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <strong>\u06af\u0631\u0627\u0641\u0627\u0646\u0627<\/strong>. \u067e\u0627\u0646\u0686 \u0679\u0648\u0644\u0632 \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u0686\u06be\u0644\u0627\u0646\u06af \u0644\u06af\u0627\u0646\u06d2 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2\u060c \u0622\u067e \u0627\u06cc\u06a9 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u06a9\u06be\u0648\u0644 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u06a9\u06d2 \u0648\u0627\u0642\u0639\u0627\u062a\u060c \u067e\u0627\u0644\u06cc\u0633\u06cc \u06a9\u06cc \u062e\u0644\u0627\u0641 \u0648\u0631\u0632\u06cc\u0648\u06ba\u060c \u0627\u0648\u0631 \u0627\u06cc\u067e \u06a9\u06cc \u0635\u062d\u062a \u06a9\u0648 \u062f\u06cc\u06a9\u06be \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u06cc\u0633\u0627 \u06a9\u06c1 \u0648\u06c1 \u0648\u0642\u062a \u06a9\u06d2 \u0633\u0627\u062a\u06be \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-the-three-tools-youre-installing\">\u062a\u06cc\u0646 \u0679\u0648\u0644\u0632 \u0644\u06af\u0627\u0626\u06d2 \u062c\u0627 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba\u06d4<\/h4>\n<p><strong>\u067e\u0631\u0648\u0645\u06cc\u062a\u06be\u06cc\u0633<\/strong> \u0627\u067e\u0646\u06d2 \u06a9\u0644\u0633\u0679\u0631 \u0633\u06d2 \u0646\u0645\u0628\u0631\u0632 \u062c\u0645\u0639 \u06a9\u0631\u06cc\u06ba\u060c \u062c\u06cc\u0633\u06d2 \u06a9\u06c1 \"\u06af\u0632\u0634\u062a\u06c1 \u06af\u06be\u0646\u0679\u06d2 \u0645\u06cc\u06ba Kyverno \u06a9\u06d2 \u0645\u0633\u062a\u0631\u062f \u06c1\u0648\u0646\u06d2 \u06a9\u06cc \u062a\u0639\u062f\u0627\u062f\" \u06cc\u0627 \"HTTP \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u06cc\u06ba \u0641\u06cc \u0633\u06cc\u06a9\u0646\u0688\u06d4\" \u0627\u0646 \u0646\u0645\u0628\u0631\u0648\u06ba \u06a9\u0648 \u06c1\u0631 15 \u0633\u06d2 30 \u0633\u06cc\u06a9\u0646\u0688 \u0645\u06cc\u06ba \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0627\u06cc\u06a9 \u0631\u06cc\u06a9\u0627\u0631\u0688 \u0631\u06a9\u06be\u06cc\u06ba \u062c\u0633\u06d2 \u0622\u067e \u06af\u0631\u0627\u0641 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p><strong>\u067e\u062a\u06be\u0631\u06cc\u0644\u06cc<\/strong> \u0644\u0627\u06af \u0644\u0627\u0626\u0646\u06cc\u06ba \u062c\u0645\u0639 \u06a9\u0631\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0627\u0633\u06cc \u0642\u0633\u0645 \u06a9\u0627 \u0645\u062a\u0646 \u06c1\u06d2 \u062c\u0633\u06d2 \u0622\u067e \u0646\u06cc\u0686\u06d2 \u062f\u06cc\u06a9\u06be \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>kubectl logs<\/code>\u0644\u06cc\u06a9\u0646 \u06cc\u06c1 \u0627\u06cc\u06a9 \u06c1\u06cc \u0648\u0642\u062a \u0645\u06cc\u06ba \u0645\u062a\u0639\u062f\u062f \u067e\u06be\u0644\u06cc\u0648\u06ba \u0645\u06cc\u06ba \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 Falco \u0648\u0627\u0631\u0646\u0646\u06af\u0632\u060c \u0644\u0627\u06af \u0627\u0646 \u06a9\u06cc \u0646\u0627\u06a9\u0627\u0645 \u06a9\u0648\u0634\u0634\u06cc\u06ba\u060c \u0627\u0648\u0631 \u0627\u06cc\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u06a9\u06cc \u063a\u0644\u0637\u06cc\u0627\u06ba \u0633\u0628\u06be\u06cc \u06cc\u06c1\u0627\u06ba \u062f\u06a9\u06be\u0627\u0626\u06d2 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0627\u06a9\u06c1 \u0622\u067e \u0627\u0646\u06c1\u06cc\u06ba \u0628\u0639\u062f \u0645\u06cc\u06ba \u0628\u0627\u0632\u06cc\u0627\u0641\u062a \u06a9\u0631 \u0633\u06a9\u06cc\u06ba\u06d4<\/p>\n<p><strong>\u06af\u0631\u0627\u0641\u0627\u0646\u0627<\/strong> \u0627\u06cc\u06a9 \u0648\u06cc\u0628 UI \u062c\u0633 \u06a9\u06d2 \u0686\u0627\u0631\u0679\u0633 \u0627\u0648\u0631 \u0679\u06cc\u0628\u0644\u0632 \u067e\u0631\u0648\u0645\u06cc\u062a\u06be\u06cc\u0633 \u0627\u0648\u0631 \u0644\u0648\u06a9\u06cc \u0633\u06d2 \u0688\u06cc\u0679\u0627 \u06a9\u06be\u06cc\u0646\u0686\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0622\u0688\u06cc\u0679\u0631 \u06a9\u0648 \u062f\u06a9\u06be\u0627\u06cc\u0627 \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4 \u06cc\u06c1 \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u06a9\u0627 \u0679\u0631\u0645\u06cc\u0646\u0644 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u060c \u06cc\u06c1 \u0627\u0633 \u0628\u0627\u062a \u06a9\u0627 \u062b\u0628\u0648\u062a \u06c1\u06d2 \u06a9\u06c1 \u0622\u067e \u0648\u0627\u0642\u0639\u0627\u062a \u06a9\u06d2 \u0631\u0648\u0646\u0645\u0627 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f \u0627\u0646\u06c1\u06cc\u06ba \u062a\u0644\u0627\u0634 \u0627\u0648\u0631 \u067e\u06cc\u0645\u0627\u0626\u0634 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u067e\u0631\u0648\u0645\u06cc\u062a\u06be\u06cc\u0633 \u062c\u0627\u062f\u0648\u0626\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0646\u06c1\u06cc\u06ba \u062c\u0627\u0646\u062a\u0627 \u06a9\u06c1 \u06a9\u06cc\u0627 \u062c\u0645\u0639 \u06a9\u0631\u0646\u0627 \u06c1\u06d2\u06d4 \u0633\u0631\u0648\u0633 \u0645\u0627\u0646\u06cc\u0679\u0631\u0632 \u0627\u0648\u0631 \u067e\u0648\u0688 \u0645\u0627\u0646\u06cc\u0679\u0631 \u0686\u06be\u0648\u0679\u06d2 \u06a9\u0646\u0641\u06cc\u06af\u0631\u06cc\u0634\u0646 \u0622\u0628\u062c\u06cc\u06a9\u0679 \u06c1\u06cc\u06ba \u062c\u0648 \u062f\u0631\u0633\u062a \u06c1\u062f\u0641 \u06a9\u06cc \u0637\u0631\u0641 \u0627\u0634\u0627\u0631\u06c1 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<br \/>\u0627\u06af\u0631 Kyverno \u06a9\u06d2 \u067e\u0627\u0633 \u0645\u0627\u0646\u06cc\u0679\u0631 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2 \u062a\u0648 Kyverno \u06a9\u0627 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u062e\u0627\u0644\u06cc \u0631\u06c1\u06d2 \u06af\u0627 \u0686\u0627\u06c1\u06d2 Kyverno \u0679\u06be\u06cc\u06a9 \u0633\u06d2 \u06a9\u0627\u0645 \u06a9\u0631 \u0631\u06c1\u0627 \u06c1\u0648\u06d4 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u06cc \u0634\u0631\u062d\u0648\u06ba \u067e\u0631 \u0628\u06be\u06cc \u06cc\u06c1\u06cc \u0644\u0627\u06af\u0648 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 \u0648\u06c1 \u067e\u06cc\u0646\u0644 \u00a77.5 \u062a\u06a9 \u062e\u0627\u0644\u06cc \u0631\u06c1\u06d2 \u06af\u0627\u060c \u062c\u0628 \u0645\u06cc\u0679\u0631\u06a9\u0633 \u0633\u06d2 \u0686\u0644\u0646\u06d2 \u0648\u0627\u0644\u06cc \u062a\u0635\u0627\u0648\u06cc\u0631 GitOps \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u06cc \u062c\u0627\u0626\u06cc\u06ba \u06af\u06cc\u06d4<\/p>\n<p>\u0644\u0627\u06af\u0632 \u0627\u0633\u06cc \u0637\u0631\u062d \u06a9\u06d2 \u0631\u0627\u0633\u062a\u06d2 \u067e\u0631 \u0686\u0644\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <strong>Fromtale<\/strong> \u06a9\u0646\u0679\u06cc\u0646\u0631 \u0644\u0627\u06af\u0632 \u067e\u0691\u06be\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0646\u06c1\u06cc\u06ba \u0644\u0648\u06a9\u06cc \u06a9\u0648 \u0628\u06be\u06cc\u062c\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u0644\u0648\u06a9\u06cc \u0646\u06c1\u06cc\u06ba \u0686\u0644 \u0631\u06c1\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u06af\u0631\u0627\u0641\u0627\u0646\u0627 \u0644\u0627\u06af \u067e\u06cc\u0646\u0644 \"\u06a9\u0648\u0626\u06cc \u0688\u06cc\u0679\u0627 \u0646\u06c1\u06cc\u06ba\" \u062f\u06a9\u06be\u0627\u0626\u06d2 \u06af\u0627\u06d4 <code>kubectl logs<\/code> \u06cc\u06c1 \u0627\u0628 \u0628\u06be\u06cc \u0627\u0646\u0641\u0631\u0627\u062f\u06cc \u067e\u06be\u0644\u06cc\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-how-this-connects-to-what-you-already-built\">\u06cc\u06c1 \u0627\u0633 \u0686\u06cc\u0632 \u0633\u06d2 \u06a9\u06cc\u0633\u06d2 \u062c\u0648\u0691\u062a\u0627 \u06c1\u06d2 \u062c\u0648 \u0622\u067e \u067e\u06c1\u0644\u06d2 \u06c1\u06cc \u0628\u0646\u0627 \u0686\u06a9\u06d2 \u06c1\u06cc\u06ba\u061f<\/h4>\n<p>\u062c\u0628 \u0622\u067e \u0628\u0631\u06cc \u0686\u06cc\u0632\u0648\u06ba \u06a9\u0648 \u0631\u0648\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>kubectl apply<\/code> \u0645\u0631\u062d\u0644\u06c1 4 \u0645\u06cc\u06ba\u060c Kyverno \u0646\u06d2 \u0627\u0633 \u0645\u0633\u062a\u0631\u062f \u06a9\u0648 \u0631\u06cc\u06a9\u0627\u0631\u0688 \u06a9\u06cc\u0627\u06d4 \u0645\u0631\u062d\u0644\u06c1 7 \u0622\u067e \u06a9\u0648 \u062f\u06a9\u06be\u0627\u0626\u06d2 \u06af\u0627\u06d4 <strong>Kyverno \u067e\u0627\u0644\u06cc\u0633\u06cc \u06a9\u06cc \u062e\u0644\u0627\u0641 \u0648\u0631\u0632\u06cc<\/strong> \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 (Prometheus \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2)\u06d4<\/p>\n<p>\u0641\u0627\u0644\u06a9\u0648 \u0646\u06d2 \u0627\u06cc\u06a9 \u0627\u0644\u0631\u0679 \u0644\u06a9\u06be\u0627 \u062c\u0628 \u06c1\u0645 \u0646\u06d2 \u067e\u0648\u0688 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0634\u06cc\u0644 \u06a9\u0648 \u0645\u0631\u062d\u0644\u06c1 6 \u0645\u06cc\u06ba \u0645\u062a\u062d\u0631\u06a9 \u06a9\u06cc\u0627\u06d4 \u0645\u0631\u062d\u0644\u06c1 7 \u0645\u06cc\u06ba <strong>\u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u0627\u06cc\u0648\u0646\u0679 \u06a9\u06cc \u0679\u0627\u0626\u0645 \u0644\u0627\u0626\u0646<\/strong> (\u0644\u0648\u06a9\u06cc \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2)\u06d4<\/p>\n<p>\u062c\u0628 ClearLedger HTTP \u0679\u0631\u06cc\u0641\u06a9 \u06cc\u0627 \u0644\u0627\u06af \u0627\u0646 \u06a9\u06cc \u0646\u0627\u06a9\u0627\u0645\u06cc\u0648\u06ba \u067e\u0631 \u06a9\u0627\u0631\u0631\u0648\u0627\u0626\u06cc \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u0645\u062a\u0639\u0644\u0642\u06c1 \u0648\u0627\u0642\u0639\u0627\u062a \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <strong>\u0633\u0631\u0648\u0633 \u06a9\u06cc \u062d\u06cc\u062b\u06cc\u062a<\/strong> \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 (\u0644\u0648\u06a9\u06cc \u0627\u0648\u0631 \u067e\u0631\u0648\u0645\u06cc\u062a\u06be\u06cc\u0633 \u06a9\u06d2 \u0633\u0627\u062a\u06be)\u06d4<\/p>\n<p>\u0648\u0627\u0644\u0679 (\u0645\u0631\u062d\u0644\u06c1 5) \u0627\u0648\u0631 \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u067e\u0627\u0644\u06cc\u0633\u06cc\u0627\u06ba (\u0645\u0631\u062d\u0644\u06c1 6) \u06a9\u06d2 \u06c1\u0645\u06cc\u0634\u06c1 \u0627\u067e\u0646\u06d2 \u067e\u06cc\u0646\u0644 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0644\u06cc\u06a9\u0646 \u0648\u06c1 \u0627\u0628 \u0628\u06be\u06cc \u0627\u06c1\u0645 \u06c1\u06cc\u06ba\u06d4 \u06af\u0679 \u06a9\u06cc \u06a9\u0645 \u062e\u0641\u06cc\u06c1 \u0627\u0648\u0631 \u0645\u0633\u062f\u0648\u062f \u067e\u0648\u0688 \u0679\u0631\u06cc\u0641\u06a9 \u0628\u0627\u0644\u0648\u0627\u0633\u0637\u06c1 \u0637\u0648\u0631 \u067e\u0631 \u0635\u062d\u062a \u0645\u0646\u062f\u060c \u067e\u0631\u0633\u06a9\u0648\u0646 \u06a9\u0644\u0633\u0679\u0631\u0632 \u06a9\u0648 \u062f\u06a9\u06be\u0627\u0626\u06cc \u062f\u06cc\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-what-youll-do-in-this-stage\">\u0627\u0633 \u0645\u0631\u062d\u0644\u06d2 \u0645\u06cc\u06ba \u06a9\u06cc\u0627 \u06a9\u0631\u0646\u0627 \u06c1\u06d2<\/h4>\n<p>\u0679\u0631\u0645\u06cc\u0646\u0644 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u06a9\u0645\u0627\u0646\u0688 \u0686\u0644\u0627\u0626\u06cc\u06ba (\u0645\u062b\u0644\u0627\u064b Kyverno breach or Falco trigger)\u060c \u067e\u06be\u0631 \u0627\u06cc\u06a9 \u0644\u0645\u062d\u06c1 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u06cc\u06ba \u062c\u0628 \u062a\u06a9 Prometheus \u06cc\u0627 Loki \u0648\u0627\u0642\u0639\u0627\u062a \u06a9\u0648 \u0627\u06a9\u0679\u06be\u0627 \u06a9\u0631\u06cc\u06ba\u06d4 \u0645\u0645\u0627\u062b\u0644 Grafana \u067e\u06cc\u0646\u0644 \u062a\u0642\u0631\u06cc\u0628\u0627\u064b 15 \u0633\u06d2 90 \u0633\u06cc\u06a9\u0646\u0688 \u0645\u06cc\u06ba \u0627\u067e \u0688\u06cc\u0679 \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4<\/p>\n<p>\u06cc\u06c1 \u062d\u0641\u0627\u0638\u062a\u06cc \u0645\u0634\u0627\u06c1\u062f\u06d2 \u06a9\u0627 \u062c\u0648\u06c1\u0631 \u06c1\u06d2\u06d4 \u0679\u0631\u0645\u06cc\u0646\u0644 \u062b\u0627\u0628\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0648\u0627\u0642\u0639\u06c1 \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u067e\u06cc\u0634 \u0622\u06cc\u0627\u060c \u0627\u0648\u0631 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u062b\u0627\u0628\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u06a9\u0648\u0626\u06cc \u0648\u0627\u0642\u0639\u06c1 \u0631\u0648\u0646\u0645\u0627 \u06c1\u0648 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 <strong>\u0627\u062d\u0633\u0627\u0633 \u0627\u0648\u0631 \u067e\u06cc\u0645\u0627\u0626\u0634<\/strong> \u0622\u067e \u0627\u0633\u06d2 \u0628\u0639\u062f \u0645\u06cc\u06ba \u0627\u0633 \u0639\u06cc\u0646 \u0648\u0642\u062a \u067e\u0631 \u06a9\u0644\u0633\u0679\u0631 \u0645\u06cc\u06ba \u0644\u0627\u06af \u0627\u0646 \u06a9\u06cc\u06d2 \u0628\u063a\u06cc\u0631 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-70-free-node-resources-scale-down-litmus\">7.0: \u0645\u0641\u062a \u0646\u0648\u0688 \u0648\u0633\u0627\u0626\u0644 (\u0644\u0679\u0645\u0633 \u06a9\u0645\u06cc)<\/h3>\n<p>\u0645\u0631\u062d\u0644\u06c1 6.5 \u0645\u06a9\u0645\u0644 \u06c1\u0648 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4 \u0644\u0679\u0645\u0633 UI\u060c \u200b\u200bMongoDB\u060c \u06cc\u0627 \u0627\u0641\u0631\u0627\u062a\u0641\u0631\u06cc \u0622\u067e\u0631\u06cc\u0679\u0631\u0632 \u06a9\u0648 \u0686\u0644\u0627\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2 \u062c\u0628 \u06a9\u06c1 Prometheus\u060c Loki\u060c \u0627\u0648\u0631 Grafana \u0634\u0631\u0648\u0639 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0633\u0646\u06af\u0644 \u0646\u0648\u0688 \u0644\u06cc\u0628 VMs (6 \u0628\u0630\u0631\u06cc\u0639\u06c1 \u0688\u06cc\u0641\u0627\u0644\u0679\u060c \u062f\u06cc\u06a9\u06be\u06cc\u06ba) \u0627\u0633\u06cc CPU \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u0642\u0627\u0628\u0644\u06c1 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>scripts\/setup-cluster.sh<\/code>)\u06d4<\/p>\n<p>\u0644\u0679\u0645\u0633 \u06a9\u0648 0 \u0645\u06cc\u06ba \u0627\u06cc\u0688\u062c\u0633\u0679 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 ~500-800MB RAM \u062e\u0627\u0644\u06cc \u06c1\u0648 \u062c\u0627\u062a\u06cc \u06c1\u06d2 \u0627\u0648\u0631 \u0645\u0634\u0627\u06c1\u062f\u0627\u062a\u06cc \u062a\u0646\u0635\u06cc\u0628 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 CPU \u0686\u0631\u0646 \u06a9\u0645 \u06c1\u0648 \u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\">kubectl scale deployment,statefulset -n litmus --replicas=0 --all\nkubectl get pods -n litmus\n# Expected: no Running pods (Succeeded job pods from chaos experiments are OK)\nmultipass exec clearledger -- uptime\n# Expected: load average (1m) ideally below ~8 before continuing\n<\/code><\/pre>\n<p>\u0627\u06af\u0631 \u0622\u067e \u0627\u0641\u0631\u0627\u062a\u0641\u0631\u06cc \u06a9\u0627 \u062a\u062c\u0631\u0628\u06c1 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0686\u0644\u0627\u0646\u0627 \u0686\u0627\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0648 \u0622\u067e \u0644\u0679\u0645\u0633 \u0628\u06cc\u06a9 \u0627\u067e \u06a9\u0648 \u0628\u0639\u062f \u0645\u06cc\u06ba \u0628\u0691\u06be\u0627 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba (<code>bash stages\/stage-6.5-chaos-engineering\/scripts\/install-litmus.sh<\/code>)\u06d4 7 \u0633\u06d2 7.5 \u0645\u0631\u0627\u062d\u0644 \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u067e\u06cc\u0645\u0627\u0646\u06c1 \u0646\u06cc\u0686\u06d2 \u0631\u06a9\u06be\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-71-install-the-observability-stack\">7.1: \u0645\u0634\u0627\u06c1\u062f\u0627\u062a\u06cc \u0627\u0633\u0679\u06cc\u06a9 \u06a9\u0648 \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u0646\u0627<\/h3>\n<p><strong>\u06a9\u0626\u06cc \u0628\u0627\u0631 \u0686\u0644\u0627\u0646\u0627 \u0645\u062d\u0641\u0648\u0638 \u06c1\u06d2\u06d4<\/strong> \u0627\u0633\u06a9\u0631\u067e\u0679 \u0686\u06cc\u06a9 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u06a9\u06cc\u0627 \u0627\u0646\u0633\u0679\u0627\u0644 \u06c1\u06d2\u06d4 \u0627\u06af\u0631 Grafana\u060c Prometheus\u060c \u0627\u0648\u0631 Loki \u0679\u06be\u06cc\u06a9 \u06c1\u06cc\u06ba\u060c \u0628\u06be\u0627\u0631\u06cc \u062a\u0646\u0635\u06cc\u0628 \u06a9\u0648 \u0686\u06be\u0648\u0691 \u062f\u06cc\u06ba \u0627\u0648\u0631 \u0635\u0631\u0641 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u0627\u0648\u0631 \u0633\u06a9\u0631\u06cc\u067e \u06a9\u0646\u0641\u06cc\u06af\u0631\u06cc\u0634\u0646 \u06a9\u0648 \u0627\u067e \u0688\u06cc\u0679 \u06a9\u0631\u06cc\u06ba\u06d4 \u062c\u0632\u0648\u06cc \u0646\u0627\u06a9\u0627\u0645\u06cc \u06a9\u06d2 \u0628\u0639\u062f \u062f\u0648\u0628\u0627\u0631\u06c1 \u0686\u0644\u0646\u0627 \u0679\u0627\u0633\u06a9 \u0627\u0633\u0679\u06cc\u06a9 \u06a9\u0648 \u0688\u067e\u0644\u06cc\u06a9\u06cc\u0679 \u06cc\u0627 \u0679\u0648\u0679\u062a\u0627 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<p>\u0635\u0631\u0641 \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 <code>FORCE=1<\/code> \u0627\u06af\u0631 \u0622\u067e \u06c1\u06cc\u0644\u0645 \u0648\u06cc\u0644\u06cc\u0648\u0632 \u0641\u0627\u0626\u0644 \u0645\u06cc\u06ba \u062a\u0631\u0645\u06cc\u0645 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u06cc\u06c1 \u062f\u0631\u062d\u0642\u06cc\u0642\u062a \u0645\u0633\u0627\u0626\u0644 \u06a9\u0627 \u0628\u0627\u0639\u062b \u0628\u0646\u062a\u0627 \u06c1\u06d2\u060c \u0645\u062b\u0627\u0644 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0627\u06af\u0631 \u0622\u067e \u06a9\u0648 \u0645\u06a9\u0645\u0644 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2 \u06cc\u0627 \u0644\u0648\u06a9\u06cc \u0631\u06cc \u0627\u0633\u0679\u0627\u0631\u0679 \u0644\u0648\u067e \u0645\u06cc\u06ba \u06a9\u0631\u06cc\u0634 \u06c1\u0648\u062a\u0627 \u0631\u06c1\u062a\u0627 \u06c1\u06d2:<\/p>\n<pre><code class=\"language-bash\">FORCE=1 bash stages\/stage-7-observability\/scripts\/install-observability.sh\n<\/code><\/pre>\n<p>\u0627\u06af\u0631 \u06cc\u06c1 \u0622\u067e \u06a9\u06cc \u067e\u06c1\u0644\u06cc \u062a\u0646\u0635\u06cc\u0628 \u06c1\u06d2\u060c \u062a\u0648 \u0630\u06cc\u0644 \u0645\u06cc\u06ba \u0645\u0631\u062d\u0644\u06c1 1 \u0645\u06cc\u06ba \u0639\u0627\u0645 \u06a9\u0645\u0627\u0646\u0688 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u0646\u06c1 \u06a9\u0631\u06cc\u06ba <code>FORCE=1<\/code> \u062c\u0628 \u062a\u06a9 \u06a9\u06c1 \u0679\u0631\u0628\u0644 \u0634\u0648\u0679\u0646\u06af \u0633\u06cc\u06a9\u0634\u0646 \u0645\u06cc\u06ba \u0627\u06cc\u0633\u0627 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u06c1\u062f\u0627\u06cc\u062a \u0646\u06c1 \u06a9\u06cc \u062c\u0627\u0626\u06d2\u06d4<\/p>\n<p><strong>macOS\u060c Linux\u060c \u0627\u0648\u0631 WSL2:<\/strong> <code>FORCE=1 bash ...<\/code> \u06cc\u06c1 \u062a\u062d\u0631\u06cc\u0631\u06cc \u0637\u0648\u0631 \u067e\u0631 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u0645\u0642\u0627\u0645\u06cc \u0648\u0646\u0688\u0648\u0632 \u067e\u0627\u0648\u0631 \u0634\u06cc\u0644<\/strong> \u0645\u06cc\u06ba \u0648\u06c1 \u0646\u062d\u0648 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u0627\u06d4<\/p>\n<p>\u0627\u0646\u062f\u0631 \u0633\u06d2 \u0627\u067e\u0646\u06cc \u0644\u06cc\u0628 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4 <strong>WSL2 \u0627\u0648\u0628\u0646\u0679\u0648<\/strong> (\u062a\u062c\u0648\u06cc\u0632 \u06a9\u0631\u062f\u06c1) \u06cc\u0627 \u067e\u06c1\u0644\u06d2 \u0645\u062a\u063a\u06cc\u0631 \u06a9\u0648 \u0633\u06cc\u0679 \u06a9\u0631\u06cc\u06ba: <code>$env:FORCE=1; bash stages\/stage-7-observability\/scripts\/install-observability.sh<\/code>.<\/p>\n<p><strong>\u0645\u0631\u062d\u0644\u06c1 1: \u062a\u0646\u0635\u06cc\u0628<\/strong> (\u0627\u0633\u06a9\u0631\u067e\u0679 \u06a9\u06d2 \u067e\u0631\u0646\u0679 \u06c1\u0648\u0646\u06d2 \u06a9\u0627 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u06cc\u06ba\u06d4 <code>\u2713 Stage 7 installed.<\/code>):<\/p>\n<pre><code class=\"language-bash\">bash stages\/stage-7-observability\/scripts\/install-observability.sh\n<\/code><\/pre>\n<h4 id=\"heading-if-you-see-waiting-for-falco-during-the-stage-7-install-thats-expected\">\u0627\u06af\u0631 \u0622\u067e \u0627\u0633\u0679\u06cc\u062c 7 \u06a9\u06cc \u062a\u0646\u0635\u06cc\u0628 \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646 \"Witing for Falco\" \u062f\u06cc\u06a9\u06be\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u06cc\u06c1 \u0645\u062a\u0648\u0642\u0639 \u06c1\u06d2\u06d4<\/h4>\n<p>\u0622\u067e \u0646\u06d2 \u067e\u06c1\u0644\u06d2 \u06c1\u06cc \u0645\u0631\u062d\u0644\u06c1 6 \u0645\u06cc\u06ba Falco \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u06cc\u0627 \u06c1\u06d2\u06d4 \u0645\u0631\u062d\u0644\u06c1 7 \u062f\u0648\u0633\u0631\u0627 Falco \u0634\u0627\u0645\u0644 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u062e\u06cc\u0627\u0644 \u0627\u0633 \u0628\u0627\u062a \u06a9\u0648 \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u0646\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0622\u067e \u06a9\u0627 \u0645\u0648\u062c\u0648\u062f\u06c1 Falco \u0633\u06cc\u0679 \u0627\u067e \u0622\u067e \u06a9\u06d2 \u0645\u0634\u0627\u06c1\u062f\u0627\u062a\u06cc \u0627\u0633\u0679\u06cc\u06a9 \u06a9\u0648 \u0644\u0627\u06af \u0627\u0648\u0631 \u0645\u06cc\u0679\u0631\u06a9\u0633 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0628\u06c1\u0627\u0624 \u0645\u0646\u062f\u0631\u062c\u06c1 \u0630\u06cc\u0644 \u06c1\u06d2:<\/p>\n<ul>\n<li>\n<p>Falco \u0627\u0628 \u0628\u06be\u06cc \u06c1\u06d2 <code>falco<\/code> \u0646\u0627\u0645 \u06a9\u06cc \u062c\u06af\u06c1\u06d4<\/p>\n<\/li>\n<li>\n<p>\u067e\u0631\u0648\u0645\u0679\u06cc\u0644 \u0641\u0627\u0644\u06a9\u0648 \u0644\u0627\u06af\u0632 \u0644\u0648\u06a9\u06cc \u06a9\u0648 \u0628\u06be\u06cc\u062c\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u06af\u0631\u0627\u0641\u0627\u0646\u0627 \u0644\u0648\u06a9\u06cc \u0633\u06d2 \u0627\u067e\u0646\u06d2 \u0646\u0648\u0634\u062a\u06c1 \u062c\u0627\u062a \u067e\u0691\u06be\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u0627\u06cc\u0648\u0646\u0679 \u0679\u0627\u0626\u0645 \u0644\u0627\u0626\u0646 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 Falco \u0627\u0644\u0631\u0679\u0633 \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<\/ul>\n<p>\u062a\u0646\u0635\u06cc\u0628 \u06a9\u06d2 \u0641\u0648\u0631\u0627\u064b \u0628\u0639\u062f\u060c \u06af\u0631\u0627\u0641\u0627\u0646\u0627 \u067e\u06cc\u0646\u0644 \u062e\u0627\u0644\u06cc \u06c1\u0648 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0639\u0627\u0645 \u0628\u0627\u062a \u06c1\u06d2\u06d4 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u0645\u06cc\u06ba \u06a9\u0648\u0626\u06cc \u0628\u06be\u06cc \u0646\u06cc\u0627 \u0645\u0648\u0627\u062f \u0638\u0627\u06c1\u0631 \u06c1\u0648\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u00a77.4 \u06a9\u0648 \u0627\u06cc\u06a9 \u0646\u06cc\u0627 \u0627\u0644\u0631\u0679 \u0645\u062a\u062d\u0631\u06a9 \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4<\/p>\n<p><strong>\u0645\u0631\u062d\u0644\u06c1 2. \u0686\u06cc\u06a9 \u0641\u0648\u0631\u0688<\/strong> (\u0645\u0631\u062d\u0644\u06c1 1 \u0645\u06a9\u0645\u0644 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f \u0686\u0644\u0627\u0626\u06cc\u06ba):<\/p>\n<pre><code class=\"language-bash\">kubectl get pods -n monitoring\n<\/code><\/pre>\n<p>\u0645\u06cc\u06ba \u06a9\u0686\u06be \u0627\u06cc\u0633\u0627 \u0686\u0627\u06c1\u062a\u0627 \u06c1\u0648\u06ba (\u067e\u0648\u0688 \u0646\u0627\u0645 \u06a9\u06d2 \u0644\u0627\u062d\u0642\u06d2 \u0645\u062e\u062a\u0644\u0641 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba):<\/p>\n<pre><code class=\"language-text\">NAME                                              READY   STATUS    RESTARTS   AGE\nkube-prometheus-stack-grafana-....                3\/3     Running   0          5m\nkube-prometheus-stack-prometheus-....             2\/2     Running   0          5m\nloki-0                                            1\/1     Running   0          5m\nloki-promtail-....                                1\/1     Running   0          5m\n<\/code><\/pre>\n<p>\u06af\u0631\u0627\u0641\u0627\u0646\u0627 \u062f\u06a9\u06be\u0627\u0646\u0627 \u06c1\u06d2\u06d4 <strong>3\/3<\/strong> \u062a\u06cc\u0627\u0631 (2\/3 \u0646\u06c1\u06cc\u06ba)\u06d4 \u0644\u0648\u06a9\u06cc \u06a9\u0648 \u0645\u062c\u06be\u06d2 \u062f\u06a9\u06be\u0627\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4 <strong>1\/1<\/strong>. \u0627\u06af\u0631 \u067e\u06be\u0644\u06cc\u0627\u06ba \u0627\u0628 \u0628\u06be\u06cc \u0628\u0627\u0642\u06cc \u06c1\u06cc\u06ba\u06d4 <code>Pending<\/code> \u06cc\u0627 <code>ContainerCreating<\/code>\u0686\u0646\u062f \u0645\u0646\u0679 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0633\u06d2 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4 <code>kubectl get pods -n monitoring<\/code> \u062f\u0648\u0628\u0627\u0631\u06c1<\/p>\n<p><strong>\u0645\u062a\u0648\u0642\u0639 - \u0644\u0648\u06a9\u06cc \u0635\u062d\u062a \u0645\u0646\u062f:<\/strong><\/p>\n<pre><code class=\"language-bash\">kubectl exec -n monitoring loki-0 -- wget -qO- http:\/\/127.0.0.1:3100\/ready\n<\/code><\/pre>\n<pre><code class=\"language-text\">ready\n<\/code><\/pre>\n<p><strong>\u0645\u062a\u0648\u0642\u0639 - \u06af\u0631\u0627\u0641\u0627\u0646\u0627 \u0644\u0648\u06a9\u06cc \u062a\u06a9 \u067e\u06c1\u0646\u0686 \u0633\u06a9\u062a\u0627 \u06c1\u06d2 (\u0627\u0633\u06cc \u0631\u0627\u0633\u062a\u06d2 \u0644\u0627\u06af \u067e\u06cc\u0646\u0644 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2)\u06d4<\/strong><\/p>\n<pre><code class=\"language-bash\">kubectl exec -n monitoring deploy\/kube-prometheus-stack-grafana -c grafana -- \n  wget -qO- --timeout=5 http:\/\/loki:3100\/ready\n<\/code><\/pre>\n<pre><code class=\"language-text\">ready\n<\/code><\/pre>\n<p><strong>\u0645\u062a\u0648\u0642\u0639 - Grafana UI \u0642\u0627\u0628\u0644 \u0631\u0633\u0627\u0626\u06cc:<\/strong><\/p>\n<pre><code class=\"language-bash\">curl -sI http:\/\/grafana.local | head -n 1\n<\/code><\/pre>\n<pre><code class=\"language-text\">HTTP\/1.1 302 Found\n<\/code><\/pre>\n<p>\u0644\u0627\u06af \u0627\u0646 <strong>http:\/\/grafana.local:<\/strong> <code>admin<\/code> \/ <code>admin123<\/code><\/p>\n<p>\u062a\u0646\u0635\u06cc\u0628 \u06a9\u06d2 \u0641\u0648\u0631\u0627\u064b \u0628\u0639\u062f \u062e\u0627\u0644\u06cc \u067e\u06cc\u0646\u0644 <strong>\u0639\u0627\u0645<\/strong>. \u0622\u067e \u0646\u06d2 \u0627\u0628\u06be\u06cc \u062a\u06a9 \u06a9\u0648\u0626\u06cc \u0627\u06cc\u0648\u0646\u0679 \u0646\u06c1\u06cc\u06ba \u0628\u0646\u0627\u06cc\u0627 \u06c1\u06d2\u06d4 \u00a77.2\u2013\u00a77.4 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062c\u0627\u0631\u06cc \u0631\u06a9\u06be\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u06af\u0631 \u06c1\u06cc\u0644\u0645 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u062c\u0627\u062a\u0627 \u06c1\u06d2: 30 \u0633\u06cc\u06a9\u0646\u0688 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u06cc\u06ba\u060c \u067e\u06be\u0631 <code>FORCE=1 bash stages\/stage-7-observability\/scripts\/install-observability.sh<\/code>. \u062f\u06cc\u06a9\u06be\u06cc\u06ba <code>troubleshooting.md. Stage 7<\/code>.<\/p>\n<p><strong> \u06c1\u06cc\u0646\u0688 \u0622\u0646 \u0686\u06cc\u06a9 \u067e\u0648\u0627\u0626\u0646\u0679: \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u0626\u06cc\u06ba \u06a9\u06c1 \u0622\u067e \u06a9\u06d2 \u067e\u0627\u0633 \u0644\u0648\u06a9\u06cc \u0627\u0648\u0631 \u0622\u067e \u06a9\u0627 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u062a\u06cc\u0627\u0631 \u06c1\u06d2\u06d4<\/strong><\/p>\n<p>\u06af\u0631\u0627\u0641\u0627\u0646\u0627 \u06a9\u0648 \u06a9\u06be\u0648\u0644\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u060c \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u06a9\u0648\u0646 \u0633\u0627 \u0644\u0627\u06af\u0646\u06af \u0627\u0633\u0679\u06cc\u06a9 \u0627\u0648\u0631 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u0627\u0635\u0644 \u0645\u06cc\u06ba \u0627\u0646\u0633\u0679\u0627\u0644 \u06c1\u06d2\u06d4<\/p>\n<p>\u0633\u0646\u06af\u0644 \u0646\u0648\u0688 VM \u067e\u0631\u060c \u06af\u0631\u0627\u0641\u0627\u0646\u0627 \u0679\u06be\u06cc\u06a9 \u0644\u06af \u0633\u06a9\u062a\u0627 \u06c1\u06d2 \u062c\u0628 \u06a9\u06c1 \u0644\u0648\u06a9\u06cc \u0627\u06cc\u06a9 \u0644\u0648\u067e \u0645\u06cc\u06ba \u06a9\u0631\u06cc\u0634 \u06c1\u0648 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u06cc\u0627 ClearLedger \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u0644\u0648\u0688 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0622\u067e \u0627\u0633 \u0686\u06cc\u06a9 \u06a9\u0648 \u0686\u06be\u0648\u0691 \u062f\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u06c1\u0648 \u0633\u06a9\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0622\u067e \u0645\u0631\u062d\u0644\u06c1 7 \u06a9\u0627 \u0628\u0642\u06cc\u06c1 \u062d\u0635\u06c1 \u062e\u0627\u0644\u06cc \u067e\u06cc\u0646\u0644 \u06a9\u0648 \u0688\u06cc\u0628\u06af \u06a9\u0631\u0646\u06d2 \u0645\u06cc\u06ba \u0635\u0631\u0641 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p><strong>\u0686\u0644\u0627\u0626\u06cc\u06ba:<\/strong><\/p>\n<pre><code class=\"language-bash\">kubectl get pods -n monitoring\nkubectl get pods -n monitoring -l app.kubernetes.io\/name=loki \n  -o jsonpath=\"{.items[*].status.containerStatuses[*].restartCount}{\"n\"}\"\nkubectl get configmap -n monitoring -l clearledger_dashboard=1 --no-headers | wc -l\n<\/code><\/pre>\n<p><strong>\u0645\u062a\u0648\u0642\u0639:<\/strong><\/p>\n<ul>\n<li>\n<p>\u062a\u0645\u0627\u0645 \u0645\u0627\u0646\u06cc\u0679\u0631\u0646\u06af \u067e\u0648\u0688\u0632 <code>Running<\/code><\/p>\n<\/li>\n<li>\n<p>\u06af\u0631\u0627\u0641\u0627\u0646\u0627 \u0634\u0648 <code>3\/3<\/code> \u062a\u06cc\u0627\u0631<\/p>\n<\/li>\n<li>\n<p>\u0631\u0627\u06a9\u06cc \u0634\u0648 <code>1\/1<\/code> \u062a\u06cc\u0627\u0631<\/p>\n<\/li>\n<li>\n<p>\u0644\u0648\u06a9\u06cc \u062f\u0648\u0628\u0627\u0631\u06c1 \u0634\u0631\u0648\u0639 \u06c1\u0648\u0646\u06d2 \u06a9\u06cc \u062a\u0639\u062f\u0627\u062f \u06cc\u06c1 \u06c1\u06d2: <code>0<\/code>\u06cc\u0627 \u06a9\u0645 \u06c1\u06d2 \u0627\u0648\u0631 \u0646\u06c1\u06cc\u06ba \u0628\u0691\u06be \u0631\u06c1\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0688\u06cc\u0634 \u0628\u0648\u0631\u0688\u0632 \u06a9\u06cc \u062a\u0639\u062f\u0627\u062f \u062f\u0631\u062c \u0630\u06cc\u0644 \u06c1\u06d2: <code>6<\/code><\/p>\n<\/li>\n<\/ul>\n<p>\u0644\u0648\u06a9\u06cc \u062f\u0648\u0628\u0627\u0631\u06c1 \u0634\u0631\u0648\u0639 \u06c1\u0648\u062a\u0627 \u0631\u06c1\u062a\u0627 \u06c1\u06d2 \u06cc\u0627 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u06a9\u06cc \u06af\u0646\u062a\u06cc \u06a9\u0645 \u06c1\u0648\u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4 <code>0<\/code>\u06cc\u06c1\u0627\u06ba \u0631\u06a9\u06cc\u06ba \u0627\u0648\u0631 \u062c\u0627\u0631\u06cc \u0631\u06a9\u06be\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0627\u067e\u0646\u06cc \u0627\u0646\u0633\u0679\u0627\u0644\u06cc\u0634\u0646 \u0645\u06cc\u06ba \u062a\u0631\u0645\u06cc\u0645 \u06a9\u0631\u06cc\u06ba\u06d4 \u062e\u0627\u0644\u06cc \u06af\u0631\u0627\u0641\u0627\u0646\u0627 \u067e\u06cc\u0646\u0644 \u06a9\u0627 \u0639\u0627\u0645 \u0637\u0648\u0631 \u067e\u0631 \u06cc\u06c1 \u0645\u0637\u0644\u0628 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u0627\u06cc\u0648\u0646\u0679 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648 \u06af\u06cc\u0627 \u06c1\u06d2\u060c \u0628\u0644\u06a9\u06c1 \u06cc\u06c1 \u06a9\u06c1 \u0644\u0648\u06a9\u06cc \u06cc\u0627 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u063a\u0627\u0626\u0628 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-72-verify-prometheus-loki-and-grafana-before-opening-dashboards\">7.2: Prometheus\u060c Loki\u060c \u0627\u0648\u0631 Grafana \u06a9\u0648 \u0686\u06cc\u06a9 \u06a9\u0631\u0646\u0627 (\u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u06a9\u06be\u0648\u0644\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2)<\/h3>\n<p>\u0627\u0633 \u0628\u0627\u062a \u06a9\u0627 \u062a\u0639\u06cc\u0646 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u06c1 \u067e\u06cc\u0646\u0644 \u06a9\u06d2 \u062e\u0627\u0644\u06cc \u06c1\u0648\u0646\u06d2 \u067e\u0631 \u06a9\u0646 \u067e\u0631\u062a\u0648\u06ba \u06a9\u0648 \u0646\u0642\u0635\u0627\u0646 \u067e\u06c1\u0646\u0686\u0627 \u06c1\u06d2\u060c \u062f\u0631\u062c \u0630\u06cc\u0644 \u062a\u06cc\u0646 \u0686\u06cc\u06a9\u0633 \u0686\u0644\u0627\u0626\u06cc\u06ba:<\/p>\n<h4 id=\"heading-check-1-prometheus-has-kyverno-metrics\">\u0686\u06cc\u06a9 1: \u067e\u0631\u0648\u0645\u06cc\u062a\u06be\u06cc\u0633 \u06a9\u06d2 \u067e\u0627\u0633 \u06a9\u06cc\u0648\u0631\u0646\u0648 \u0645\u06cc\u0679\u0631\u06a9\u0633 \u06c1\u06cc\u06ba\u06d4<\/h4>\n<pre><code class=\"language-bash\">kubectl exec -n monitoring deploy\/kube-prometheus-stack-grafana -c grafana -- \n  wget -qO- 'http:\/\/kube-prometheus-stack-prometheus.monitoring:9090\/api\/v1\/query?query=kyverno_admission_requests_total' 2>\/dev\/null \n  | head -c 400\n<\/code><\/pre>\n<p>(Prometheus \u0627\u06cc\u06a9 StatefulSet pod \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0686\u0644\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u0646\u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0633\u0648\u0627\u0644\u0627\u062a Grafana \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 Prometheus \u06a9\u06cc \u062e\u062f\u0645\u062a \u0645\u06cc\u06ba \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4)<\/p>\n<p><strong>\u0645\u062a\u0648\u0642\u0639:<\/strong> JSON <code>\"status\":\"success\"<\/code> \u0627\u0648\u0631 <code>\"metric\"<\/code> \u0628\u0644\u0627\u06a9 (\u0642\u062f\u0631 \u06c1\u06d2 <code>0<\/code> \u00a77.4 \u062c\u0628 \u062a\u06a9 \u062e\u0644\u0627\u0641 \u0648\u0631\u0632\u06cc \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u06cc)\u06d4<\/p>\n<p>\u0627\u06af\u0631 \u0622\u067e \u062f\u06cc\u06a9\u06be\u062a\u06d2 \u06c1\u06cc\u06ba <code>\"status\":\"success\"<\/code> \u0644\u06cc\u06a9\u0646 <code>\"result\":[]<\/code>Prometheus \u0634\u0631\u0648\u0639 \u06c1\u0648 \u0686\u06a9\u0627 \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 Kyverno \u0646\u06d2 \u0627\u0628\u06be\u06cc \u062a\u06a9 \u0627\u0633 \u06a9\u0627 \u062f\u0627\u062e\u0644\u06c1 \u0631\u06cc\u06a9\u0627\u0631\u0688 \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0644\u06cc\u0628 \u06a9\u06d2 \u0633\u0627\u0645\u0646\u06d2 \u0679\u06be\u06cc\u06a9 \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-check-2-loki-has-falco-logs\">\u0686\u06cc\u06a9 2: \u0644\u0648\u06a9\u06cc \u06a9\u06d2 \u067e\u0627\u0633 \u0641\u0627\u0644\u06a9\u0648 \u0644\u0627\u06af \u06c1\u06cc\u06ba\u06d4<\/h4>\n<pre><code class=\"language-bash\">kubectl exec -n monitoring loki-0 -- wget -qO- \n  'http:\/\/127.0.0.1:3100\/loki\/api\/v1\/labels' 2>\/dev\/null | head -c 300\n<\/code><\/pre>\n<p><strong>\u0645\u062a\u0648\u0642\u0639:<\/strong> JSON \u0641\u06c1\u0631\u0633\u062a \u0644\u06cc\u0628\u0644 \u0627\u0633 \u0637\u0631\u062d: <code>\"namespace\"<\/code> (\u0627\u0648\u0631 \u0641\u0627\u0644\u06a9\u0648 \u0627\u06cc\u0648\u0646\u0679 \u06a9\u06d2 \u0628\u0639\u062f <code>\"falco\"<\/code> \u0644\u06cc\u0628\u0644 \u06a9\u06cc \u0642\u06cc\u0645\u062a \u0645\u06cc\u06ba)\u06d4<\/p>\n<p>\u0627\u06cc\u06a9 \u0641\u0648\u0631\u06cc \u0644\u0627\u06af \u062a\u0644\u0627\u0634 (\u00a77.4 \u0645\u0634\u0642 B \u062a\u06a9 \u062e\u0627\u0644\u06cc \u0644\u0627\u0626\u0646\u06cc\u06ba \u0648\u0627\u067e\u0633 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba):<\/p>\n<pre><code class=\"language-bash\">kubectl exec -n monitoring loki-0 -- wget -qO- \n  'http:\/\/127.0.0.1:3100\/loki\/api\/v1\/query?query=%7Bnamespace%3D%22falco%22%7D&limit=3' 2>\/dev\/null \n  | head -c 500\n<\/code><\/pre>\n<p><strong>\u0645\u062a\u0648\u0642\u0639:<\/strong> <code>\"status\":\"success\"<\/code>. <code>\"result\":[]<\/code> \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 \u0644\u0648\u06a9\u06cc \u06a9\u06d2 \u067e\u0627\u0633 \u0627\u0628\u06be\u06cc \u062a\u06a9 Falco \u0644\u0627\u0626\u0646 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u060c \u062c\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 \u06cc\u06c1 \u0679\u0648\u0679\u06cc \u06c1\u0648\u0626\u06cc \u0644\u0648\u06a9\u06cc \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-check-3-grafana-imported-clearledger-dashboards\">\u0686\u06cc\u06a9 3: \u06af\u0631\u0627\u0641\u0627\u0646\u0627 \u0646\u06d2 ClearLedger \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u062f\u0631\u0622\u0645\u062f \u06a9\u06cc\u0627 \u06c1\u06d2\u06d4<\/h4>\n<pre><code class=\"language-bash\">curl -s -u admin:admin123 'http:\/\/grafana.local\/api\/search?tag=clearledger' | jq -r '.[].title'\n<\/code><\/pre>\n<p><strong>\u0645\u062a\u0648\u0642\u0639: 6 \u0639\u0646\u0648\u0627\u0646\u0627\u062a:<\/strong><\/p>\n<pre><code class=\"language-text\">ClearLedger - Compliance Posture\nClearLedger - DORA Metrics\nClearLedger - Kubernetes Audit Log Analysis\nClearLedger - Kyverno Policy Violations\nClearLedger - Security Event Timeline\nClearLedger - Service Health + Auth Security\n<\/code><\/pre>\n<p>\u06cc\u0627 UI \u0645\u06cc\u06ba: \u062c\u0627\u0624\u06d4 \u06a9\u0648<strong>\u0688\u06cc\u0634 \u0628\u0648\u0631\u0688<\/strong> \u067e\u06be\u0631 \u0679\u06cc\u06af\u0632 \u06a9\u0648 \u0641\u0644\u0679\u0631 \u06a9\u0631\u06cc\u06ba\u06d4 <code>clearledger<\/code>. \u0622\u067e \u06a9\u0648 \u0628\u0627\u0644\u06a9\u0644 \u0645\u0646\u062f\u0631\u062c\u06c1 \u0630\u06cc\u0644 6 \u062f\u06cc\u06a9\u06be\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2 (\u06a9\u0648\u0626\u06cc \u0646\u0627\u0645 \u063a\u0627\u0626\u0628 \u0646\u06c1\u06cc\u06ba):<\/p>\n<h3 id=\"heading-73-your-first-10-minutes-in-grafana\">7.3: \u06af\u0631\u0627\u0641\u0627\u0646\u0627 \u0645\u06cc\u06ba \u067e\u06c1\u0644\u06d2 10 \u0645\u0646\u0679<\/h3>\n<p>\u06cc\u06c1 \u0633\u06cc\u06a9\u0634\u0646 \u0635\u0631\u0641 \u0627\u06cc\u06a9 \u0679\u0648\u0631 \u06c1\u06d2\u06d4 \u06c1\u0645 \u0646\u06d2 \u0627\u0628\u06be\u06cc \u062a\u06a9 \u06a9\u0686\u06be \u062b\u0627\u0628\u062a \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u0627\u06d4<\/p>\n<p><strong>\u062a\u0645\u0627\u0645 \u0627\u0633\u0679\u06cc\u062c 7 \u06a9\u06d2 \u0627\u0635\u0648\u0644:<\/strong> \u062e\u0627\u0644\u06cc \u067e\u06cc\u0646\u0644 \u06a9\u0627 \u0639\u0627\u0645 \u0637\u0648\u0631 \u067e\u0631 \u0645\u0637\u0644\u0628 \u06cc\u06c1 \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0645\u0646\u062a\u062e\u0628 \u0648\u0642\u062a \u06a9\u06cc \u062d\u062f \u0645\u06cc\u06ba \u06a9\u0648\u0626\u06cc \u0648\u0627\u0642\u0639\u06c1 \u067e\u06cc\u0634 \u0646\u06c1\u06cc\u06ba \u0622\u06cc\u0627 \u0627\u0648\u0631 \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06cc\u06c1 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2 \u06a9\u06c1 \u06af\u0631\u0627\u0641\u0627\u0646\u0627 \u06a9\u0631\u067e\u0679 \u06c1\u06d2\u06d4 \u06c1\u0645 \u0627\u0635\u0644 \u0648\u0627\u0642\u0639\u06c1 \u00a77.4 \u0645\u06cc\u06ba \u062a\u06cc\u0627\u0631 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-step-1-open-grafana\">\u0645\u0631\u062d\u0644\u06c1 1: \u06af\u0631\u0627\u0641\u0627\u0646\u0627 \u06a9\u06be\u0648\u0644\u06cc\u06ba\u06d4<\/h4>\n<p>\u062a\u062d\u0631\u06cc\u06a9 <code>http:\/\/grafana.local<\/code> \u0627\u0648\u0631 \u0644\u0627\u06af \u0627\u0646 \u06a9\u0631\u06cc\u06ba:<\/p>\n<ul>\n<li>\n<p>\u0635\u0627\u0631\u0641 \u06a9\u0627 \u0646\u0627\u0645: <code>admin<\/code><\/p>\n<\/li>\n<li>\n<p>\u067e\u0627\u0633 \u0648\u0631\u0688: <code>admin123<\/code><\/p>\n<\/li>\n<\/ul>\n<h4 id=\"heading-step-2-set-the-time-range\">\u0645\u0631\u062d\u0644\u06c1 2: \u0648\u0642\u062a \u06a9\u06cc \u062d\u062f \u0645\u0642\u0631\u0631 \u06a9\u0631\u06cc\u06ba\u06d4<\/h4>\n<p>\u0627\u0648\u067e\u0631 \u062f\u0627\u0626\u06cc\u06ba \u0637\u0631\u0641 <strong>\u0622\u062e\u0631\u06cc 15 \u0645\u0646\u0679<\/strong>.<\/p>\n<p>\u0627\u0633 \u062a\u0631\u062a\u06cc\u0628 \u06a9\u0648 \u062a\u0645\u0627\u0645 7 \u0645\u0631\u0627\u062d\u0644 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0631\u06a9\u06be\u06cc\u06ba\u06d4 <strong>\u06af\u0632\u0634\u062a\u06c1 24 \u06af\u06be\u0646\u0679\u06d2<\/strong> \u0622\u067e \u0633\u0646\u06af\u0644 \u0646\u0648\u0688 \u0644\u06cc\u0628 VMs \u067e\u0631 \u0644\u0648\u06a9\u06cc \u06a9\u0648 \u0627\u0648\u0648\u0631\u0644\u0648\u0688 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-step-3-open-dashboards-one-at-a-time\">\u0645\u0631\u062d\u0644\u06c1 3: \u0627\u06cc\u06a9 \u0648\u0642\u062a \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u06a9\u06be\u0648\u0644\u06cc\u06ba\u06d4<\/h4>\n<p>\u0627\u06cc\u06a9 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u06a9\u06be\u0648\u0644\u06cc\u06ba\u060c \u0627\u0633\u06d2 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0631\u06cc\u06ba\u060c \u0627\u0648\u0631 \u067e\u06be\u0631 \u0627\u06af\u0644\u06d2 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u067e\u0631 \u062c\u0627\u0626\u06cc\u06ba\u06d4 \u0627\u06cc\u06a9 \u06c1\u06cc \u0648\u0642\u062a \u0645\u06cc\u06ba \u062a\u0645\u0627\u0645 \u0686\u06be \u0646\u06c1 \u06a9\u06be\u0648\u0644\u06cc\u06ba\u06d4<\/p>\n<ol>\n<li>\n<p>Kyverno \u067e\u0627\u0644\u06cc\u0633\u06cc \u06a9\u06cc \u062e\u0644\u0627\u0641 \u0648\u0631\u0632\u06cc: \u200b\u200b\u0644\u06cc\u0648\u0644 4 \u067e\u0627\u0644\u06cc\u0633\u06cc \u0628\u0644\u0627\u06a9\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u0627\u06cc\u0648\u0646\u0679 \u06a9\u06cc \u0679\u0627\u0626\u0645 \u0644\u0627\u0626\u0646: \u0627\u0633\u0679\u06cc\u062c 6 \u0645\u06cc\u06ba \u0641\u0627\u0644\u06a9\u0648 \u0627\u0644\u0631\u0679\u0633\u06d4 \u0622\u067e \u067e\u0631\u0627\u0646\u0627 \u0645\u0648\u0627\u062f \u062f\u06cc\u06a9\u06be \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>postgres<\/code> \u0644\u0627\u06af \u0679\u06cc\u0628\u0644 \u0634\u0648\u0631 \u0645\u0686\u0627 \u06c1\u0648\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0633\u0631\u0648\u0633 \u06c1\u06cc\u0644\u062a\u06be + \u062a\u0648\u062b\u06cc\u0642: \u0627\u06cc\u067e \u0679\u0631\u06cc\u0641\u06a9 \u0627\u0648\u0631 \u0644\u0627\u06af \u0627\u0646 \u06a9\u06cc \u06a9\u0648\u0634\u0634\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u062a\u0639\u0645\u06cc\u0644 \u06a9\u06cc \u062d\u06cc\u062b\u06cc\u062a: \u0622\u0688\u06cc\u0679\u0631\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u062e\u0644\u0627\u0635\u06c1 \u0646\u0638\u0631\u06cc\u06c1\u06d4 \u0633\u06a9\u06cc\u0645 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u00a77.4 \u06a9\u06d2 \u0628\u0639\u062f \u0648\u0627\u067e\u0633 \u0622\u0626\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0622\u0688\u0679 \u0644\u0627\u06af \u062a\u062c\u0632\u06cc\u06c1: \u0688\u06cc\u0632\u0627\u0626\u0646 \u06a9\u06d2 \u0644\u062d\u0627\u0638 \u0633\u06d2 MicroK8s \u067e\u0631 \u062e\u0627\u0644\u06cc (\u0622\u0688\u0679 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u0628\u0637\u0648\u0631 \u0688\u06cc\u0641\u0627\u0644\u0679 \u0641\u0639\u0627\u0644 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2)\u06d4<\/p>\n<\/li>\n<li>\n<p>DORA \u0645\u06cc\u0679\u0631\u06a9\u0633: \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u0641\u0631\u06cc\u06a9\u0648\u0626\u0646\u0633\u06cc \u0686\u0627\u0631\u0679\u06d4 \u0688\u06cc\u0679\u0627 \u0627\u06a9\u0679\u06be\u0627 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 CI \u0631\u0646\u0632 \u062f\u0631\u06a9\u0627\u0631 \u06c1\u06cc\u06ba\u06d4 \u062c\u0628 \u0622\u067e \u0627\u0633\u06d2 \u067e\u06c1\u0644\u06cc \u0628\u0627\u0631 \u062f\u06cc\u06a9\u06be\u06cc\u06ba \u06af\u06d2 \u062a\u0648 \u06cc\u06c1 \u062e\u0627\u0644\u06cc \u0646\u0638\u0631 \u0622 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u062e\u062a\u06cc\u0627\u0631\u06cc<\/p>\n<\/li>\n<\/ol>\n<p>\u0627\u0633 \u06af\u0627\u0626\u06cc\u0688 \u0645\u06cc\u06ba \u0645\u062e\u062a\u0635\u0631 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u06a9\u0627 \u0644\u0646\u06a9 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 \u0644\u0645\u0628\u06d2 \u0628\u06d2 \u062a\u0631\u062a\u06cc\u0628 \u0633\u0644\u06af\u0633 \u0648\u0627\u0644\u06d2 \u067e\u0631\u0627\u0646\u06d2 \u0628\u06a9 \u0645\u0627\u0631\u06a9 URLs \u0633\u06d2 \u067e\u0631\u06c1\u06cc\u0632 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u0622\u067e \u0627\u0633\u06d2 Grafana \u0645\u06cc\u06ba \u0628\u06be\u06cc \u062a\u0644\u0627\u0634 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <strong>\u0688\u06cc\u0634 \u0628\u0648\u0631\u0688<\/strong> \u067e\u06be\u0631 \u0679\u06cc\u06af\u0632 \u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba\u06d4 <code>clearledger<\/code>.<\/p>\n<h4 id=\"heading-step-4-how-to-read-what-you-see\">\u0645\u0631\u062d\u0644\u06c1 4: \u0622\u067e \u062c\u0648 \u062f\u06cc\u06a9\u06be\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0633\u06d2 \u06a9\u06cc\u0633\u06d2 \u067e\u0691\u06be\u06cc\u06ba<\/h4>\n<p>\u06af\u0631\u0627\u0641\u0627\u0646\u0627 \u067e\u06cc\u0646\u0644 \u062f\u0648 \u062c\u06af\u06c1\u0648\u06ba \u0633\u06d2 \u0688\u06cc\u0679\u0627 \u06a9\u06be\u06cc\u0646\u0686\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<ul>\n<li>\n<p><strong>\u067e\u0631\u0648\u0645\u06cc\u062a\u06be\u06cc\u0633<\/strong> \u0648\u0642\u062a \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0646\u0645\u0628\u0631 \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2\u060c \u062c\u06cc\u0633\u06d2 Kyverno \u06a9\u06cc \u062e\u0644\u0627\u0641 \u0648\u0631\u0632\u06cc\u0648\u06ba \u06a9\u06cc \u062a\u0639\u062f\u0627\u062f \u0627\u0648\u0631 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u06cc \u0634\u0631\u062d\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u067e\u062a\u06be\u0631\u06cc\u0644\u06cc<\/strong> \u0644\u0627\u06af \u0644\u0627\u0626\u0646\u0632 \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2 \u062c\u06cc\u0633\u06d2 Falco \u0648\u0627\u0631\u0646\u0646\u06af\u0632 \u0627\u0648\u0631 \u062a\u0635\u062f\u06cc\u0642\u06cc \u0633\u0631\u0648\u0633 \u06a9\u06d2 \u067e\u06cc\u063a\u0627\u0645\u0627\u062a\u06d4<\/p>\n<\/li>\n<\/ul>\n<p>\u0646\u0645\u0628\u0631\u0648\u06ba \u06a9\u0627 \u0627\u06cc\u06a9 \u0628\u0691\u0627 \u067e\u06cc\u0646\u0644 \u067e\u0648\u0686\u06be\u062a\u0627 \u06c1\u06d2\u06d4 \u06a9\u06cc\u0627 \u06cc\u06c1 \u0646\u0645\u0628\u0631 0 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u06c1\u06d2\u061f<\/p>\n<p>\u0627\u06cc\u06a9 \u0644\u0627\u0626\u0646 \u0686\u0627\u0631\u0679 \u0645\u0646\u062f\u0631\u062c\u06c1 \u0630\u06cc\u0644 \u0633\u0648\u0627\u0644\u0627\u062a \u067e\u0648\u0686\u06be\u062a\u0627 \u06c1\u06d2: \u06a9\u06cc\u0627 \u0622\u067e \u06a9\u0648 \u06a9\u0628\u06be\u06cc \u06a9\u0686\u06be \u0686\u0644\u0627\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f \u0627\u0633\u067e\u0627\u0626\u06a9 \u06c1\u0648\u0627 \u06c1\u06d2\u061f<\/p>\n<p>\u0644\u0627\u06af \u067e\u06cc\u0646\u0644 \u0627\u0635\u0644 \u0645\u062a\u0646 \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2\u060c \u062c\u06cc\u0633\u06d2 \u06a9\u06c1 \u0627\u0635\u0648\u0644 \u06a9\u0627 \u0646\u0627\u0645\u06d4 <code>CRITICAL<\/code>\u06cc\u0627 <code>Failed login attempt<\/code>.<\/p>\n<p>\u0627\u06af\u0631 \u0635\u0631\u0641 \u0644\u0627\u06af \u067e\u06cc\u0646\u0644 \u0638\u0627\u06c1\u0631 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 <code>connection refused<\/code>\u0644\u0648\u06a9\u06cc \u06a9\u0648 \u00a77.1 \u0645\u06cc\u06ba \u062f\u0648\u0628\u0627\u0631\u06c1 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u06af\u0631 \u0646\u0645\u0628\u0631 \u067e\u06cc\u0646\u0644 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0644\u06cc\u06a9\u0646 \u0644\u0627\u06af \u067e\u06cc\u0646\u0644 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u0645\u0633\u0626\u0644\u06c1 \u063a\u0627\u0644\u0628\u0627\u064b \u0644\u0648\u06a9\u06cc \u06a9\u0627 \u06c1\u06d2 \u0646\u06c1 \u06a9\u06c1 \u062e\u0648\u062f \u06af\u0631\u0627\u0641\u0627\u0646\u0627\u06d4<\/p>\n<h4 id=\"heading-step-5-move-on\">\u0645\u0631\u062d\u0644\u06c1 5: \u062c\u0627\u0631\u06cc \u0631\u06a9\u06be\u06cc\u06ba<\/h4>\n<p>\u0688\u06cc\u0634 \u0628\u0648\u0631\u0688\u0632 1-3 \u06a9\u06be\u0648\u0644\u06cc\u06ba\u060c \u067e\u06be\u0631 \u00a77.4 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062c\u0627\u0631\u06cc \u0631\u06a9\u06be\u06cc\u06ba\u06d4<\/p>\n<p>\u06cc\u06c1\u0627\u06ba \u0633\u06d2 \u0622\u067e \u0679\u0631\u0645\u06cc\u0646\u0644 \u0645\u06cc\u06ba \u06a9\u0645\u0627\u0646\u0688\u0632 \u0686\u0644\u0627 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0635\u0644 \u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u0627\u06cc\u0648\u0646\u0679\u0633 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u067e\u06cc\u0646\u0644 \u0627\u067e \u0688\u06cc\u0679 \u062f\u06cc\u06a9\u06be \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-74-hands-on-lab-terminal-dashboard-proof\">7.4: \u06c1\u06cc\u0646\u0688 \u0622\u0646 \u0644\u06cc\u0628: \u0679\u0631\u0645\u06cc\u0646\u0644 \u2192 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u067e\u0631\u0648\u0641<\/h3>\n<p>\u06cc\u06c1 \u0628\u0646\u06cc\u0627\u062f\u06cc \u0633\u06cc\u06a9\u06be\u0646\u06d2 \u06a9\u0627 \u0633\u06cc\u06a9\u0634\u0646 \u06c1\u06d2\u06d4 \u06c1\u0631 \u0645\u0634\u0642 \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u06a9\u0645\u0627\u0646\u0688 \u0686\u0644\u0627\u0626\u06cc\u06ba\u060c \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u06cc\u06ba\u060c \u0627\u0648\u0631 \u06af\u0631\u0627\u0641\u0627\u0646\u0627 \u0645\u06cc\u06ba \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p><strong>\u0679\u0627\u0626\u0645\u0646\u06af:<\/strong> \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u0648 <strong>30~90 \u0633\u06cc\u06a9\u0646\u0688<\/strong> Prometheus scraping \u0627\u0648\u0631 Loki \u062c\u0645\u0639 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u0626\u06d2 \u06c1\u0631 \u062d\u06a9\u0645 \u06a9\u06d2 \u0628\u0639\u062f.<\/p>\n<h3 id=\"heading-two-ways-to-do-this-lab\">\u0627\u0633 \u0645\u0634\u0642 \u06a9\u0648 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u062f\u0648 \u0637\u0631\u06cc\u0642\u06d2<\/h3>\n<h4 id=\"heading-option-1-follow-the-exercises-below-recommended-for-learning\">\u0622\u067e\u0634\u0646 1: \u0646\u06cc\u0686\u06d2 \u062f\u06cc \u06af\u0626\u06cc \u0648\u0627\u06a9 \u062a\u06be\u0631\u0648 \u067e\u0631 \u0639\u0645\u0644 \u06a9\u0631\u06cc\u06ba (\u0633\u06cc\u06a9\u06be\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062a\u062c\u0648\u06cc\u0632 \u06a9\u0631\u062f\u06c1)<\/h4>\n<p>\u06c1\u0631 \u06a9\u0645\u0627\u0646\u0688 \u06a9\u0648 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0686\u0644\u0627\u0626\u06cc\u06ba \u0627\u0648\u0631 \u067e\u06be\u0631 \u06af\u0631\u0627\u0641\u0627\u0646\u0627 \u06a9\u0648 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0645\u0634\u0642\u06cc\u06ba A\u060c B \u0627\u0648\u0631 C \u06c1\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-option-2-use-the-guided-script\">\u0622\u067e\u0634\u0646 2: \u06af\u0627\u0626\u06cc\u0688\u0688 \u0627\u0633\u06a9\u0631\u067e\u0679 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/h4>\n<p>\u0627\u0633\u06a9\u0631\u067e\u0679 \u0627\u0646\u06c1\u06cc \u0645\u0631\u0627\u062d\u0644 \u06a9\u0648 \u0686\u0644\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u062a\u0648\u0642\u0641 \u06a9\u0631 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u060c \u06af\u0631\u0627\u0641\u0627\u0646\u0627 \u06a9\u0648 \u0627\u0646 \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u0686\u06cc\u06a9 \u06a9\u0631\u0646\u06d2 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\">bash stages\/stage-7-observability\/scripts\/generate-dashboard-data.sh\n<\/code><\/pre>\n<p>\u06cc\u0627:<\/p>\n<pre><code class=\"language-bash\">make demo-7\n<\/code><\/pre>\n<p>\u062f\u0648\u0646\u0648\u06ba \u062d\u06a9\u0645 \u0627\u06cc\u06a9 \u06c1\u06cc \u06a9\u0627\u0645 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u0633\u06a9\u0631\u067e\u0679 \u06a9\u0686\u06be \u0627\u0633 \u0637\u0631\u062d \u06a9\u06c1\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \"Kyverno \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u06a9\u0648 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u067e\u06be\u0631 Enter \u062f\u0628\u0627\u0626\u06cc\u06ba\"\u06d4 \u06af\u0631\u0627\u0641\u0627\u0646\u0627 \u067e\u0631 \u0633\u0648\u0626\u0686 \u06a9\u0631\u06cc\u06ba\u060c \u067e\u06cc\u0646\u0644 \u062f\u06cc\u06a9\u06be\u06cc\u06ba\u060c \u067e\u06be\u0631 \u0648\u0627\u067e\u0633 \u0622\u0626\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0646\u0679\u0631 \u062f\u0628\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<p><strong>\u06a9\u06cc\u0627 \u0622\u067e \u0686\u0627\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba \u06a9\u06c1 \u06cc\u06c1 \u0628\u063a\u06cc\u0631 \u06a9\u0633\u06cc \u0631\u06a9\u0627\u0648\u0679 \u06a9\u06d2 \u0686\u0644\u06d2\u061f<\/strong> (\u0622\u067e \u06a9\u06d2 \u06c1\u0627\u062a\u06be\u0648\u06ba \u067e\u0631 \u062a\u06cc\u0632 \u0627\u0648\u0631 \u06a9\u0645)<\/p>\n<pre><code class=\"language-bash\">SKIP_PROMPT=1 make demo-7\n<\/code><\/pre>\n<p>\u06c1\u0631 \u0642\u062f\u0645 \u06a9\u0648 \u0633\u0645\u062c\u06be\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0622\u067e\u0634\u0646 1 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u0622\u067e \u0645\u0634\u0642 \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0648 \u0622\u067e\u0634\u0646 2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 <code>SKIP_PROMPT=1<\/code> \u0627\u06af\u0631 \u0622\u067e \u062a\u06cc\u0632\u06cc \u0633\u06d2 \u0688\u06cc\u0679\u0627 \u0628\u0646\u0627\u0646\u0627 \u0686\u0627\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-exercise-a-kyverno-block-prometheus-kyverno-dashboard\">\u0645\u0634\u0642 A: Kyverno Block \u2192 Prometheus \u2192 Kyverno Dashboard<\/h4>\n<p><strong>\u0679\u0631\u0645\u06cc\u0646\u0644<\/strong>: \u0645\u0631\u062d\u0644\u06c1 4 \u067e\u0627\u0644\u06cc\u0633\u06cc \u06a9\u06cc \u062e\u0644\u0627\u0641 \u0648\u0631\u0632\u06cc \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u067e\u0648\u0688\u0632 \u06a9\u0648 \u0646\u0627\u0641\u0630 \u06a9\u0631\u06cc\u06ba (\u0631\u0648\u0679 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0686\u0644\u0627\u0626\u06cc\u06ba)\u06d4<\/p>\n<pre><code class=\"language-bash\">cat <<'YAML' | kubectl apply -f -\napiVersion: v1\nkind: Pod\nmetadata:\n  name: stage7-kyverno-lab\n  namespace: clearledger\nspec:\n  containers:\n    - name: test\n      image: nginx:alpine\nYAML\n<\/code><\/pre>\n<p><strong>\u06cc\u06c1 \u06a9\u06cc\u0633\u06d2 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u0622\u06cc\u0627 \u0627\u0633 \u0646\u06d2 \u06a9\u0627\u0645 \u06a9\u06cc\u0627:<\/strong><\/p>\n<p>\u06c1\u0645 \u062c\u0627\u0646\u0686 \u06a9\u0631 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba \u06a9\u06c1 \u0622\u06cc\u0627 \u06cc\u06c1 Kyverno \u06c1\u06d2\u06d4 <strong>\u0628\u0644\u0627\u06a9<\/strong> \u062c\u0627\u0646 \u0628\u0648\u062c\u06be \u06a9\u0631 \u0628\u0631\u0627 \u067e\u06be\u0644\u06cc. \u06a9\u0627\u0645\u06cc\u0627\u0628\u06cc \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u0641\u0648\u0631\u0688 <strong>\u06a9\u0628\u06be\u06cc \u0646\u06c1\u06cc\u06ba \u0628\u0646\u0627\u06cc\u0627<\/strong>.<\/p>\n<p><strong>\u067e\u0627\u0633 \u0622\u067e \u06a9\u0648 \u062f\u0631\u062c \u0630\u06cc\u0644 \u06a9\u0648 \u0686\u06cc\u06a9 \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2:<\/strong><\/p>\n<ul>\n<li>\n<p>\u0679\u0631\u0645\u06cc\u0646\u0644 \u067e\u0631\u0646\u0679 \u06a9\u0631\u06d2 \u06af\u0627\u06d4 <code>Error from server<\/code> \u0627\u0648\u0631 <code>denied the request<\/code><\/p>\n<\/li>\n<li>\n<p>\u063a\u0644\u0637\u06cc \u0645\u06cc\u06ba \u0635\u062d\u06cc\u062d \u067e\u0627\u0644\u06cc\u0633\u06cc \u06a9\u0627 \u0646\u0627\u0645 \u0627\u06c1\u0645 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0622\u0624\u0679 \u067e\u0679 \u0627\u06cc\u06a9 \u0642\u0627\u0639\u062f\u06c1 \u06cc\u0627 \u0645\u062a\u0639\u062f\u062f \u0642\u0648\u0627\u0639\u062f \u06a9\u06cc \u0641\u06c1\u0631\u0633\u062a \u062f\u06d2 \u0633\u06a9\u062a\u0627 \u06c1\u06d2 (<code>disallow-root-containers<\/code>, <code>require-resource-limits<\/code>, <code>drop-all-capabilities<\/code>\u2026)\u06d4 \u0645\u0632\u06cc\u062f \u0644\u0627\u0626\u0646\u0648\u06ba \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 \u0645\u0632\u06cc\u062f \u0642\u0648\u0627\u0639\u062f \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u0626\u06d2 \u0627\u0648\u0631 \u067e\u06be\u0631 \u0628\u06be\u06cc \u06af\u0632\u0631 \u06af\u0626\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u067e\u0648\u0688 \u06a9\u0627 \u0646\u0627\u0645 \u06a9\u0644\u0633\u0679\u0631 \u0645\u06cc\u06ba \u0638\u0627\u06c1\u0631 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"language-bash\">kubectl get pods -n clearledger | grep stage7-kyverno-lab\n<\/code><\/pre>\n<p><strong>\u0645\u062a\u0648\u0642\u0639:<\/strong> \u06a9\u0648\u0626\u06cc \u0622\u0624\u0679 \u067e\u0679 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u0627\u06af\u0631 \u06cc\u06c1 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u062c\u0627\u062a\u0627 \u06c1\u06d2: \u067e\u06c1\u0644\u06d2 \u0645\u0631\u062d\u0644\u06c1 4 \u06a9\u0648 \u0631\u0648\u06a9\u06cc\u06ba \u0627\u0648\u0631 \u062f\u0631\u0633\u062a \u06a9\u0631\u06cc\u06ba\u06d4<\/strong><\/p>\n<p>\u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 Kyverno \u06a9\u0648 \u062c\u0691 \u06a9\u06cc \u067e\u06be\u0644\u06cc \u0633\u06d2 \u06af\u0632\u0631\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u0646\u0627\u06d4 \u0686\u0644\u0627\u0626\u06cc\u06ba <code>make check-4<\/code> \u0645\u0631\u062d\u0644\u06c1 7 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062c\u0627\u0631\u06cc \u0631\u06a9\u06be\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u06d4<\/p>\n<p><strong>\u0679\u0631\u0627\u0646\u0632\u0679 \u0679\u0631\u0645\u06cc\u0646\u0644 \u06a9\u06cc \u0645\u062b\u0627\u0644<\/strong> (\u0622\u067e \u06a9\u06cc \u067e\u0627\u0644\u06cc\u0633\u06cc \u0645\u06cc\u06ba \u0645\u0632\u06cc\u062f \u067e\u0627\u0644\u06cc\u0633\u06cc\u0627\u06ba \u062f\u0631\u062c \u06c1\u0648 \u0633\u06a9\u062a\u06cc \u06c1\u06cc\u06ba):<\/p>\n<pre><code class=\"language-text\">Error from server: error when creating \"STDIN\": admission webhook \"validate.kyverno.svc\" denied the request:\npolicy disallow-root-containers\/validate-run-as-non-root fail: Running as root is not allowed\n<\/code><\/pre>\n<p><strong>\u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u0626\u06cc\u06ba \u06a9\u06c1 \u067e\u0631\u0648\u0645\u06cc\u062a\u06be\u06cc\u0633 \u0646\u06d2 \u0627\u0633\u06d2 \u062f\u06cc\u06a9\u06be\u0627 \u06c1\u06d2\u06d4<\/strong> (\u0627\u062e\u062a\u06cc\u0627\u0631\u06cc\u060c \u0644\u06cc\u06a9\u0646 \u0627\u06af\u0631 \u06af\u0631\u0627\u0641\u0627\u0646\u0627 \u062e\u0627\u0644\u06cc \u06c1\u0648 \u062a\u0648 \u0645\u0641\u06cc\u062f):<\/p>\n<pre><code class=\"language-bash\">kubectl exec -n monitoring deploy\/kube-prometheus-stack-grafana -c grafana -- \n  wget -qO- 'http:\/\/kube-prometheus-stack-prometheus.monitoring:9090\/api\/v1\/query?query=kyverno_admission_requests_total{request_allowed=\"false\"}' 2>\/dev\/null \n  | grep -o '\"value\":[[^]]*]' | head -3\n<\/code><\/pre>\n<p><strong>\u0645\u062a\u0648\u0642\u0639:<\/strong> \u06a9\u0648\u0626\u06cc \u0631\u0627\u0633\u062a\u06c1 \u0646\u06c1\u06cc\u06ba <code>\"value\"<\/code> \u062d\u0627\u0644\u06cc\u06c1 \u06cc\u0648\u0646\u06a9\u0633 \u0679\u0627\u0626\u0645 \u0627\u0633\u0679\u06cc\u0645\u067e \u0627\u0648\u0631 \u0646\u0645\u0628\u0631\u0632 \u067e\u0631 \u0645\u0634\u062a\u0645\u0644 \u0622\u0626\u0679\u0645\u0632 <strong>0 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1<\/strong> (\u0645\u062b\u0627\u0644 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 <code>\"value\":[..., \"1\"]<\/code>)\u06d4 \u0627\u0633 \u06a9\u0648 \u062f\u06cc\u06a9\u06be\u062a\u06d2 \u06c1\u0648\u0626\u06d2\u060c Kyverno \u0627\u0648\u0631 Prometheus \u06a9\u0627\u0645 \u06a9\u0631 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba \u06cc\u06c1\u0627\u06ba \u062a\u06a9 \u06a9\u06c1 \u062c\u0628 Grafana \u067e\u06cc\u0646\u0644 \u06a9\u06c1\u062a\u0627 \u06c1\u06d2: <strong>\u06a9\u0648\u0626\u06cc \u0688\u06cc\u0679\u0627 \u0646\u06c1\u06cc\u06ba<\/strong>.<\/p>\n<p><strong>\u06af\u0631\u0627\u0641\u0627\u0646\u0627<\/strong>: Kyverno \u067e\u0627\u0644\u06cc\u0633\u06cc \u06a9\u06cc \u06a9\u06be\u0644\u06cc \u062e\u0644\u0627\u0641 \u0648\u0631\u0632\u06cc\u06d4<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/07\/1785194532_846_Homelab-\u0633\u06d2-AWS-\u062a\u06a9-\u067e\u0631\u0648\u0688\u06a9\u0634\u0646-\u06a9\u06d2-\u0644\u06cc\u06d2-\u062a\u06cc\u0627\u0631-DevSecOps-\u067e\u0644\u06cc\u0679.png\" alt=\"Kyverno \u067e\u0627\u0644\u06cc\u0633\u06cc \u06a9\u06cc \u062e\u0644\u0627\u0641 \u0648\u0631\u0632\u06cc \u06a9\u0627 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679\" style=\"display:block;margin:0 auto\" width=\"1325\" height=\"1288\" loading=\"lazy\" title=\"\"><\/p>\n<p><strong>\u0622\u067e \u06a9\u06cc\u0627 \u062b\u0627\u0628\u062a \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba:<\/strong> \u0622\u062e\u0631\u06cc \u0631\u062f\u0650 \u0639\u0645\u0644 \u06af\u0631\u0627\u0641\u0627\u0646\u0627 \u0645\u06cc\u06ba \u0638\u0627\u06c1\u0631 \u06c1\u0648\u0627\u06d4 \u062a\u0645\u0627\u0645 \u067e\u06cc\u0646\u0644\u0632 \u06a9\u0648 \u0622\u0646 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0622\u067e \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2 <strong>\u0627\u06cc\u06a9 \u0648\u0627\u0636\u062d \u0646\u0634\u0627\u0646\u06cc<\/strong> Kyverno \u0628\u0644\u0627\u06a9\u0633 \u06a9\u0627 \u062d\u0633\u0627\u0628 \u0644\u06af\u0627\u06cc\u0627 \u062c\u0627 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u0645\u0631\u062d\u0644\u06c1 1: \u0641\u0648\u0631\u06cc \u062d\u06cc\u062b\u06cc\u062a \u06a9\u06cc \u062c\u0627\u0646\u0686 (\u0627\u0648\u067e\u0631 \u06a9\u06cc \u0642\u0637\u0627\u0631\u060c \u0628\u0627\u0626\u06cc\u06ba \u0633\u06d2 \u062f\u0627\u0626\u06cc\u06ba)<\/strong><\/p>\n<ol>\n<li>\n<p><strong>\u067e\u0627\u0644\u06cc\u0633\u06cc \u06a9\u06cc \u062e\u0644\u0627\u0641 \u0648\u0631\u0632\u06cc (\u0648\u0642\u062a \u06a9\u06cc \u062d\u062f)<\/strong>: \u0628\u0691\u06cc \u062a\u0639\u062f\u0627\u062f \u067e\u0627\u0633 \u0634\u062f\u06c1: 1 \u06cc\u0627 \u0632\u06cc\u0627\u062f\u06c1 \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0646\u0627\u06a9\u0627\u0645 \u06a9\u06c1\u062a\u0627 \u06c1\u06d2: \u06a9\u0648\u0626\u06cc \u0688\u06cc\u0679\u0627 \u0646\u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u062e\u0644\u0627\u0641 \u0648\u0631\u0632\u06cc (\u0648\u0642\u062a \u06a9\u06cc \u062d\u062f)<\/strong>: \u0627\u06cc\u06a9 \u06c1\u06cc \u062e\u06cc\u0627\u0644\u060c \u062f\u0648\u0633\u0631\u0627 \u06a9\u0627\u0624\u0646\u0679\u0631\u06d4 \u067e\u0627\u0633: 1 \u06cc\u0627 \u0627\u0633 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0641\u0639\u0627\u0644 Kyverno \u0642\u0648\u0627\u0639\u062f<\/strong> \u2014 \u0639\u0627\u0645 \u0637\u0648\u0631 \u067e\u0631 18\u06d4 \u062c\u0628 \u06cc\u06c1 \u0646\u0645\u0628\u0631 \u0638\u0627\u06c1\u0631 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u060c \u06af\u0631\u0627\u0641\u0627\u0646\u0627 \u067e\u0631\u0648\u0645\u06cc\u062a\u06be\u06cc\u0626\u0633 \u0633\u06d2 \u0628\u0627\u062a \u06a9\u0631 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0628\u06be\u06cc \u0627\u0686\u06be\u0627 \u06c1\u06d2 \u0627\u06af\u0631 \u067e\u06c1\u0644\u06d2 \u062f\u0648 \u067e\u06cc\u0646\u0644 \u0627\u0628\u06be\u06cc \u0628\u06be\u06cc \u062e\u0627\u0644\u06cc \u06c1\u0648\u06ba\u06d4<\/p>\n<\/li>\n<\/ol>\n<p><strong>\u0645\u0631\u062d\u0644\u06c1 2: \u0627\u06af\u0631 \u0627\u0648\u067e\u0631 \u06a9\u06d2 \u062f\u0648 \u0646\u0645\u0628\u0631 \u0622\u067e \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0686\u0627\u0631\u0679 \u06a9\u0648 \u0627\u0633\u06a9\u06cc\u0646 \u06a9\u0631\u06cc\u06ba\u06d4<\/strong><\/p>\n<ul>\n<li>\n<p><strong>\u0648\u0633\u0627\u0626\u0644 \u06a9\u06cc \u0642\u0633\u0645 \u06a9\u06d2 \u0644\u062d\u0627\u0638 \u0633\u06d2 \u062e\u0644\u0627\u0641 \u0648\u0631\u0632\u06cc \u06a9\u06cc \u0634\u0631\u062d<\/strong> (\u062f\u0631\u0645\u06cc\u0627\u0646\u06cc \u0686\u0627\u0631\u0679): \u062f\u0648\u0691\u062a\u06d2 \u0648\u0642\u062a\u060c Pod \u06a9\u06d2 \u0644\u06cc\u0628\u0644 \u0648\u0627\u0644\u06d2 bumps \u06a9\u0648 \u062f\u06cc\u06a9\u06be\u06cc\u06ba\u06d4 <code>kubectl apply<\/code>.<\/p>\n<\/li>\n<li>\n<p><strong>\u0633\u0628 \u0633\u06d2 \u0627\u0648\u067e\u0631 \u0645\u0633\u062f\u0648\u062f \u0648\u0633\u0627\u0626\u0644 \u06a9\u06cc \u0627\u0642\u0633\u0627\u0645<\/strong> (\u0646\u06cc\u0686\u06d2 \u0679\u06cc\u0628\u0644 \u0628\u0627\u0626\u06cc\u06ba): \u067e\u0648\u0688 \u0642\u0637\u0627\u0631 \u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0646\u0627\u0645 \u06a9\u06cc \u062c\u06af\u06c1 \u06a9\u06cc \u062e\u0644\u0627\u0641 \u0648\u0631\u0632\u06cc\u0627\u06ba (\u0631\u062c\u062d\u0627\u0646\u0627\u062a)<\/strong> (\u0646\u06cc\u0686\u06d2 \u062f\u0627\u0626\u06cc\u06ba \u0686\u0627\u0631\u0679): Clearledger \u06a9\u06d2 \u0644\u06cc\u06d2 bumps \u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ul>\n<p>\u0686\u0627\u0631\u0679\u0633 \u0645\u06cc\u06ba \u062a\u0627\u062e\u06cc\u0631 \u06c1\u0648 \u0633\u06a9\u062a\u06cc \u06c1\u06d2\u06d4 \u0645\u0631\u062d\u0644\u06c1 1 \u0645\u06cc\u06ba\u060c \u0622\u06af\u06d2 \u0628\u0691\u06be\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 0 \u0633\u06d2 \u0628\u0691\u0627 \u0646\u0645\u0628\u0631 \u06a9\u0627\u0641\u06cc \u06c1\u06d2\u06d4 \u0686\u0627\u0631\u0679 \u00a77.6 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0628\u0648\u0646\u0633 \u06a9\u0627 \u062b\u0628\u0648\u062a \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u0627\u06af\u0631 \u0627\u0648\u067e\u0631 \u0648\u0627\u0644\u06d2 \u062f\u0648 \u067e\u06cc\u0646\u0644 \u06a9\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba \u06a9\u06c1 '\u06a9\u0648\u0626\u06cc \u0688\u06cc\u0679\u0627 \u0646\u06c1\u06cc\u06ba' \u0644\u06cc\u06a9\u0646 \u0679\u0631\u0645\u06cc\u0646\u0644 \u0645\u0633\u062a\u0631\u062f \u06a9\u0627\u0645 \u06a9\u0631 \u0631\u06c1\u0627 \u06c1\u06d2:<\/strong><\/p>\n<p>\u06cc\u06c1 \u0639\u0627\u0645 \u0628\u0627\u062a \u06c1\u06d2\u06d4 \u0648\u06c1 \u067e\u06cc\u0646\u0644 \u0627\u06c1\u0645 \u06c1\u06d2\u06d4 <strong>\u0646\u06cc\u0627<\/strong> \u06cc\u06c1 \u0627\u0633 \u0645\u062f\u062a \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646 \u0645\u0633\u062a\u0631\u062f \u06c1\u0648\u0646\u06d2 \u06a9\u06cc \u062a\u0639\u062f\u0627\u062f \u06c1\u06d2\u060c \u0631\u06cc\u06a9\u0627\u0631\u0688 \u06a9\u06cc \u06af\u0626\u06cc \u06a9\u0644 \u062a\u0639\u062f\u0627\u062f \u0646\u06c1\u06cc\u06ba\u06d4 \u06af\u0631\u0627\u0641\u0627\u0646\u0627 \u06a9\u06d2 \u062c\u0648\u0627\u0628\u06cc \u0627\u0642\u062f\u0627\u0645 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06a9\u0628\u06be\u06cc \u06a9\u0628\u06be\u06cc \u067e\u0631\u0648\u0645\u06cc\u062a\u06be\u06cc\u0633 \u06a9\u0648 \u0627\u06cc\u06a9 \u0631\u062f \u0639\u0645\u0644 \u0645\u0644 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0633\u06d2 \u0622\u0632\u0645\u0627\u0626\u06cc\u06ba:<\/p>\n<ol>\n<li>\n<p>\u0627\u0633\u06cc \u0637\u0631\u062d \u0686\u0644\u0627\u0626\u06cc\u06ba <code>kubectl apply<\/code> \u062f\u0648\u0628\u0627\u0631\u06c1 \u062d\u06a9\u0645 (\u062f\u0648\u0628\u0627\u0631\u06c1 \u0645\u0633\u062a\u0631\u062f\u060c \u062c\u0633 \u06a9\u06cc \u062a\u0648\u0642\u0639 \u06c1\u06d2)\u06d4<\/p>\n<\/li>\n<li>\n<p>60 \u0633\u06cc\u06a9\u0646\u0688 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0631\u06cc\u0641\u0631\u06cc\u0634 \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba (\u0633\u0631\u06a9\u0644\u0631 \u062a\u06cc\u0631\u060c \u0627\u0648\u067e\u0631 \u062f\u0627\u0626\u06cc\u06ba)\u06d4<\/p>\n<\/li>\n<\/ol>\n<p>\u062f\u0648\u0633\u0631\u06d2 \u0645\u0633\u062a\u0631\u062f \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f\u060c \u0622\u067e \u06a9\u0648 \u0627\u0639\u062f\u0627\u062f \u0648 \u0634\u0645\u0627\u0631 \u06a9\u06d2 \u0627\u0648\u067e\u0631\u06cc \u067e\u06cc\u0646\u0644 \u0645\u06cc\u06ba 2 \u0646\u0638\u0631 \u0622\u0626\u06d2 \u06af\u0627\u06d4 \u00a77.6 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679\u06d4<\/p>\n<p><strong>\u06a9\u06cc\u0627 \u06cc\u06c1 \u0627\u0628 \u0628\u06be\u06cc \u062e\u0627\u0644\u06cc \u06c1\u06d2\u061f \u0627\u06cc\u06a9\u0633\u067e\u0644\u0648\u0631 \u06a9\u0648 \u0627\u067e\u0646\u06d2 \u0628\u06cc\u06a9 \u0627\u067e \u062b\u0628\u0648\u062a \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/strong><\/p>\n<ol>\n<li>\n<p>\u06af\u0631\u0627\u0641\u0627\u0646\u0627 \u0628\u0627\u0626\u06cc\u06ba \u0645\u06cc\u0646\u0648 \u2192 \u0646\u06cc\u0648\u06cc\u06af\u06cc\u0634\u0646<\/p>\n<\/li>\n<li>\n<p>\u0688\u06cc\u0679\u0627 \u0645\u0627\u062e\u0630: \u067e\u0631\u0648\u0645\u06cc\u062a\u06be\u06cc\u0633<\/p>\n<\/li>\n<li>\n<p>\u06af\u0648\u0646\u062f\u06be\u0646\u0627: <code>sum(kyverno_admission_requests_total{request_allowed=\"false\"})<\/code><\/p>\n<\/li>\n<li>\n<p>Query \u0686\u0644\u0627\u0626\u06cc\u06ba \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ol>\n<p><strong>\u067e\u0627\u0633:<\/strong> \u0646\u062a\u06cc\u062c\u06c1 1 \u06cc\u0627 2 \u06c1\u06d2\u06d4<\/p>\n<p>\u0646\u06cc\u0648\u06cc\u06af\u06cc\u0634\u0646 \u06a9\u06d2 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679\u0633 \u0627\u0648\u0631 \u0679\u0631\u0645\u06cc\u0646\u0644 \u0645\u0633\u062a\u0631\u062f \u06c1\u0648\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0646\u0645\u0628\u0631\u0648\u06ba \u06a9\u0648 0 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u062f\u06a9\u06be\u0627\u0646\u0627 \u067e\u0648\u0631\u0679 \u0641\u0648\u0644\u06cc\u0648 \u062b\u0628\u0648\u062a \u0633\u0645\u062c\u06be\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0686\u0627\u06c1\u06d2 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u06a9\u06d2 \u0627\u0639\u062f\u0627\u062f\u0648\u0634\u0645\u0627\u0631 \u0633\u0633\u062a \u0631\u06c1\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-exercise-b-falco-shell-loki-security-event-timeline\">\u0645\u0634\u0642 B: Falco Shell \u2192 Loki \u2192 \u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u0627\u06cc\u0648\u0646\u0679 \u0679\u0627\u0626\u0645 \u0644\u0627\u0626\u0646<\/h4>\n<p><strong>\u0622\u067e \u06a9\u06cc\u0627 \u06a9\u0631 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba (\u0648\u06c1\u06cc \u062e\u06cc\u0627\u0644 \u062c\u06cc\u0633\u0627 \u06a9\u06c1 \u0648\u0631\u0632\u0634 A):<\/strong><\/p>\n<ul>\n<li>\n<p><strong>\u0648\u0631\u0632\u0634 A:<\/strong> \u062a\u0645 \u0646\u06d2 \u06a9\u0686\u06be \u0628\u0631\u0627 \u06a9\u06cc\u0627\u060c \u06a9\u06cc\u0648\u0631\u0646\u0648 \u0646\u06d2 \u0627\u0633\u06d2 \u0631\u0648\u06a9\u0627\u060c \u06af\u0631\u0627\u0641\u0627\u0646\u0627 \u0646\u06d2 \u0627\u0633\u06d2 \u0631\u0648\u06a9\u0627\u06d4 <strong>\u06a9\u06cc\u0628\u0631\u0646\u0648<\/strong> \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u06a9\u0648 \u0627\u067e \u0688\u06cc\u0679 \u06a9\u0631 \u062f\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0648\u0631\u0632\u0634 B:<\/strong> \u0627\u06af\u0631 \u0686\u0644\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u067e\u0648\u0688 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u06a9\u0648\u0626\u06cc \u0645\u0634\u062a\u0628\u06c1 \u0633\u0631\u06af\u0631\u0645\u06cc \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u060c \u062a\u0648 Falco \u0627\u0633 \u06a9\u0627 \u067e\u062a\u06c1 \u0644\u06af\u0627\u0626\u06d2 \u06af\u0627 \u0627\u0648\u0631 Grafana \u06a9\u0631\u06d2 \u06af\u0627\u06d4 <strong>\u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u0627\u06cc\u0648\u0646\u0679 \u06a9\u06cc \u0679\u0627\u0626\u0645 \u0644\u0627\u0626\u0646<\/strong> \u0627\u067e \u0688\u06cc\u0679 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ul>\n<p>\u0622\u067e \u0646\u06d2 \u067e\u06c1\u0644\u06d2 \u06c1\u06cc \u06cc\u06c1 \u0645\u0631\u062d\u0644\u06c1 6 \u0645\u06cc\u06ba \u06a9\u06cc\u0627 \u06c1\u06d2 (<code>make demo-6<\/code>)\u06d4 \u06c1\u0645 \u06cc\u06c1\u0627\u06ba \u06cc\u06c1 \u062b\u0627\u0628\u062a \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062f\u0648\u0628\u0627\u0631\u06c1 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u06a9\u06c1 \u0627\u0646\u062a\u0628\u0627\u06c1 Grafana \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0633\u0627\u062a\u06be Grafana \u0645\u06cc\u06ba \u0628\u06be\u06cc \u0638\u0627\u06c1\u0631 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 <code>http:\/\/falco.local<\/code>.<\/p>\n<p><strong>\u0627\u06cc\u06a9 \u0633\u0637\u0631\u06cc \u06a9\u06c1\u0627\u0646\u06cc:<\/strong> \u0641\u0631\u0636 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u0622\u067e \u0627\u0646\u062f\u0631 \u0633\u06d2 \u0634\u06cc\u0644 \u062a\u06a9 \u0631\u0633\u0627\u0626\u06cc \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062d\u0645\u0644\u06c1 \u0622\u0648\u0631 \u06c1\u06cc\u06ba\u06d4 <code>auth-service<\/code>: Falco \u06a9\u0648 \u0686\u06cc\u062e\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2 \u0627\u0648\u0631 \u0686\u06cc\u062e \u06a9\u0648 \u0679\u0627\u0626\u0645 \u0644\u0627\u0626\u0646 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u067e\u0631 \u0638\u0627\u06c1\u0631 \u06c1\u0648\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2\u06d4<\/p>\n<p><strong>\u0645\u0631\u062d\u0644\u06c1 1: \u0627\u0644\u0631\u0679 \u06a9\u0648 \u0645\u062a\u062d\u0631\u06a9 \u06a9\u0631\u06cc\u06ba (\u0679\u0631\u0645\u06cc\u0646\u0644 \u0637\u0631\u06cc\u0642\u06c1)<\/strong><\/p>\n<p>\u0627\u06cc\u06a9 \u062d\u0645\u0644\u06c1 \u0622\u0648\u0631 \u0627\u0646\u062f\u0631 \u062f\u0627\u062e\u0644 \u06c1\u0648\u0646\u06d2 \u06a9\u0627 \u0688\u0631\u0627\u0645\u06c1 \u06a9\u0631 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4 <code>auth-service<\/code> \u0645\u06cc\u06ba \u0646\u06d2 \u0627\u06cc\u06a9 \u0641\u0648\u0631\u06cc \u06a9\u0645\u0627\u0646\u0688 \u0686\u0644\u0627\u06cc\u0627 (<code>id<\/code>) \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u0622\u067e \u06a9\u0633 \u06a9\u06d2 \u0628\u0637\u0648\u0631 \u0644\u0627\u06af \u0627\u0646 \u06c1\u06cc\u06ba\u06d4 \u0645\u062c\u06be\u06d2 \u0627\u0633 \u067e\u0631 \u0634\u06a9 \u06c1\u06d2\u06d4 \u0641\u0627\u0644\u06a9\u0648 \u0646\u06d2 \u0627\u0633\u06d2 \u067e\u06a9\u0691\u0646\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0646\u06cc\u0686\u06d2 \u062f\u06cc\u0627 \u06af\u06cc\u0627 \u0628\u0644\u0627\u06a9 \u062a\u06cc\u0646 \u06a9\u0645\u0627\u0646\u0688\u0632 \u06a9\u0648 \u062a\u0631\u062a\u06cc\u0628 \u0633\u06d2 \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u067e\u0648\u0631\u06d2 \u0628\u0644\u0627\u06a9 \u06a9\u0648 \u06a9\u0627\u067e\u06cc \u0627\u0648\u0631 \u067e\u06cc\u0633\u0679 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">AUTH_POD=$(kubectl get pod -n clearledger -l app=auth-service \n  --field-selector=status.phase=Running -o jsonpath=\"{.items[0].metadata.name}\")\necho \"Using pod: $AUTH_POD\"\nkubectl exec -n clearledger \"$AUTH_POD\" -c auth-service -- \/bin\/sh -c 'id && exit'\n<\/code><\/pre>\n<p>\u06c1\u0631 \u0633\u0637\u0631 \u06a9\u0627 \u06a9\u0631\u062f\u0627\u0631 \u062f\u0631\u062c \u0630\u06cc\u0644 \u06c1\u06d2:<\/p>\n<ol>\n<li>\n<p><strong>\u0644\u0627\u0626\u0646 1<\/strong>: \u0686\u0644 \u0631\u06c1\u0627 \u0646\u0627\u0645 \u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba\u06d4 <code>auth-service<\/code> \u0627\u0633\u06d2 \u067e\u0648\u0688 \u0645\u06cc\u06ba \u0645\u062d\u0641\u0648\u0638 \u06a9\u0631\u06cc\u06ba <code>AUTH_POD<\/code>.<\/p>\n<\/li>\n<li>\n<p><strong>\u0644\u0627\u0626\u0646 2<\/strong>: \u0622\u067e \u0686\u06cc\u06a9 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u06a9\u06c1 \u0627\u0633 \u0646\u06d2 \u0627\u067e\u0646\u0627 \u0646\u0627\u0645 \u067e\u0631\u0646\u0679 \u06a9\u0631 \u06a9\u06d2 \u0679\u06be\u06cc\u06a9 \u0633\u06d2 \u06a9\u0627\u0645 \u06a9\u06cc\u0627 \u06c1\u06d2 (\u06cc\u06c1 \u062e\u0627\u0644\u06cc \u0646\u06c1\u06cc\u06ba \u06c1\u06d2)\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0644\u0627\u0626\u0646 3<\/strong>: \u067e\u06be\u0627\u0646\u0633\u06cc <code>\/bin\/sh -c 'id && exit'<\/code> <strong>\u0627\u0646\u062f\u0631<\/strong> \u0648\u06c1 \u067e\u06be\u0644\u06cc. \u06cc\u06c1 \u0627\u06cc\u06a9 \u062c\u0639\u0644\u06cc '\u062d\u0645\u0644\u06c1' \u06c1\u06d2\u06d4 \u0641\u0627\u0644\u06a9\u0648 \u0627\u0633 \u0637\u0631\u062d \u06a9\u06d2 \u062e\u0648\u0644 \u06a9\u0627 \u0645\u0634\u0627\u06c1\u062f\u06c1 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<\/ol>\n<p><strong>\u067e\u0627\u0633: \u0622\u0624\u0679 \u067e\u0679 \u06a9\u0648 \u0635\u0631\u0641 \u0627\u0646 \u062f\u0648 \u0644\u0627\u0626\u0646\u0648\u06ba \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2:<\/strong><\/p>\n<pre><code class=\"language-text\">Using pod: auth-service-77b7d9cd99-xxxxx\nuid=1000 gid=1000 groups=1000\n<\/code><\/pre>\n<p>\u0645\u0631\u062d\u0644\u06c1 1 \u0627\u0628 \u0645\u06a9\u0645\u0644 \u06c1\u0648 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4 \u067e\u06be\u0644\u06cc \u0627\u0628\u06be\u06cc \u062a\u06a9 \u0686\u0644 \u0631\u06c1\u06cc \u06c1\u06d2\u06d4 \u062a\u0645 \u0646\u06d2 \u06a9\u0686\u06be \u0646\u06c1\u06cc\u06ba \u062a\u0648\u0691\u0627\u06d4<\/p>\n<p><strong>\u0646\u0627\u06a9\u0627\u0645\u06cc: \u0645\u0631\u062d\u0644\u06c1 2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0631\u06a9\u06cc\u06ba \u0627\u0648\u0631 \u062f\u0631\u0633\u062a \u06a9\u0631\u06cc\u06ba\u06d4<\/strong><\/p>\n<p>\u0686\u0644\u0627\u0626\u06cc\u06ba <code>kubectl get pods -n clearledger -l app=auth-service<\/code> \u0627\u06af\u0631 \u0622\u067e \u06a9\u0648 \u0627\u06cc\u06a9 \u067e\u0648\u0688 \u0646\u0638\u0631 \u0622\u0626\u06d2 \u062a\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u06a9\u0648\u0634\u0634 \u06a9\u0631\u06cc\u06ba\u06d4 <strong>\u0686\u0644 \u0631\u06c1\u0627 \u06c1\u06d2<\/strong>.<\/p>\n<p><strong>\u0645\u0631\u062d\u0644\u06c1 2: \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u0622\u06cc\u0627 Falco \u0646\u06d2 \u0627\u0633\u06d2 \u062f\u06cc\u06a9\u06be\u0627 (\u0679\u0631\u0645\u06cc\u0646\u0644\u060c \u0641\u0648\u0631\u06cc \u0637\u0648\u0631 \u067e\u0631)<\/strong><\/p>\n<p>Falco \u0644\u0627\u06af\u0632 \u0627\u06cc\u06a9 \u0644\u0645\u0628\u06cc JSON \u0644\u0627\u0626\u0646 \u06c1\u06cc\u06ba\u06d4 \u067e\u0648\u0631\u06cc \u0686\u06cc\u0632 \u067e\u0691\u06be\u0646\u06d2 \u06a9\u06cc \u06a9\u0648\u0634\u0634 \u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4 \u0686\u0644\u0627\u0626\u06cc\u06ba:<\/p>\n<pre><code class=\"language-bash\">kubectl logs -n falco -l app.kubernetes.io\/name=falco --tail=50 | grep -i 'Shell spawned'\n<\/code><\/pre>\n<p><strong>\u0644\u0627\u0626\u0646 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u06a9\u06c1\u06cc\u06ba \u06af\u0632\u0631\u06cc\u06ba \u0622\u067e \u06a9\u0648 \u0627\u06cc\u06a9 \u0645\u062e\u062a\u0635\u0631 \u062c\u0645\u0644\u06c1 \u0646\u0638\u0631 \u0622\u0626\u06d2 \u06af\u0627\u06d4<\/strong><\/p>\n<pre><code class=\"language-text\">Shell spawned in ClearLedger container ... pod=auth-service-... cmd=sh -c id && exit\n<\/code><\/pre>\n<p>\u06cc\u0627 \u0627\u0635\u0648\u0644 \u06a9\u0627 \u0646\u0627\u0645:<\/p>\n<pre><code class=\"language-text\">\"rule\":\"Shell Spawned in ClearLedger Container\"\n<\/code><\/pre>\n<p><strong>\u0627\u06cc\u06a9 \u06af\u0631\u06cc\u067e \u06c1\u0679 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 \u0648\u0631\u0632\u0634 B \u0646\u06d2 \u0679\u0631\u0645\u06cc\u0646\u0644 \u0645\u06cc\u06ba \u06a9\u0627\u0645 \u06a9\u06cc\u0627\u06d4<\/strong> \u0627\u067e\u0646\u06d2 \u067e\u0648\u0631\u0679 \u0641\u0648\u0644\u06cc\u0648 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633 \u0644\u0627\u0626\u0646 \u06a9\u0648 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p><strong>\u0646\u0638\u0631 \u0627\u0646\u062f\u0627\u0632 \u06a9\u0631\u0646\u0627:<\/strong><\/p>\n<ul>\n<li>\n<p><code>Defaulted container \"falco\" out of: ...<\/code>: \u062c\u0646\u0631\u0644 \u06a9\u06cc\u0648\u0628\u06cc\u06a9\u0679\u0644 \u0634\u0648\u0631<\/p>\n<\/li>\n<li>\n<p>\u0644\u0627\u0626\u0646 \u06a9\u06cc \u0645\u0639\u0644\u0648\u0645\u0627\u062a <code>postgres-0<\/code> \u0627\u0648\u0631 <code>\/etc\/passwd<\/code>: \u0633\u0637\u062d 6 \u067e\u0633 \u0645\u0646\u0638\u0631 \u06a9\u0627 \u0634\u0648\u0631\u060c \u0679\u06cc\u0633\u0679 \u0646\u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0628\u0627\u0642\u06cc JSON (<code>output_fields<\/code>, <code>k8smeta<\/code>\u0648\u063a\u06cc\u0631\u06c1)\u06d4 \u062a\u062c\u0632\u06cc\u06c1 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u0627\u06af\u0631 grep \u06a9\u0686\u06be \u0628\u06be\u06cc \u067e\u0631\u0646\u0679 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u0627 \u06c1\u06d2:<\/strong> \u0645\u0631\u062d\u0644\u06c1 1 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0686\u0644\u0627\u0626\u06cc\u06ba\u060c 5 \u0633\u06cc\u06a9\u0646\u0688 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u06cc\u06ba\u060c \u0627\u0648\u0631 \u062f\u0648\u0628\u0627\u0631\u06c1 grep \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<p><strong>\u0645\u0631\u062d\u0644\u06c1 3: \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u0626\u06cc\u06ba \u06a9\u06c1 \u0644\u0648\u06a9\u06cc \u0646\u06d2 \u0627\u0633\u06d2 \u0645\u062d\u0641\u0648\u0638 \u06a9\u06cc\u0627 \u06c1\u06d2\u06d4 (\u067e\u06c1\u0644\u06d2 \u062a\u0642\u0631\u06cc\u0628\u0627\u064b 60 \u0633\u06cc\u06a9\u0646\u0688 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u06cc\u06ba\u06d4)<\/strong><\/p>\n<p>\u0627\u0628 \u062a\u06a9 \u06a9\u06cc \u06a9\u06c1\u0627\u0646\u06cc:<\/p>\n<p><strong>\u0645\u0631\u062d\u0644\u06c1 3 \u067e\u0648\u0686\u06be\u062a\u0627 \u06c1\u06d2:<\/strong> \u06a9\u06cc\u0627 \u0648\u06c1 \u0644\u0627\u06af \u0644\u0627\u0626\u0646 \u06a9\u0627\u0645\u06cc\u0627\u0628 \u062a\u06be\u06cc\u061f <strong>\u067e\u062a\u06be\u0631\u06cc\u0644\u06cc<\/strong> \u06af\u0631\u0627\u0641\u0627\u0646\u0627 \u06a9\u0627 \u0644\u0627\u06af \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u06cc\u0627 \u06c1\u06d2\u061f<\/p>\n<p>\u0641\u0627\u0644\u06a9\u0648 \u06af\u0631\u0627\u0641\u0627\u0646\u0627 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0628\u0627\u062a \u0686\u06cc\u062a \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u067e\u0631\u0648\u0645\u0679\u06cc\u0644 \u0641\u0627\u0644\u06a9\u0648 \u06a9\u06d2 \u0644\u0627\u06af\u0632 \u06a9\u0648 \u0644\u0648\u06a9\u06cc \u0645\u06cc\u06ba \u06a9\u0627\u067e\u06cc \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0633 \u06a9\u0627\u067e\u06cc \u0645\u06cc\u06ba 60 \u0633\u06d2 90 \u0633\u06cc\u06a9\u0646\u0688 \u0644\u06af\u06cc\u06ba \u06af\u06d2\u06d4 \u0645\u0631\u062d\u0644\u06c1 1 \u06a9\u06d2 \u0628\u0639\u062f\u060c \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0633 \u0686\u06cc\u06a9 \u06a9\u0648 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<p><strong>\u0627\u0633 \u06a9\u0645\u0627\u0646\u0688 \u0645\u06cc\u06ba \u062f\u0631\u062c \u0630\u06cc\u0644 \u0627\u0641\u0639\u0627\u0644 \u06c1\u06cc\u06ba:<\/strong><\/p>\n<p>\"\u0644\u0648\u06a9\u06cc \u06a9\u0648 \u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba Falco \u0644\u0627\u06af \u06a9\u06d2 \u0644\u06cc\u06d2 \u062c\u0633 \u0645\u06cc\u06ba \u0634\u0627\u0645\u0644 \u06c1\u06cc\u06ba: <code>Shell spawned<\/code>\u0645\u0646\u062a\u062e\u0628 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u067e\u06be\u0631 \u0635\u0631\u0641 \u0645\u0630\u06a9\u0648\u0631\u06c1 \u0644\u0627\u0626\u0646\u0648\u06ba \u06a9\u0648 \u0688\u0633\u067e\u0644\u06d2 \u06a9\u0631\u06cc\u06ba\u06d4 <code>auth-service<\/code>\"<\/p>\n<pre><code class=\"language-bash\">kubectl exec -n monitoring loki-0 -- wget -qO- \n  'http:\/\/127.0.0.1:3100\/loki\/api\/v1\/query?query=%7Bnamespace%3D%22falco%22%2Ccontainer%3D%22falco%22%7D%20%7C%3D%20%22Shell%20spawned%22&limit=3' 2>\/dev\/null \n  | grep -i 'auth-service'\n<\/code><\/pre>\n<p><strong>\u067e\u0627\u0633:<\/strong> \u0645\u062c\u06be\u06d2 \u062f\u0648\u0646\u0648\u06ba \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0644\u0627\u0626\u0646 \u0646\u0638\u0631 \u0622\u062a\u06cc \u06c1\u06d2\u06d4 <code>auth-service<\/code> \u0627\u0648\u0631 <code>Shell spawned<\/code>. \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 \u0644\u0648\u06a9\u06cc \u06a9\u0648 \u0622\u067e \u06a9\u06cc \u0648\u0627\u0631\u0646\u0646\u06af \u0645\u0644 \u062c\u0627\u0626\u06d2 \u06af\u06cc \u0627\u0648\u0631 \u06af\u0631\u0627\u0641\u0627\u0646\u0627 \u0622\u067e \u06a9\u0648 \u062f\u06a9\u06be\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u0646\u0627\u06a9\u0627\u0645\u06cc (\u06af\u0645\u0631\u0627\u06c1 \u06a9\u0646 \u067e\u0627\u0633):<\/strong> \u0622\u067e grep <code>ClearLedger<\/code> \u0627\u06a9\u06cc\u0644\u06d2 \u062c\u0627\u0624 \u0627\u0648\u0631 \u0645\u0627\u0631\u0648 <code>postgres-0<\/code> \u067e\u0691\u06be\u0646\u0627 <code>\/etc\/passwd<\/code>. \u06cc\u06c1 \u0627\u0633\u0679\u06cc\u062c 6 \u06a9\u0627 \u067e\u0633 \u0645\u0646\u0638\u0631 \u06a9\u0627 \u0634\u0648\u0631 \u06c1\u06d2\u060c \u0634\u06cc\u0644 \u0679\u06cc\u0633\u0679\u0646\u06af \u0646\u06c1\u06cc\u06ba\u06d4 \u06c1\u0645\u06cc\u0634\u06c1 \u0627\u0633\u06d2 \u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba\u06d4 <code>auth-service<\/code>.<\/p>\n<p><strong>\u06a9\u06cc\u0627 \u0622\u0624\u0679 \u067e\u0679 \u062e\u0627\u0644\u06cc \u06c1\u06d2\u061f<\/strong> \u06cc\u06c1 \u0679\u06be\u06cc\u06a9 \u06c1\u06d2 \u0627\u06af\u0631 \u0622\u067e \u0646\u06d2 \u0645\u0631\u062d\u0644\u06c1 2 \u067e\u0627\u0633 \u06a9\u06cc\u0627\u060c <strong>\u0645\u0631\u062d\u0644\u06c1 4 \u067e\u0631 \u062c\u0627\u0631\u06cc \u0631\u06a9\u06be\u06cc\u06ba<\/strong>. \u06cc\u0627 \u062a\u0648 Promtail \u0627\u0628 \u0628\u06be\u06cc \u067e\u06a9\u0691 \u0633\u06a9\u062a\u0627 \u06c1\u06d2 \u06cc\u0627 JSON \u0627\u0633 \u062a\u06cc\u0632 \u06af\u0631\u06cc\u067e \u06a9\u06d2 \u0644\u06cc\u06d2 \u0628\u06c1\u062a \u0644\u0645\u0628\u0627 \u06c1\u06d2\u06d4 \u06af\u0631\u0627\u0641\u0627\u0646\u0627 \u0627\u06a9\u062b\u0631 \u0627\u06cc\u06a9 \u0627\u0646\u062a\u0628\u0627\u06c1 \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2 \u06cc\u06c1\u0627\u06ba \u062a\u06a9 \u06a9\u06c1 \u062c\u0628 \u06cc\u06c1 \u06a9\u0645\u0627\u0646\u0688 \u06a9\u0686\u06be \u0628\u06be\u06cc \u067e\u0631\u0646\u0679 \u0646\u06c1 \u06a9\u0631\u06d2\u06d4<\/p>\n<p><strong>\u0645\u0631\u062d\u0644\u06c1 4: \u06af\u0631\u0627\u0641\u0627\u0646\u0627 \u06a9\u06be\u0648\u0644\u06cc\u06ba\u06d4<\/strong><\/p>\n<p>\u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u0627\u06cc\u0648\u0646\u0679\u0633 \u06a9\u06cc \u0679\u0627\u0626\u0645 \u0644\u0627\u0626\u0646 \u06a9\u06be\u0648\u0644\u06cc\u06ba\u06d4<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/07\/1785194533_858_Homelab-\u0633\u06d2-AWS-\u062a\u06a9-\u067e\u0631\u0648\u0688\u06a9\u0634\u0646-\u06a9\u06d2-\u0644\u06cc\u06d2-\u062a\u06cc\u0627\u0631-DevSecOps-\u067e\u0644\u06cc\u0679.png\" alt=\"\u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u0679\u0627\u0626\u0645 \u0644\u0627\u0626\u0646 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679\" style=\"display:block;margin:0 auto\" width=\"1114\" height=\"1024\" loading=\"lazy\" title=\"\"><\/p>\n<p>\u06cc\u06c1 \u0622\u067e \u06a9\u0627 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u06c1\u06d2\u06d4 \u0633\u0628 \u0633\u06d2 \u0627\u0648\u067e\u0631 \u0639\u0646\u0648\u0627\u0646 \u06c1\u0648\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2: <strong>ClearLedger - \u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u0627\u06cc\u0648\u0646\u0679 \u06a9\u06cc \u0679\u0627\u0626\u0645 \u0644\u0627\u0626\u0646\u06d4<\/strong><\/p>\n<p><strong>\u067e\u06cc\u0646\u0644 \u06a9\u0648 \u062f\u06cc\u06a9\u06be\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2:<\/strong><\/p>\n<ol>\n<li>\n<p>\u0648\u0642\u062a \u06a9\u06cc \u062d\u062f: <strong>\u0622\u062e\u0631\u06cc \u06af\u06be\u0646\u0679\u06d2<\/strong> (\u0627\u0648\u067e\u0631 \u062f\u0627\u0626\u06cc\u06ba)<\/p>\n<\/li>\n<li>\n<p>\u0622\u0679\u0648 \u0631\u06cc\u0641\u0631\u06cc\u0634: \u0622\u0641<\/p>\n<\/li>\n<li>\n<p>\u0627\u06af\u0631 \u0634\u06cc\u0644 \u06a9\u0645\u0627\u0646\u0688 \u0686\u0646\u062f \u0645\u0646\u0679 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u067e\u0631\u0627\u0646\u06cc \u06c1\u06d2 \u062a\u0648\u060c \u0645\u0631\u062d\u0644\u06c1 1 \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>90 \u0633\u06cc\u06a9\u0646\u0688 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0631\u06cc\u0641\u0631\u06cc\u0634 \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ol>\n<p><strong>\u0622\u067e \u06a9\u0648 \u06a9\u0686\u06be \u0627\u0633 \u0637\u0631\u062d \u0646\u0638\u0631 \u0622\u0626\u06d2 \u06af\u0627 (\u06cc\u06c1 \u0639\u0627\u0645 \u0628\u0627\u062a \u06c1\u06d2):<\/strong><\/p>\n<ul>\n<li>\n<p><strong>\u0627\u06c1\u0645 \u0627\u0637\u0644\u0627\u0639 (1 \u06af\u06be\u0646\u0679\u06c1)<\/strong>: \u0628\u0691\u06cc \u062a\u0639\u062f\u0627\u062f \u062c\u06cc\u0633\u06d2 <strong>1.08K<\/strong>. \u06cc\u06c1 \u0632\u06cc\u0627\u062f\u06c1 \u062a\u0631 \u06c1\u06d2\u06d4 <code>postgres-0<\/code> \u067e\u0691\u06be\u0646\u0627 <code>\/etc\/passwd<\/code> \u0644\u0648\u067e \u0645\u06cc\u06ba (\u067e\u0633 \u0645\u0646\u0638\u0631 \u06a9\u06d2 \u0634\u0648\u0631 \u06a9\u06cc 6 \u0633\u0637\u062d\u06cc\u06ba)\u06d4 \u06c1\u0627\u06ba <strong>~ \u0646\u06c1\u06cc\u06ba<\/strong> \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 \u0622\u067e \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648 \u06af\u0626\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0642\u0627\u0639\u062f\u06d2 \u06a9\u06d2 \u0646\u0627\u0645 \u0633\u06d2 \u0627\u0644\u0631\u0679\u0633<\/strong> (\u067e\u0627\u0626\u06cc \u0686\u0627\u0631\u0679): \u063a\u0644\u0628\u06c1 <strong>ClearLedger \u0645\u06cc\u06ba \u062d\u0633\u0627\u0633 \u0641\u0627\u0626\u0644\u0648\u06ba \u06a9\u0648 \u067e\u0691\u06be\u0646\u0627<\/strong>. \u06cc\u06c1 \u0628\u06be\u06cc \u0646\u0627\u0631\u0645\u0644 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u062d\u0627\u0644\u06cc\u06c1 \u062e\u0637\u0631\u06c1\/\u0627\u0646\u062a\u0628\u0627\u06c1\u06cc \u0648\u0627\u0642\u0639\u0627\u062a<\/strong>: \u067e\u0648\u0633\u0679\u06af\u0631\u06cc\u0633 \u06a9\u06cc \u0628\u06c1\u062a \u0633\u06cc \u0642\u0637\u0627\u0631\u06cc\u06ba \u06c1\u06cc\u06ba\u06d4 \u0622\u067e \u06a9\u0627 \u0634\u06cc\u0644 \u0627\u0646\u062a\u0628\u0627\u06c1 \u0648\u06c1\u0627\u06ba \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u06cc\u06c1 \u062f\u0641\u0646 \u06c1\u06d2.<\/p>\n<\/li>\n<\/ul>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/07\/1785194533_126_Homelab-\u0633\u06d2-AWS-\u062a\u06a9-\u067e\u0631\u0648\u0688\u06a9\u0634\u0646-\u06a9\u06d2-\u0644\u06cc\u06d2-\u062a\u06cc\u0627\u0631-DevSecOps-\u067e\u0644\u06cc\u0679.png\" alt=\"\u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u0627\u0648\u0631 \u0679\u0627\u0626\u0645 \u0644\u0627\u0626\u0646 \u06af\u0631\u0627\u0641\u0627\u0646\u0627 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u06a9\u0648 \u0638\u0627\u06c1\u0631 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u0627 \u0627\u06cc\u06a9 \u0627\u0648\u0631 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679\u06d4\" style=\"display:block;margin:0 auto\" width=\"1060\" height=\"1009\" loading=\"lazy\" title=\"\"><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/07\/1785194533_664_Homelab-\u0633\u06d2-AWS-\u062a\u06a9-\u067e\u0631\u0648\u0688\u06a9\u0634\u0646-\u06a9\u06d2-\u0644\u06cc\u06d2-\u062a\u06cc\u0627\u0631-DevSecOps-\u067e\u0644\u06cc\u0679.png\" alt=\"e3a363af-676b-47a6-a61a-fe5ee8b7c130\" style=\"display:block;margin:0 auto\" width=\"1119\" height=\"977\" loading=\"lazy\" title=\"\"><\/p>\n<p>\u0679\u0627\u067e \u0679\u0627\u0626\u0645 \u0644\u0627\u0626\u0646 (<strong>Falco Alerts by Priority - \u0679\u0627\u0626\u0645 \u0644\u0627\u0626\u0646<\/strong>) \u0622\u067e \u0628\u06be\u06cc \u06a9\u06c1\u06c1 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <strong>\u06a9\u0648\u0626\u06cc \u0688\u06cc\u0679\u0627 \u0646\u06c1\u06cc\u06ba<\/strong>. \u06cc\u06c1 \u0627\u06cc\u06a9 \u0645\u0639\u0631\u0648\u0641 \u062e\u0635\u0648\u0635\u06cc\u062a \u06c1\u06d2\u06d4 \u06af\u06be\u0628\u0631\u0627\u0626\u06cc\u06ba \u0646\u06c1\u06cc\u06ba\u060c \u0627\u0633 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0644\u0627\u06af \u067e\u06cc\u0646\u0644 \u0627\u0648\u0631 \u0628\u0631\u0627\u0624\u0632\u0631 \u0633\u0631\u0686 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p><strong>\u0627\u0633\u06d2 \u06a9\u06cc\u0633\u06d2 \u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba\u06d4 <em>\u0622\u067e \u06a9\u0627<\/em> \u0627\u0646\u062a\u0628\u0627\u06c1\u0627\u062a (\u0627\u0633 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u0633\u06d2):<\/strong><\/p>\n<ol>\n<li>\n<p>\u062c\u0627\u0631\u06cc \u0631\u06a9\u06be\u06cc\u06ba <strong>ClearLedger - \u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u0627\u06cc\u0648\u0646\u0679 \u06a9\u06cc \u0679\u0627\u0626\u0645 \u0644\u0627\u0626\u0646<\/strong> - \u0646\u06cc\u0648\u06cc\u06af\u06cc\u0634\u0646 \u0646\u06c1\u06cc\u06ba\u060c \u0679\u06cc\u0645\u067e\u0648 \u0646\u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0627\u0646\u062f\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 <strong>\u062d\u0627\u0644\u06cc\u06c1 \u062e\u0637\u0631\u06c1\/\u0627\u0646\u062a\u0628\u0627\u06c1\u06cc \u0648\u0627\u0642\u0639\u0627\u062a<\/strong> (\u062f\u0627\u0626\u06cc\u06ba \u0644\u0627\u06af \u0644\u0633\u0679)<\/p>\n<\/li>\n<li>\n<p>\u062f\u0628\u0627\u0626\u06cc\u06ba <strong>\u06a9\u0645\u0627\u0646\u0688 + \u0627\u06cc\u0641<\/strong> (\u0645\u06cc\u06a9) \u06cc\u0627 <strong>Ctrl+F<\/strong> (\u0648\u0646\u0688\u0648\u0632\/\u0644\u06cc\u0646\u06a9\u0633)\u06d4<\/p>\n<\/li>\n<li>\n<p>\u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba <code>auth-service<\/code> \u06cc\u0627 <code>Shell spawned<\/code>.<\/p>\n<\/li>\n<\/ol>\n<p>\u0627\u06af\u0631 \u062a\u0644\u0627\u0634 \u0645\u06cc\u06ba \u0622\u067e \u06a9\u06d2 \u067e\u0648\u0688 \u06a9\u0627 \u0630\u06a9\u0631 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06cc \u0642\u0637\u0627\u0631 \u0645\u0644\u062a\u06cc \u06c1\u06d2\u060c <strong>\u0634\u06cc\u0644 \u06a9\u06cc \u062a\u062e\u0644\u06cc\u0642<\/strong>\u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679 \u0644\u06cc\u06ba\u06d4<\/p>\n<p><strong>\u063a\u0644\u0637 \u062c\u06af\u06c1\u06cc\u06ba (\u0639\u0627\u0645 \u063a\u0644\u0637\u06cc\u0627\u06ba):<\/strong> \u06af\u0631\u0627\u0641\u0627\u0646\u0627 <strong>\u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0631\u06cc\u06ba<\/strong> \u0688\u06cc\u0679\u0627 \u06a9\u06d2 \u0630\u0631\u0627\u0626\u0639 \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 <strong>\u0631\u0641\u062a\u0627\u0631<\/strong> \u0688\u0633\u067e\u0644\u06d2 <code>ledger-service<\/code> \u062b\u0628\u0648\u062a \u06a9\u06c1 <strong>\u0645\u0631\u062d\u0644\u06c1 7.5<\/strong> (OpenTelemetry)\u060c \u0648\u0631\u0632\u0634 B \u0646\u06c1\u06cc\u06ba\u06d4 \u0679\u06cc\u0645\u067e\u0648 Falco \u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u0648\u0627\u0631\u0646\u0646\u06af\u0632 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u06d2 \u0646\u0634\u0627\u0646\u0627\u062a \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u0645\u0634\u0642 B \u067e\u0627\u0633 \u06a9\u0631\u06cc\u06ba (\u0627\u06cc\u06a9 \u06a9\u0648 \u0645\u0646\u062a\u062e\u0628 \u06a9\u0631\u06cc\u06ba):<\/strong><\/p>\n<ol>\n<li>\n<p><strong>\u0628\u06c1\u062a\u0631\u06cc\u0646:<\/strong> \u0645\u0631\u062d\u0644\u06c1 2 A \u0679\u0631\u0645\u06cc\u0646\u0644 grep \u0638\u0627\u06c1\u0631 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 <code>Shell spawned<\/code> <strong>\u0627\u0648\u0631<\/strong> \u06a9\u06c1 <strong>\u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u0627\u06cc\u0648\u0646\u0679 \u06a9\u06cc \u0679\u0627\u0626\u0645 \u0644\u0627\u0626\u0646<\/strong> \u062a\u0644\u0627\u0634 \u06a9\u06d2 \u0646\u062a\u0627\u0626\u062c \u06a9\u0648 \u0644\u0627\u06af \u06a9\u0631\u06cc\u06ba\u06d4 <code>auth-service<\/code> \/ <code>Shell spawned<\/code> - \u062f\u0648\u0646\u0648\u06ba \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679\u0633\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u06cc\u06c1 \u0628\u06be\u06cc \u0679\u06be\u06cc\u06a9 \u06c1\u06d2:<\/strong> \u0645\u0631\u062d\u0644\u06c1 2 grep \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679 <strong>\u067e\u0644\u0633<\/strong> \u06a9\u06c1 <strong>\u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u0627\u06cc\u0648\u0646\u0679 \u06a9\u06cc \u0679\u0627\u0626\u0645 \u0644\u0627\u0626\u0646<\/strong> \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 <strong>\u0627\u06c1\u0645 \u0627\u0637\u0644\u0627\u0639 (1 \u06af\u06be\u0646\u0679\u06c1)<\/strong> \u0646\u0645\u0628\u0631 \u062f\u06a9\u06be\u0627\u0626\u06cc\u06ba (\u06cc\u06c1 \u062b\u0627\u0628\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 Falco \u2192 Loki \u2192 Grafana \u0627\u0633 \u0648\u0642\u062a \u0628\u06be\u06cc \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0628 \u067e\u0648\u0633\u0679\u06af\u0631\u06cc\u0633 \u0634\u0648\u0631 \u0645\u06cc\u06ba \u0634\u06cc\u0644 \u0644\u0627\u0626\u0646\u06cc\u06ba \u062f\u0641\u0646 \u06c1\u0648\u06ba)<\/p>\n<\/li>\n<li>\n<p><strong>\u0641\u0627\u0644 \u0628\u06cc\u06a9 (\u0635\u0631\u0641 \u0627\u0633 \u0635\u0648\u0631\u062a \u0645\u06cc\u06ba \u062c\u0628 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u06a9\u06cc \u062a\u0644\u0627\u0634 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648 \u062c\u0627\u0626\u06d2):<\/strong> \u0645\u0631\u062d\u0644\u06c1 2 grep <strong>\u067e\u0644\u0633<\/strong> \u06af\u0631\u0627\u0641\u0627\u0646\u0627 <strong>\u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0631\u06cc\u06ba<\/strong> \u0688\u06cc\u0679\u0627 \u0633\u0648\u0631\u0633 \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 <strong>\u067e\u062a\u06be\u0631\u06cc\u0644\u06cc<\/strong> (\u0679\u06cc\u0645\u067e\u0648 \u0646\u06c1\u06cc\u06ba):<\/p>\n<ul>\n<li>\n<p>\u0628\u0627\u0626\u06cc\u06ba \u0645\u06cc\u0646\u0648 \u067e\u0631 \u062c\u0627\u0626\u06cc\u06ba\u06d4 <strong>\u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0631\u06cc\u06ba<\/strong><\/p>\n<\/li>\n<li>\n<p>\u0627\u0648\u067e\u0631 \u0628\u0627\u0626\u06cc\u06ba \u0688\u06cc\u0679\u0627 \u0633\u0648\u0631\u0633 \u0688\u0631\u0627\u067e \u0688\u0627\u0624\u0646: \u0645\u0646\u062a\u062e\u0628 \u06a9\u0631\u06cc\u06ba\u06d4 <strong>\u067e\u062a\u06be\u0631\u06cc\u0644\u06cc<\/strong><\/p>\n<\/li>\n<li>\n<p>\u0633\u0648\u0627\u0644: <code>{namespace=\"falco\", container=\"falco\"} |= \"Shell spawned\"<\/code><\/p>\n<\/li>\n<li>\n<p>\u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba <strong>\u0627\u0633\u062a\u0641\u0633\u0627\u0631 \u067e\u0631 \u0639\u0645\u0644 \u062f\u0631\u0622\u0645\u062f<\/strong><\/p>\n<\/li>\n<li>\n<p>\u0627\u0633 \u0637\u0631\u062d \u0627\u06cc\u06a9 \u0644\u0627\u0626\u0646 \u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba: <code>auth-service<\/code><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p>\u00a77.6 \u0633\u06d2 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679\u06d4<\/p>\n<h4 id=\"heading-exercise-c-failed-login-loki-and-service-health\">\u0627\u06cc\u06a9\u0633\u0631\u0633\u0627\u0626\u0632 C: \u0644\u0627\u06af \u0627\u0646\u060c \u0644\u0648\u06a9\u06cc\u060c \u0627\u0648\u0631 \u0633\u0631\u0648\u0633 \u06c1\u06cc\u0644\u062a\u06be \u0645\u06cc\u06ba \u0646\u0627\u06a9\u0627\u0645<\/h4>\n<p><strong>\u06a9\u06c1\u0627\u0646\u06cc:<\/strong> \u06a9\u0648\u0626\u06cc \u0622\u067e \u06a9\u06d2 \u0644\u0627\u06af \u0627\u0646 API \u067e\u0627\u0633 \u0648\u0631\u0688 \u06a9\u0627 \u0627\u0646\u062f\u0627\u0632\u06c1 \u0644\u06af\u0627 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4<br \/>\u0679\u0631\u0645\u06cc\u0646\u0644 \u0646\u06d2 10 \u063a\u0644\u0637 \u0644\u0627\u06af \u0627\u0646 \u06a9\u0648\u0634\u0634\u06cc\u06ba \u0628\u06be\u06cc\u062c\u06cc\u06ba\u06d4 <code>auth-service<\/code> \u0644\u06a9\u06be\u0646\u0627 <code>Failed login attempt<\/code> \u0644\u0627\u06af \u0645\u06cc\u06ba. \u06af\u0631\u0627\u0641\u0627\u0646\u0627 <strong>\u0633\u0631\u0648\u0633 \u06c1\u06cc\u0644\u062a\u06be + \u062a\u0648\u062b\u06cc\u0642 \u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc<\/strong> \u0627\u0633\u06d2 \u062f\u06a9\u06be\u0627\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2 \u06a9\u06c1 \u06af\u0646\u062a\u06cc \u0628\u0691\u06be \u0631\u06c1\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>A \u0627\u0648\u0631 B \u062c\u06cc\u0633\u0627 \u06c1\u06cc \u067e\u06cc\u0679\u0631\u0646: \u0679\u0631\u0645\u06cc\u0646\u0644 \u0627\u06cc\u06a9\u0634\u0646\u0632\u060c \u067e\u06be\u0631 \u0644\u0627\u06af\u0632\u060c \u067e\u06be\u0631 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688\u06d4<\/p>\n<p><strong>\u0645\u0631\u062d\u0644\u06c1 1: \u0644\u0627\u06af \u0627\u0646 \u06a9\u06cc \u063a\u0644\u0637 \u06a9\u0648\u0634\u0634 \u0628\u06be\u06cc\u062c\u06cc\u06ba (\u0679\u0631\u0645\u06cc\u0646\u0644)<\/strong><\/p>\n<p>\u067e\u0648\u0631\u06d2 \u0628\u0644\u0627\u06a9 \u06a9\u0648 \u06a9\u0627\u067e\u06cc \u0627\u0648\u0631 \u067e\u06cc\u0633\u0679 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">for i in $(seq 1 10); do\n  curl -s http:\/\/clearledger.local\/auth\/health >\/dev\/null\n  curl -s -X POST http:\/\/clearledger.local\/auth\/login \n    -H 'Content-Type: application\/json' \n    -d '{\"email\":\"lab-attacker@evil.com\",\"password\":\"wrong\"}' >\/dev\/null\ndone\necho \"done\"\n<\/code><\/pre>\n<p><strong>\u067e\u0627\u0633:<\/strong> \u0622\u067e \u06a9\u0648 \u0635\u0631\u0641 \u0622\u0624\u0679 \u067e\u0679 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2:<\/p>\n<pre><code class=\"language-text\">done\n<\/code><\/pre>\n<p>\u06a9\u0648\u0626\u06cc \u0622\u0624\u0679 \u067e\u0679 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 <code>curl<\/code> \u0644\u0627\u0626\u0646 \u0646\u0627\u0631\u0645\u0644 \u06c1\u06d2\u06d4 \u0644\u0648\u067e \u0645\u0627\u0631\u0627 <code>\/auth\/health<\/code> (\u0627\u06cc\u067e \u06a9\u0648 \u06af\u0631\u0645 \u0631\u06a9\u06be\u06cc\u06ba) \u0627\u0648\u0631 <code>\/auth\/login<\/code> \u0645\u06cc\u06ba \u0646\u06d2 10 \u0628\u0627\u0631 \u063a\u0644\u0637 \u067e\u0627\u0633 \u0648\u0631\u0688 \u062f\u0631\u062c \u06a9\u06cc\u0627\u06d4<\/p>\n<p><strong>\u0646\u0627\u06a9\u0627\u0645:<\/strong> <code>curl: (6) Could not resolve host<\/code>. \u0686\u0644\u0627\u0626\u06cc\u06ba <code>bash scripts\/setup-hosts.sh<\/code> \u0645\u06cc\u06a9 \u067e\u0631\u06d4 <code>curl: (7) Failed to connect<\/code>. \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba <code>kubectl get pods -n clearledger -l app=auth-service<\/code>.<\/p>\n<p><strong>\u0645\u0631\u062d\u0644\u06c1 2: \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u062a\u0635\u062f\u06cc\u0642 \u06a9\u06cc \u062e\u062f\u0645\u062a \u0646\u06d2 \u0627\u0633\u06d2 \u0631\u06cc\u06a9\u0627\u0631\u0688 \u06a9\u06cc\u0627 \u06c1\u06d2\u06d4<\/strong><\/p>\n<pre><code class=\"language-bash\">kubectl logs -n clearledger -l app=auth-service --tail=30 | grep -i 'Failed login' | tail -3\n<\/code><\/pre>\n<p><strong>\u067e\u0627\u0633 \u0622\u067e \u06a9\u0648 \u0627\u0633 \u0637\u0631\u062d \u06a9\u06cc \u0644\u0627\u0626\u0646 \u062f\u06cc\u06a9\u06be\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2:<\/strong><\/p>\n<pre><code class=\"language-text\">Failed login attempt for email: lab-attacker@evil.com\n<\/code><\/pre>\n<p>\u0622\u067e \u06a9\u0648 \u0645\u062a\u0639\u062f\u062f \u0644\u0627\u0626\u0646\u06cc\u06ba \u0646\u0638\u0631 \u0622 \u0633\u06a9\u062a\u06cc \u06c1\u06cc\u06ba (\u0627\u06cc\u06a9 \u0633\u0637\u0631 \u0641\u06cc \u0646\u0627\u06a9\u0627\u0645 \u06a9\u0648\u0634\u0634)\u06d4 \u0627\u06cc\u06a9 \u0644\u0627\u0626\u0646 \u06a9\u0627\u0641\u06cc \u06c1\u06d2\u06d4 \u06cc\u06c1\u0627\u06ba \u0622\u067e \u06a9\u06d2 \u067e\u0648\u0631\u0679 \u0641\u0648\u0644\u06cc\u0648 \u06a9\u0627 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u0627\u06af\u0631 grep \u06a9\u0686\u06be \u0628\u06be\u06cc \u067e\u0631\u0646\u0679 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u0627 \u06c1\u06d2:<\/strong> \u062a\u0642\u0631\u06cc\u0628\u0627\u064b 10 \u0633\u06cc\u06a9\u0646\u0688 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0633\u06d2 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u06cc\u06c1 \u0627\u0628 \u0628\u06be\u06cc \u062e\u0627\u0644\u06cc \u06c1\u06d2 \u062a\u0648 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u062a\u0635\u062f\u06cc\u0642\u06cc \u067e\u0648\u0688 \u0686\u0644 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4 <code>kubectl get pods -n clearledger -l app=auth-service<\/code>.<\/p>\n<p><strong>\u0645\u0631\u062d\u0644\u06c1 3: \u06af\u0631\u0627\u0641\u0627\u0646\u0627 \u06a9\u06be\u0648\u0644\u06cc\u06ba (\u0645\u0631\u062d\u0644\u06c1 1 \u06a9\u06d2 \u0628\u0639\u062f ~ 60 \u0633\u06cc\u06a9\u0646\u0688 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u06cc\u06ba)<\/strong><\/p>\n<p>\u0633\u0631\u0648\u0633 \u0627\u0633\u0679\u06cc\u0679\u0633 + \u062a\u0648\u062b\u06cc\u0642 \u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u06a9\u06be\u0648\u0644\u06cc\u06ba\u06d4<\/p>\n<p><strong>\u06cc\u06c1 \u0622\u067e \u06a9\u0627 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u06c1\u06d2\u06d4<\/strong> \u0639\u0646\u0648\u0627\u0646 \u0645\u06cc\u06ba \u06a9\u06cc\u0627 \u06a9\u06c1\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2 <strong>ClearLedger - \u0633\u0631\u0648\u0633 \u06c1\u06cc\u0644\u062a\u06be + \u062a\u0648\u062b\u06cc\u0642 \u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc<\/strong>.<\/p>\n<ol>\n<li>\n<p>\u0648\u0642\u062a \u06a9\u06cc \u062d\u062f: <strong>\u0622\u062e\u0631\u06cc \u06af\u06be\u0646\u0679\u06d2<\/strong><\/p>\n<\/li>\n<li>\n<p>\u062e\u0648\u062f\u06a9\u0627\u0631 \u0631\u06cc\u0641\u0631\u06cc\u0634: <strong>\u0628\u0646\u062f \u06a9\u0631 \u062f\u06cc\u06ba<\/strong><\/p>\n<\/li>\n<li>\n<p>\u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba <strong>\u0631\u06cc\u0641\u0631\u06cc\u0634<\/strong> \u0627\u06cc\u06a9 \u0628\u0627\u0631<\/p>\n<\/li>\n<\/ol>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/07\/1785194533_595_Homelab-\u0633\u06d2-AWS-\u062a\u06a9-\u067e\u0631\u0648\u0688\u06a9\u0634\u0646-\u06a9\u06d2-\u0644\u06cc\u06d2-\u062a\u06cc\u0627\u0631-DevSecOps-\u067e\u0644\u06cc\u0679.png\" alt=\"\u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679 \u0633\u0631\u0648\u0633 \u0627\u0633\u0679\u06cc\u0679\u0633 + \u062a\u0635\u062f\u06cc\u0642\u06cc \u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u06af\u0631\u0627\u0641\u0627\u0646\u0627 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u062f\u06a9\u06be\u0627 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4\" style=\"display:block;margin:0 auto\" width=\"1118\" height=\"1028\" loading=\"lazy\" title=\"\"><\/p>\n<p>\u0686\u06cc\u06a9 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0686\u06cc\u0632\u06cc\u06ba (\u0635\u0631\u0641 \u0627\u06cc\u06a9\u0633\u0631\u0633\u0627\u0626\u0632 C):<\/p>\n<ol>\n<li>\n<p><strong>\u0644\u0627\u06af \u0627\u0646 \u06a9\u06cc \u0646\u0627\u06a9\u0627\u0645 \u06a9\u0648\u0634\u0634\u06cc\u06ba (1 \u06af\u06be\u0646\u0679\u06c1)<\/strong>: \u0628\u0691\u06cc \u062a\u0639\u062f\u0627\u062f <strong>\u067e\u0627\u0633:<\/strong> <strong>> 0<\/strong>. \u06cc\u06c1 \u0622\u067e \u06a9\u0627 \u0627\u06c1\u0645 \u062b\u0628\u0648\u062a \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0644\u0627\u06af \u0627\u0646 \u0646\u0627\u06a9\u0627\u0645\u06cc \u0644\u0627\u06af \u0627\u0633\u0679\u0631\u06cc\u0645<\/strong>: \u067e\u06cc\u0646\u0644 \u067e\u0631 \u0644\u06a9\u06cc\u0631\u06cc\u06ba \u0631\u06cc\u06a9\u0627\u0631\u0688 \u06a9\u0631\u06cc\u06ba\u06d4 <strong>\u067e\u0627\u0633:<\/strong> \u0644\u0627\u0626\u0646 <code>Failed login attempt<\/code> \u06cc\u0627 <code>lab-attacker@evil.com<\/code>. \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba <strong>\u06a9\u0645\u0627\u0646\u0688 + \u0627\u06cc\u0641<\/strong> \u0627\u06af\u0631 \u0636\u0631\u0648\u0631\u06cc \u06c1\u0648 \u062a\u0648 \u067e\u06cc\u0646\u0644 \u06a9\u06d2 \u0627\u0646\u062f\u0631\u06d4<\/p>\n<\/li>\n<\/ol>\n<p>\u0648\u06c1 \u067e\u06cc\u0646\u0644 \u062c\u0648 \u062e\u0627\u0644\u06cc \u06c1\u0648\u0646\u06d2 \u06a9\u06cc \u0635\u0648\u0631\u062a \u0645\u06cc\u06ba \u0646\u0638\u0631 \u0627\u0646\u062f\u0627\u0632 \u06a9\u06cc\u06d2 \u062c\u0627 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba:<\/p>\n<p>\u0622\u067e \u0627\u06cc\u06a9\u0633\u0631\u0633\u0627\u0626\u0632 C \u067e\u0627\u0633 \u06a9\u0631 \u0644\u06cc\u06ba \u06af\u06d2 \u0627\u06af\u0631 \u0622\u067e: <strong>\u062f\u0648 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679\u0633:<\/strong><\/p>\n<p><strong>\u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679 1 (\u0636\u0631\u0648\u0631\u06cc):<\/strong> \u0645\u0631\u062d\u0644\u06c1 2 \u0679\u0631\u0645\u06cc\u0646\u0644 \u0622\u0624\u0679 \u067e\u0679 \u0638\u0627\u06c1\u0631 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 <code>Failed login attempt for lab-attacker@evil.com<\/code>. \u0627\u0633 \u0633\u06d2 \u062b\u0627\u0628\u062a \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0627\u06cc\u067e \u0646\u06d2 \u063a\u0644\u0637 \u0644\u0627\u06af \u0627\u0646 \u06a9\u06cc\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679 2 (\u0627\u06cc\u06a9 \u06a9\u0648 \u0645\u0646\u062a\u062e\u0628 \u06a9\u0631\u06cc\u06ba):<\/strong><\/p>\n<ul>\n<li>\n<p><strong>\u0627\u062e\u062a\u06cc\u0627\u0631 A:<\/strong> \u06a9\u06c1 <strong>\u0644\u0627\u06af \u0627\u0646 \u06a9\u06cc \u0646\u0627\u06a9\u0627\u0645 \u06a9\u0648\u0634\u0634\u06cc\u06ba (1 \u06af\u06be\u0646\u0679\u06c1)<\/strong> \u0627\u06cc\u06a9 \u067e\u06cc\u0646\u0644 \u062c\u0648 0 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0646\u0645\u0628\u0631 \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2\u060c \u062c\u06cc\u0633\u06d2 <strong>10<\/strong>)\u06d4 \u0627\u0633 \u0633\u06d2 \u062b\u0627\u0628\u062a \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u06af\u0631\u0627\u0641\u0627\u0646\u0627 \u0646\u06d2 \u0646\u0627\u06a9\u0627\u0645\u06cc \u06a9\u0627 \u062d\u0633\u0627\u0628 \u0644\u06af\u0627\u06cc\u0627\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0627\u062e\u062a\u06cc\u0627\u0631 B:<\/strong> \u06a9\u06c1 <strong>\u0644\u0627\u06af \u0627\u0646 \u0646\u0627\u06a9\u0627\u0645\u06cc \u0644\u0627\u06af \u0627\u0633\u0679\u0631\u06cc\u0645<\/strong> \u067e\u06cc\u0646\u0644 \u0644\u0627\u0626\u0646\u06cc\u06ba \u062f\u06a9\u06be\u0627 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4 <code>lab-attacker@evil.com<\/code>. \u06cc\u06c1 \u0637\u0631\u06cc\u0642\u06c1 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba \u0627\u06af\u0631 \u0628\u0691\u06cc \u062a\u0639\u062f\u0627\u062f \u06a9\u0627 \u067e\u06cc\u0646\u0644 \u0627\u0628\u06be\u06cc \u0628\u06be\u06cc \u062e\u0627\u0644\u06cc \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u0644\u0627\u06af \u0627\u0633\u0679\u0631\u06cc\u0645 \u0645\u06cc\u06ba \u0627\u06cc \u0645\u06cc\u0644\u0632 \u0645\u0648\u062c\u0648\u062f \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ul>\n<p>\u0622\u067e \u06a9\u0648 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679 1 \u0627\u0648\u0631 \u0622\u067e\u0634\u0646 A \u06cc\u0627 \u0622\u067e\u0634\u0646 B \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u06af\u06cc\u06d4 \u00a77.6 \u06a9\u0627\u0641\u06cc \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-exercise-d-compliance-dashboard-the-auditor-summary\">\u0645\u0634\u0642 D: \u062a\u0639\u0645\u06cc\u0644 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 (\u0622\u0688\u06cc\u0679\u0631 \u06a9\u0627 \u062e\u0644\u0627\u0635\u06c1)<\/h4>\n<p><strong>\u0622\u067e \u06a9\u06cc\u0627 \u06a9\u0631 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba:<\/strong> \u0627\u06cc\u06a9 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u06a9\u06be\u0648\u0644\u06cc\u06ba \u062c\u0648 A, B \u0627\u0648\u0631 C \u06a9\u06cc \u0645\u0634\u0642\u06cc\u06ba \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \"\u0622\u0688\u06cc\u0679\u0631 \u06a9\u0627 \u0646\u0634\u0627\u0646\" \u06a9\u0627 \u0645\u0646\u0638\u0631 \u06c1\u06d2\u06d4 \u062f\u0627\u062e\u0644\u06c1 \u06a9\u0646\u0679\u0631\u0648\u0644\u060c \u0631\u0646 \u0679\u0627\u0626\u0645 \u06a9\u0627 \u067e\u062a\u06c1 \u0644\u06af\u0627\u0646\u0627\u060c \u0627\u0648\u0631 \u0627\u06cc\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u0633\u0628 \u0627\u06cc\u06a9 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u067e\u0631\u06d4<\/p>\n<p><strong>\u062c\u0628:<\/strong> A\u060c B \u0627\u0648\u0631 C \u0645\u06a9\u0645\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f \u06c1\u06cc\u06d4<\/p>\n<p><strong>\u0645\u0631\u062d\u0644\u06c1 1: \u0627\u067e\u0646\u0627 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u06a9\u06be\u0648\u0644\u06cc\u06ba\u06d4<\/strong><\/p>\n<p>\u062a\u0639\u0645\u06cc\u0644 \u06a9\u0631\u0646\u0633\u06cc<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/07\/1785194533_311_Homelab-\u0633\u06d2-AWS-\u062a\u06a9-\u067e\u0631\u0648\u0688\u06a9\u0634\u0646-\u06a9\u06d2-\u0644\u06cc\u06d2-\u062a\u06cc\u0627\u0631-DevSecOps-\u067e\u0644\u06cc\u0679.png\" alt=\"\u06af\u0631\u0627\u0641\u0627\u0646\u0627 \u062a\u0639\u0645\u06cc\u0644 \u06a9\u06cc \u062d\u06cc\u062b\u06cc\u062a \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679\" style=\"display:block;margin:0 auto\" width=\"1115\" height=\"1132\" loading=\"lazy\" title=\"\"><\/p>\n<p>\u0633\u06cc\u0679 <strong>\u0622\u062e\u0631\u06cc \u06af\u06be\u0646\u0679\u06d2<\/strong>\u0622\u0679\u0648 \u0631\u06cc\u0641\u0631\u06cc\u0634 <strong>\u0628\u0646\u062f \u06a9\u0631 \u062f\u06cc\u06ba<\/strong>\u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba <strong>\u0631\u06cc\u0641\u0631\u06cc\u0634<\/strong>.<\/p>\n<p><strong>\u0645\u0631\u062d\u0644\u06c1 2: \u0627\u0648\u067e\u0631\u06cc \u0642\u0637\u0627\u0631 \u06a9\u06d2 \u0627\u0639\u062f\u0627\u062f\u0648\u0634\u0645\u0627\u0631 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/strong><\/p>\n<table>\n<thead>\n<tr>\n<th>\u0622\u067e \u06a9\u06d2 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u0645\u06cc\u06ba \u0627\u0639\u062f\u0627\u062f\u0648\u0634\u0645\u0627\u0631<\/th>\n<th>\u0645\u0642\u0627\u0645\u06cc<\/th>\n<th>\u067e\u0627\u0633<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>\u067e\u0627\u0644\u06cc\u0633\u06cc \u06a9\u06cc \u062e\u0644\u0627\u0641 \u0648\u0631\u0632\u06cc<\/strong><\/td>\n<td>\u0648\u0631\u0632\u0634 A (Kyberno)<\/td>\n<td><strong>> 0<\/strong><\/td>\n<\/tr>\n<tr>\n<td><strong>\u0631\u0646 \u0679\u0627\u0626\u0645 \u062f\u06be\u0645\u06a9\u06cc\u0627\u06ba<\/strong><\/td>\n<td>\u0648\u0631\u0632\u0634 \u0628\u06cc (\u0641\u0627\u0644\u06a9\u0648)<\/td>\n<td><strong>> 0<\/strong> (\u067e\u0648\u0633\u0679\u06af\u0631\u06cc\u0633 \u0634\u0648\u0631 \u06a9\u06cc \u06af\u0646\u062a\u06cc - \u0679\u06be\u06cc\u06a9 \u06c1\u06d2)<\/td>\n<\/tr>\n<tr>\n<td><strong>\u062a\u0635\u062f\u06cc\u0642 \u06a9\u06cc \u0646\u0627\u06a9\u0627\u0645 \u06a9\u0648\u0634\u0634<\/strong><\/td>\n<td>\u0645\u0634\u0642 C (\u063a\u0644\u0637 \u0644\u0627\u06af \u0627\u0646)<\/td>\n<td><strong>> 0<\/strong><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/07\/1785194533_76_Homelab-\u0633\u06d2-AWS-\u062a\u06a9-\u067e\u0631\u0648\u0688\u06a9\u0634\u0646-\u06a9\u06d2-\u0644\u06cc\u06d2-\u062a\u06cc\u0627\u0631-DevSecOps-\u067e\u0644\u06cc\u0679.png\" alt=\"\u06af\u0631\u0627\u0641\u0627\u0646\u0627 \u062a\u0639\u0645\u06cc\u0644 \u06a9\u06cc \u062d\u06cc\u062b\u06cc\u062a \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679\" style=\"display:block;margin:0 auto\" width=\"1068\" height=\"1058\" loading=\"lazy\" title=\"\"><\/p>\n<p>\u062a\u06cc\u0646\u0648\u06ba \u06a9\u0648 \u0628\u0691\u06cc \u062a\u0639\u062f\u0627\u062f \u0645\u06cc\u06ba \u06c1\u0648\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0627\u0646\u06c1\u06cc\u06ba \u0635\u0631\u0641 \u06a9\u0631\u0646\u0627 \u06c1\u06d2 <strong>0 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1<\/strong> \u062c\u0627\u0646\u0686 \u06a9\u06d2 \u0628\u0639\u062f\u06d4<\/p>\n<p><strong>\u0627\u06af\u0631 \u0627\u06cc\u06a9 \u0627\u0639\u062f\u0627\u062f \u0648 \u0634\u0645\u0627\u0631 \u0627\u0628 \u0628\u06be\u06cc 0 \u06c1\u06d2:<\/strong> \u0648\u06c1 \u0645\u0634\u0642 (A\u060c B\u060c \u06cc\u0627 C) \u062f\u0648\u0628\u0627\u0631\u06c1 \u06a9\u0631\u06cc\u06ba\u060c 90 \u0633\u06cc\u06a9\u0646\u0688 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u06cc\u06ba\u060c \u0627\u0648\u0631 \u067e\u06be\u0631 \u062a\u0627\u0632\u06c1 \u062f\u0645 \u06a9\u0631\u06cc\u06ba\u06d4 \u067e\u0627\u0644\u06cc\u0633\u06cc \u06a9\u06cc \u062e\u0644\u0627\u0641 \u0648\u0631\u0632\u06cc\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 \u062f\u0648\u0633\u0631\u06cc Kyverno \u06a9\u0648 \u0645\u0633\u062a\u0631\u062f \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u067e\u0691 \u0633\u06a9\u062a\u06cc \u06c1\u06d2\u060c \u062c\u06cc\u0633\u06d2 \u06a9\u06c1 Exercise A\u06d4<\/p>\n<p>\u06cc\u06c1 \u00a77.6 \u06a9\u0627 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679 #3 \u06c1\u06d2\u06d4 \u0627\u06cc\u06a9 \u0648\u0627\u062d\u062f \u0641\u0631\u06cc\u0645 \u062c\u0648 \u06af\u06c1\u0631\u0627\u0626\u06cc \u0645\u06cc\u06ba \u062f\u0641\u0627\u0639 \u06a9\u0648 \u062b\u0627\u0628\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><strong> \u067e\u0631\u06cc\u06a9\u0679\u0633 \u0686\u06cc\u06a9 \u067e\u0648\u0627\u0626\u0646\u0679: \u06a9\u06cc\u0627 \u0622\u067e \u0646\u06d2 \u0648\u0627\u0642\u0639\u06cc \u0645\u0631\u062d\u0644\u06c1 7 \u0645\u06a9\u0645\u0644 \u06a9\u06cc\u0627 \u06c1\u06d2\u061f<\/strong><\/p>\n<p>\u06af\u0631\u0627\u0641\u0627\u0646\u0627 \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u0646\u0627 \u0645\u0642\u0635\u062f \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u067e\u062a\u06c1 \u0644\u06af\u0627\u0646\u06d2 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 \u0622\u067e \u0627\u06cc\u06a9 \u062d\u0642\u06cc\u0642\u06cc \u0648\u0627\u0642\u0639\u06c1 \u06a9\u0648 \u0645\u062a\u062d\u0631\u06a9 \u06a9\u0631\u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0633\u06d2 \u0627\u067e\u0646\u06d2 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u0645\u06cc\u06ba \u062f\u06cc\u06a9\u06be \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p><strong>\u0627\u062e\u062a\u06cc\u0627\u0631\u06cc \u0679\u0631\u0645\u06cc\u0646\u0644 \u062a\u0635\u062f\u06cc\u0642 (\u062b\u0627\u0628\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u06af\u0631\u0627\u0641\u0627\u0646\u0627 \u0645\u0646\u0633\u0644\u06a9 \u06c1\u06d2):<\/strong><\/p>\n<pre><code class=\"language-bash\">curl -s -u admin:admin123 'http:\/\/grafana.local\/api\/search?tag=clearledger' | jq -r '.[].title'\n\ncurl -s -u admin:admin123 'http:\/\/grafana.local\/api\/datasources' | jq -r '.[].name'\n<\/code><\/pre>\n<p>\u062c\u0628 \u0622\u067e \u067e\u06c1\u0644\u06cc \u06a9\u0645\u0627\u0646\u0688 \u0686\u0644\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0622\u067e \u06a9\u0648 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u06a9\u06d2 \u0686\u06be \u0646\u0627\u0645 \u0646\u0638\u0631 \u0622\u0626\u06cc\u06ba \u06af\u06d2\u06d4<\/p>\n<ul>\n<li>\n<p>ClearLedger - Kyverno \u067e\u0627\u0644\u06cc\u0633\u06cc \u06a9\u06cc \u062e\u0644\u0627\u0641 \u0648\u0631\u0632\u06cc<\/p>\n<\/li>\n<li>\n<p>ClearLedger - \u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u0627\u06cc\u0648\u0646\u0679 \u06a9\u06cc \u0679\u0627\u0626\u0645 \u0644\u0627\u0626\u0646<\/p>\n<\/li>\n<li>\n<p>ClearLedger - \u0633\u0631\u0648\u0633 \u06c1\u06cc\u0644\u062a\u06be + \u062a\u0648\u062b\u06cc\u0642 \u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc<\/p>\n<\/li>\n<li>\n<p>ClearLedger - \u062a\u0639\u0645\u06cc\u0644 \u06a9\u0631\u0646\u0633\u06cc<\/p>\n<\/li>\n<li>\n<p>ClearLedger - Kubernetes \u0622\u0688\u0679 \u0644\u0627\u06af \u062a\u062c\u0632\u06cc\u06c1<\/p>\n<\/li>\n<li>\n<p>ClearLedger - DORA \u0627\u0634\u0627\u0631\u06d2<\/p>\n<\/li>\n<\/ul>\n<p>\u062f\u0648\u0633\u0631\u06cc \u06a9\u0645\u0627\u0646\u0688 \u06a9\u0648 \u06a9\u0645 \u0627\u0632 \u06a9\u0645 \u062f\u0631\u062c \u0630\u06cc\u0644 \u062f\u06a9\u06be\u0627\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2:<\/p>\n<p><strong>\u06a9\u06cc\u0627 \u0645\u0637\u0644\u0628 \u06cc\u06c1 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2 \u06a9\u06c1 \u06cc\u06c1 \u06c1\u0648 \u06af\u06cc\u0627 \u06c1\u06d2\u061f<\/strong><\/p>\n<p><code>make check-7<\/code> \u06cc\u06c1 \u0635\u0631\u0641 \u0627\u0633 \u0628\u0627\u062a \u06a9\u06cc \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0645\u0627\u0646\u06cc\u0679\u0631\u0646\u06af \u067e\u0648\u0688 \u0686\u0644 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4 \u06af\u0631\u06cc\u0646 \u0622\u0624\u0679 \u067e\u0679 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 <strong>~ \u0646\u06c1\u06cc\u06ba<\/strong> \u00a77.4 \u06a9\u0648 \u0628\u062f\u0644 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2 \u0627\u0633 \u06a9\u0627 \u06a9\u06cc\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2\u061f<\/strong><\/p>\n<p>\u0645\u06cc\u06ba \u0646\u06d2 \u00a77.4 \u0645\u06cc\u06ba A, B \u0627\u0648\u0631 C \u06a9\u06cc \u0645\u0634\u0642\u06cc\u06ba \u06a9\u06cc\u06ba \u0627\u0648\u0631 \u00a77.6 \u06a9\u0627 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679 \u0645\u062d\u0641\u0648\u0638 \u06a9\u06cc\u0627\u06d4<\/p>\n<ol>\n<li>\n<p>Kyverno \u0633\u06d2 \u0627\u0646\u06a9\u0627\u0631 \u06a9\u0631\u06cc\u06ba (\u0679\u0631\u0645\u06cc\u0646\u0644 + \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688)<\/p>\n<\/li>\n<li>\n<p>\u0641\u0627\u0644\u06a9\u0648 \u0634\u06cc\u0644 \u0627\u0644\u0631\u0679\u0633 (\u0679\u0631\u0645\u06cc\u0646\u0644 + \u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u0627\u06cc\u0648\u0646\u0679 \u0679\u0627\u0626\u0645 \u0644\u0627\u0626\u0646)<\/p>\n<\/li>\n<li>\n<p>\u0644\u0627\u06af \u0627\u0646 \u0646\u0627\u06a9\u0627\u0645 (\u0679\u0631\u0645\u06cc\u0646\u0644 + \u0633\u0631\u0648\u0633 \u0627\u0633\u0679\u06cc\u0679)<\/p>\n<\/li>\n<li>\n<p>\u062a\u0639\u0645\u06cc\u0644 \u06a9\u06cc \u0635\u0648\u0631\u062a\u062d\u0627\u0644 \u06a9\u0627 \u062e\u0644\u0627\u0635\u06c1 (\u062a\u0645\u0627\u0645 \u062a\u06cc\u0646\u0648\u06ba \u0627\u0639\u062f\u0627\u062f\u0648\u0634\u0645\u0627\u0631 0 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1)<\/p>\n<\/li>\n<\/ol>\n<p>\u0627\u06cc\u06a9 \u0628\u0627\u0631 \u062c\u0628 \u0622\u067e \u06a9\u06d2 \u067e\u0627\u0633 \u06cc\u06c1 \u0686\u0627\u0631 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679\u0633 \u06c1\u0648\u06ba \u062a\u0648\u060c \u0645\u0631\u062d\u0644\u06c1 7 \u0645\u06a9\u0645\u0644 \u06c1\u0648 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-75-fill-in-the-request-rate-chart-optional\">7.5: \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u06cc \u0634\u0631\u062d \u06a9\u0627 \u0686\u0627\u0631\u0679 \u0628\u0646\u0627\u0646\u0627 (\u0627\u062e\u062a\u06cc\u0627\u0631\u06cc)<\/h3>\n<p><strong>\u0645\u0631\u062d\u0644\u06c1 7 \u0645\u06cc\u06ba \u0636\u0631\u0648\u0631\u06cc \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/strong> \u06cc\u06c1 \u0633\u06cc\u06a9\u0634\u0646 \u0627\u06cc\u06a9\u0633\u0631\u0633\u0627\u0626\u0632\u0632 A-C \u0627\u0648\u0631 \u00a77.6 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062f\u0631\u06a9\u0627\u0631 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0622\u067e \u062c\u0627\u0631\u06cc \u0631\u06a9\u06be\u0646\u0627 \u0686\u0627\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0648 \u0686\u06be\u0648\u0691 \u062f\u06cc\u06ba\u06d4<\/p>\n<p>\u0646\u06cc\u0632\u060c \u06cc\u06c1 \u0627\u0633\u0679\u06cc\u062c 7.5 (OpenTelemetry\/Tempo) \u062c\u06cc\u0633\u0627 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0630\u06cc\u0644\u06cc \u0633\u06cc\u06a9\u0634\u0646 <strong>\u0633\u0631\u0648\u0633 \u06a9\u06cc \u0637\u0631\u0641 \u0633\u06d2 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u06cc \u0634\u0631\u062d<\/strong> \u06cc\u06c1 \u0633\u0631\u0648\u0633 \u06c1\u06cc\u0644\u062a\u06be \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u06a9\u0627 \u0686\u0627\u0631\u0679 \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-what-this-section-is-for\">\u0627\u0633 \u0633\u06cc\u06a9\u0634\u0646 \u06a9\u0627 \u0645\u0642\u0635\u062f:<\/h4>\n<p>\u0633\u0631\u0648\u0633 \u06c1\u06cc\u0644\u062a\u06be + \u062a\u0648\u062b\u06cc\u0642 \u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u0645\u06cc\u06ba \u0644\u0627\u06af \u0627\u0646 \u0646\u0627\u06a9\u0627\u0645\u06cc \u067e\u06cc\u0646\u0644 \u0644\u0648\u06a9\u06cc \u0645\u06cc\u06ba \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0633\u0631\u0648\u0633 \u0686\u0627\u0631\u0679 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06c1 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u06cc \u0634\u0631\u062d \u06a9\u0686\u06be \u0645\u062e\u062a\u0644\u0641 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4 \u0627\u06cc\u067e \u067e\u0648\u0688\u0632 <code>\/metrics<\/code> \u0627\u06cc\u06a9 \u0627\u062e\u062a\u062a\u0627\u0645\u06cc \u0646\u0642\u0637\u06c1 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062a\u0627\u06a9\u06c1 Prometheus \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba \u06a9\u06cc \u062a\u0639\u062f\u0627\u062f \u06a9\u0648 \u062e\u062a\u0645 \u06a9\u0631 \u0633\u06a9\u06d2\u06d4<\/p>\n<p>\u06a9\u0648\u0688 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u06c1\u06cc \u0630\u062e\u06cc\u0631\u06c1 \u0645\u06cc\u06ba \u06c1\u06d2 (<code>app\/*\/prom_metrics.py<\/code>)\u06d4 Prometheus \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u06c1\u06cc \u0627\u0633 \u06a9\u0648 \u06a9\u06be\u0631\u0686\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2 (<code>clearledger-podmonitor.yaml<\/code>)\u06d4 \u0639\u0627\u0645 \u0645\u0633\u0626\u0644\u06c1: \u06a9\u0644\u0633\u0679\u0631 \u0627\u0628 \u0628\u06be\u06cc \u0627\u06cc\u06a9 \u067e\u0631\u0627\u0646\u06cc \u062a\u0635\u0648\u06cc\u0631 \u0686\u0644\u0627 \u0631\u06c1\u0627 \u06c1\u06d2 \u0627\u0633 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06a9\u06c1 \u0627\u0633 \u06a9\u06d2 \u06a9\u0648\u0688 \u06a9\u0648 \u062a\u0639\u0645\u06cc\u0631 \u0645\u06cc\u06ba \u0634\u0627\u0645\u0644 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u062a\u06be\u0627\u06d4<\/p>\n<h4 id=\"heading-step-1-check-if-you-already-have-metrics-30-seconds\">\u0645\u0631\u062d\u0644\u06c1 1: \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u0622\u06cc\u0627 \u0627\u0646\u0688\u06cc\u06a9\u06cc\u0679\u0631 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2 (30 \u0633\u06cc\u06a9\u0646\u0688)<\/h4>\n<p>\u067e\u06c1\u0644\u06d2 \u0627\u0633\u06d2 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u06cc\u06c1 \u06af\u0632\u0631 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u062a\u0648 \u0628\u0627\u0642\u06cc \u00a77.5 \u06a9\u0648 \u0686\u06be\u0648\u0691 \u062f\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">kubectl exec -n monitoring deploy\/kube-prometheus-stack-grafana -c grafana -- \n  wget -qO- 'http:\/\/kube-prometheus-stack-prometheus.monitoring:9090\/api\/v1\/query?query=http_requests_total' 2>\/dev\/null \n  | grep -o '\"__name__\":\"http_requests_total\"' | head -1\n<\/code><\/pre>\n<p><strong>\u067e\u0627\u0633:<\/strong> \u067e\u0631\u0646\u0679\u0633 <code>\"__name__\":\"http_requests_total\"<\/code>. \u0633\u0631\u0648\u0633 \u0627\u0633\u0679\u06cc\u0679\u0633 \u06a9\u0648 \u06a9\u06be\u0648\u0644\u0646\u0627\u060c \u0631\u06cc\u0641\u0631\u06cc\u0634 \u06a9\u0631\u0646\u0627\u060c \u0627\u0648\u0631 \u0633\u0631\u0648\u0633 \u0686\u0627\u0631\u0679 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06c1 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba \u06a9\u06cc \u0634\u0631\u062d \u0645\u06cc\u06ba \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u06c1\u06cc \u0644\u0627\u0626\u0646\u06cc\u06ba \u06c1\u0648\u0646\u06cc \u0686\u0627\u06c1\u0626\u06cc\u06ba\u06d4<\/p>\n<p><strong>\u06a9\u0648\u0626\u06cc \u0622\u0624\u0679 \u067e\u0679 \u0646\u06c1\u06cc\u06ba:<\/strong> \u0645\u0631\u062d\u0644\u06c1 2 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062c\u0627\u0631\u06cc \u0631\u06a9\u06be\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-step-2-deploy-images-that-expose-metrics\">\u0645\u0631\u062d\u0644\u06c1 2: \u0628\u06d2 \u0646\u0642\u0627\u0628 \u062a\u0635\u0627\u0648\u06cc\u0631 \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631\u06cc\u06ba\u06d4 <code>\/metrics<\/code><\/h4>\n<p>\u0628\u0631\u0627\u06c1 \u06a9\u0631\u0645 \u0627\u06cc\u06a9 \u0631\u0627\u0633\u062a\u06c1 \u0645\u0646\u062a\u062e\u0628 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p><strong>\u0631\u0627\u0633\u062a\u06c1 A: GitOps (\u0627\u06af\u0631 \u0622\u067e \u0646\u06d2 1 \u0627\u0648\u0631 2 \u0645\u0631\u0627\u062d\u0644 \u0633\u06d2 CI\/CD \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0627 \u06c1\u06d2)<\/strong><\/p>\n<ol>\n<li>\n<p>\u0639\u0632\u0645 \u06a9\u0648 \u0622\u06af\u06d2 \u0628\u0691\u06be\u0627\u0626\u06cc\u06ba\u06d4 <code>main<\/code> \u06cc\u06c1 \u0627\u06cc\u067e \u0627\u0633\u0679\u0648\u0631 \u0645\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0646\u0626\u06cc \u062a\u0635\u0648\u06cc\u0631 \u0628\u0646\u0627\u0646\u06d2 \u0627\u0648\u0631 \u0627\u067e \u0688\u06cc\u0679 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 CI \u06a9\u0627 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u06cc\u06ba\u06d4 <code>clearledger-infra<\/code>.<\/p>\n<\/li>\n<li>\n<p>ArgoCD \u0638\u0627\u06c1\u0631 \u06c1\u0648\u0646\u06d2 \u062a\u06a9 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u06cc\u06ba\u06d4 <strong>\u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631<\/strong> \u0627\u0648\u0631 <strong>\u0635\u062d\u062a \u0645\u0646\u062f<\/strong> Clearledger \u0627\u06cc\u067e \u0645\u06cc\u06ba<\/p>\n<\/li>\n<li>\n<p>\u0645\u0631\u062d\u0644\u06c1 3 \u067e\u0631 \u062c\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ol>\n<p><strong>\u0631\u0627\u0633\u062a\u06c1 B: \u0644\u06cc\u0628\u0632 \u067e\u0631 \u062c\u0627\u0626\u06cc\u06ba (\u062a\u06cc\u0632\u060c \u0635\u0631\u0641 \u0645\u0642\u0627\u0645\u06cc)<\/strong><\/p>\n<pre><code class=\"language-bash\">export DOCKER_USERNAME=your-dockerhub-user\nbash stages\/stage-7-observability\/scripts\/build-metrics-images.sh\n<\/code><\/pre>\n<p>\u06cc\u06c1 \u062a\u06cc\u0646\u0648\u06ba \u062e\u062f\u0645\u0627\u062a \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u06cc\u0679\u0631\u06a9\u0633 \u0633\u06d2 \u0686\u0644\u0646\u06d2 \u0648\u0627\u0644\u06cc \u062a\u0635\u0627\u0648\u06cc\u0631 \u0628\u0646\u0627\u062a\u0627\u060c \u0622\u06af\u06d2 \u0628\u0691\u06be\u0627\u062a\u0627 \u0627\u0648\u0631 \u0631\u0648\u0644 \u0622\u0624\u0679 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u0627\u0644\u0627\u0631\u0645:<\/strong> ArgoCD Self-Repair \u0627\u0646 \u062a\u0635\u0648\u06cc\u0631\u06cc \u0679\u06cc\u06af\u0632 \u06a9\u0648 \u0645\u0646\u0679\u0648\u06ba \u0645\u06cc\u06ba \u0648\u0627\u067e\u0633 \u06a9\u0631 \u0633\u06a9\u062a\u0627 \u06c1\u06d2 \u0627\u06af\u0631: <code>clearledger-infra<\/code> \u06cc\u06c1 \u0627\u0628 \u0628\u06be\u06cc \u067e\u0631\u0627\u0646\u06d2 \u0679\u06cc\u06af \u06a9\u06cc \u0637\u0631\u0641 \u0627\u0634\u0627\u0631\u06c1 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0627\u06cc\u06a9 \u0633\u0627\u062f\u06c1 \u06c1\u06cc\u0646\u0688 \u0622\u0646 \u0688\u06cc\u0645\u0648 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0679\u06be\u06cc\u06a9 \u06c1\u06d2\u06d4 \u062c\u0627\u0631\u06cc \u062a\u0631\u0645\u06cc\u0645 \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u067e\u0627\u062a\u06be A \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba \u06cc\u0627 \u0627\u0646\u0641\u0631\u0627\u0633\u0679\u0631\u06a9\u0686\u0631 \u0631\u06cc\u067e\u0648\u0632\u0679\u0631\u06cc \u06a9\u0648 \u0627\u067e \u0688\u06cc\u0679 \u06a9\u0631\u06cc\u06ba (\u00a72 \u0631\u0648\u0644 \u0628\u06cc\u06a9 \u0646\u0648\u0679\u0633 \u062f\u06cc\u06a9\u06be\u06cc\u06ba)\u06d4<\/p>\n<h4 id=\"heading-step-3-verify-metrics-landed-60-seconds-after-rollout\">\u0645\u0631\u062d\u0644\u06c1 3: \u067e\u06c1\u0646\u0686\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0645\u06cc\u0679\u0631\u06a9\u0633 \u06a9\u0648 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba (\u0631\u0648\u0644 \u0622\u0624\u0679 \u06a9\u06d2 \u0628\u0639\u062f ~60 \u0633\u06cc\u06a9\u0646\u0688)<\/h4>\n<pre><code class=\"language-bash\">kubectl exec -n clearledger deploy\/auth-service -c auth-service -- \n  wget -qO- http:\/\/127.0.0.1:8000\/metrics 2>\/dev\/null | head -5\n<\/code><\/pre>\n<p><strong>\u067e\u0627\u0633:<\/strong> \u0633\u06d2 \u0634\u0631\u0648\u0639 \u06c1\u0648\u0646\u06d2 \u0648\u0627\u0644\u06cc \u0644\u06a9\u06cc\u0631\u06cc\u06ba\u06d4 <code># HELP<\/code> \u06cc\u0627 <code>http_requests_total<\/code>.<\/p>\n<p>\u067e\u06be\u0631 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u06a9\u06cc\u0627 \u067e\u0631\u0648\u0645\u06cc\u062a\u06be\u06cc\u0633 \u0627\u0633\u06d2 \u062f\u06cc\u06a9\u06be \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\">kubectl exec -n monitoring deploy\/kube-prometheus-stack-grafana -c grafana -- \n  wget -qO- 'http:\/\/kube-prometheus-stack-prometheus.monitoring:9090\/api\/v1\/query?query=http_requests_total' 2>\/dev\/null \n  | grep -o '\"__name__\":\"http_requests_total\"' | head -1\n<\/code><\/pre>\n<p><strong>\u067e\u0627\u0633:<\/strong> <code>\"__name__\":\"http_requests_total\"<\/code><\/p>\n<p>\u06a9\u0686\u06be \u0679\u0631\u06cc\u0641\u06a9 \u067e\u06cc\u062f\u0627 \u06a9\u0631\u06cc\u06ba (\u062f\u0648\u0628\u0627\u0631\u06c1 \u0648\u0631\u0632\u0634 C curl loops \u06cc\u0627 <code>http:\/\/clearledger.local\/auth\/health<\/code> \u0686\u0646\u062f \u0628\u0627\u0631)\u060c 60 \u0633\u06cc\u06a9\u0646\u0688 \u062a\u06a9 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u06cc\u06ba\u060c \u0627\u0648\u0631 \u067e\u06be\u0631 \u0627\u0633\u06d2 \u06a9\u06be\u0648\u0644\u06cc\u06ba\u06d4 <strong>\u0633\u0631\u0648\u0633 \u06c1\u06cc\u0644\u062a\u06be + \u062a\u0648\u062b\u06cc\u0642 \u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc<\/strong> \u0627\u0648\u0631 \u062a\u0627\u0632\u06c1 \u062f\u0645 \u06a9\u0631\u06cc\u06ba\u06d4 <strong>\u0633\u0631\u0648\u0633 \u06a9\u06cc \u0637\u0631\u0641 \u0633\u06d2 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u06cc \u0634\u0631\u062d<\/strong> \u0622\u067e \u06a9\u0648 \u0627\u0633 \u06a9\u06d2 \u0644\u0626\u06d2 \u0644\u0627\u0626\u0646\u06cc\u06ba \u062f\u06cc\u06a9\u06be\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2: <code>auth-service<\/code>, <code>ledger-service<\/code>\u06cc\u0627 <code>notification-service<\/code>.<\/p>\n<h4 id=\"heading-when-to-stop\">\u06a9\u0628 \u0631\u0648\u06a9\u0646\u0627 \u06c1\u06d2:<\/h4>\n<ul>\n<li>\n<p><strong>\u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u06cc \u0634\u0631\u062d \u0627\u0628 \u0628\u06be\u06cc \u062e\u0627\u0644\u06cc \u06c1\u06d2 \u0644\u06cc\u06a9\u0646 \u0644\u0627\u06af \u0627\u0646 \u0646\u0627\u06a9\u0627\u0645\u06cc \u067e\u06cc\u0646\u0644 \u06a9\u0627\u0645 \u06a9\u0631 \u0631\u06c1\u0627 \u06c1\u06d2\u061f<\/strong> \u0645\u0631\u062d\u0644\u06c1 7 \u0627\u0628 \u0645\u06a9\u0645\u0644 \u06c1\u0648 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u06cc \u0634\u0631\u062d \u0627\u0686\u06be\u06cc \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>Prometheus \u0627\u0633\u062a\u0641\u0633\u0627\u0631 \u06af\u0632\u0631 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u0644\u06cc\u06a9\u0646 \u0686\u0627\u0631\u0679 \u062e\u0627\u0644\u06cc \u06c1\u06d2\u061f<\/strong> \u0645\u062f\u062a \u0645\u06cc\u06ba \u062a\u0648\u0633\u06cc\u0639 \u06a9\u0631\u06cc\u06ba\u06d4 <strong>\u0622\u062e\u0631\u06cc \u06af\u06be\u0646\u0679\u06d2<\/strong>\u0679\u0631\u06cc\u0641\u06a9 \u0628\u0646\u0627\u0626\u06cc\u06ba\u060c 60 \u0633\u06cc\u06a9\u0646\u0688 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u06cc\u06ba\u060c \u0627\u0648\u0631 \u067e\u06be\u0631 \u0631\u06cc\u0641\u0631\u06cc\u0634 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ul>\n<h3 id=\"heading-76-wrap-up-stage-7-screenshots-done-check\">7.6: \u0645\u0631\u062d\u0644\u06c1 7 \u06a9\u06cc \u062a\u06a9\u0645\u06cc\u0644 (\u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679 + \u062a\u0635\u062f\u06cc\u0642 \u0645\u06a9\u0645\u0644)<\/h3>\n<p>\u062a\u0642\u0631\u06cc\u0628\u0627\u064b \u06c1\u0648 \u0686\u06a9\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0633\u06cc\u06a9\u0634\u0646 \u0628\u062a\u0627\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0627\u067e\u0646\u06d2 \u0634\u0648\u0627\u06c1\u062f \u06a9\u0648 \u06a9\u06cc\u0633\u06d2 \u0645\u062d\u0641\u0648\u0638 \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2 \u0627\u0648\u0631 \u067e\u06be\u0631 \u0622\u06af\u06d2 \u0628\u0691\u06be\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-are-you-actually-finished\">\u06a9\u06cc\u0627 \u06cc\u06c1 \u0648\u0627\u0642\u0639\u06cc \u062e\u062a\u0645 \u06c1\u0648 \u06af\u06cc\u0627 \u06c1\u06d2\u061f<\/h4>\n<p>\u06af\u0631\u0627\u0641\u0627\u0646\u0627 \u06a9\u06be\u0648\u0644\u0646\u0627 \u0627\u0648\u0631 \u0686\u06be \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688\u0632 \u06a9\u0648 \u062f\u06cc\u06a9\u06be\u0646\u0627 \u06a9\u0627\u0641\u06cc \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 <code>make check-7<\/code> \u0635\u0631\u0641 \u06af\u0632\u0631 \u062c\u0627\u0646\u0627 \u06a9\u0627\u0641\u06cc \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0627\u0633 \u0633\u06d2 \u0635\u0631\u0641 \u06cc\u06c1 \u062b\u0627\u0628\u062a \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u067e\u06be\u0644\u06cc \u0686\u0644 \u0631\u06c1\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u00a77.4 \u0686\u0644\u0627\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f\u060c \u0645\u06cc\u06ba \u0646\u06d2 \u067e\u06cc\u0646\u0644 \u06a9\u06d2 \u0627\u067e \u0688\u06cc\u0679 \u06c1\u0648\u0646\u06d2 \u06a9\u0627 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u06cc\u0627 \u0627\u0648\u0631 \u06a9\u0644\u0633\u0679\u0631 \u0633\u06d2 \u062a\u06cc\u0646 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679\u0633 \u0645\u062d\u0641\u0648\u0638 \u06a9\u0631 \u0644\u06cc\u06d2\u06d4<\/p>\n<p>\u0627\u06af\u0631 \u067e\u06cc\u0646\u0644 \u062e\u0627\u0644\u06cc \u06c1\u06d2 \u06cc\u0627 \u0635\u0631\u0641 \u067e\u0631\u0627\u0646\u0627 \u067e\u0648\u0633\u0679\u06af\u0631\u06cc\u0633 \u0634\u0648\u0631 \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2 \u062a\u0648 \u067e\u06c1\u0644\u06d2 \u00a77.4 \u067e\u0631 \u0648\u0627\u067e\u0633 \u062c\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<p><strong>\u06c1\u0631 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679 \u0633\u06d2 \u067e\u06c1\u0644\u06d2:<\/strong> \u0648\u0642\u062a \u06a9\u06cc \u062d\u062f \u06a9\u0648 \u0627\u0633 \u067e\u0631 \u0633\u06cc\u0679 \u06a9\u0631\u06cc\u06ba\u06d4 <strong>\u0622\u062e\u0631\u06cc 15 \u0645\u0646\u0679<\/strong> (\u06cc\u0627 <strong>\u0622\u062e\u0631\u06cc \u06af\u06be\u0646\u0679\u06d2<\/strong> \u0645\u0634\u0642 B)\u06d4 \u0641\u0631\u06cc\u0645 \u0645\u06cc\u06ba \u0679\u0627\u0626\u0645 \u0686\u0646\u0646\u06d2 \u0648\u0627\u0644\u0627 \u0627\u0648\u0631 \u067e\u06cc\u0646\u0644 \u0679\u0627\u0626\u0679\u0644 \u0634\u0627\u0645\u0644 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679 1: \u0641\u0627\u0644\u06a9\u0648 \u0627\u0644\u0631\u0679 (\u0648\u0631\u0632\u0634 \u0628\u06cc)<\/strong><\/p>\n<p>\u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u0627\u06cc\u0648\u0646\u0679\u0633 \u06a9\u06cc \u0679\u0627\u0626\u0645 \u0644\u0627\u0626\u0646 \u06a9\u06be\u0648\u0644\u06cc\u06ba\u06d4<\/p>\n<p>\u0642\u0628\u0636\u06c1 <strong>\u062d\u0627\u0644\u06cc\u06c1 \u062e\u0637\u0631\u06c1\/\u0627\u0646\u062a\u0628\u0627\u06c1\u06cc \u0648\u0627\u0642\u0639\u0627\u062a<\/strong> \u0627\u06af\u0631 \u0622\u067e \u06a9\u06d2 \u067e\u0627\u0633 \u06a9\u0648\u0626\u06cc \u0633\u0637\u0631 \u06c1\u06d2 \u062c\u0633 \u06a9\u0627 \u062a\u0630\u06a9\u0631\u06c1 \u06c1\u06d2: <code>Shell spawned<\/code> \u06cc\u0627 <code>auth-service<\/code>. \u0627\u06af\u0631 \u067e\u0648\u0633\u0679\u06af\u0631\u06cc\u0633 \u0644\u0627\u0626\u0646 \u0627\u0633\u06d2 \u062f\u0641\u0646 \u06a9\u0631\u062a\u06cc \u06c1\u06d2 \u062a\u0648 \u0644\u0627\u06af \u067e\u06cc\u0646\u0644 \u06a9\u06d2 \u0627\u0646\u062f\u0631 Cmd+F \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0627\u0628 \u0628\u06be\u06cc \u0627\u06c1\u0645 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679 2: Kyverno Rejection (\u0648\u0631\u0632\u0634 A)<\/strong><\/p>\n<p>Kyverno \u06a9\u06cc \u067e\u0627\u0644\u06cc\u0633\u06cc\u0648\u06ba \u06a9\u06cc \u062e\u0644\u0627\u0641 \u0648\u0631\u0632\u06cc\u0648\u06ba \u06a9\u0627 \u0627\u0646\u06a9\u0634\u0627\u0641 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u0642\u0628\u0636\u06c1 <strong>\u067e\u0627\u0644\u06cc\u0633\u06cc \u06a9\u06cc \u062e\u0644\u0627\u0641 \u0648\u0631\u0632\u06cc (\u0648\u0642\u062a \u06a9\u06cc \u062d\u062f)<\/strong> \u06cc\u0627 <strong>\u062e\u0644\u0627\u0641 \u0648\u0631\u0632\u06cc (\u0648\u0642\u062a \u06a9\u06cc \u062d\u062f)<\/strong> 1 \u0633\u06d2 \u0628\u0691\u0627 \u06cc\u0627 \u0627\u0633 \u06a9\u06d2 \u0628\u0631\u0627\u0628\u0631 \u0646\u0645\u0628\u0631 \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679 3: \u062a\u0639\u0645\u06cc\u0644 \u06a9\u0627 \u062e\u0644\u0627\u0635\u06c1 (\u0648\u0631\u0632\u0634 D)<\/strong><\/p>\n<p>\u06a9\u06be\u0644\u06cc \u062a\u0639\u0645\u06cc\u0644 \u06a9\u0631\u0646\u0633\u06cc\u06d4<\/p>\n<p>\u0627\u0648\u067e\u0631\u06cc \u0642\u0637\u0627\u0631 \u06a9\u0648 \u06a9\u06cc\u067e\u0686\u0631 \u06a9\u0631\u06cc\u06ba \u062c\u06c1\u0627\u06ba \u062a\u06cc\u0646\u0648\u06ba \u0627\u0639\u062f\u0627\u062f\u0648\u0634\u0645\u0627\u0631 0 \u0633\u06d2 \u0627\u0648\u067e\u0631 \u06c1\u06cc\u06ba\u06d4 <strong>\u067e\u0627\u0644\u06cc\u0633\u06cc \u06a9\u06cc \u062e\u0644\u0627\u0641 \u0648\u0631\u0632\u06cc<\/strong>, <strong>\u0631\u0646 \u0679\u0627\u0626\u0645 \u062f\u06be\u0645\u06a9\u06cc\u0627\u06ba<\/strong>\u0627\u0648\u0631 <strong>\u062a\u0635\u062f\u06cc\u0642 \u06a9\u06cc \u0646\u0627\u06a9\u0627\u0645 \u06a9\u0648\u0634\u0634<\/strong>.<\/p>\n<p><strong>\u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679 4 (\u0627\u062e\u062a\u06cc\u0627\u0631\u06cc): \u0644\u0627\u06af \u0627\u0646 \u0645\u06cc\u06ba \u0646\u0627\u06a9\u0627\u0645\u06cc (\u0648\u0631\u0632\u0634 C)<\/strong><\/p>\n<p>\u0633\u0631\u0648\u0633 \u0627\u0633\u0679\u06cc\u0679\u0633 + \u062a\u0648\u062b\u06cc\u0642 \u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u06a9\u06be\u0648\u0644\u06cc\u06ba\u06d4<\/p>\n<p>\u0642\u0628\u0636\u06c1 <strong>\u0644\u0627\u06af \u0627\u0646 \u06a9\u06cc \u0646\u0627\u06a9\u0627\u0645 \u06a9\u0648\u0634\u0634\u06cc\u06ba (1 \u06af\u06be\u0646\u0679\u06c1)<\/strong> 0 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u06cc\u0627 <strong>\u0644\u0627\u06af \u0627\u0646 \u0646\u0627\u06a9\u0627\u0645\u06cc \u0644\u0627\u06af \u0627\u0633\u0679\u0631\u06cc\u0645<\/strong> \u0688\u0633\u067e\u0644\u06d2 <code>lab-attacker@evil.com<\/code>.<\/p>\n<p>\u0641\u0627\u0626\u0644 \u06a9\u0648 \u0645\u0646\u0627\u0633\u0628 \u062c\u06af\u06c1 \u067e\u0631 \u0645\u062d\u0641\u0648\u0638 \u06a9\u0631\u06cc\u06ba\u060c \u062c\u06cc\u0633\u06d2: <code>docs\/evidence\/stage-7-screenshot-1-falco.png<\/code>. \u0627\u0646 \u06a9\u0627 \u0646\u0627\u0645 \u0644\u06cc\u06ba \u0627\u0648\u0631 \u0622\u067e \u06a9\u0648 \u0645\u0639\u0644\u0648\u0645 \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u06af\u0627 \u06a9\u06c1 \u06c1\u0631 \u0627\u06cc\u06a9 \u06a9\u06cc\u0627 \u062b\u0627\u0628\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u062d\u062a\u0645\u06cc \u062a\u0635\u062f\u06cc\u0642:<\/strong> \u0686\u0644\u0627\u0626\u06cc\u06ba <code>make check-7<\/code> (\u00a77.7)\u060c VM \u06a9\u0648 \u0645\u062d\u0641\u0648\u0638 \u06a9\u0631\u0646\u0627 \u0622\u067e \u06a9\u0648 \u0645\u0631\u062d\u0644\u06c1 7 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u062f\u06cc\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-77-verify\">7.7: \u062a\u0635\u062f\u06cc\u0642<\/h3>\n<pre><code class=\"language-bash\">make check-7\n<\/code><\/pre>\n<p><strong>\u0645\u062a\u0648\u0642\u0639:<\/strong><\/p>\n<pre><code class=\"language-text\">&#x25b6; Stage 7 \u2014 Observability (Grafana + Prometheus + Loki)\n  \u2713 Prometheus is running\n  \u2713 Grafana reachable (http:\/\/grafana.local or in-cluster health OK)\n  \u2713 Loki pod is running (0 restarts)\n  \u2713 Loki reachable from Grafana (http:\/\/loki:3100\/ready)\n  \u2713 ClearLedger alerting rules exist\n  \u2713 ClearLedger dashboards imported (6 found)\n<\/code><\/pre>\n<p>\u0644\u0648\u06a9\u06cc \u06a9\u06d2 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0634\u0631\u0648\u0639 \u06c1\u0648\u0646\u06d2 \u06cc\u0627 \u06af\u0645\u0634\u062f\u06c1 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688\u0632 \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u0627\u0646\u062a\u0628\u0627\u06c1: \u0628\u0631\u0627\u06c1 \u06a9\u0631\u0645 \u0645\u0631\u062d\u0644\u06c1 7 \u0645\u06a9\u0645\u0644 \u06a9\u0631\u0646\u06d2 \u067e\u0631 \u0627\u0635\u0631\u0627\u0631 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u00a77.1 \u06a9\u0648 \u062f\u0631\u0633\u062a \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p><strong>VM \u0627\u0633\u0679\u0648\u0631\u06cc\u062c<\/strong> \u00a77.6 \u06a9\u06d2 \u0628\u0639\u062f \u0627\u0648\u0631 <code>make check-7<\/code>. \u0646\u06cc\u0686\u06d2 \u0645\u0631\u062d\u0644\u06c1 7 \u06a9\u06d2 \u0622\u062e\u0631 \u0645\u06cc\u06ba \u0628\u0644\u0627\u06a9 \u062f\u06cc\u06a9\u06be\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-78-what-broke-lab-notes-interview-talking-points\">7.8: \u06a9\u06cc\u0627 \u0645\u0633\u0626\u0644\u06c1 \u062a\u06be\u0627 (\u0644\u06cc\u0628 \u0646\u0648\u0679\u0633 + \u0627\u0646\u0679\u0631\u0648\u06cc\u0648 \u06a9\u06cc \u062c\u06be\u0644\u06a9\u06cc\u0627\u06ba)<\/h3>\n<p><strong>\u0627\u06cc\u06a9 \u062c\u0645\u0644\u06d2 \u0645\u06cc\u06ba \u0627\u0633\u0679\u06cc\u06a9:<\/strong> Prometheus \u0646\u0645\u0628\u0631\u0632 (\u0645\u06cc\u0679\u0631\u06a9\u0633) \u0627\u0633\u0679\u0648\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0644\u0648\u06a9\u06cc \u0644\u0627\u06af \u0644\u0627\u0626\u0646\u0632 \u0627\u0633\u0679\u0648\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u06af\u0631\u0627\u0641\u0627\u0646\u0627 \u062f\u0648\u0646\u0648\u06ba \u06a9\u0648 \u0628\u0635\u0631\u06cc \u0637\u0648\u0631 \u067e\u0631 \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u06a9\u0686\u06be \u0628\u06be\u06cc \u0638\u0627\u06c1\u0631 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u0627 \u062c\u0628 \u062a\u06a9 \u06a9\u06c1 \u06a9\u0644\u0633\u0679\u0631 \u0645\u06cc\u06ba \u062d\u0642\u06cc\u0642\u062a \u0645\u06cc\u06ba \u06a9\u0686\u06be \u0646\u06c1 \u06c1\u0648\u06d4<\/p>\n<h4 id=\"heading-what-tripped-you-up-in-the-lab\">\u0622\u067e \u06a9\u0648 \u0644\u06cc\u0628\u0627\u0631\u0679\u0631\u06cc \u0645\u06cc\u06ba \u06a9\u0633 \u0686\u06cc\u0632 \u0646\u06d2 \u067e\u0631\u06cc\u0634\u0627\u0646 \u06a9\u06cc\u0627\u061f<\/h4>\n<ol>\n<li>\n<p><strong>\u062a\u0646\u0635\u06cc\u0628 \u06a9\u06d2 \u0641\u0648\u0631\u0627\u064b \u0628\u0639\u062f \u062e\u0627\u0644\u06cc \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688:<\/strong> \u0639\u0627\u0645 \u06af\u0631\u0627\u0641\u0627\u0646\u0627 \u0648\u0627\u0642\u0639\u0627\u062a \u067e\u06cc\u062f\u0627 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u00a77.4 (Kyverno \u0645\u0633\u062a\u0631\u062f\u060c Falco \u0634\u06cc\u0644\u060c \u0644\u0627\u06af \u0627\u0646 \u0646\u0627\u06a9\u0627\u0645\u06cc) \u0627\u0633 \u06a9\u0648 \u0645\u062a\u062d\u0631\u06a9 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0644\u0648\u06a9\u06cc \u0633\u0633\u062a \u06c1\u0648\u062c\u0627\u062a\u0627 \u06c1\u06d2 \u06cc\u0627 \"\u0645\u0646\u0633\u0648\u062e\" \u067e\u0631 \u067e\u06be\u0646\u0633 \u062c\u0627\u062a\u0627 \u06c1\u06d2:<\/strong> \u0641\u0627\u0644\u06a9\u0648 \u0644\u0627\u06af\u0632 \u0628\u06c1\u062a \u0628\u0691\u06d2 \u06c1\u06cc\u06ba\u06d4 <strong>\u06af\u0632\u0634\u062a\u06c1 24 \u06af\u06be\u0646\u0679\u06d2<\/strong> \u0686\u06be\u0648\u0679\u06d2 \u06a9\u0644\u0633\u0679\u0631\u0632 \u0627\u0648\u0648\u0631\u0644\u0648\u0688 \u06c1\u06cc\u06ba\u06d4 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba <strong>\u0622\u062e\u0631\u06cc \u06af\u06be\u0646\u0679\u06d2<\/strong>\u0627\u06cc\u06a9 \u0648\u0642\u062a \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u0645\u0646\u062a\u062e\u0628 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 10 \u0633\u06cc\u06a9\u0646\u0688 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><code>make check-7<\/code> \u067e\u0627\u0633 \u06c1\u0648 \u06af\u06cc\u0627 \u0644\u06cc\u06a9\u0646 \u067e\u06cc\u0646\u0644 \u0627\u0628\u06be\u06cc \u0628\u06be\u06cc \u062e\u0627\u0644\u06cc \u06c1\u06d2\u06d4 <em>(\u0635\u0631\u0641 \u0644\u06cc\u0628 \u0686\u06cc\u06a9 \u0644\u0633\u0679\u060c \u0627\u0646\u0679\u0631\u0648\u06cc\u0648 \u06a9\u0627 \u0645\u0648\u0636\u0648\u0639 \u0646\u06c1\u06cc\u06ba)<\/em>: \u0627\u0633 \u0628\u0627\u062a \u06a9\u06cc \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 Prometheus\/Loki\/Grafana Pod \u0627\u0633 \u06a9\u06cc \u062d\u06cc\u062b\u06cc\u062a \u06a9\u0648 \u0686\u06cc\u06a9 \u06a9\u0631 \u06a9\u06d2 \u06a9\u0627\u0645 \u06a9\u0631 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4 \u06c1\u0627\u06ba <strong>~ \u0646\u06c1\u06cc\u06ba<\/strong> \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 \u0648\u0627\u0642\u0639\u06c1 \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2\u06d4 \u0633\u0646\u06cc\u067e \u0634\u0627\u0679 \u0644\u06cc\u0646\u06d2 \u0627\u0648\u0631 \u0622\u06af\u06d2 \u0628\u0691\u06be\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0622\u067e \u06a9\u0648 \u0627\u0628 \u0628\u06be\u06cc \u00a77.4 + \u00a77.6 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<\/ol>\n<h4 id=\"heading-if-someone-asks-about-this-in-an-interview\">\u0627\u06af\u0631 \u06a9\u0648\u0626\u06cc \u0622\u067e \u0633\u06d2 \u0627\u0646\u0679\u0631\u0648\u06cc\u0648 \u0645\u06cc\u06ba \u0627\u0633 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u067e\u0648\u0686\u06be\u06d2\u06d4<\/h4>\n<p><strong>\u06a9\u06cc\u0627 \u0622\u067e \u06a9\u0627 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u062e\u0627\u0644\u06cc \u06c1\u06d2\u061f<\/strong> \u06af\u0631\u0627\u0641\u0627\u0646\u0627 \u0635\u0631\u0641 \u0648\u06c1\u06cc \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2 \u062c\u0648 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u06c1\u0648\u0686\u06a9\u0627 \u06c1\u06d2\u06d4 \u0679\u0627\u0626\u0645 \u0631\u06cc\u0646\u062c \u0645\u06cc\u06ba \u06a9\u0648\u0626\u06cc \u0627\u06cc\u0648\u0646\u0679 \u0646\u06c1 \u06c1\u0648\u0646\u06d2 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 \u067e\u06cc\u0646\u0644 \u062e\u0627\u0644\u06cc \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0645\u0639\u0645\u0648\u0644 \u06c1\u06d2 \u062c\u0628 \u062a\u06a9 \u06a9\u06c1 \u0622\u067e \u06a9\u0686\u06be \u0646\u06c1\u06cc\u06ba \u0686\u0644\u0627\u062a\u06d2\u06d4<\/p>\n<p><strong>\u06a9\u06cc\u0627 \u0644\u0648\u06a9\u06cc \u0686\u06be\u0648\u0679\u06d2 \u06a9\u0644\u0633\u0679\u0631\u0632 \u067e\u0631 \u0633\u0633\u062a \u06c1\u06d2\u061f<\/strong> \u0641\u0627\u0644\u06a9\u0648 \u0644\u0627\u06af\u0632 \u0628\u06c1\u062a \u0628\u0691\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06c1\u0645 \u0646\u06d2 \u0648\u0642\u062a \u06a9\u06cc \u062d\u062f\u0648\u062f \u06a9\u0648 \u0645\u062e\u062a\u0635\u0631 \u0631\u06a9\u06be\u0627 (24 \u06af\u06be\u0646\u0679\u06d2 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 15 \u0645\u0646\u0679) \u0627\u0648\u0631 \u0627\u06cc\u06a9 \u0648\u0642\u062a \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u06a9\u06be\u0648\u0644\u0627\u06d4 \u0648\u06c1\u06cc \u0679\u0631\u06cc\u0688 \u0622\u0641 \u0644\u0627\u06af\u0648 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u06cc\u0633\u06d2 \u0645\u062d\u062f\u0648\u062f \u06c1\u0627\u0631\u0688 \u0648\u06cc\u0626\u0631 \u062a\u06cc\u0627\u0631 \u06a9\u0631\u062a\u06d2 \u0648\u0642\u062a\u06d4<\/p>\n<p><strong>\u0622\u067e \u0646\u06d2 \u06a9\u06cc\u0633\u06d2 \u062b\u0627\u0628\u062a \u06a9\u06cc\u0627 \u06a9\u06c1 \u06cc\u06c1 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u061f<\/strong> \u062d\u0645\u0644\u06c1 \u0645\u06cc\u06ba \u0646\u06d2 \u062e\u0648\u062f \u06a9\u06cc\u0627\u06d4 \u0627\u0633 \u0646\u06d2 \u063a\u0644\u0637 \u067e\u0648\u0688\u0632 \u06a9\u0648 \u0645\u0633\u062a\u0631\u062f \u06a9\u0631 \u062f\u06cc\u0627\u060c \u0686\u0644\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u06a9\u0646\u0679\u06cc\u0646\u0631 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0634\u06cc\u0644 \u067e\u06cc\u062f\u0627 \u06a9\u06cc\u0627\u060c \u0627\u0648\u0631 \u0627\u06cc\u06a9 \u0646\u0627\u06a9\u0627\u0645 \u0644\u0627\u06af \u0627\u0646 \u0628\u06be\u06cc\u062c\u0627\u06d4 \u067e\u06be\u0631 \u0645\u06cc\u06ba \u0646\u06d2 \u06af\u0631\u0627\u0641\u0627\u0646\u0627 \u06a9\u0648 \u0686\u06cc\u06a9 \u06a9\u06cc\u0627 \u0627\u0648\u0631 \u0645\u06cc\u0686\u0646\u06af \u067e\u06cc\u0646\u0644\u0632 \u06a9\u0627 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679 \u0644\u06cc\u0627\u06d4 \u0679\u0631\u0645\u06cc\u0646\u0644 \u06a9\u0627\u0645 \u067e\u06c1\u0644\u06d2\u060c \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u062b\u0628\u0648\u062a \u062f\u0648\u0633\u0631\u0627.<\/p>\n<p><strong>\u0645\u062e\u062a\u0635\u0631 \u0648\u0631\u0698\u0646 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u0622\u067e \u0627\u0633\u06d2 \u0627\u0648\u0646\u0686\u06cc \u0622\u0648\u0627\u0632 \u0645\u06cc\u06ba \u06a9\u06c1\u06c1 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/strong><\/p>\n<blockquote>\n<p>\"\u06c1\u0645 \u0646\u06d2 Kyverno \u0627\u0648\u0631 Falco \u06a9\u0648 Grafana \u0633\u06d2 \u0645\u0646\u0633\u0644\u06a9 \u06a9\u06cc\u0627\u06d4 \u0627\u0633 \u06a9\u0648 \u062b\u0627\u0628\u062a \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u06c1\u0645 \u0646\u06d2 \u067e\u0627\u0644\u06cc\u0633\u06cc \u0628\u0644\u0627\u06a9\u0633 \u0627\u0648\u0631 \u0631\u0646 \u0679\u0627\u0626\u0645 \u0627\u0644\u0631\u0679\u0633 \u06a9\u0648 \u0645\u062a\u062d\u0631\u06a9 \u06a9\u06cc\u0627 \u0627\u0648\u0631 \u067e\u06be\u0631 \u062f\u0648\u0646\u0648\u06ba \u06a9\u0648 \u0627\u067e\u0646\u06d2 \u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u0645\u06cc\u06ba \u0688\u0633\u067e\u0644\u06d2 \u06a9\u06cc\u0627\u06d4 \u0633\u0646\u06af\u0644 \u0646\u0648\u0688 \u0644\u06cc\u0628 \u0645\u06cc\u06ba\u060c \u0644\u0648\u06a9\u06cc \u0627\u06cc\u06a9 \u0648\u0633\u06cc\u0639 \u0679\u0627\u0626\u0645 \u0631\u06cc\u0646\u062c \u0645\u06cc\u06ba \u0633\u0633\u062a \u06c1\u0648\u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0633 \u0644\u06cc\u06d2 \u06c1\u0645 \u0646\u06d2 \u0627\u067e\u0646\u06d2 \u0633\u0648\u0627\u0644\u0627\u062a \u06a9\u0648 \u0633\u062e\u062a \u0631\u06a9\u06be\u0627\u06d4\"<\/p>\n<\/blockquote>\n<p>\u067e\u0686\u06be\u0644\u06d2 \u0645\u0631\u0627\u062d\u0644 \u0645\u06cc\u06ba \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06a9\u06d2 \u0645\u0633\u0627\u0626\u0644 (Trivy, Kyverno, image tags\u060c \u0648\u063a\u06cc\u0631\u06c1) <code>docs\/troubleshooting.md<\/code> - \u0622\u067e \u06a9\u0648 \u0645\u0631\u062d\u0644\u06c1 7 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u0634\u0642 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-79-if-panels-look-wrong-after-a-repo-update\">7.9: \u0631\u06cc\u067e\u0648\u0632\u0679\u0631\u06cc \u0627\u067e \u0688\u06cc\u0679 \u06a9\u06d2 \u0628\u0639\u062f \u067e\u06cc\u0646\u0644 \u063a\u0644\u0637 \u062f\u06a9\u06be\u0627\u0626\u06cc \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4<\/h3>\n<p>\u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0644\u0627\u06af\u0648 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f\u060c \u062d\u0642\u06cc\u0642\u06cc \u0648\u0627\u0642\u0639\u0627\u062a (\u00a77.4\u060c \u062c\u0639\u0644\u06cc \u0688\u06cc\u0679\u0627 \u0646\u06c1\u06cc\u06ba) \u0628\u0646\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">bash stages\/stage-7-observability\/scripts\/install-observability.sh\n# Then run Exercises A\u2013C from \u00a77.4 (Kyverno denial, Falco shell, failed logins)\n<\/code><\/pre>\n<p>\u0627\u0648\u067e\u0646 \u067e\u0631\u0646\u0679: <strong>\u0622\u062e\u0631\u06cc \u06af\u06be\u0646\u0679\u06d2<\/strong>\u06c1\u0631 \u0648\u0631\u0632\u0634 \u06a9\u06d2 \u0628\u0639\u062f 30-60 \u0633\u06cc\u06a9\u0646\u0688 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u062a\u0627\u0632\u06c1 \u062f\u0645 \u06a9\u0631\u06cc\u06ba\u06d4 \u0648\u0631\u0632\u0634 \u00a77.4 \u06c1\u0631 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u06a9\u06cc \u0645\u062a\u0648\u0642\u0639 \u0638\u0627\u06c1\u0631\u06cc \u0634\u06a9\u0644 \u06a9\u0627 \u0627\u062d\u0627\u0637\u06c1 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-what-you-learned-in-stage-7\">\u06c1\u0645 \u0646\u06d2 \u0645\u0631\u062d\u0644\u06c1 7 \u0645\u06cc\u06ba \u06a9\u06cc\u0627 \u0633\u06cc\u06a9\u06be\u0627\u06d4<\/h3>\n<ul>\n<li>\n<p><strong>\u067e\u0631\u0648\u0645\u06cc\u062a\u06be\u06cc\u0633<\/strong> \u0642\u0627\u0628\u0644 \u0634\u0645\u0627\u0631 \u062d\u0641\u0627\u0638\u062a\u06cc \u0648\u0627\u0642\u0639\u0627\u062a \u06a9\u0648 \u062b\u0627\u0628\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2 (Kyverno rejections, HTTP \u06a9\u06cc \u0631\u0641\u062a\u0627\u0631)\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u067e\u062a\u06be\u0631\u06cc\u0644\u06cc<\/strong> \u062a\u0641\u0635\u06cc\u0644\u0627\u062a \u06a9\u0627 \u0641\u0631\u0627\u0646\u0632\u06a9 \u062b\u0628\u0648\u062a (\u0641\u0627\u0644\u06a9\u0648 JSON\u060c \u062a\u0648\u062b\u06cc\u0642 \u0644\u0627\u06af \u0644\u0627\u0626\u0646)<\/p>\n<\/li>\n<li>\n<p><strong>\u06af\u0631\u0627\u0641\u0627\u0646\u0627<\/strong> \u06cc\u06c1 \u0627\u06cc\u06a9 \u0628\u06cc\u0627\u0646\u06cc\u06c1 \u067e\u0631\u062a \u06c1\u06d2\u060c \u0645\u0634\u0642 \u06a9\u06d2 \u0628\u0639\u062f \u062a\u0646\u0635\u06cc\u0628 \u06a9\u0627 \u062f\u0648\u0633\u0631\u0627 \u0645\u0631\u062d\u0644\u06c1 \u0646\u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0679\u0631\u06cc\u06a9 \u0627\u06cc\u0628\u0644: \u0679\u0631\u0645\u06cc\u0646\u0644 \u0622\u067e\u0631\u06cc\u0634\u0646\u0632\u060c \u0628\u06cc\u06a9 \u0627\u06cc\u0646\u0688 \u0633\u06af\u0646\u0644\u0632\u060c \u067e\u06cc\u0646\u0644 \u0627\u067e\u0688\u06cc\u0679\u0633<\/p>\n<\/li>\n<li>\n<p>ServiceMonitors\/PodMonitor \u0645\u0631\u0627\u062d\u0644 4-6 \u06a9\u0648 \u0686\u0627\u0631\u0679 \u0633\u06d2 \u062c\u0648\u0691\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u062e\u0627\u0644\u06cc \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u06a9\u0627 \u0645\u0637\u0644\u0628 \"\u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u0633\u0645\u062c\u06be\u0648\u062a\u06c1\" \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u060c \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \"\u0627\u0628\u06be\u06cc \u062a\u06a9 \u06a9\u0648\u0626\u06cc \u0627\u06cc\u0648\u0646\u0679 \u0646\u06c1\u06cc\u06ba\" \u06cc\u0627 \"\u0648\u0642\u062a \u06a9\u06cc \u063a\u0644\u0637 \u062d\u062f\"\u06d4<\/p>\n<\/li>\n<li>\n<p>\u062a\u0639\u0645\u06cc\u0644 \u06a9\u0631\u0646\u0633\u06cc \u0627\u06cc\u06a9 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0633\u06d2 \u0622\u0688\u06cc\u0679\u0631\u0632 \u06a9\u0648 \u062c\u0648\u0627\u0628 \u062f\u06cc\u0646\u06d2 \u06a9\u0627 \u0627\u06cc\u06a9 \u0637\u0631\u06cc\u0642\u06c1 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0622\u067e \u06a9\u06d2 \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u06a9\u06cc \u067e\u0627\u0644\u06cc\u0633\u06cc \u06a9\u0648 \u0648\u0627\u0636\u062d \u0637\u0648\u0631 \u067e\u0631 \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u0646\u06cc \u0686\u0627\u06c1\u06cc\u06d2: <code>monitoring<\/code> \u067e\u0648\u0631\u0679 8000 \u067e\u0631 \u0627\u06cc\u067e \u067e\u0648\u0688\u0632 \u062a\u06a9 \u067e\u06c1\u0646\u0686\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0646\u0627\u0645 \u06a9\u06cc \u062c\u06af\u06c1\u06d4 \u0628\u0635\u0648\u0631\u062a \u062f\u06cc\u06af\u0631\u060c PodMonitor \u0633\u06a9\u0631\u06cc\u067e\u0646\u06af \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u06af\u06cc\u06d4 <code>context deadline exceeded<\/code><\/p>\n<\/li>\n<li>\n<p>Kubernetes \u0622\u0688\u0679 \u0644\u0627\u06af \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 MicroK8s \u067e\u0631 \u0688\u06cc\u0632\u0627\u0626\u0646 \u06a9\u06d2 \u0644\u062d\u0627\u0638 \u0633\u06d2 \u062e\u0627\u0644\u06cc \u06c1\u06d2\u06d4 API \u0633\u0631\u0648\u0631 \u0622\u0688\u0679 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 (\u0622\u0688\u0679 \u067e\u0627\u0644\u06cc\u0633\u06cc \u2192 \u0641\u0627\u0626\u0644 \u2192 \u067e\u0631\u0648\u0645\u0679\u06cc\u0644 \u2192 \u0644\u0648\u06a9\u06cc) \u0628\u0637\u0648\u0631 \u0688\u06cc\u0641\u0627\u0644\u0679 \u0641\u0639\u0627\u0644 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u06cc \u0634\u0631\u062d \u06a9\u0648 \u067e\u0648\u0631\u06cc \u0686\u06cc\u0646 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4 <code>\/metrics<\/code>\u067e\u0648\u0688 \u0645\u0627\u0646\u06cc\u0679\u0631 \u0627\u0648\u0631 \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u06a9\u06cc \u067e\u0627\u0644\u06cc\u0633\u06cc\u0627\u06ba: \u0627\u06cc\u06a9 \u063a\u0627\u0626\u0628 \u06c1\u0648\u0646\u06d2 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 \u067e\u06cc\u0646\u0644 \u062e\u0627\u0644\u06cc \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u0627\u0628 \u0622\u067e \u0627\u067e\u0646\u06d2 \u062a\u062c\u0631\u0628\u06d2 \u06a9\u06cc \u0641\u06c1\u0631\u0633\u062a \u0645\u06cc\u06ba \u06a9\u06cc\u0627 \u0688\u0627\u0644 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\/\u0627\u06cc\u06a9 \u0627\u0646\u0679\u0631\u0648\u06cc\u0648 \u0645\u06cc\u06ba \u06a9\u06c1\u06c1 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba:<\/strong><\/p>\n<blockquote>\n<p>\u06c1\u0645 \u0646\u06d2 Prometheus, Loki, \u0627\u0648\u0631 Grafana (Kyverno \u06a9\u06cc \u062e\u0644\u0627\u0641 \u0648\u0631\u0632\u06cc\u0648\u06ba\u060c Falco \u0627\u0644\u0631\u0679\u0633\u060c \u0627\u0648\u0631 DORA \u0645\u06cc\u0679\u0631\u06a9\u0633 \u0633\u06d2 \u0645\u062a\u0639\u0644\u0642 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688\u0632) \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u062d\u0641\u0627\u0638\u062a\u06cc \u0645\u0634\u0627\u06c1\u062f\u06d2 \u06a9\u0648 \u0628\u0646\u0627\u06cc\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0679\u0631\u0645\u06cc\u0646\u0644 \u0633\u06d2 \u0644\u06d2 \u06a9\u0631 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u062a\u06a9 \u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u06a9\u06d2 \u0648\u0627\u0642\u0639\u0627\u062a \u06a9\u06cc \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/blockquote>\n<h4 id=\"heading-stage-7-done-checklist\">7 \u0645\u0631\u062d\u0644\u06c1 \u0645\u06a9\u0645\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0641\u06c1\u0631\u0633\u062a:<\/h4>\n<ul>\n<li>\n<p><code>make check-7<\/code> \u2192 6\/6 \u2713 (6.5 \u0644\u06cc\u0648\u0644 \u0644\u0679\u0645\u0633 \u0646\u0627\u06a9\u0627\u0645\u06cc \u0645\u062a\u0648\u0642\u0639: \u0645\u06cc\u0645\u0648\u0631\u06cc \u06a9\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0645)<\/p>\n<\/li>\n<li>\n<p><code>http:\/\/grafana.local\/d\/clearledger-kyverno-violations<\/code>. \u062e\u0644\u0627\u0641 \u0648\u0631\u0632\u06cc \u06a9\u06d2 \u0627\u0639\u062f\u0627\u062f\u0648\u0634\u0645\u0627\u0631 > 0<\/p>\n<\/li>\n<li>\n<p><code>http:\/\/grafana.local\/d\/clearledger-security-events<\/code>. \u062e\u0637\u0631\u06d2 \u06a9\u0627 \u0641\u0627\u0644\u06a9\u0648 \u0627\u0646\u062a\u0628\u0627\u06c1\u06cc \u0646\u0634\u0627\u0646<\/p>\n<\/li>\n<li>\n<p><code>http:\/\/grafana.local\/d\/clearledger-compliance<\/code>. \u067e\u0627\u0644\u06cc\u0633\u06cc \u06a9\u06cc \u062e\u0644\u0627\u0641 \u0648\u0631\u0632\u06cc\u0627\u06ba + \u0631\u0646 \u0679\u0627\u0626\u0645 \u062f\u06be\u0645\u06a9\u06cc\u0627\u06ba + \u062a\u0648\u062b\u06cc\u0642 \u06a9\u06cc \u06a9\u0648\u0634\u0634 \u062a\u0645\u0627\u0645 > 0 \u0646\u0627\u06a9\u0627\u0645<\/p>\n<\/li>\n<li>\n<p><code>http:\/\/grafana.local\/d\/clearledger-service-health<\/code>. \u0644\u0627\u06af \u0627\u0646 \u06a9\u06cc \u0646\u0627\u06a9\u0627\u0645 \u06a9\u0648\u0634\u0634\u06cc\u06ba > 0\u06d4 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u06cc \u0634\u0631\u062d > 0 \u0635\u0631\u0641 \u0627\u0633 \u0635\u0648\u0631\u062a \u0645\u06cc\u06ba \u062c\u0628 \u00a77.5 \u06a9\u06cc \u06a9\u0627\u0631\u06a9\u0631\u062f\u06af\u06cc \u06a9\u0627 \u0645\u0638\u0627\u06c1\u0631\u06c1 \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u067e\u0648\u0631\u0679 \u0641\u0648\u0644\u06cc\u0648 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679\u0633 1-3 \u0645\u062d\u0641\u0648\u0638 \u06a9\u0631 \u0644\u06cc\u06d2 \u06af\u0626\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ul>\n<p><code>make snapshot STAGE=7 && make snapshots<\/code>. \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba <code>clearledger.stage7<\/code>. <strong>\u0627\u0633 \u06a9\u0648 \u0645\u062a \u0686\u06be\u0648\u0691\u06cc\u06ba<\/strong>. \u0645\u0631\u062d\u0644\u06c1 7 \u0628\u06be\u0627\u0631\u06cc \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0688\u0633\u06a9 \u06a9\u0645\u067e\u0631\u06cc\u0634\u0646 \u0639\u0627\u0645 \u06c1\u06d2\u06d4 \u062f\u06cc\u06a9\u06be\u06cc\u06ba \u06a9\u06c1 \u0627\u067e\u0646\u06cc \u062a\u0631\u0642\u06cc \u06a9\u0648 \u06a9\u06cc\u0633\u06d2 \u0628\u0686\u0627\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4<\/p>\n<p>\u062a\u0648\u062b\u06cc\u0642\/\u0644\u06cc\u062c\u0631 \u067e\u0648\u0688\u0632 \u0645\u06cc\u06a9 \u06a9\u06d2 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0634\u0631\u0648\u0639 \u06c1\u0648\u0646\u06d2 \u06cc\u0627 \u0633\u0648\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f \u0638\u0627\u06c1\u0631 \u06c1\u0648 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <strong>\u0646\u0627\u0645\u0639\u0644\u0648\u0645<\/strong> \u06cc\u0627 <strong>\u0631\u06cc \u0633\u06cc\u0679 \u06a9\u0631\u06cc\u06ba: 0\/1<\/strong> \u06cc\u06c1\u0627\u06ba \u062a\u06a9 \u06a9\u06c1 \u0627\u06af\u0631 \u06a9\u0644\u0633\u0679\u0631 \u0627\u0648\u067e\u0631 \u06c1\u06d2 (\u062f\u06cc\u06a9\u06be\u06cc\u06ba Troubleshooting.md)\u060c \u0627\u067e\u0646\u06d2 \u0645\u06cc\u06a9 \u06a9\u0648 \u0631\u06cc\u0628\u0648\u0679 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<h2 id=\"heading-stage-75-opentelemetry-optional\">\u0645\u0631\u062d\u0644\u06c1 7.5 \u2014 OpenTelemetry (\u0627\u062e\u062a\u06cc\u0627\u0631\u06cc)<\/h2>\n<p><strong>\u0622\u067e \u0627\u0633 \u067e\u0648\u0631\u06d2 \u0645\u0631\u062d\u0644\u06d2 \u06a9\u0648 \u0686\u06be\u0648\u0691 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/strong> \u06c1\u0648\u0645 \u0644\u06cc\u0628 \u06a9\u0648 \u0645\u06a9\u0645\u0644 \u06a9\u0631\u0646\u06d2 \u0627\u0648\u0631 \u0645\u0631\u062d\u0644\u06c1 8 \u067e\u0631 \u062c\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u0631\u062d\u0644\u06c1 7 (\u0645\u06cc\u0679\u0631\u06a9\u0633 + \u0644\u0627\u06af\u0632) \u06a9\u0627\u0641\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0633\u0679\u06cc\u062c 7.5 \u06a9\u0648 \u0635\u0631\u0641 \u0627\u0633 \u0635\u0648\u0631\u062a \u0645\u06cc\u06ba \u0627\u0646\u062c\u0627\u0645 \u062f\u06cc\u06ba \u062c\u0628 \u0622\u067e \u067e\u0648\u0631\u0679 \u0641\u0648\u0644\u06cc\u0648\u0632 \u06cc\u0627 \u0627\u0646\u0679\u0631\u0648\u06cc\u0648\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062a\u0642\u0633\u06cc\u0645 \u0634\u062f\u06c1 \u0679\u0631\u06cc\u06a9\u0646\u06af \u0686\u0627\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0622\u067e \u06a9\u06d2 VM \u0645\u06cc\u06ba \u0645\u0641\u062a RAM \u06c1\u06d2 (\u062a\u0642\u0631\u06cc\u0628\u0627\u064b 1.5Gi \u062e\u0627\u0644\u06cc \u062c\u06af\u06c1)\u06d4<\/p>\n<h3 id=\"heading-what-you-are-adding\">\u0622\u067e \u06a9\u06cc\u0627 \u0634\u0627\u0645\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba<\/h3>\n<p>\u0645\u0631\u062d\u0644\u06c1 7 \u062c\u0648\u0627\u0628: <em>\u06a9\u06cc\u0627 \u06c1\u0648\u0627\u061f<\/em> (\u06a9\u06cc\u0648\u0631\u0646\u0648 \u0646\u06d2 \u067e\u0648\u0688 \u06a9\u0648 \u0628\u0644\u0627\u06a9 \u06a9\u0631 \u062f\u06cc\u0627\u060c \u0641\u0627\u0644\u06a9\u0648 \u0646\u06d2 \u0634\u06cc\u0644 \u062f\u06cc\u06a9\u06be\u0627\u060c \u06cc\u0627 \u0644\u0627\u06af \u0627\u0646 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648 \u06af\u06cc\u0627\u06d4)<\/p>\n<p>\u0679\u0631\u06cc\u06a9\u0646\u06af \u062c\u0648\u0627\u0628: <em>\u0627\u0633 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u06cc\u0627 \u0627\u0642\u062f\u0627\u0645\u0627\u062a \u06a9\u06cc\u06d2 \u06af\u0626\u06d2\u060c \u0627\u0648\u0631 \u06c1\u0631 \u0642\u062f\u0645 \u06a9\u062a\u0646\u06d2 \u0639\u0631\u0635\u06d2 \u0645\u06cc\u06ba \u0627\u0679\u06be\u0627\u06cc\u0627 \u06af\u06cc\u0627\u061f<\/em><\/p>\n<ul>\n<li>\n<p><strong>\u0645\u06cc\u0679\u0631\u06a9\u0633<\/strong>: \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba \u06a9\u06cc \u062a\u0639\u062f\u0627\u062f\u060c \u063a\u0644\u0637\u06cc\u0648\u06ba \u06a9\u06cc \u062a\u0639\u062f\u0627\u062f<\/p>\n<\/li>\n<li>\n<p><strong>\u0644\u0627\u06af<\/strong>: \u0627\u06cc\u067e \u0644\u0627\u06af \u0641\u0627\u0626\u0644 \u0645\u06cc\u06ba \u06a9\u06cc\u0627 \u067e\u0631\u0646\u0679 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u060c \u062c\u06cc\u0633\u06d2 \u063a\u0644\u0637\u06cc\u0627\u06ba\u060c \u0627\u0646\u062a\u0628\u0627\u06c1\u0627\u062a\u060c \u0644\u0627\u06af \u0627\u0646 \u0645\u06cc\u06ba \u0646\u0627\u06a9\u0627\u0645\u06cc\u0627\u06ba \u0648\u063a\u06cc\u0631\u06c1\u06d4)<\/p>\n<\/li>\n<li>\n<p><strong>\u062b\u0628\u0648\u062a<\/strong>: \u0644\u06cc\u062c\u0631 \u0633\u0631\u0648\u0633 \u062c\u0633\u06d2 auth-service (12ms) \u06a9\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u067e\u06be\u0631 Postgres (8ms)<\/p>\n<\/li>\n<\/ul>\n<p>\u0627\u0633 \u0645\u0631\u062d\u0644\u06d2 \u0645\u06cc\u06ba\u060c \u0622\u067e \u0627\u06cc\u06a9 \u062d\u0642\u06cc\u0642\u06cc \u0644\u06cc\u0646 \u062f\u06cc\u0646 \u0628\u06be\u06cc\u062c\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u067e\u06be\u0631 \u0627\u0633 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u0648 Grafana Explore (Tempo) \u0645\u06cc\u06ba \u06a9\u06be\u0648\u0644\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06c1\u0631 \u0642\u062f\u0645 \u06a9\u0648 \u0627\u0648\u0642\u0627\u062a \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062f\u0631\u062c \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2: \u0644\u06cc\u062c\u0631 \u0633\u0631\u0648\u0633\u060c \u062a\u0635\u062f\u06cc\u0642 \u06a9\u06cc \u062e\u062f\u0645\u062a\u060c \u067e\u0648\u0633\u0679\u06af\u0631\u06cc\u0633\u060c \u0648\u063a\u06cc\u0631\u06c1\u06d4<\/p>\n<h3 id=\"heading-before-you-start\">\u0627\u0633 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06a9\u06c1 \u0622\u067e \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba\u06d4<\/h3>\n<ol>\n<li>\n<p>\u0645\u0631\u062d\u0644\u06c1 7 \u0645\u06a9\u0645\u0644 \u06a9\u0631\u06cc\u06ba: \u00a77.4 \u0648\u0627\u06a9 \u062a\u06be\u0631\u0648 \u0645\u06a9\u0645\u0644 \u06a9\u0631\u06cc\u06ba\u060c \u00a77.6 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679 \u0645\u062d\u0641\u0648\u0638 \u06a9\u0631\u06cc\u06ba\u060c <code>SKIP_CHAOS_CHECK=1 make check-7<\/code> \u06cc\u06c1 \u06af\u0632\u0631 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0627\u067e\u0646\u06cc VM \u0645\u06cc\u0645\u0648\u0631\u06cc \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 <code>multipass exec clearledger -- free -h<\/code> \u0645\u06cc\u06ba \u062a\u0642\u0631\u06cc\u0628\u0627\u064b 1.5Gi \u0645\u0641\u062a \u0645\u06cc\u06ba \u0686\u0627\u06c1\u062a\u0627 \u06c1\u0648\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0627\u06af\u0631 \u0622\u067e \u0627\u0633\u0679\u06cc\u062c 6.5 \u0644\u0679\u0645\u0633 \u0686\u0644\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u067e\u06c1\u0644\u06d2 \u0627\u0633\u06a9\u06cc\u0644 \u0646\u06cc\u0686\u06d2 \u06a9\u0631\u06cc\u06ba (\u00a77.0)\u06d4<\/p>\n<\/li>\n<\/ol>\n<p>\u062c\u0628 \u0622\u067e Grafana Explore (Tempo \u0688\u06cc\u0679\u0627 \u0633\u0648\u0631\u0633) \u0645\u06cc\u06ba \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u0627 \u0645\u06a9\u0645\u0644 \u0646\u0634\u0627\u0646 \u062f\u06cc\u06a9\u06be\u06cc\u06ba \u06af\u06d2 \u062a\u0648 \u0622\u067e \u06a9\u0648 \u0645\u0639\u0644\u0648\u0645 \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u06af\u0627 \u06a9\u06c1 \u0622\u067e \u0646\u06d2 \u06a9\u0627\u0645 \u06a9\u0631 \u0644\u06cc\u0627 \u06c1\u06d2\u06d4 <code>make check-75<\/code> \u06cc\u06c1 \u06af\u0632\u0631 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u067e\u06be\u0631 <code>make snapshot STAGE=75<\/code>.<\/p>\n<h3 id=\"heading-ignore-this-warning-in-app-logs\">\u0627\u067e\u0646\u06d2 \u0627\u06cc\u067e \u0644\u0627\u06af \u0645\u06cc\u06ba \u0627\u0633 \u0627\u0646\u062a\u0628\u0627\u06c1 \u06a9\u0648 \u0646\u0638\u0631 \u0627\u0646\u062f\u0627\u0632 \u06a9\u0631\u06cc\u06ba\u06d4<\/h3>\n<p>\u0645\u0631\u062d\u0644\u06c1 7 \u0633\u06d2 \u0634\u0631\u0648\u0639 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2\u060c \u0622\u067e \u062f\u06cc\u06a9\u06be\u06cc\u06ba \u06af\u06d2:<\/p>\n<pre><code class=\"language-plaintext\">WARNING: Transient error StatusCode.UNAVAILABLE encountered while exporting traces\n<\/code><\/pre>\n<p>\u06cc\u06c1 \u0628\u06d2 \u0636\u0631\u0631 \u06c1\u06d2\u06d4 \u0627\u06cc\u067e \u0679\u0631\u06cc\u06a9\u0646\u06af \u0688\u06cc\u0679\u0627 \u0628\u06be\u06cc\u062c\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u06c1\u06cc \u0633\u06cc\u0679 \u0627\u067e \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u0648\u0635\u0648\u0644 \u06a9\u0646\u0646\u062f\u06c1 \u00a77.5.3 \u062a\u06a9 \u0627\u0646\u0633\u0679\u0627\u0644 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0622\u067e \u06a9\u06cc \u0627\u06cc\u067e \u0627\u0628 \u0628\u06be\u06cc \u0679\u06be\u06cc\u06a9 \u06a9\u0627\u0645 \u06a9\u0631\u06d2 \u06af\u06cc\u060c \u0644\u06cc\u06a9\u0646 \u0622\u067e \u06a9\u0627 \u0679\u0631\u06cc\u06a9\u0646\u06af \u0688\u06cc\u0679\u0627 \u0628\u0633 \u0636\u0627\u0626\u0639 \u06a9\u0631 \u062f\u06cc\u0627 \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4 \u0627\u06af\u0631 \u0622\u067e \u06a9\u0644\u06cc\u06a9\u0679\u0631 \u06a9\u0648 \u00a77.5.3 \u0645\u06cc\u06ba \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0648\u0627\u0631\u0646\u0646\u06af \u063a\u0627\u0626\u0628 \u06c1\u0648 \u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-how-tracing-is-wired\">\u0679\u0631\u06cc\u06a9\u0646\u06af \u06a9\u0648 \u06a9\u06cc\u0633\u06d2 \u062c\u0648\u0691\u06cc\u06ba\u06d4<\/h3>\n<ol>\n<li>\n<p>\u062c\u0628 \u06a9\u0633\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u067e\u0631 \u0639\u0645\u0644 \u062f\u0631\u0622\u0645\u062f \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u062a\u0648 \u0627\u06cc\u067e \u0679\u0631\u06cc\u06a9\u0646\u06af \u0688\u06cc\u0679\u0627 \u0628\u06be\u06cc\u062c\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>OTel \u06a9\u0644\u06a9\u0679\u0631 \u0627\u0633 (\u067e\u0648\u0631\u0679 4317) \u06a9\u0648 \u0633\u0646\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0633\u06d2 \u0622\u06af\u06d2 \u0628\u06be\u06cc\u062c \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u06af\u0631\u0627\u0641\u0627\u0646\u0627 \u0679\u06cc\u0645\u067e\u0648 \u0645\u06cc\u06ba \u0645\u062d\u0641\u0648\u0638 \u0634\u062f\u06c1<\/p>\n<\/li>\n<li>\n<p>\u06af\u0631\u0627\u0641\u0627\u0646\u0627 \u0627\u06cc\u06a9\u0633\u067e\u0644\u0648\u0631 (\u0645\u0646\u062a\u062e\u0628 \u0679\u06cc\u0645\u067e\u0648) \u0648\u06c1 \u062c\u06af\u06c1 \u06c1\u06d2 \u062c\u06c1\u0627\u06ba \u0622\u067e \u0627\u06cc\u06a9 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0642\u062f\u0645 \u0628\u06c1 \u0642\u062f\u0645 \u0686\u0644\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ol>\n<p>\u0627\u06cc\u067e \u0679\u06cc\u0645\u067e\u0648 \u0633\u06d2 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0628\u0627\u062a \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u060c \u06cc\u06c1 \u0635\u0631\u0641 \u06a9\u0644\u06a9\u0679\u0631 \u0633\u06d2 \u0628\u0627\u062a \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0622\u067e \u06a9\u0648 \u06cc\u06c1 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0628\u0639\u062f \u0645\u06cc\u06ba \u0627\u06cc\u067e \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0628\u0646\u0627\u0626\u06d2 \u0628\u063a\u06cc\u0631 \u0646\u0634\u0627\u0646\u0627\u062a \u06a9\u06c1\u0627\u06ba \u0645\u062d\u0641\u0648\u0638 \u06a9\u06cc\u06d2 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-751-check-memory-and-load\">7.5.1: \u0645\u06cc\u0645\u0648\u0631\u06cc \u0627\u0648\u0631 \u0644\u0648\u0688 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/h3>\n<p>\u0679\u06cc\u0645\u067e\u0648 \u06a9\u0648 ~300MB \u062f\u0631\u06a9\u0627\u0631 \u06c1\u06d2\u06d4 \u0628\u0631\u0627\u06c1 \u06a9\u0631\u0645 \u062a\u0646\u0635\u06cc\u0628 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u062e\u0627\u0644\u06cc \u062c\u06af\u06c1 \u06a9\u06cc \u062c\u0627\u0646\u0686 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">multipass exec clearledger -- free -h    # want ~1.5Gi available\nmultipass exec clearledger -- uptime      # load should be reasonable for your CPU count\nSKIP_CHAOS_CHECK=1 bash scripts\/health-check.sh 7\n<\/code><\/pre>\n<p>\u0627\u06af\u0631 \u0644\u0679\u0645\u0633 \u0627\u0628 \u0628\u06be\u06cc \u0627\u0633\u0679\u06cc\u062c 6.5 \u067e\u0631 \u0686\u0644 \u0631\u06c1\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u0627\u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0646\u06cc\u0686\u06d2 \u067e\u06cc\u0645\u0627\u0646\u06c1 \u06a9\u0631\u06cc\u06ba (\u00a77.0)\u06d4<\/p>\n<pre><code class=\"language-bash\">kubectl get pods -n litmus --field-selector=status.phase=Running\n# Expected: no resources found\n<\/code><\/pre>\n<h3 id=\"heading-752-install-grafana-tempo\">7.5.2: \u06af\u0631\u0627\u0641\u0627\u0646\u0627 \u0679\u06cc\u0645\u067e\u0648 \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/h3>\n<p>\u0679\u06cc\u0645\u067e\u0648 \u0627\u06cc\u06a9 \u0679\u0631\u06cc\u06a9\u0646\u06af \u0627\u0633\u0679\u0648\u0631\u06cc\u062c \u0628\u06cc\u06a9 \u0627\u06cc\u0646\u0688 \u06c1\u06d2\u06d4 \u0627\u0633\u06d2 \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 <code>monitoring<\/code> Prometheus \u0627\u0648\u0631 Loki \u06a9\u06d2 \u0622\u06af\u06d2 \u0646\u0627\u0645 \u06a9\u06cc \u062c\u06af\u06c1\u06cc\u06ba:<\/p>\n<pre><code class=\"language-bash\">helm repo add grafana https:\/\/grafana.github.io\/helm-charts\nhelm repo update\n\nhelm install tempo grafana\/tempo \n  --namespace monitoring \n  --set tempo.storage.trace.backend=local \n  --set tempo.storage.trace.local.path=\/var\/tempo \n  --set persistence.enabled=true \n  --set persistence.size=5Gi \n  --wait\n<\/code><\/pre>\n<p><strong>\u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u0626\u06cc\u06ba \u06a9\u06c1 \u0679\u06cc\u0645\u067e\u0648 \u0686\u0644 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4<\/strong><\/p>\n<pre><code class=\"language-bash\">kubectl get pods -n monitoring -l app.kubernetes.io\/name=tempo\n# Expected: tempo-0   1\/1   Running\n<\/code><\/pre>\n<pre><code class=\"language-bash\">kubectl exec -n monitoring tempo-0 -- wget -qO- http:\/\/localhost:3200\/ready\n# Expected: ready\n<\/code><\/pre>\n<h3 id=\"heading-753-deploy-otel-collector-and-wire-grafana\">7.5.3: Otel \u06a9\u0644\u06a9\u0679\u0631 \u0627\u0648\u0631 \u0648\u0627\u0626\u0631 \u06af\u0631\u0627\u0641\u0627\u0646\u0627 \u06a9\u0648 \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631\u0646\u0627<\/h3>\n<p>\u06cc\u06c1 OTel \u06a9\u0644\u06a9\u0679\u0631 \u067e\u0631 \u0644\u0627\u06af\u0648 \u06c1\u0648\u062a\u0627 \u06c1\u06d2 (\u062c\u0648 \u0627\u06cc\u067e \u067e\u0648\u0688 \u0633\u06d2 \u0627\u0633\u06a9\u0648\u067e \u062d\u0627\u0635\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2) \u0627\u0648\u0631 \u0633\u0627\u0626\u0688 \u06a9\u0627\u0631 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 Tempo \u06a9\u0648 Grafana \u0688\u06cc\u0679\u0627 \u0633\u0648\u0631\u0633 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u0631\u062c\u0633\u0679\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\">kubectl apply -f stages\/stage-7.5-opentelemetry\/infra\/otel\/otel-collector.yaml\nkubectl apply -f stages\/stage-7.5-opentelemetry\/infra\/otel\/grafana-datasource-tempo.yaml\n<\/code><\/pre>\n<p><strong>\u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u06a9\u0644\u06a9\u0679\u0631 \u0686\u0644 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4<\/strong><\/p>\n<pre><code class=\"language-bash\">kubectl get pods -n monitoring -l app=otel-collector\n# Expected: otel-collector-xxxxx   1\/1   Running\n<\/code><\/pre>\n<p><strong>\u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u06a9\u0644\u06a9\u0679\u0631 \u0646\u06d2 \u0634\u0631\u0648\u0639 \u06a9\u0631 \u062f\u06cc\u0627 \u06c1\u06d2 (\u0627\u0628\u06be\u06cc \u062a\u06a9 \u0646\u0634\u0627\u0646\u0627\u062a \u0645\u0648\u0635\u0648\u0644 \u0646\u06c1\u06cc\u06ba \u06c1\u0648 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba)\u06d4<\/strong><\/p>\n<p>\u0627\u06cc\u067e OTLP \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0627\u0633\u06a9\u0648\u067e\u0633 \u06a9\u0648 \u06a9\u0644\u06a9\u0679\u0631 \u062a\u06a9 \u067e\u06c1\u0646\u0686\u0627\u062a\u06cc \u06c1\u06d2\u06d4 \u06a9\u0644\u06a9\u0679\u0631 \u067e\u06be\u0644\u06cc \u06a9\u0648 \u0646\u06c1\u06cc\u06ba \u0646\u0648\u0686\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0633 \u0645\u0631\u062d\u0644\u06d2 \u067e\u0631\u060c \u0622\u067e \u06a9\u0648 \u0628\u0633 \u06cc\u06c1 \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u0646\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0622\u067e \u0633\u0646 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">kubectl logs -n monitoring deploy\/otel-collector --tail=15\n# Expected:\n#   Starting GRPC server ... endpoint: 0.0.0.0:4317\n#   Starting HTTP server ... endpoint: 0.0.0.0:4318\n#   Everything is ready. Begin running and processing data.\n# No crash loops or repeated errors.\n<\/code><\/pre>\n<p>\u0627\u0633 \u0628\u0627\u062a \u06a9\u0627 \u062b\u0628\u0648\u062a \u06a9\u06c1 \u0679\u0631\u06cc\u0633 \u062f\u0631\u0627\u0635\u0644 \u0628\u06c1\u06c1 \u0631\u06c1\u0627 \u06c1\u06d2 \u0628\u0639\u062f \u0645\u06cc\u06ba \u0622\u062a\u0627 \u06c1\u06d2\u06d4 \u00a77.5.6 \u0645\u06cc\u06ba \u0679\u0631\u06cc\u0641\u06a9 \u067e\u06cc\u062f\u0627 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f\u060c \u067e\u06be\u06cc\u0644\u06cc \u06c1\u0648\u0626\u06cc \u0628\u0631\u0622\u0645\u062f\u06cc \u0644\u0627\u0626\u0646\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0644\u06a9\u0679\u0631 \u0644\u0627\u06af \u06a9\u0648 \u06cc\u06c1\u0627\u06ba \u067e\u0631 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba: <code>debug<\/code> \u0627\u06cc\u06a9\u0633\u067e\u0648\u0631\u0679 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u067e\u06be\u0631 \u06af\u0631\u0627\u0641\u0627\u0646\u0627 \u0679\u06cc\u0645\u067e\u0648 (\u00a77.5.7) \u0645\u06cc\u06ba \u0679\u0631\u06cc\u0633 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-754-enable-prometheus-remote-write-receiver\">7.5.4: Prometheus \u0631\u06cc\u0645\u0648\u0679 \u0631\u0627\u0626\u0679 \u0631\u06cc\u0633\u06cc\u0648\u0631 \u06a9\u0648 \u0641\u0639\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/h3>\n<p>OTel \u06a9\u0644\u06a9\u0679\u0631 \u0628\u06be\u06cc OTel \u0645\u06cc\u0679\u0631\u06a9\u0633 \u06a9\u0648 \u0631\u06cc\u0645\u0648\u0679 \u0631\u0627\u0626\u0679 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 Prometheus \u06a9\u0648 \u0645\u0646\u062a\u0642\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u067e\u0631\u0648\u0645\u06cc\u062a\u06be\u06cc\u0633 \u06a9\u0648 \u06cc\u06c1 \u0642\u0628\u0648\u0644 \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\">helm upgrade kube-prometheus-stack prometheus-community\/kube-prometheus-stack \n  --namespace monitoring \n  -f stages\/stage-7-observability\/infra\/helm\/kube-prometheus-stack-values.yaml \n  --wait\n<\/code><\/pre>\n<p>\u0627\u0633 \u067e\u0631 \u0644\u0627\u06af\u0648 \u06c1\u0648\u062a\u0627 \u06c1\u06d2: <code>enableRemoteWriteReceiver: true<\/code> \u0627\u0633\u0679\u06cc\u062c 7.5 \u0645\u06cc\u06ba \u06c1\u06cc\u0644\u0645 \u0648\u06cc\u0644\u06cc\u0648\u0632 \u0645\u06cc\u06ba \u0633\u06cc\u0679\u0646\u06af\u0632 \u0634\u0627\u0645\u0644 \u06a9\u06cc \u06af\u0626\u06cc\u06ba\u06d4 Prometheus \u06a9\u06d2 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0634\u0631\u0648\u0639 \u06c1\u0648\u0646\u06d2 \u06a9\u0627 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u06cc\u06ba (\u062a\u0642\u0631\u06cc\u0628\u0627\u064b 60 \u0633\u06cc\u06a9\u0646\u0688)\u06d4<\/p>\n<h3 id=\"heading-755-verify-app-pods-connect-to-the-collector\">7.5.5: \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u0627\u06cc\u067e \u067e\u0648\u0688 \u06a9\u0644\u06a9\u0679\u0631 \u0633\u06d2 \u0645\u0646\u0633\u0644\u06a9 \u06c1\u06d2\u06d4<\/h3>\n<p>\u062a\u0642\u0633\u06cc\u0645 <code>clearledger-infra<\/code> \u0645\u06cc\u0631\u06d2 \u067e\u0627\u0633 \u067e\u06c1\u0644\u06d2 \u06c1\u06cc \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2\u06d4 <code>OTEL_EXPORTER_OTLP_ENDPOINT<\/code> \u0633\u06cc\u0679 \u062c\u0628 \u06a9\u0644\u06cc\u06a9\u0679\u0631 \u0686\u0644\u062a\u0627 \u06c1\u06d2\u060c \u067e\u06be\u0644\u06cc \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u062c\u0691 \u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 OTEL \u0648\u0627\u0631\u0646\u0646\u06af \u063a\u0627\u0626\u0628 \u06c1\u0648 \u06af\u0626\u06cc \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\">kubectl logs -n clearledger deploy\/ledger-service -c ledger-service --tail=20 2>\/dev\/null \n  | grep -v \"opentelemetry|otlp|Transient\" | tail -10\n# Expected: only INFO request logs, no WARNING: Transient error\n<\/code><\/pre>\n<p>\u0627\u06af\u0631 \u0648\u0627\u0631\u0646\u0646\u06af \u0628\u0631\u0642\u0631\u0627\u0631 \u0631\u06c1\u062a\u06cc \u06c1\u06d2\u060c \u062a\u0648 \u06c1\u0648 \u0633\u06a9\u062a\u0627 \u06c1\u06d2 \u0622\u067e \u06a9\u06d2 \u067e\u0627\u0633 \u0622\u067e \u06a9\u06cc \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u067e\u0627\u0644\u06cc\u0633\u06cc \u0645\u06cc\u06ba \u067e\u0648\u0631\u0679 4317 \u0622\u0624\u0679 \u06af\u0648\u0626\u0646\u06af \u0646\u06c1 \u06c1\u0648\u06d4 \u062a\u0627\u0632\u06c1 \u062a\u0631\u06cc\u0646 \u067e\u0627\u0644\u06cc\u0633\u06cc\u0648\u06ba \u06a9\u0627 \u0627\u0637\u0644\u0627\u0642 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">kubectl apply -f infra\/deferred-by-stage\/stage-6-runtime-security\/netpol\/network-policies.yaml\n<\/code><\/pre>\n<h3 id=\"heading-756-generate-a-trace\">7.5.6: \u0679\u0631\u06cc\u0633 \u0628\u0646\u0627\u0646\u0627<\/h3>\n<p>\u0627\u0628 \u0627\u06cc\u06a9 \u0679\u0631\u0627\u0646\u0632\u06cc\u06a9\u0634\u0646 \u0628\u0646\u0627\u0626\u06cc\u06ba \u0627\u0648\u0631 \u062f\u06cc\u06a9\u06be\u06cc\u06ba \u06a9\u06c1 \u06cc\u06c1 \u067e\u0648\u0631\u06d2 \u0633\u0633\u0679\u0645 \u0645\u06cc\u06ba \u06a9\u06cc\u0633\u06d2 \u0628\u06c1\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\"># Step 1: register (skip if already registered)\ncurl -s -X POST http:\/\/clearledger.local\/auth\/register \n  -H \"Content-Type: application\/json\" \n  -d '{\"email\":\"trace-demo@clearledger.io\",\"password\":\"TracePass123\"}' | python3 -m json.tool\n\n# Step 2: login and grab the token\nTOKEN=$(curl -s -X POST http:\/\/clearledger.local\/auth\/login \n  -H \"Content-Type: application\/json\" \n  -d '{\"email\":\"trace-demo@clearledger.io\",\"password\":\"TracePass123\"}' \n  | python3 -c \"import sys,json; print(json.load(sys.stdin)['access_token'])\")\necho \"Token acquired: ${TOKEN:0:20}...\"\n\n# Step 3: create a transaction (this is the request you will trace)\ncurl -s -X POST http:\/\/clearledger.local\/ledger\/transactions \n  -H \"Authorization: Bearer $TOKEN\" \n  -H \"Content-Type: application\/json\" \n  -d '{\"amount\": 5000, \"direction\": \"credit\"}' | python3 -m json.tool\n<\/code><\/pre>\n<p><strong>\u06a9\u0644\u06a9\u0679\u0631 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06c1 \u0645\u0648\u0635\u0648\u0644 \u06c1\u0648\u0646\u06d2 \u0648\u0627\u0644\u06cc \u0645\u062f\u062a \u06a9\u06cc \u062c\u0627\u0646\u0686 \u06a9\u0631\u06cc\u06ba\u06d4<\/strong><\/p>\n<pre><code class=\"language-bash\">kubectl logs -n monitoring deploy\/otel-collector --tail=30 \n  | grep -iE \"Traces|spans|ResourceSpans\" || echo \"No span lines yet \u2014 see \u00a77.5.5 (OTEL env \/ netpol)\"\n# Expected after a successful transaction: debug exporter lines mentioning exported traces\/spans\n<\/code><\/pre>\n<h3 id=\"heading-757-view-the-trace-in-grafana\">7.5.7: \u06af\u0631\u0627\u0641\u0627\u0646\u0627 \u0645\u06cc\u06ba \u0679\u0631\u06cc\u0633 \u062f\u06cc\u06a9\u06be\u06cc\u06ba<\/h3>\n<p>\u06a9\u06be\u0644\u0627 <strong>http:\/\/grafana.local<\/strong> \u067e\u06be\u0631 \u0628\u0627\u0626\u06cc\u06ba \u0633\u0627\u0626\u0688\u0628\u0627\u0631 \u067e\u0631 \u062c\u0627\u0626\u06cc\u06ba\u06d4 <strong>\u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0631\u06cc\u06ba<\/strong> (\u06a9\u0645\u067e\u0627\u0633 \u0622\u0626\u06cc\u06a9\u0646)\u06d4<\/p>\n<h4 id=\"heading-step-1-select-tempo-and-open-search\">\u0645\u0631\u062d\u0644\u06c1 1: \u0627\u06cc\u06a9 \u0679\u06cc\u0645\u067e\u0648 \u0645\u0646\u062a\u062e\u0628 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u062a\u0644\u0627\u0634 \u06a9\u06be\u0648\u0644\u06cc\u06ba\u06d4<\/h4>\n<p>\u0627\u0633\u062a\u0641\u0633\u0627\u0631 \u0648\u0646\u0688\u0648 \u06a9\u06d2 \u0627\u0648\u067e\u0631\u06cc \u062d\u0635\u06d2 \u0645\u06cc\u06ba:<\/p>\n<ol>\n<li>\n<p>\u0688\u06cc\u0679\u0627 \u0633\u0648\u0631\u0633 \u0688\u0631\u0627\u067e \u0688\u0627\u0624\u0646 (\u0627\u0648\u0631\u0646\u062c <strong>\u0686\u0627\u0626\u06d2<\/strong> \u0644\u0648\u06af\u0648) \u2192 <strong>\u0631\u0641\u062a\u0627\u0631<\/strong><\/p>\n<\/li>\n<li>\n<p>A (\u0679\u06cc\u0645\u067e\u0648) \u2192 3 \u0679\u06cc\u0628\u0632 \u06a9\u0627 \u0644\u06cc\u0628\u0644 \u0644\u06af\u0627 \u0633\u0648\u0627\u0644 \u06a9\u06cc \u0642\u0637\u0627\u0631: \u062a\u0644\u0627\u0634 | TraceQL | \u0633\u0631\u0648\u0633 \u06af\u0631\u0627\u0641<\/p>\n<\/li>\n<li>\n<p>\u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba <strong>\u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba<\/strong>. \u0627\u06cc\u06a9 \u0688\u0631\u0627\u067e \u0688\u0627\u0624\u0646 \u0641\u0644\u0679\u0631 \u0638\u0627\u06c1\u0631 \u06c1\u0648\u06af\u0627\u06d4 <strong>\u0679\u0631\u06cc\u0633 \u06a9\u06cc\u0648 \u0627\u06cc\u0644<\/strong> \u0635\u0631\u0641 \u0627\u06cc\u06a9 \u0679\u06cc\u06a9\u0633\u0679 \u0628\u0627\u06a9\u0633 \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0645\u06cc\u06ba \u06a9\u0686\u06be \u062f\u0627\u062e\u0644 \u06a9\u06cc\u06d2 \u0628\u063a\u06cc\u0631 \u0627\u062a\u0631\u062a\u0627 \u06c1\u0648\u06ba \u062a\u0648 \u0645\u062c\u06be\u06d2 \u062f\u0631\u062c \u0630\u06cc\u0644 \u0646\u062a\u06cc\u062c\u06c1 \u0645\u0644\u062a\u0627 \u06c1\u06d2: <code>0 series returned<\/code>.<\/p>\n<\/li>\n<\/ol>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/07\/1785194533_29_Homelab-\u0633\u06d2-AWS-\u062a\u06a9-\u067e\u0631\u0648\u0688\u06a9\u0634\u0646-\u06a9\u06d2-\u0644\u06cc\u06d2-\u062a\u06cc\u0627\u0631-DevSecOps-\u067e\u0644\u06cc\u0679.png\" alt=\"\u06af\u0631\u0627\u0641\u0627\u0646\u0627 \u06a9\u0627 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679 \u0679\u06cc\u0645\u067e\u0648 \u0627\u0648\u0631 \u0644\u06cc\u062c\u0631 \u06a9\u06cc \u062e\u062f\u0645\u0627\u062a \u062f\u06a9\u06be\u0627 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4\" style=\"display:block;margin:0 auto\" width=\"1158\" height=\"408\" loading=\"lazy\" title=\"\"><\/p>\n<h4 id=\"heading-step-2-filter-by-service\">\u0645\u0631\u062d\u0644\u06c1 2: \u0633\u0631\u0648\u0633 \u06a9\u06d2 \u0644\u062d\u0627\u0638 \u0633\u06d2 \u0641\u0644\u0679\u0631 \u06a9\u0631\u06cc\u06ba\u06d4<\/h4>\n<p>\u067e\u0631 <strong>\u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba<\/strong> \u0679\u06cc\u06af:<\/p>\n<ul>\n<li>\n<p><strong>\u0633\u0631\u0648\u0633 \u06a9\u0627 \u0646\u0627\u0645<\/strong> \u2190 \u062f\u0631\u062c \u06a9\u0631\u06cc\u06ba \u06cc\u0627 \u0645\u0646\u062a\u062e\u0628 \u06a9\u0631\u06cc\u06ba\u06d4 <code>ledger-service<\/code><\/p>\n<\/li>\n<li>\n<p>\u062f\u0627\u0626\u0631\u06c1 \u06a9\u0627\u0631 \u06a9\u0627 \u0646\u0627\u0645\u060c \u062d\u06cc\u062b\u06cc\u062a\u060c \u0645\u062f\u062a\u060c \u0627\u0648\u0631 \u0679\u06cc\u06af\u0632 \u06a9\u0648 \u0627\u0628\u06be\u06cc \u06a9\u06d2 \u0644\u06cc\u06d2 \u062e\u0627\u0644\u06cc \u0686\u06be\u0648\u0691 \u062f\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u06af\u0631\u0627\u0641\u0627\u0646\u0627 \u0622\u067e \u06a9\u0648 \u0686\u0644\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633\u062a\u0641\u0633\u0627\u0631 \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2\u06d4 <code>{resource.service.name=\"ledger-service\"}<\/code><\/p>\n<\/li>\n<\/ul>\n<p>\u0648\u0642\u062a \u06a9\u06cc \u062d\u062f (\u0627\u0648\u067e\u0631 \u062f\u0627\u0626\u06cc\u06ba \u06af\u06be\u0691\u06cc \u06a9\u0627 \u0622\u0626\u06cc\u06a9\u0646) \u0627\u0633 \u067e\u0631 \u0633\u06cc\u0679 \u06a9\u0631\u06cc\u06ba: <strong>\u0622\u062e\u0631\u06cc 15 \u0645\u0646\u0679<\/strong> \u0644\u06c1\u0630\u0627\u060c \u00a77.5.6 \u0679\u0631\u0627\u0646\u0632\u06cc\u06a9\u0634\u0646\u0632 \u0634\u0627\u0645\u0644 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-step-3-run-the-query\">\u0645\u0631\u062d\u0644\u06c1 3: \u0627\u0633\u062a\u0641\u0633\u0627\u0631 \u06a9\u0648 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4<\/h4>\n<p>\u06af\u0631\u0627\u0641\u0627\u0646\u0627 \u06a9\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0631\u06cc\u06ba\u06d4 <strong>\u06a9\u0648\u0626\u06cc '\u0631\u0646 \u0627\u0633\u062a\u0641\u0633\u0627\u0631' \u0628\u0679\u0646 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/strong>: \u0627\u06cc\u06a9 \u0633\u0631\u0648\u0633 \u0645\u0646\u062a\u062e\u0628 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0646\u062a\u0627\u0626\u062c \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u0638\u0627\u06c1\u0631 \u06c1\u0648\u06ba \u06af\u06d2\u06d4 \u0627\u06af\u0631 \u0645\u06cc\u0632 \u062e\u0627\u0644\u06cc \u06c1\u06d2\u06d4 <strong>\u0646\u06cc\u0644\u06d2 \u0631\u06cc\u0641\u0631\u06cc\u0634 \u0628\u0679\u0646<\/strong> \u0648\u0646\u0688\u0648 \u06a9\u06d2 \u0627\u0648\u067e\u0631\u06cc \u062f\u0627\u0626\u06cc\u06ba \u06a9\u0648\u0646\u06d2 \u0645\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-step-4-open-the-trace-waterfall\">\u0645\u0631\u062d\u0644\u06c1 4: \u0679\u0631\u06cc\u0633 \u0641\u0627\u0644\u0633 \u06a9\u06be\u0648\u0644\u06cc\u06ba\u06d4<\/h4>\n<p>\u0627\u0633\u062a\u0641\u0633\u0627\u0631 \u0627\u06cc\u0688\u06cc\u0679\u0631 \u06a9\u06d2 \u062a\u062d\u062a\u060c \u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba: <strong>\u0679\u06cc\u0628\u0644 - \u0679\u0631\u06cc\u06a9\u0646\u06af<\/strong>. \u0622\u067e \u06a9\u0648 \u062f\u0631\u062c \u0630\u06cc\u0644 \u06a9\u06cc \u0637\u0631\u062d \u06a9\u0645 \u0627\u0632 \u06a9\u0645 \u0627\u06cc\u06a9 \u0642\u0637\u0627\u0631 \u0646\u0638\u0631 \u0622\u0646\u06cc \u0686\u0627\u06c1\u0626\u06d2:<\/p>\n<table>\n<thead>\n<tr>\n<th>\u06af\u0631\u0645\u06cc<\/th>\n<th>\u06c1\u0627\u06ba<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>\u0679\u0631\u06cc\u06a9\u0646\u06af \u0622\u0626\u06cc \u0688\u06cc<\/td>\n<td><code>5730edf3\u2026<\/code> (\u0646\u06cc\u0644\u0627 \u0644\u0646\u06a9)<\/td>\n<\/tr>\n<tr>\n<td>\u0648\u0642\u062a \u0634\u0631\u0648\u0639<\/td>\n<td>\u062c\u0628 \u0622\u067e \u0628\u06be\u0627\u06af\u062a\u06d2 \u06c1\u06cc\u06ba <code>curl<\/code><\/td>\n<\/tr>\n<tr>\n<td>\u0633\u0631\u0648\u0633<\/td>\n<td><code>ledger-service<\/code><\/td>\n<\/tr>\n<tr>\n<td>\u0646\u0627\u0645<\/td>\n<td><code>POST \/transactions<\/code><\/td>\n<\/tr>\n<tr>\n<td>\u062c\u0627\u0631\u06cc \u0631\u06a9\u06be\u06cc\u06ba<\/td>\n<td>~200ms (\u0635\u0627\u0631\u0641 \u06a9\u06d2 \u0644\u062d\u0627\u0638 \u0633\u06d2 \u0645\u062e\u062a\u0644\u0641 \u06c1\u0648 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba)<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/07\/1785194533_250_Homelab-\u0633\u06d2-AWS-\u062a\u06a9-\u067e\u0631\u0648\u0688\u06a9\u0634\u0646-\u06a9\u06d2-\u0644\u06cc\u06d2-\u062a\u06cc\u0627\u0631-DevSecOps-\u067e\u0644\u06cc\u0679.png\" alt=\"\u06af\u0631\u0627\u0641\u0627\u0646\u0627 \u06a9\u0627 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679 \u0679\u06cc\u0645\u067e\u0648 \u0627\u0648\u0631 \u0644\u06cc\u062c\u0631 \u06a9\u06cc \u062e\u062f\u0645\u0627\u062a \u0627\u0648\u0631 \u0627\u0633\u062a\u0641\u0633\u0627\u0631 \u06a9\u06d2 \u0646\u062a\u0627\u0626\u062c \u062f\u06a9\u06be\u0627 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4\" style=\"display:block;margin:0 auto\" width=\"1179\" height=\"1055\" loading=\"lazy\" title=\"\"><\/p>\n<p><strong>\u0679\u0631\u06cc\u06a9\u0646\u06af \u0622\u0626\u06cc \u0688\u06cc \u06a9\u06d2 \u0644\u0646\u06a9 \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/strong> \u062f\u0627\u0626\u06cc\u06ba \u067e\u06cc\u0646\u0644 \u0679\u0631\u06cc\u06a9 \u06a9\u06cc \u062a\u0641\u0635\u06cc\u0644\u0627\u062a \u06a9\u0627 \u0645\u0646\u0638\u0631 \u06a9\u06be\u0648\u0644\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/07\/1785194533_367_Homelab-\u0633\u06d2-AWS-\u062a\u06a9-\u067e\u0631\u0648\u0688\u06a9\u0634\u0646-\u06a9\u06d2-\u0644\u06cc\u06d2-\u062a\u06cc\u0627\u0631-DevSecOps-\u067e\u0644\u06cc\u0679.png\" alt=\"\u06af\u0631\u0627\u0641\u0627\u0646\u0627 \u06a9\u0627 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679 \u0679\u06cc\u0645\u067e\u0648 \u0627\u0648\u0631 \u0644\u06cc\u062c\u0631 \u06a9\u06cc \u062e\u062f\u0645\u0627\u062a \u0627\u0648\u0631 \u0627\u0633\u062a\u0641\u0633\u0627\u0631 \u06a9\u06d2 \u0646\u062a\u0627\u0626\u062c \u062f\u06a9\u06be\u0627 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4\" style=\"display:block;margin:0 auto\" width=\"1226\" height=\"1289\" loading=\"lazy\" title=\"\"><\/p>\n<h4 id=\"heading-what-the-trace-detail-view-shows\">\u0622\u067e \u06a9\u0648 \u0679\u0631\u06cc\u06a9\u0646\u06af \u062a\u0641\u0635\u06cc\u0644\u0627\u062a \u06a9\u06d2 \u0645\u0646\u0638\u0631 \u0645\u06cc\u06ba \u06a9\u06cc\u0627 \u0646\u0638\u0631 \u0622\u062a\u0627 \u06c1\u06d2\u06d4<\/h4>\n<p>\u06c1\u06cc\u0688\u0631: <code>ledger-service: POST \/transactions<\/code><\/p>\n<ul>\n<li>\n<p><strong>\u0679\u0631\u06cc\u06a9\u0646\u06af \u0622\u0626\u06cc \u0688\u06cc<\/strong>: \u0627\u0633 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u0646\u0641\u0631\u062f ID<\/p>\n<\/li>\n<li>\n<p><strong>\u062c\u0627\u0631\u06cc \u0631\u06a9\u06be\u06cc\u06ba<\/strong>: \u06a9\u0644 \u0622\u062e\u0631 \u0633\u06d2 \u0622\u062e\u0631 \u062a\u06a9 \u06a9\u0627 \u0648\u0642\u062a<\/p>\n<\/li>\n<li>\n<p><strong>\u0633\u0631\u0648\u0633<\/strong>: <code>2<\/code> (<code>ledger-service<\/code> \u0627\u0648\u0631 <code>auth-service<\/code> \u0639\u0627\u0645 \u0644\u06cc\u0646 \u062f\u06cc\u0646 \u06a9\u06d2 \u0644\u06cc\u06d2)<\/p>\n<\/li>\n<\/ul>\n<p>\u0679\u0627\u0626\u0645 \u0644\u0627\u0626\u0646 \u0645\u06cc\u06ba \u062f\u0627\u0626\u0631\u06c1 \u06a9\u0627\u0631 \u06a9\u0648 \u0648\u0633\u0639\u062a \u062f\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-plaintext\">ledger-service   POST \/transactions          (~total duration)\n  \u251c\u2500\u2500 auth-service   GET \/verify             \u2190 JWT check over HTTP\n  \u251c\u2500\u2500 ledger-service INSERT \/ sqlalchemy    \u2190 Postgres write\n  \u2514\u2500\u2500 (optional) redis PUBLISH              \u2190 only if amount \u2265 notification threshold\n<\/code><\/pre>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/07\/Homelab-\u0633\u06d2-AWS-\u062a\u06a9-\u067e\u0631\u0648\u0688\u06a9\u0634\u0646-\u06a9\u06d2-\u0644\u06cc\u06d2-\u062a\u06cc\u0627\u0631-DevSecOps-\u067e\u0644\u06cc\u0679.jpg\" alt=\"\u0688\u06cc\u0644 \u0641\u0644\u0648 \u0679\u0631\u06cc\u06a9\u0646\u06af\" style=\"display:block;margin:0 auto\" width=\"1536\" height=\"957\" loading=\"lazy\" title=\"\"><\/p>\n<p><strong>\u0679\u0631\u06cc\u06a9\u0646\u06af \u062a\u0641\u0635\u06cc\u0644\u0627\u062a \u06a9\u06cc \u0633\u06a9\u0631\u06cc\u0646 \u067e\u0691\u06be\u06cc\u06ba:<\/strong><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/07\/1785194533_227_Homelab-\u0633\u06d2-AWS-\u062a\u06a9-\u067e\u0631\u0648\u0688\u06a9\u0634\u0646-\u06a9\u06d2-\u0644\u06cc\u06d2-\u062a\u06cc\u0627\u0631-DevSecOps-\u067e\u0644\u06cc\u0679.png\" alt=\"\u0679\u06cc\u0645\u067e\u0648 \u0679\u0631\u06cc\u06a9\u0646\u06af \u06a9\u06cc \u062a\u0641\u0635\u06cc\u0644\u0627\u062a: \u0644\u06cc\u062c\u0631 \u0633\u0631\u0648\u0633 \u0679\u0631\u0627\u0646\u0632\u06cc\u06a9\u0634\u0646\u0632\u060c \u0628\u0634\u0645\u0648\u0644 \u062a\u0635\u062f\u06cc\u0642\u06cc \u0633\u0631\u0648\u0633 \u06a9\u06cc \u062a\u0635\u062f\u06cc\u0642 \u06a9\u06d2 \u0627\u0642\u062f\u0627\u0645\u0627\u062a\u06d4\" style=\"display:block;margin:0 auto\" width=\"1226\" height=\"1289\" loading=\"lazy\" title=\"\"><\/p>\n<p>\u06c1\u0631 \u0642\u0637\u0627\u0631 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0642\u062f\u0645 \u06c1\u06d2 (\u06af\u0631\u0627\u0641\u0627\u0646\u0627 \u0627\u0633\u06d2 \u0628\u0637\u0648\u0631 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <em>\u0645\u062f\u062a<\/em>)\u06d4 \u062f\u0627\u0626\u06cc\u06ba \u0637\u0631\u0641 \u0627\u06cc\u06a9 \u0631\u0646\u06af\u06cc\u0646 \u0628\u0627\u0631 \u0638\u0627\u06c1\u0631 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 <strong>\u0627\u0633 \u0642\u062f\u0645 \u06a9\u0648 \u06a9\u062a\u0646\u0627 \u0639\u0631\u0635\u06c1 \u0644\u06af\u0627\u061f<\/strong>. \u0628\u0633 <em>\u0627\u0633\u067e\u06cc\u0646 \u0628\u0627\u0631<\/em>. \u0628\u0627\u0631 \u062c\u062a\u0646\u0627 \u0644\u0645\u0628\u0627 \u06c1\u0648\u06af\u0627\u060c \u0627\u0633 \u0642\u062f\u0645 \u0645\u06cc\u06ba \u0627\u062a\u0646\u0627 \u06c1\u06cc \u0648\u0642\u062a \u0644\u06af\u06d2 \u06af\u0627\u06d4<\/p>\n<p>\u0642\u0637\u0627\u0631 \u06cc\u0627 \u0627\u0633 \u06a9\u06d2 \u0628\u0627\u0631 \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u062f\u0627\u0626\u06cc\u06ba \u0637\u0631\u0641 \u0627\u06cc\u06a9 \u062a\u0641\u0635\u06cc\u0644\u0627\u062a \u06a9\u0627 \u067e\u06cc\u0646\u0644 \u06a9\u06be\u0644 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0645\u06cc\u0679\u0627 \u0688\u06cc\u0679\u0627 \u06a9\u06cc \u062f\u0648 \u0642\u0633\u0645\u06cc\u06ba \u0638\u0627\u06c1\u0631 \u06c1\u0648\u062a\u06cc \u06c1\u06cc\u06ba:<\/p>\n<ul>\n<li>\n<p><strong>span \u06a9\u06cc \u062e\u0635\u0648\u0635\u06cc\u062a<\/strong>: \u06a9\u06cc\u0627 \u06c1\u0648\u0627\u061f <em>\u06cc\u06c1 \u0642\u062f\u0645<\/em>.<br \/>\u0645\u062b\u0627\u0644: HTTP \u0637\u0631\u06cc\u0642\u06c1 (<code>POST<\/code>, <code>GET<\/code>) \u0627\u0633\u0679\u06cc\u0679\u0633 \u06a9\u0648\u0688 (<code>200<\/code>) \u06cc\u0627 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0645\u0631\u062d\u0644\u06c1 \u0633\u06d2 SQL \u0645\u062a\u0646\u06d4 \u0622\u067e \u06a9\u06cc \u0679\u0631\u06cc\u06a9\u0646\u06af \u0645\u06cc\u06ba \u0622\u067e \u062f\u06cc\u06a9\u06be \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>asgi.event.type: http.request<\/code> FastAPI \u0648\u0635\u0648\u0644\u06cc \u06a9\u06d2 \u0645\u0631\u062d\u0644\u06d2 \u0645\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0648\u0633\u0627\u0626\u0644 \u06a9\u06cc \u062e\u0635\u0648\u0635\u06cc\u0627\u062a<\/strong>: <em>\u06a9\u06c1\u0627\u06ba<\/em> \u0631\u0641\u062a\u0627\u0631 \u062a\u06cc\u0632 \u062a\u06be\u06cc\u06d4<br \/>\u06c1\u0627\u06ba: <code>service.name: ledger-service<\/code>, <code>k8s.cluster.name: clearledger<\/code>, <code>deployment.environment: production<\/code>.<\/p>\n<\/li>\n<\/ul>\n<p>\u0641\u0648\u0631\u06cc \u0630\u06c1\u0646\u06cc \u0645\u0627\u0688\u0644: \u0627\u0633\u06a9\u0648\u067e \u0627\u0646\u062a\u0633\u0627\u0628 = \u0642\u062f\u0645 \u0646\u06d2 \u06a9\u06cc\u0627 \u06a9\u06cc\u0627\u06d4 \u0631\u06cc\u0633\u0648\u0631\u0633 \u067e\u0631\u0627\u067e\u0631\u0679\u06cc = \u0633\u0631\u0648\u0633 \u062c\u0633 \u0646\u06d2 \u0627\u0633\u06d2 \u0628\u0646\u0627\u06cc\u0627\u06d4<\/p>\n<p><strong>\u0644\u0627\u06af \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0644\u0646\u06a9 \u0679\u0631\u06cc\u0633:<\/strong> \u0627\u06cc\u06a9 \u0642\u062f\u0645 \u06a9\u0627 \u0627\u0646\u062a\u062e\u0627\u0628 \u0622\u067e \u06a9\u0648 \u0644\u0627\u06af \u0679\u06cc\u0628 \u0645\u06cc\u06ba \u0628\u06cc\u06a9 \u0648\u0642\u062a \u0627\u0633 \u067e\u0648\u0688 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u0645\u0627\u062b\u0644 \u0644\u0648\u06a9\u06cc \u0644\u0627\u06af \u0644\u0627\u0626\u0646 \u067e\u0631 \u0644\u06d2 \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4<\/p>\n<p><strong>\u0627\u0633 \u0679\u0631\u06cc\u06a9\u0646\u06af \u062a\u0641\u0635\u06cc\u0644\u0627\u062a \u06a9\u0627 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679 \u062f\u06cc\u06a9\u06be\u06cc\u06ba<\/strong>: \u0627\u0633\u0679\u06cc\u062c 7.5 \u067e\u0648\u0631\u0679 \u0641\u0648\u0644\u06cc\u0648 \u062b\u0628\u0648\u062a\u06d4<\/p>\n<h4 id=\"heading-traceql-alternative\">\u0679\u0631\u06cc\u0633 \u06a9\u06cc\u0648 \u0627\u06cc\u0644 \u0645\u062a\u0628\u0627\u062f\u0644<\/h4>\n<p>\u0627\u06af\u0631 \u0622\u067e \u0679\u06cc\u06a9\u0633\u0679 \u0628\u06a9\u0633 \u06a9\u0648 \u062a\u0631\u062c\u06cc\u062d \u062f\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <strong>\u0679\u0631\u06cc\u0633 \u06a9\u06cc\u0648 \u0627\u06cc\u0644<\/strong> \u0679\u06cc\u0628 \u062f\u0628\u0627\u0626\u06cc\u06ba \u0627\u0648\u0631 \u062f\u0631\u062c \u0630\u06cc\u0644 \u06a9\u0648 \u067e\u06cc\u0633\u0679 \u06a9\u0631\u06cc\u06ba:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/07\/1785194533_193_Homelab-\u0633\u06d2-AWS-\u062a\u06a9-\u067e\u0631\u0648\u0688\u06a9\u0634\u0646-\u06a9\u06d2-\u0644\u06cc\u06d2-\u062a\u06cc\u0627\u0631-DevSecOps-\u067e\u0644\u06cc\u0679.png\" alt=\"\u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679 \u0648\u06c1 \u0633\u0645\u062a \u062f\u06a9\u06be\u0627 \u0631\u06c1\u0627 \u06c1\u06d2 \u062c\u06c1\u0627\u06ba Traceql \u0628\u0679\u0646 \u0648\u0627\u0642\u0639 \u06c1\u06d2\u06d4\" style=\"display:block;margin:0 auto\" width=\"1157\" height=\"263\" loading=\"lazy\" title=\"\"><\/p>\n<pre><code class=\"language-traceql\">{ resource.service.name = \"ledger-service\" }\n<\/code><\/pre>\n<h4 id=\"heading-if-the-table-is-empty\">\u0627\u06af\u0631 \u0645\u06cc\u0632 \u062e\u0627\u0644\u06cc \u06c1\u06d2\u06d4<\/h4>\n<p><strong>\u0627\u06af\u0631 TraceQL \u06a9\u06c1\u062a\u0627 \u06c1\u06d2\u06d4<\/strong> <code>0 series returned<\/code>: \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 <strong>\u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba<\/strong> \u0627\u0633 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2\u060c \u0679\u06cc\u0628 \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba \u06cc\u0627 TraceQL \u0633\u0648\u0627\u0644 \u06a9\u0648 \u0627\u0648\u067e\u0631 \u0633\u06d2 TraceQL \u0679\u06cc\u0628 \u0645\u06cc\u06ba \u0686\u0633\u067e\u0627\u06ba \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p><strong>\u0627\u06af\u0631 \u062a\u0644\u0627\u0634 \u06a9\u06d2 \u0679\u06cc\u0628 \u0645\u06cc\u06ba \u06a9\u0648\u0626\u06cc \u0642\u0637\u0627\u0631\u06cc\u06ba \u0646\u06c1\u06cc\u06ba \u06c1\u06cc\u06ba:<\/strong> \u0645\u062f\u062a \u06a9\u0648 \u0627\u0633 \u062a\u06a9 \u067e\u06be\u06cc\u0644\u0627\u0626\u06cc\u06ba: <strong>\u0622\u062e\u0631\u06cc 15 \u0645\u0646\u0679<\/strong>\u00a77.5.6 \u0633\u06d2 \u0679\u0631\u0627\u0646\u0632\u06cc\u06a9\u0634\u0646 \u06a9\u0631\u0644 \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0686\u0644\u0627\u0626\u06cc\u06ba\u060c \u0686\u0646\u062f \u0633\u06cc\u06a9\u0646\u0688 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0631\u06cc\u0641\u0631\u06cc\u0634 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p><strong>\u0627\u06af\u0631 \u06af\u0631\u0627\u0641\u0627\u0646\u0627 \u0679\u06cc\u0645\u067e\u0648 \u0633\u06d2 \u0645\u0646\u0633\u0644\u06a9 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u0633\u06a9\u062a\u0627 \u06c1\u06d2:<\/strong> \u0688\u06cc\u0679\u0627 \u0633\u0648\u0631\u0633 \u06cc\u0648 \u0622\u0631 \u0627\u06cc\u0644 \u06a9\u0648 \u067e\u0648\u0631\u0679 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4 <strong>3200<\/strong>. \u0688\u06cc\u0679\u0627 \u0633\u0648\u0631\u0633 \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0644\u06af\u0627\u0626\u06cc\u06ba \u0627\u0648\u0631 \u06af\u0631\u0627\u0641\u0627\u0646\u0627 \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">kubectl apply -f stages\/stage-7.5-opentelemetry\/infra\/otel\/grafana-datasource-tempo.yaml\nkubectl rollout restart deployment\/kube-prometheus-stack-grafana -n monitoring\n<\/code><\/pre>\n<p><strong>\u0627\u06af\u0631 \u0622\u067e \u06a9\u0648 \u06a9\u0644\u06a9\u0679\u0631 \u0644\u0627\u06af \u0645\u06cc\u06ba \u0679\u0631\u06cc\u06a9\u0646\u06af \u0688\u06cc\u0679\u0627 \u0646\u0638\u0631 \u0646\u06c1\u06cc\u06ba \u0622\u062a\u0627 \u06c1\u06d2:<\/strong> \u00a77.5.5 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u06a9\u0627\u0645 \u06a9\u0631\u06cc\u06ba\u06d4 \u0639\u0627\u0645 \u0637\u0648\u0631 \u067e\u0631 \u06cc\u06c1 OTEL \u0645\u0627\u062d\u0648\u0644\u06cc\u0627\u062a\u06cc \u0645\u062a\u063a\u06cc\u0631 \u06cc\u0627 \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u067e\u0627\u0644\u06cc\u0633\u06cc \u0628\u0644\u0627\u06a9\u0646\u06af \u067e\u0648\u0631\u0679 4317 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-757b-understand-when-a-trace-happens\">7.5.7b: \u0679\u0631\u06cc\u06a9\u0646\u06af \u06a9\u06d2 \u0648\u0642\u062a \u06a9\u0648 \u0633\u0645\u062c\u06be\u0646\u0627<\/h3>\n<p>\u0645\u06cc\u06ba \u0646\u06d2 \u00a77.5.6 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 curl \u06a9\u0645\u0627\u0646\u0688 \u0686\u0644\u0627\u0626\u06cc\u06d4 \u06af\u0631\u0627\u0641\u0627\u0646\u0627 \u0622\u067e \u06a9\u0648 \u0648\u06c1 \u062a\u0645\u0627\u0645 \u062c\u06af\u06c1\u06cc\u06ba \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2 \u062c\u06c1\u0627\u06ba \u0627\u06cc\u06a9 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u06cc \u06af\u0626\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0633 \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u0633\u0648\u0686\u06cc\u06ba \u062c\u06cc\u0633\u06d2 \u06a9\u0633\u06cc \u067e\u06cc\u06a9\u06cc\u062c \u06a9\u0648 \u0679\u0631\u06cc\u06a9 \u06a9\u0631\u0646\u0627\u06d4<\/p>\n<ol>\n<li>\n<p><strong>\u0622\u067e<\/strong> \u0645\u0646\u062a\u0642\u0644 <code>POST \/transactions<\/code> \u06a9\u0648 <strong>\u0644\u06cc\u062c\u0631 \u0633\u0631\u0648\u0633<\/strong><\/p>\n<\/li>\n<li>\n<p><strong>\u0644\u06cc\u062c\u0631 \u0633\u0631\u0648\u0633<\/strong> \u067e\u0648\u0686\u06be\u0627 <strong>\u062a\u0635\u062f\u06cc\u0642 \u06a9\u06cc \u062e\u062f\u0645\u062a<\/strong>: \"\u06a9\u06cc\u0627 \u06cc\u06c1 \u0635\u0627\u0631\u0641 \u0644\u0627\u06af \u0627\u0646 \u06c1\u06d2\u061f\"<\/p>\n<\/li>\n<li>\n<p><strong>\u0644\u06cc\u062c\u0631 \u0633\u0631\u0648\u0633<\/strong> \u0642\u0637\u0627\u0631 <strong>\u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633<\/strong><\/p>\n<\/li>\n<li>\n<p><strong>\u0631\u06cc\u0688\u06cc\u0633<\/strong> \u06cc\u06c1 \u0635\u0631\u0641 \u0627\u0633 \u0635\u0648\u0631\u062a \u0645\u06cc\u06ba \u0686\u0644\u06d2 \u06af\u0627 \u062c\u0628 \u0631\u0642\u0645 \u06c1\u06d2: <strong>\u0628\u0691\u0627<\/strong> (10,000 \u06cc\u0627 \u0627\u0633 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1)<\/p>\n<\/li>\n<\/ol>\n<p>\u06c1\u0631 \u0627\u06cc\u06a9 \u0642\u0637\u0627\u0631 \u06c1\u06d2 \u062c\u0648 \u0679\u06cc\u0645\u067e\u0648 \u062a\u0641\u0635\u06cc\u0644\u0627\u062a \u06a9\u06cc \u0627\u0633\u06a9\u0631\u06cc\u0646 \u067e\u0631 \u0638\u0627\u06c1\u0631 \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4 \u0622\u067e \u0686\u0627\u0631 \u0627\u0644\u06af \u0627\u0644\u06af \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba \u06a9\u0648 \u0646\u06c1\u06cc\u06ba \u062f\u06cc\u06a9\u06be \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06a9\u06c1 <strong>\u0627\u06cc\u06a9<\/strong> \u0645\u062a\u0639\u062f\u062f \u0627\u0633\u0679\u0627\u067e\u0633 \u06a9\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p><strong>\u0645\u06cc\u06ba \u0644\u06cc\u062c\u0631-\u0633\u0631\u0648\u0633 \u0627\u0648\u0631 auth-service \u062f\u0648\u0646\u0648\u06ba \u06a9\u0648 \u06a9\u06cc\u0648\u06ba \u062f\u06cc\u06a9\u06be\u062a\u0627 \u06c1\u0648\u06ba\u061f<\/strong><\/p>\n<p>\u0627\u0633 \u06a9\u06cc \u0648\u062c\u06c1 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u0644\u06cc\u062c\u0631 \u06a9\u0648 \u0644\u06cc\u0646 \u062f\u06cc\u0646 \u06a9\u0648 \u0630\u062e\u06cc\u0631\u06c1 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0648 \u06a9\u0627\u0644 \u06a9\u0631\u0646\u0627 \u067e\u0691\u062a\u0627 \u062a\u06be\u0627\u06d4 \u06af\u0631\u0627\u0641\u0627\u0646\u0627 \u0627\u0646 \u0627\u0633\u0679\u0627\u067e\u0648\u06ba \u06a9\u0648 \u0627\u06cc\u06a9 \u0679\u0631\u067e \u0645\u06cc\u06ba \u06af\u0631\u0648\u067e \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0627\u06a9\u06c1 \u0622\u067e \u067e\u0648\u0631\u0627 \u0631\u0627\u0633\u062a\u06c1 \u062f\u06cc\u06a9\u06be \u0633\u06a9\u06cc\u06ba\u060c \u0646\u06c1 \u0635\u0631\u0641 \u067e\u06c1\u0644\u06cc \u06c1\u0627\u067e\u06d4<\/p>\n<p><strong>\u0645\u06cc\u0631\u06d2 \u0688\u06cc\u0645\u0648 \u0645\u06cc\u06ba \u06a9\u0648\u0626\u06cc \u0631\u06cc\u0688\u06cc\u0633 \u0642\u0637\u0627\u0631\u06cc\u06ba \u06a9\u06cc\u0648\u06ba \u0646\u06c1\u06cc\u06ba \u06c1\u06cc\u06ba\u061f<\/strong><\/p>\n<p>\u0622\u067e \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba <code>\"amount\": 5000<\/code>. \u0627\u06cc\u067e \u0635\u0631\u0641 Redis \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0628\u0627\u062a \u0686\u06cc\u062a \u06a9\u0631\u06d2 \u06af\u06cc \u0627\u06af\u0631 \u0631\u0642\u0645 10,000 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u06cc\u0627 \u0627\u0633 \u06a9\u06d2 \u0628\u0631\u0627\u0628\u0631 \u06c1\u0648\u06d4 \u0644\u06c1\u0630\u0627\u060c \u0622\u067e \u062f\u0631\u0633\u062a \u06c1\u06cc\u06ba \u06a9\u06c1 \u0622\u067e \u06a9\u0648 \u0644\u06cc\u062c\u0631 + \u062a\u0648\u062b\u06cc\u0642 + \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0646\u0638\u0631 \u0622\u0626\u06d2 \u06af\u0627 \u0644\u06cc\u06a9\u0646 \u0631\u06cc\u0688\u06cc\u0633 \u0646\u06c1\u06cc\u06ba\u06d4<\/p>\n<p>Redis \u062f\u06cc\u06a9\u06be\u0646\u0627 \u0686\u0627\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba\u061f \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u00a77.5.6 \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0686\u0644\u0627\u0626\u06cc\u06ba: <code>\"amount\": 15000<\/code> Tempo \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u062a\u0644\u0627\u0634 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u06a9\u0648\u0634\u0634 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p><strong>\u0627\u062e\u062a\u06cc\u0627\u0631\u06cc: \u06a9\u0648\u0688 \u0633\u06d2 \u0644\u0646\u06a9<\/strong><\/p>\n<p>\u06a9\u06be\u0644\u0627 <code>app\/ledger-service\/main.py<\/code>\u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba <code>create_transaction<\/code>\u0627\u0648\u067e\u0631 \u0633\u06d2 \u0646\u06cc\u0686\u06d2 \u062a\u06a9 \u067e\u0691\u06be\u06cc\u06ba\u06d4 \u0679\u06cc\u0645\u067e\u0648 \u0644\u0627\u0626\u0646\u06cc\u06ba \u062a\u0631\u062a\u06cc\u0628 \u0633\u06d2 \u0627\u067e\u0646\u06d2 \u0627\u0641\u0639\u0627\u0644 \u06a9\u06cc \u067e\u06cc\u0631\u0648\u06cc \u06a9\u0631\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 \u0622\u067e \u0635\u0627\u0631\u0641\u06cc\u0646 \u06a9\u06cc \u062a\u0635\u062f\u06cc\u0642 \u0628\u06be\u06cc \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u0646\u06c1\u06cc\u06ba \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0645\u06cc\u06ba \u0645\u062d\u0641\u0648\u0638 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u0648\u0631 Redis \u06a9\u0648 \u0645\u0637\u0644\u0639 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p><strong>\u0627\u062e\u062a\u06cc\u0627\u0631\u06cc: \u0627\u06cc\u06a9 \u06c1\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u060c \u062a\u06cc\u0646 \u0679\u0648\u0644\u0632<\/strong><\/p>\n<p>\u062c\u0628 \u0645\u06cc\u06ba curl \u0686\u0644\u0627\u062a\u0627 \u06c1\u0648\u06ba:<\/p>\n<ul>\n<li>\n<p><strong>\u0631\u0641\u062a\u0627\u0631<\/strong> (\u06cc\u06c1 \u0645\u0631\u062d\u0644\u06c1): \u062e\u062f\u0645\u0627\u062a \u0627\u0646\u062c\u0627\u0645 \u062f\u06cc \u06af\u0626\u06cc \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u06c1\u0631 \u0633\u0631\u0648\u0633 \u067e\u0631 \u062e\u0631\u0686 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u0648\u0642\u062a<\/p>\n<\/li>\n<li>\n<p><strong>\u067e\u062a\u06be\u0631\u06cc\u0644\u06cc<\/strong> (\u0645\u0631\u062d\u0644\u06c1 7): \u0627\u06cc\u067e \u0644\u0627\u06af \u0641\u0627\u0626\u0644 \u0645\u06cc\u06ba \u06a9\u06cc\u0627 \u0644\u06a9\u06be\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u067e\u0631\u0648\u0645\u06cc\u062a\u06be\u06cc\u0633<\/strong> (\u0645\u0631\u062d\u0644\u06c1 7): \u0627\u0633 \u0648\u0642\u062a \u06a9\u062a\u0646\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u06cc\u06ba \u06a9\u06cc \u06af\u0626\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ul>\n<p>\u0627\u06cc\u06a9 \u06c1\u06cc \u0644\u0645\u062d\u06d2\u060c \u062a\u06cc\u0646 \u0645\u062e\u062a\u0644\u0641 \u0635\u0648\u0631\u062a\u06cc\u06ba\u06d4 \u0622\u067e \u0646\u06d2 \u067e\u06c1\u0644\u06d2 \u06c1\u06cc \u0627\u0633\u0679\u06cc\u062c 7 \u0645\u06cc\u06ba \u0644\u0648\u06a9\u06cc \u0627\u0648\u0631 \u067e\u0631\u0648\u0645\u06cc\u062a\u06be\u06cc\u0633 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0627 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-758-verify\">7.5.8: \u062a\u0635\u062f\u06cc\u0642<\/h3>\n<pre><code class=\"language-bash\">make check-75\n<\/code><\/pre>\n<p>\u0645\u062a\u0648\u0642\u0639 \u067e\u06cc\u062f\u0627\u0648\u0627\u0631:<\/p>\n<pre><code class=\"language-text\">&#x25b6; Stage 7.5 \u2014 OpenTelemetry (Distributed Tracing)\n  \u2713 OTel Collector is running (1 replica(s))\n  \u2713 Grafana Tempo datasource ConfigMap exists\n  \u2713 Tempo is running\n  \u2713 auth-service has OTEL_EXPORTER_OTLP_ENDPOINT set\n<\/code><\/pre>\n<p><strong>\u0627\u06af\u0631 \u0622\u067e \u0627\u0633 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0627\u06cc\u06a9 \u0627\u0646\u062a\u0628\u0627\u06c1 \u062f\u06cc\u06a9\u06be\u062a\u06d2 \u06c1\u06cc\u06ba:<\/strong><\/p>\n<pre><code class=\"language-text\">&#x26a0; OTel env vars not found on auth-service, redeploy with updated manifests\n<\/code><\/pre>\n<p><code>check-75<\/code> \u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba <code>OTEL_EXPORTER_OTLP_ENDPOINT<\/code> \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u0645\u06cc\u0646\u06cc \u0641\u06cc\u0633\u0679 \u0645\u06cc\u06ba\u06d4 \u06cc\u06c1\u0627\u06ba \u062a\u06a9 \u06a9\u06c1 \u0627\u06af\u0631 \u0679\u0631\u06cc\u06a9\u0646\u06af \u06a9\u0627\u0645 \u06a9\u0631 \u0631\u06c1\u06cc \u06c1\u06d2\u060c \u067e\u0686\u06be\u0644\u0627 \u0645\u0631\u062d\u0644\u06c1 5 \u0645\u06cc\u0646\u06cc \u0641\u06cc\u0633\u0679 \u0627\u0633 \u06a9\u06cc \u0641\u06c1\u0631\u0633\u062a \u0646\u06c1\u06cc\u06ba \u062f\u06d2 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 Python \u0627\u06cc\u067e\u0633 \u0628\u0646\u06cc\u0627\u062f\u06cc \u0637\u0648\u0631 \u067e\u0631 \u06c1\u06cc\u06ba\u06d4 <code>http:\/\/otel-collector.monitoring.svc.cluster.local:4317<\/code> \u0627\u06af\u0631 env var \u063a\u0627\u0626\u0628 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u06cc\u06a9 \u0628\u0627\u0631 \u062c\u0628 \u0622\u067e \u06a9\u0644\u06a9\u0679\u0631 \u0644\u0627\u06af \u0645\u06cc\u06ba \u0631\u06cc\u0646\u062c \u0627\u0648\u0631 \u0679\u06cc\u0645\u067e\u0648 \u0645\u06cc\u06ba \u0679\u0631\u06cc\u0633 \u062f\u06cc\u06a9\u06be \u0644\u06cc\u06ba \u062a\u0648 \u0622\u067e \u0622\u06af\u06d2 \u0628\u0691\u06be \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0648\u0627\u0631\u0646\u0646\u06af \u06a9\u0648 \u0635\u0627\u0641 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u0635\u0631\u0641 \u0627\u06cc\u067e \u06a9\u06cc \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u06a9\u0627 \u0627\u0637\u0644\u0627\u0642 \u06a9\u0631\u06cc\u06ba (\u067e\u0648\u0631\u06d2 \u06a9\u0633\u0679\u0645\u0627\u0626\u0632 \u0679\u0631\u06cc \u06a9\u0648 \u0646\u06c1\u06cc\u06ba: Kyverno redis\/postgres \u067e\u06cc\u0686 \u06a9\u0648 \u0631\u0648\u06a9 \u0633\u06a9\u062a\u0627 \u06c1\u06d2)\u06d4<\/p>\n<pre><code class=\"language-bash\">kubectl apply -f infra\/manifests\/auth-service\/deployment.yaml\nkubectl apply -f infra\/manifests\/ledger-service\/deployment.yaml\nkubectl rollout restart deployment\/auth-service deployment\/ledger-service -n clearledger\nmake check-75\n<\/code><\/pre>\n<p><strong>VM \u0627\u0633\u0679\u0648\u0631\u06cc\u062c<\/strong> ~ \u0628\u0639\u062f <code>make check-75<\/code>. \u0630\u06cc\u0644 \u0645\u06cc\u06ba \u0645\u0631\u062d\u0644\u06c1 7.5 \u06a9\u06d2 \u0622\u062e\u0631 \u0645\u06cc\u06ba \u0628\u0644\u0627\u06a9 \u062f\u06cc\u06a9\u06be\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-what-you-learned\">\u0645\u06cc\u06ba \u0646\u06d2 \u06a9\u06cc\u0627 \u0633\u06cc\u06a9\u06be\u0627\u06d4<\/h3>\n<p>\u0645\u0631\u062d\u0644\u06c1 7 \u0646\u06d2 \u0645\u06cc\u0679\u0631\u06a9\u0633 (\u06cc\u06c1 \u06a9\u062a\u0646\u0627 \u0645\u0635\u0631\u0648\u0641 \u06c1\u06d2\u061f) \u0627\u0648\u0631 \u0644\u0627\u06af\u0632 (\u06a9\u06cc\u0627 \u067e\u0631\u0646\u0679 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u062a\u06be\u0627\u061f) \u0641\u0631\u0627\u06c1\u0645 \u06a9\u06cc\u0627 \u06af\u06cc\u0627\u06d4 \u0645\u0631\u062d\u0644\u06c1 7.5 \u0679\u0631\u06cc\u0633\u0646\u06af \u06a9\u0627 \u0627\u0636\u0627\u0641\u06c1 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 (\u0627\u06cc\u06a9 \u0633\u0633\u062a \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0646 \u0627\u0642\u062f\u0627\u0645\u0627\u062a \u0645\u06cc\u06ba \u0648\u0642\u062a \u0644\u06af\u0627\u061f)<\/p>\n<p>\u0644\u06cc\u0628 \u0645\u06cc\u06ba \u0622\u067e \u0646\u06d2 \u0627\u0633\u06d2 \u0627\u06cc\u06a9 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u062b\u0627\u0628\u062a \u06a9\u06cc\u0627\u06d4 <code>POST \/transactions<\/code> curl \u067e\u06cc\u062f\u0627\u0648\u0627\u0631 \u0645\u06cc\u06ba\u060c \u062e\u06cc\u0627\u0644 \u0627\u06cc\u06a9 \u06c1\u06cc \u06c1\u06d2. \u0627\u06cc\u06a9 \u0635\u0627\u0631\u0641 \u0622\u067e \u06a9\u06d2 API \u062a\u06a9 \u067e\u06c1\u0646\u0686\u062a\u0627 \u06c1\u06d2\u060c \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0645\u062a\u0639\u062f\u062f \u062e\u062f\u0645\u0627\u062a \u0633\u06d2 \u06af\u0632\u0631\u062a\u06cc \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0622\u067e \u06a9\u0648 \u0627\u06cc\u06a9 \u062c\u06af\u06c1 \u067e\u0631 \u067e\u0648\u0631\u0627 \u0631\u0627\u0633\u062a\u06c1 \u062f\u06cc\u06a9\u06be\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-if-someone-asks-in-an-interview\">\u0627\u06af\u0631 \u06a9\u0648\u0626\u06cc \u0622\u067e \u0633\u06d2 \u0627\u0646\u0679\u0631\u0648\u06cc\u0648 \u0645\u06cc\u06ba \u067e\u0648\u0686\u06be\u06d2:<\/h4>\n<p><strong>\u0646\u0634\u0627\u0646\u0627\u062a \u06a9\u06cc\u0648\u06ba \u06c1\u06cc\u06ba\u061f<\/strong> \u0645\u06cc\u0679\u0631\u06a9\u0633 \u0633\u06d2 \u067e\u062a\u06c1 \u0686\u0644\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 p99 \u0645\u06cc\u06ba \u062a\u0627\u062e\u06cc\u0631 \u062f\u0648\u06af\u0646\u06cc \u06c1\u0648 \u06af\u0626\u06cc \u06c1\u06d2\u06d4 \u0646\u0648\u0634\u062a\u06c1 \u062c\u0627\u062a \u0627\u06cc\u06a9 \u067e\u0648\u0688 \u06a9\u06d2 \u0644\u06cc\u06d2 \u063a\u0644\u0637\u06cc\u0627\u06ba \u062f\u06a9\u06be\u0627 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0646\u0634\u0627\u0646\u0627\u062a \u0645\u062c\u06be\u06d2 \u0628\u062a\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <em>\u06a9\u0648\u0626\u06cc \u0628\u06be\u06cc \u0688\u0627\u0624\u0646 \u0627\u0633\u0679\u0631\u06cc\u0645 \u06a9\u0627\u0644\u0632<\/em> \u0633\u0644\u0633\u0644\u06c1 \u067e\u0631 \u06a9\u0648\u0626\u06cc \u0627\u0646\u062f\u0627\u0632\u06c1 \u0646\u06c1\u06cc\u06ba\u060c \u06a9\u0648\u0626\u06cc \u062a\u0627\u062e\u06cc\u0631\u060c \u062a\u0648\u062b\u06cc\u0642\u060c \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633\u060c \u06a9\u06cc\u0634\u0632 \u06cc\u0627 \u062a\u06be\u0631\u0688 \u067e\u0627\u0631\u0679\u06cc APIs\u06d4<\/p>\n<p><strong>\u0622\u067e \u0646\u06d2 \u0627\u0633\u06d2 \u06a9\u06cc\u0633\u06d2 \u0646\u0627\u0641\u0630 \u06a9\u06cc\u0627\u061f<\/strong> \u06c1\u0645 \u0646\u06d2 \u0633\u0631\u0648\u0633 \u06a9\u0648 \u0627\u0646\u0633\u0679\u0631\u0648\u0645\u0646\u0679 \u06a9\u0631\u0646\u06d2\u060c \u06a9\u0644\u06cc\u06a9\u0679\u0631 \u06a9\u0648 \u0679\u06cc\u0644\u06cc \u0645\u06cc\u0679\u0631\u06cc \u0628\u06be\u06cc\u062c\u0646\u06d2 \u0627\u0648\u0631 \u06af\u0631\u0627\u0641\u0627\u0646\u0627 \u0679\u06cc\u0645\u067e\u0648 \u0645\u06cc\u06ba \u0646\u0634\u0627\u0646\u0627\u062a \u0630\u062e\u06cc\u0631\u06c1 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 OpenTelemetry \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0627\u06d4 \u0627\u06cc\u067e \u0628\u06cc\u06a9 \u0627\u06cc\u0646\u0688 \u0633\u06d2 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u06a9\u0646\u06a9\u0634\u0646 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u06a9\u0644\u06a9\u0679\u0631 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0628\u0627\u062a \u0686\u06cc\u062a \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u060c \u0644\u06c1\u0630\u0627 \u0622\u067e \u0628\u0639\u062f \u0645\u06cc\u06ba \u0627\u067e\u0646\u06cc \u062a\u0645\u0627\u0645 \u0633\u0631\u0648\u0633\u0632 \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u06cc\u06d2 \u0628\u063a\u06cc\u0631 \u0627\u0633\u0679\u0648\u0631\u06cc\u062c \u06a9\u0648 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p><strong>\u0627\u06af\u0631 \u06a9\u0648\u0626\u06cc \u0648\u0627\u0642\u0639\u06c1 \u067e\u06cc\u0634 \u0622\u0626\u06d2 \u062a\u0648 \u0622\u067e \u06a9\u06cc\u0627 \u06a9\u0631\u06cc\u06ba \u06af\u06d2\u061f<\/strong> \u0627\u06cc\u06a9 \u0633\u0633\u062a \u06cc\u0627 \u0646\u0627\u06a9\u0627\u0645 \u0679\u0631\u06cc\u0633 \u0622\u0626\u06cc \u0688\u06cc \u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba (\u0644\u0627\u06af\u0632\u060c \u0645\u06cc\u0679\u0631\u06a9\u0633\u060c \u06cc\u0627 \u0627\u0644\u0631\u0679\u0633 \u0633\u06d2)\u060c \u0627\u0633\u06d2 \u0679\u06cc\u0645\u067e\u0648 \u0645\u06cc\u06ba \u06a9\u06be\u0648\u0644\u06cc\u06ba\u060c \u0633\u0631\u0648\u0633 \u06a9\u06d2 \u0644\u062d\u0627\u0638 \u0633\u06d2 \u06a9\u0627\u0644 \u0686\u06cc\u0646 \u0633\u0631\u0648\u0633\u0632 \u06a9\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0631\u06cc\u06ba\u060c \u062f\u06cc\u06a9\u06be\u06cc\u06ba \u06a9\u06c1 \u0648\u0642\u062a \u06a9\u06c1\u0627\u06ba \u062c\u0645\u0639 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u067e\u06be\u0631 \u0627\u0633\u06cc \u0679\u0627\u0626\u0645 \u0627\u0633\u0679\u06cc\u0645\u067e \u067e\u0631 \u0627\u0633 \u0633\u0631\u0648\u0633 \u06a9\u06d2 \u0644\u0627\u06af \u067e\u0631 \u062c\u0627\u0626\u06cc\u06ba\u06d4 \u06cc\u06c1 5 \u067e\u0648\u0688\u0632 \u0645\u06cc\u06ba \u0644\u0627\u06af\u0632 \u06a9\u0648 \u0679\u0631\u06cc\u06a9 \u06a9\u0631\u0646\u06d2 \u0627\u0648\u0631 \u0627\u0633 \u0627\u0645\u06cc\u062f \u0633\u06d2 \u06a9\u06c1 \u0648\u06c1 \u0642\u0637\u0627\u0631 \u0645\u06cc\u06ba \u0644\u06af\u0646\u06d2 \u0633\u06d2 \u062a\u06cc\u0632 \u062a\u0631 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u0645\u062e\u062a\u0635\u0631 \u0648\u0631\u0698\u0646 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u0622\u067e \u0627\u0633\u06d2 \u0627\u0648\u0646\u0686\u06cc \u0622\u0648\u0627\u0632 \u0645\u06cc\u06ba \u06a9\u06c1\u06c1 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/strong><\/p>\n<blockquote>\n<p>\"\u06c1\u0645 \u062a\u06cc\u0646 \u0686\u06cc\u0632\u0648\u06ba \u06a9\u0648 \u0627\u06cc\u06a9 \u0633\u0627\u062a\u06be \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba: \u0631\u0641\u062a\u0627\u0631 \u0627\u0648\u0631 \u063a\u0644\u0637\u06cc\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 \u067e\u0631\u0648\u0645\u06cc\u0679\u06cc\u0633\u060c \u0644\u0627\u06af \u06a9\u06cc \u062a\u0641\u0635\u06cc\u0644\u0627\u062a \u06a9\u06d2 \u0644\u06cc\u06d2 \u0644\u0648\u06a9\u06cc\u060c \u0627\u0648\u0631 \u0645\u0627\u0626\u06cc\u06a9\u0631\u0648 \u0633\u0631\u0648\u0633\u0632 \u0645\u06cc\u06ba \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u06d2 \u062f\u0631\u062c\u06d2 \u06a9\u06cc \u0688\u06cc\u0628\u06af\u0646\u06af \u06a9\u06d2 \u0644\u06cc\u06d2 \u0679\u06cc\u0645\u067e\u0648\u06d4 \u062c\u0628 \u0644\u06cc\u0679\u0646\u0633\u06cc \u0645\u06cc\u06ba \u0627\u0636\u0627\u0641\u06c1 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u06c1\u0645 \u0633\u0633\u062a \u06c1\u0627\u067e\u0633 \u06a9\u06cc \u0634\u0646\u0627\u062e\u062a \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0679\u0631\u06cc\u0633 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0634\u0631\u0648\u0639 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0686\u0627\u06c1\u06d2 \u0648\u06c1 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06c1\u0648 \u06cc\u0627 \u0688\u0627\u0624\u0646 \u0627\u0633\u0679\u0631\u06cc\u0645 API\u060c \u0627\u0648\u0631 \u0627\u0646 \u0633\u0631\u0648\u0633\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0644\u0627\u06af\u0632 \u0627\u0648\u0631 \u0645\u06cc\u0679\u0631\u06a9\u0633 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u0646 \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u062c\u0648\u0691\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4\"<\/p>\n<\/blockquote>\n<p><code>make check-75 && make snapshot STAGE=75 && make snapshots<\/code>. \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba <code>clearledger.stage75<\/code>. \u062f\u06cc\u06a9\u06be\u06cc\u06ba \u06a9\u06c1 \u0627\u067e\u0646\u06cc \u062a\u0631\u0642\u06cc \u06a9\u0648 \u06a9\u06cc\u0633\u06d2 \u0628\u0686\u0627\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4<\/p>\n<h2 id=\"heading-stage-8-aws-migration\">\u0645\u0631\u062d\u0644\u06c1 8 - AWS \u0645\u0627\u0626\u06cc\u06af\u0631\u06cc\u0634\u0646<\/h2>\n<p>\u06cc\u06c1\u0627\u06ba \u06a9\u0627 \u0645\u0642\u0635\u062f \u0627\u06cc\u06a9 \u06c1\u06cc ClearLedger \u0627\u06cc\u067e \u06a9\u0648 AWS \u067e\u0631 \u0644\u06cc\u067e \u0679\u0627\u067e VM \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0686\u0644\u0627\u0646\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06c1\u0645 \u0622\u067e \u06a9\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0646\u06c1\u06cc\u06ba \u0628\u06be\u0631\u06cc\u06ba \u06af\u06d2\u06d4 \u0645\u0631\u0627\u062d\u0644 0-7 \u0645\u06cc\u06ba\u060c \u06c1\u0645 \u0646\u06d2 GitOps\u060c Kyverno\u060c \u0631\u0627\u0632 \u0627\u0648\u0631 \u0645\u0634\u0627\u06c1\u062f\u06d2 \u06a9\u06d2 \u0633\u0627\u062a\u06be Kubernetes \u067e\u0631 \u0645\u0628\u0646\u06cc \u06a9\u0646\u0679\u06cc\u0646\u0631\u0632 \u0628\u0646\u0627\u0626\u06d2\u06d4 \u0645\u0631\u062d\u0644\u06c1 8 \u0645\u06cc\u06ba\u060c \u067e\u06be\u0627\u0646\u0633\u06cc \u06a9\u06cc \u062c\u06af\u06c1 \u0628\u062f\u0644 \u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0648\u06c1\u06cc \u0627\u0645\u06cc\u062c\u0632\u060c \u0648\u06c1\u06cc ArgoCD \u0648\u0631\u06a9 \u0641\u0644\u0648\u060c \u0627\u0648\u0631 \u0648\u06c1\u06cc \u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u067e\u0627\u0644\u06cc\u0633\u06cc\u0627\u06ba \u0628\u0631\u0642\u0631\u0627\u0631 \u0631\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u06d4 \u0635\u0631\u0641 \u06a9\u0644\u0627\u0624\u0688 \u0633\u0631\u0648\u0633\u0632 \u062c\u0648 \u062a\u0628\u062f\u06cc\u0644 \u06c1\u0648\u062a\u06cc \u06c1\u06cc\u06ba \u0648\u06c1 \u062a\u0628\u062f\u06cc\u0644 \u06c1\u0648\u06ba \u06af\u06cc (MicroK8s \u2192 EKS\u060c Vault \u2192 Secrets Manager\u060c \u0648\u063a\u06cc\u0631\u06c1)\u06d4<\/p>\n<ul>\n<li>\n<p><strong>\u06c1\u0648\u0645 \u0644\u06cc\u0628:<\/strong> \u0645\u0627\u0626\u06cc\u06a9\u0631\u0648 \u06a9\u06d2 8\u060c \u067e\u0648\u0688\u0632 \u0645\u06cc\u06ba \u067e\u0648\u0633\u0679\u06af\u0631\u06cc\u0633\u060c \u062f\u06cc\u0648 \u0648\u0627\u0644\u0679\u060c \u0688\u0648\u06a9\u0631 \u06c1\u0628\u060c <code>clearledger.local<\/code><\/p>\n<\/li>\n<li>\n<p><strong>AWS:<\/strong> EKS, RDS, Secrets Manager, ECR, ALB \u0645\u06cc\u0632\u0628\u0627\u0646 \u06a9\u06d2 \u0646\u0627\u0645<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u06a9\u06cc\u0627 \u0645\u06cc\u06ba \u0645\u0631\u062d\u0644\u06c1 8 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062a\u06cc\u0627\u0631 \u06c1\u0648\u06ba\u061f<\/strong><\/p>\n<ul>\n<li>\n<p>\u06c1\u0648\u0645 \u0644\u06cc\u0628 \u06a9\u0648 \u0645\u0631\u062d\u0644\u06c1 7 \u062a\u06a9 \u0645\u06a9\u0645\u0644 \u06a9\u0631\u06cc\u06ba (\u0645\u0631\u062d\u0644\u06c1 7.5 \u0627\u062e\u062a\u06cc\u0627\u0631\u06cc \u06c1\u06d2)<\/p>\n<\/li>\n<li>\n<p>\u0627\u06cc\u06a9 \u0686\u06cc\u06a9-7 \u067e\u0627\u0633 \u0628\u0646\u0627\u0626\u06cc\u06ba (\u06cc\u0627 \u0686\u06cc\u06a9-75 \u0627\u06af\u0631 \u0622\u067e \u0646\u06d2 \u0679\u0631\u06cc\u06a9\u0646\u06af \u06a9\u06cc \u06c1\u06d2)\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0628\u0644\u0646\u06af \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u06a9\u06d2 \u0633\u0627\u062a\u06be AWS \u0627\u06a9\u0627\u0624\u0646\u0679 \u0641\u0639\u0627\u0644 \u06c1\u06d2\u06d4 make aws-up \u0642\u0627\u0628\u0644 \u0628\u0644 \u0648\u0633\u0627\u0626\u0644 \u067e\u06cc\u062f\u0627 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0645\u06cc\u06a9 \u0627\u067e \u06a9\u06cc\u0627 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0633 \u06a9\u0627 \u0627\u0646\u062f\u0627\u0632\u06c1 \u062d\u0627\u0635\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u00a78.2 \u06a9\u0648 \u0633\u06a9\u06cc\u0645 \u06a9\u0631\u06cc\u06ba (\u0686\u0627\u06c1\u06d2 \u0622\u067e \u0641\u0648\u0631\u06cc \u0631\u0627\u0633\u062a\u06c1 \u0627\u062e\u062a\u06cc\u0627\u0631 \u06a9\u0631\u06cc\u06ba)\u06d4<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u06a9\u0628 \u0645\u06a9\u0645\u0644 \u06a9\u0631\u0646\u0627 \u06c1\u06d2\u06d4<\/strong> \u0622\u067e AWS ALB\u060c ArgoCD \u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631\u06cc \u0633\u06d2 \u0627\u067e\u0646\u06cc \u0627\u06cc\u067e \u0633\u06d2 \u062c\u0691 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0686\u0644\u0627 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba: <code>make aws-down<\/code> \u0645\u06a9\u0645\u0644 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f\u060c \u0686\u0627\u0631\u062c\u0632 \u0631\u06a9 \u062c\u0627\u0626\u06cc\u06ba \u06af\u06d2\u06d4<\/p>\n<h3 id=\"heading-what-make-aws-up-gives-you\">\u06a9\u06cc\u0627 <code>make aws-up<\/code> \u0622\u067e \u06a9\u0648 \u062f\u06cc\u062a\u0627 \u06c1\u06d2<\/h3>\n<p>\u06cc\u06c1 \u06c1\u06d2 <strong>\u0688\u06cc\u0645\u0648 \u0627\u0633\u0679\u06cc\u06a9<\/strong>: \u067e\u06cc\u062f\u0627\u0648\u0627\u0631<em>\u0634\u06a9\u0644<\/em>\u0644\u06cc\u06a9\u0646 \u067e\u06cc\u062f\u0627\u0648\u0627\u0631 \u0646\u06c1\u06cc\u06ba\u06d4<em>\u062a\u06cc\u0627\u0631<\/em>. \u0635\u0631\u0641 HTTP \u06c1\u06d2 (\u06a9\u0648\u0626\u06cc TLS \u0633\u0631\u0679\u06cc\u0641\u06a9\u06cc\u0679 \u0646\u06c1\u06cc\u06ba)\u06d4<\/p>\n<p>\u0645\u0631\u062d\u0644\u06c1 7 \u0645\u0634\u0627\u06c1\u062f\u06c1 \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u0627\u0646\u0633\u0679\u0627\u0644 \u06c1\u0648\u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 CI \u0627\u0628 \u0628\u06be\u06cc Gitleaks\u060c Semgrep\u060c Checkov\u060c Trivy\u060c \u0627\u0648\u0631 Cosign \u0686\u0644\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u062d\u0642\u06cc\u0642\u06cc \u067e\u06cc\u062f\u0627\u0648\u0627\u0631 \u0645\u06cc\u06ba\u060c HTTPS \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba (\u062f\u06cc\u06a9\u06be\u06cc\u06ba: <code>ingress-aws-https.example.yaml<\/code>)\u060c \u067e\u0631\u0648\u0645\u0648\u0634\u0646 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06a9\u06cc \u062a\u06cc\u0627\u0631\u06cc\u060c \u0627\u0648\u0631 \u0627\u0644\u0631\u0679 \u0631\u0648\u0679\u0646\u06af\u06d4 \u0627\u06af\u0631\u0686\u06c1 \u06cc\u06c1 \u062f\u0633\u062a\u0627\u0648\u06cc\u0632\u06cc \u06c1\u06d2\u060c \u0627\u0633 \u06a9\u0627 \u0627\u0637\u0644\u0627\u0642 \u0627\u0633\u067e\u0646 \u0627\u067e \u0627\u0633\u06a9\u0631\u067e\u0679\u0633 \u067e\u0631 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><strong>GitOps \u06a9\u06d2 \u0642\u0648\u0627\u0646\u06cc\u0646:<\/strong> \u0628\u0648\u0679\u0633\u0679\u0631\u06cc\u067e\u0646\u06af \u06a9\u06d2 \u0628\u0639\u062f \u0627\u06cc\u0633\u0627 \u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4 <code>kubectl apply<\/code> \u0627\u06cc\u067e \u06a9\u0648 \u062e\u0648\u062f \u062a\u0642\u0633\u06cc\u0645 \u06a9\u0631\u06cc\u06ba\u06d4 ArgoCD \u06a9\u0644\u0633\u0679\u0631 \u06a9\u0627 \u0645\u0627\u0644\u06a9 \u06c1\u06d2 (\u0645\u0631\u062d\u0644\u06c1 2)\u06d4 \u0627\u067e\u0646\u06cc \u0638\u0627\u06c1\u0631\u06cc \u062a\u0628\u062f\u06cc\u0644\u06cc\u0648\u06ba \u06a9\u0648 Git \u0645\u06cc\u06ba \u062f\u0628\u0627\u0626\u06cc\u06ba \u0627\u0648\u0631 ArgoCD \u06a9\u0648 \u0633\u0646\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-secrets-on-aws\">AWS \u0631\u0627\u0632<\/h3>\n<p>\u06c1\u0648\u0645 \u0644\u06cc\u0628 \u0645\u06cc\u06ba\u060c \u0648\u0627\u0644\u0679 \u0646\u06d2 \u067e\u0648\u0688 \u06a9\u0648 \u062e\u0641\u06cc\u06c1 \u0641\u0627\u0626\u0644\u06cc\u06ba \u0644\u06a9\u06be\u06cc\u06ba\u06d4 AWS \u06a9\u0627 \u0627\u06cc\u06a9 \u0631\u0627\u0632 \u06c1\u06d2\u06d4 <strong>AWS \u0633\u06cc\u06a9\u0631\u0679 \u0645\u06cc\u0646\u06cc\u062c\u0631<\/strong> (\u0679\u06cc\u0631\u0627\u0641\u0627\u0631\u0645 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06c1 \u062a\u062e\u0644\u06cc\u0642 \u06a9\u06cc\u0627 \u06af\u06cc\u0627)\u06d4 \u0622\u067e \u06a9\u06cc \u0627\u06cc\u067e \u06a9\u0648 \u0627\u0628 \u0628\u06be\u06cc \u062f\u0631\u062c \u0630\u06cc\u0644 \u0645\u0627\u062d\u0648\u0644\u06cc\u0627\u062a\u06cc \u0645\u062a\u063a\u06cc\u0631\u0627\u062a \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2: <code>DATABASE_URL<\/code>.<\/p>\n<p><strong>ESO (\u0627\u0633 \u0644\u06cc\u0628 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0688\u06cc\u0641\u0627\u0644\u0679)<\/strong>: \u0633\u0627\u062f\u06c1 \u0630\u06c1\u0646\u06cc \u0645\u0627\u0688\u0644<\/p>\n<ol>\n<li>\n<p>Terraform \u0627\u0635\u0644 \u0631\u0627\u0632 \u06a9\u0648 AWS Secrets Manager \u0645\u06cc\u06ba \u0645\u062d\u0641\u0648\u0638 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u062c\u06cc\u0633\u06d2 <code>clearledger\/auth-service<\/code>)<\/p>\n<\/li>\n<li>\n<p>\u0627\u06cc\u06a9\u0633\u0679\u0631\u0646\u0644 \u0633\u06cc\u06a9\u0631\u0679\u0633 \u0622\u067e\u0631\u06cc\u0679\u0631 (ESO) AWS \u0631\u0627\u0632\u0648\u06ba \u06a9\u06cc \u0646\u06af\u0631\u0627\u0646\u06cc \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>ESO \u0627\u0633\u06d2 \u06a9\u0644\u0633\u0679\u0631 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0627\u06cc\u06a9 \u0628\u0627\u0642\u0627\u0639\u062f\u06c1 Kubernetes \u0631\u0627\u0632 \u0645\u06cc\u06ba \u06a9\u0627\u067e\u06cc \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u062c\u06cc\u0633\u06d2 <code>auth-service-secret<\/code>)<\/p>\n<\/li>\n<li>\n<p>\u062a\u0642\u0633\u06cc\u0645 \u06a9\u06cc \u062a\u0641\u0635\u06cc\u0644\u0627\u062a \u062f\u0631\u062c \u0630\u06cc\u0644 \u06c1\u06cc\u06ba: <code>DATABASE_URL<\/code> \u0627\u0633\u0679\u06cc\u062c 0 \u06a9\u06cc \u0637\u0631\u062d \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u0627\u0642\u062f\u0627\u0631 \u0645\u062a\u0639\u0644\u0642\u06c1 \u06a9\u0628\u0631\u0646\u06cc\u0679\u0633 \u0633\u06cc\u06a9\u0631\u06cc\u0679 \u0633\u06d2 \u06a9\u06be\u06cc\u0646\u0686\u06cc \u06af\u0626\u06cc \u06c1\u06cc\u06ba\u060c \u0644\u06cc\u06a9\u0646 \u06af\u0679 \u0645\u06cc\u06ba YAML \u0641\u0627\u0626\u0644 \u06a9\u06cc \u0628\u062c\u0627\u0626\u06d2 AWS \u0633\u06d2\u06d4<\/p>\n<\/li>\n<\/ol>\n<p>\u06af\u0679 \u0645\u06cc\u06ba \u06a9\u0628\u06be\u06cc \u0628\u06be\u06cc \u0627\u067e\u0646\u0627 \u067e\u0627\u0633 \u0648\u0631\u0688 \u062f\u0631\u062c \u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4 ESO \u0633\u06cc\u06a9\u0631\u0679\u0633 \u0645\u06cc\u0646\u06cc\u062c\u0631 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u06a9\u0628\u0631\u0646\u06cc\u0679\u0633 \u0633\u06cc\u06a9\u0631\u0679\u0633 \u06a9\u0648 \u06c1\u0645 \u0622\u06c1\u0646\u06af \u0631\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><strong>CSI (\u0627\u062e\u062a\u06cc\u0627\u0631\u06cc\u060c \u00a78.5 \u0645\u0634\u0642)<\/strong>: \u0627\u06cc\u06a9 \u06c1\u06cc AWS \u062e\u0641\u06cc\u06c1 \u0644\u06cc\u06a9\u0646 \u0645\u062e\u062a\u0644\u0641 \u062a\u0631\u0633\u06cc\u0644: \u0628\u0637\u0648\u0631 \u0646\u0635\u0628 <strong>\u0641\u0627\u0626\u0644<\/strong> \u06a9\u0648 <code>\/mnt\/secrets\/*<\/code> \u0645\u0627\u062d\u0648\u0644\u06cc\u0627\u062a\u06cc \u0645\u062a\u063a\u06cc\u0631\u0627\u062a \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2\u06d4 \u06cc\u06c1 \u06af\u06be\u0631 \u06a9\u06cc \u0644\u06cc\u0628 \u0645\u06cc\u06ba \u0648\u0627\u0644\u0679 \u06a9\u06d2 \u06a9\u0627\u0645 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u0642\u0631\u06cc\u0628 \u062a\u0631 \u06c1\u06d2\u06d4<\/p>\n<p><strong>IRSA<\/strong>: ESO \u06a9\u0648 \u0627\u067e\u0646\u06d2 \u06a9\u0644\u0633\u0679\u0631 \u0645\u06cc\u06ba AWS \u0631\u0633\u0627\u0626\u06cc \u06a9\u06cc\u0632 \u06a9\u0648 \u0630\u062e\u06cc\u0631\u06c1 \u06a9\u06cc\u06d2 \u0628\u063a\u06cc\u0631 \u0633\u06cc\u06a9\u0631\u0679\u0633 \u0645\u06cc\u0646\u06cc\u062c\u0631 \u06a9\u0648 \u067e\u0691\u06be\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u06a9\u06cc\u0633\u06d2 \u062f\u06cc \u062c\u0627\u0626\u06d2\u06d4 AWS \u0627\u0633 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 Kubernetes \u0633\u0631\u0648\u0633 \u0627\u06a9\u0627\u0624\u0646\u0679 \u067e\u0631 \u0628\u06be\u0631\u0648\u0633\u06c1 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>IRSA AWS \u06a9\u0648 \u0622\u067e \u06a9\u06d2 Kubernetes ServiceAccount \u067e\u0631 \u0628\u06be\u0631\u0648\u0633\u06c1 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4 <code>AWS_ACCESS_KEY_ID<\/code> \u06af\u0679 \u06cc\u0627 \u06a9\u0644\u0633\u0679\u0631 \u0645\u06cc\u06ba\u06d4<\/p>\n<p>\u0645\u0632\u06cc\u062f \u062a\u0641\u0635\u06cc\u0644\u0627\u062a \u06cc\u06c1\u0627\u06ba: <code>stages\/stage-8-aws-migration\/docs\/secrets-patterns.md<\/code>.<\/p>\n<h3 id=\"heading-81-two-ways-through-stage-8\">8.1: \u0645\u0631\u062d\u0644\u06c1 8 \u0633\u06d2 \u06af\u0632\u0631\u0646\u06d2 \u06a9\u06d2 \u062f\u0648 \u0637\u0631\u06cc\u0642\u06d2<\/h3>\n<p><strong>\u062a\u06cc\u0632 \u0631\u0627\u0633\u062a\u06c1 (~45-60 \u0645\u0646\u0679):<\/strong> \u062a\u0631\u0645\u06cc\u0645 \u06a9\u0631\u06cc\u06ba <code>terraform\/secrets.tf<\/code> (\u062a\u0628\u062f\u06cc\u0644\u06cc <code>CHANGE_ME_BEFORE_APPLY<\/code>)\u060c \u067e\u06be\u0631:<\/p>\n<pre><code class=\"language-bash\">make aws-up    # runs stages\/stage-8-aws-migration\/scripts\/aws-spinup.sh\nmake aws-down  # destroys billable resources when you are done\n<\/code><\/pre>\n<p>\u0627\u06af\u0631 \u0622\u067e \u0628\u0639\u062f \u0645\u06cc\u06ba \u00a78.2 \u067e\u0691\u06be\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0648 \u0622\u067e \u062f\u06cc\u06a9\u06be\u06cc\u06ba \u06af\u06d2 \u06a9\u06c1 \u06a9\u06cc\u0627 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u062a\u06be\u0627\u06d4<\/p>\n<p><strong>\u062f\u0633\u062a\u06cc \u0631\u0627\u0633\u062a\u06c1 (\u00a78.3):<\/strong> Terraform\u060c ECR Push\u060c ArgoCD\u060c Kyverno\u060c \u0627\u0648\u0631 ESO \u0686\u0644\u0627\u0626\u06cc\u06ba \u0627\u0648\u0631 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631\u06cc\u06ba\u06d4 \u0633\u06cc\u06a9\u06be\u0646\u06d2\u060c \u0627\u0646\u0679\u0631\u0648\u06cc\u0648 \u0644\u06cc\u0646\u06d2\u060c \u06cc\u0627 \u0646\u0627\u06a9\u0627\u0645 \u0627\u0633\u067e\u0646 \u0627\u067e\u0633 \u06a9\u0648 \u0688\u06cc\u0628\u06af \u06a9\u0631\u062a\u06d2 \u0648\u0642\u062a \u0627\u0633 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u06af\u0631 \u0622\u067e \u0646\u06d2 \u0627\u0628\u06be\u06cc \u0627\u0633\u06d2 \u0686\u0644\u0627\u06cc\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u00a78.2 - \u00a78.5 \u06a9\u0648 \u0646\u06c1 \u0686\u06be\u0648\u0691\u06cc\u06ba\u06d4 <code>make aws-up<\/code>. \u0628\u0635\u0648\u0631\u062a \u062f\u06cc\u06af\u0631 \u0622\u067e \u06a9\u0648 \u0645\u0639\u0644\u0648\u0645 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u06af\u0627 \u06a9\u06c1 Terraform\u060c ESO \u06cc\u0627 ArgoCD \u06c1\u0631 \u0627\u06cc\u06a9 \u0646\u06d2 \u06a9\u06cc\u0627 \u06a9\u06cc\u0627\u06d4<\/p>\n<p>\u00a78: CI \u0631\u0648\u0679\u0646\u06af \u0627\u0648\u0631 <code>CLEARLEDGER_CI_TARGET<\/code> \u0627\u0648\u0631 \u0633\u06cc\u0679 <code>CLEARLEDGER_CI_TARGET=aws<\/code> \u06cc\u06c1 \u0679\u06cc\u0631\u0627\u0641\u0627\u0631\u0645 \u06a9\u06d2 \u06a9\u0627\u0645\u06cc\u0627\u0628 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f \u06c1\u06cc \u06a9\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0633 \u0648\u0642\u062a \u0646\u06c1\u06cc\u06ba \u062c\u0628 \u06cc\u06c1 \u0627\u0628\u06be\u06cc \u062a\u06a9 1-7 \u0645\u0631\u0627\u062d\u0644 \u0645\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-82-what-make-aws-up-runs\">8.2: \u06a9\u06cc\u0627\u061f <code>make aws-up<\/code> \u067e\u06be\u0627\u0646\u0633\u06cc<\/h3>\n<p>\u0627\u0633\u067e\u0646 \u0627\u067e \u0627\u0633\u06a9\u0631\u067e\u0679 \u062a\u0631\u062a\u06cc\u0628 \u0645\u06cc\u06ba 15 \u0645\u0631\u0627\u062d\u0644 \u067e\u0631 \u0639\u0645\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u062a\u0631\u062a\u06cc\u0628\u0627\u062a (1~6)<\/strong>: \u0627\u067e\u0646\u06d2 \u0679\u0648\u0644\u0632 \u0627\u0648\u0631 AWS \u0644\u0627\u06af \u0627\u0646 \u06a9\u0648 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 <code>terraform apply<\/code> (VPC, EKS, RDS, ECR, Secrets Manager, GuardDuty, CloudTrail, IAM)\u060c \u062d\u0641\u0627\u0638\u062a\u06cc \u062e\u062f\u0645\u0627\u062a \u06a9\u06cc \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631\u06cc\u06ba\u060c \u062a\u0635\u0627\u0648\u06cc\u0631 \u0628\u0646\u0627\u0626\u06cc\u06ba \u0627\u0648\u0631 ECR \u067e\u0631 \u067e\u0634 \u06a9\u0631\u06cc\u06ba\u060c \u067e\u06cc\u0686 <code>manifests\/kustomization.yaml<\/code> \u0631\u062c\u0633\u0679\u0631\u06cc \u0627\u0648\u0631 \u06af\u0679 SHA \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u062a\u0631\u062a\u06cc\u0628 <code>kubectl<\/code> EX \u06a9\u06d2 \u0644\u06cc\u06d2\u06d4<\/p>\n<p><strong>\u067e\u0644\u06cc\u0679 \u0641\u0627\u0631\u0645 (7-12)<\/strong>: ArgoCD \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 Kyverno + \u06a9\u0644\u0633\u0679\u0631 \u067e\u0627\u0644\u06cc\u0633\u06cc\u060c Falco\u060c \u0627\u06cc\u06a9\u0633\u0679\u0631\u0646\u0644 \u0633\u06cc\u06a9\u0631\u0679 \u0622\u067e\u0631\u06cc\u0679\u0631 + IRSA \u0633\u0631\u0648\u0633 \u0627\u06a9\u0627\u0624\u0646\u0679\u060c CSI \u0633\u06cc\u06a9\u0631\u0679 \u0688\u0631\u0627\u0626\u06cc\u0648\u0631 \u0627\u0648\u0631 7 \u0644\u06cc\u0648\u0644 \u0622\u0628\u0632\u0631\u0648\u06cc\u0628\u0644\u0679\u06cc \u0627\u0633\u0679\u06cc\u06a9\u06d4<\/p>\n<p><strong>\u062a\u0642\u0633\u06cc\u0645 (13\u201315)<\/strong>: ArgoCD \u0627\u06cc\u067e <code>clearledger-aws<\/code> \u06c1\u0645 \u0648\u0642\u062a \u0633\u0627\u0632\u06cc <code>stages\/stage-8-aws-migration\/manifests\/<\/code>ALB \u0645\u06cc\u0632\u0628\u0627\u0646 \u0646\u0627\u0645 \u06a9\u0627 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u067e\u06be\u0631 \u06cc\u0648 \u0622\u0631 \u0627\u06cc\u0644 \u067e\u0631\u0646\u0679 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0646\u0648\u0679\u06cc\u0641\u06a9\u06cc\u0634\u0646 \u067e\u06be\u0627\u0691 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0633\u06a9\u0631\u067e\u0679 \u0645\u06a9\u0645\u0644 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f \u067e\u0631\u0646\u0679 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 <code>http:\/\/<alb-dns>\/<\/alb-dns><\/code> \u0627\u067e\u0646\u06d2 \u0628\u0631\u0627\u0624\u0632\u0631 \u0645\u06cc\u06ba (ClearLedger \u0644\u0627\u06af \u0627\u0646 UI) \u06cc\u0627 \u00a78.3 \u06a9\u06cc \u067e\u06cc\u0631\u0648\u06cc \u06a9\u0631\u06cc\u06ba\u06d4 \u0622\u067e Argo CD \u0627\u0648\u0631 Grafana \u067e\u0648\u0631\u0679 \u0641\u0627\u0631\u0648\u0631\u0688\u0646\u06af \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0646\u062f\u0631\u0627\u062c\u0627\u062a \u06a9\u0628 \u06a9\u06be\u0648\u0644\u06cc\u06ba \u06af\u06d2\u061f<\/p>\n<p>\u0645\u0642\u0627\u0645\u06cc \u0627\u06cc\u067e \u06a9\u06cc \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u0631\u0627\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2 ESO \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 CSI \u0628\u06be\u06cc \u0627\u0646\u0633\u0679\u0627\u0644 \u06c1\u06d2 \u0644\u06c1\u0630\u0627 \u0622\u067e \u0628\u063a\u06cc\u0631 \u06a9\u0633\u06cc \u0627\u0636\u0627\u0641\u06cc \u0633\u06cc\u0679 \u0627\u067e \u06a9\u06d2 \u00a78.5 \u0645\u06cc\u06ba \u0641\u0627\u0626\u0644\u0648\u06ba \u06a9\u0648 \u0645\u0627\u0624\u0646\u0679 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u06a9\u0648\u0634\u0634 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p><strong>\u0679\u06cc\u0631\u0627\u0641\u0627\u0631\u0645 \u0644\u06d2 \u0622\u0624\u0679<\/strong>: \u0646\u06c1\u06cc\u06ba <code>terraform.tf<\/code> \u0641\u0627\u0626\u0644 \u06a9\u06c1 <code>terraform {}<\/code> \u0628\u0644\u0627\u06a9\u0633 (\u0648\u0631\u0698\u0646\u060c \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0646\u0646\u062f\u06c1\u060c \u0627\u062e\u062a\u06cc\u0627\u0631\u06cc S3 \u067e\u0633\u062f\u06cc\u062f) \u0633\u0628 \u0633\u06d2 \u0627\u0648\u067e\u0631 \u06c1\u06cc\u06ba\u06d4 <code>main.tf<\/code>. \u0648\u0633\u0627\u0626\u0644 \u06a9\u0648 \u0645\u0648\u0636\u0648\u0639 \u06a9\u06d2 \u0644\u062d\u0627\u0638 \u0633\u06d2 \u062a\u0642\u0633\u06cc\u0645 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4 <code>vpc.tf<\/code>, <code>eks.tf<\/code>, <code>rds.tf<\/code>, <code>ecr.tf<\/code>, <code>alb.tf<\/code>, <code>iam.tf<\/code>, <code>secrets.tf<\/code>, <code>security.tf<\/code>.<\/p>\n<p>\u0633\u06d2 \u062a\u0645\u0627\u0645 \u06a9\u0645\u0627\u0646\u0688\u0632 \u0686\u0644\u0627\u0626\u06cc\u06ba: <code>stages\/stage-8-aws-migration\/terraform\/<\/code>.<\/p>\n<h3 id=\"heading-83-manual-walkthrough\">8.3: \u062f\u0633\u062a\u06cc \u0648\u0627\u06a9 \u062a\u06be\u0631\u0648<\/h3>\n<p>\u062a\u062d\u0631\u06cc\u06a9 <strong>\u0627\u0633 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06a9\u06c1 \u0622\u067e \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba\u06d4<\/strong> \u0627\u0633 \u0633\u06cc\u06a9\u0634\u0646 \u0645\u06cc\u06ba \u062f\u0633\u062a\u06cc \u0627\u0642\u062f\u0627\u0645\u0627\u062a \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4 <strong>\u0627\u0633\u0679\u06cc\u062c \u0627\u06d2<\/strong> \u0627\u0633 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2\u060c \u06a9\u0645 \u0627\u0632 \u06a9\u0645 \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u062e\u0648\u062f <code>make aws-up<\/code>. \u0631\u0627\u0633\u062a\u06c1 \u0631\u06cc\u067e\u0648 \u0631\u0648\u0679 \u0633\u06d2 \u0644\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06a9\u0645\u0627\u0646\u0688 \u0686\u06cc\u0632 \u06a9\u0648 \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u062a\u06cc \u06c1\u06d2 \u0627\u0648\u0631 UI \u062b\u0627\u0628\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u06cc\u06c1 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u06c1\u0648\u0645 \u0644\u06cc\u0628 \u06a9\u06d2 \u0645\u0631\u0627\u062d\u0644 2 \u0627\u0648\u0631 7 \u0646\u06d2 \u067e\u06c1\u0644\u06d2 \u06c1\u06cc \u0622\u067e \u06a9\u0648 \u0627\u067e\u0646\u06d2 \u0628\u0631\u0627\u0624\u0632\u0631 \u0645\u06cc\u06ba Argo CD \u0627\u0648\u0631 Grafana \u06a9\u0648 \u06a9\u06be\u0648\u0644\u0646\u06d2 \u06a9\u0627 \u0637\u0631\u06cc\u0642\u06c1 \u0633\u06a9\u06be\u0627\u06cc\u0627 \u06c1\u06d2\u06d4 \u0645\u0631\u062d\u0644\u06c1 8 \u0627\u06cc\u06a9 \u06c1\u06cc \u062e\u06cc\u0627\u0644 \u06c1\u06d2.<\/p>\n<p>\u0644\u06cc\u06a9\u0646 AWS \u0645\u06cc\u06ba \u0646\u06c1\u06cc\u06ba\u06d4 <code>clearledger.local<\/code> \u06cc\u0627 <code>grafana.local<\/code> \u06a9\u0648 <code>\/etc\/hosts<\/code>. \u0627\u067e\u0646\u06cc \u0627\u06cc\u067e \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0646\u0679\u0631\u0648\u0644 \u067e\u0644\u06cc\u0646 UI \u0627\u0648\u0631 \u0639\u0648\u0627\u0645\u06cc ALB \u0645\u06cc\u0632\u0628\u0627\u0646 \u0646\u0627\u0645 \u06a9\u06d2 \u0644\u06cc\u06d2 \u067e\u0648\u0631\u0679 \u0641\u0627\u0631\u0648\u0631\u0688\u0646\u06af \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-when-to-open-what-checkpoint-map\">\u062c\u0628 \u06a9\u06cc\u0627 \u06a9\u06be\u0648\u0644\u0646\u0627 \u06c1\u06d2 (\u0686\u06cc\u06a9 \u067e\u0648\u0627\u0626\u0646\u0679 \u06a9\u0627 \u0646\u0642\u0634\u06c1)<\/h4>\n<p><code>make aws-up<\/code> 15 \u0642\u062f\u0645 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4 \u0622\u067e \u06a9\u0648 \u0627\u06cc\u06a9 \u0633\u0627\u062a\u06be \u062a\u0645\u0627\u0645 UI \u06a9\u06be\u0648\u0644\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0622\u067e \u06a9\u0648 \u0635\u0631\u0641 \u06cc\u06c1 \u062c\u0627\u0646\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2 \u06a9\u06c1 \u0627\u0633\u06a9\u0631\u067e\u0679 \u06a9\u06cc \u062a\u0631\u0642\u06cc \u06a9\u06d2 \u0633\u0627\u062a\u06be \u06a9\u0628 \u0686\u06cc\u06a9 \u06a9\u0631\u0646\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0622\u06cc\u0627 \u06cc\u06c1 \u06a9\u0627\u0645\u06cc\u0627\u0628 \u06c1\u06d2 \u06cc\u0627 \u0646\u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0633\u0628 \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u060c Terraform AWS \u067e\u0631 \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0645\u0631\u062d\u0644\u06c1 2 \u0645\u06a9\u0645\u0644 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f\u060c \u06a9\u06be\u0648\u0644\u06cc\u06ba: <strong>AWS \u06a9\u0646\u0633\u0648\u0644<\/strong> \u067e\u0648\u0688 \u06a9\u06d2 \u0686\u0644\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u060c \u06cc\u06c1 \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u06a9\u0644\u0633\u0679\u0631\u060c \u0631\u062c\u0633\u0679\u0631\u06cc\u060c \u0627\u0648\u0631 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2\u06d4 E.K.S <code>clearledger<\/code> \u06c1\u06d2 <strong>\u0641\u0639\u0627\u0644<\/strong>\u0627\u06cc \u0633\u06cc \u0622\u0631 \u06a9\u06d2 \u0686\u0627\u0631 \u0630\u062e\u06cc\u0631\u06d2 \u06c1\u06cc\u06ba \u062c\u0646 \u0645\u06cc\u06ba \u0634\u0627\u0645\u0644 \u06c1\u06cc\u06ba: <code>frontend<\/code> (\u0627\u0633\u06d2 \u0627\u0628\u06be\u06cc \u06a9\u06d2 \u0644\u06cc\u06d2 \u062e\u0627\u0644\u06cc \u0686\u06be\u0648\u0691 \u062f\u06cc\u0646\u0627 \u0679\u06be\u06cc\u06a9 \u06c1\u06d2) \u0627\u0648\u0631 RDS <code>clearledger-postgres<\/code> \u06c1\u06d2 <strong>\u062f\u0633\u062a\u06cc\u0627\u0628<\/strong>.<\/p>\n<p>\u0648\u0627\u06a9 \u062a\u06be\u0631\u0648 \u06a9\u06d2 \u0644\u06cc\u06d2\u060c AWS \u06a9\u0646\u0633\u0648\u0644 \u062f\u06cc\u06a9\u06be\u06cc\u06ba (\u0645\u0631\u062d\u0644\u06c1 2 \u06a9\u06d2 \u0628\u0639\u062f \u0633\u06d2)\u06d4<\/p>\n<p>\u06a9\u0646\u0679\u06cc\u0646\u0631 \u06a9\u06cc \u062a\u0635\u0648\u06cc\u0631 \u06cc\u06c1 \u06c1\u06d2: ECR \u06a9\u0648 \u0645\u0631\u062d\u0644\u06c1 4 \u06a9\u06d2 \u0628\u0639\u062f \u06cc\u0627 CI \u2014 AWS (ECR + OIDC) GitHub \u0627\u06cc\u06a9\u0634\u0646\u0632 \u0645\u06cc\u06ba \u0633\u0628\u0632 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 \u06c1\u0631 \u0630\u062e\u06cc\u0631\u06c1 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 git SHA \u0679\u06cc\u06af \u062f\u0631\u062c \u06c1\u0648\u0646\u0627 \u0636\u0631\u0648\u0631\u06cc \u06c1\u06d2\u06d4 \u062c\u0628 \u0622\u067e \u06a9\u06cc \u0627\u06cc\u067e \u06a9\u0648 \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u062a\u0648 ArgoCD \u06a9\u0648 \u06cc\u06c1\u06cc \u0645\u0644\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0645\u0631\u062d\u0644\u06c1 7 \u06a9\u06d2 \u0622\u0633 \u067e\u0627\u0633\u060c \u0627\u0633\u06a9\u0631\u067e\u0679 \u0622\u0631\u06af\u0648 \u0633\u06cc \u0688\u06cc \u06a9\u0648 \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 UI \u06a9\u06cc \u0637\u0631\u0641 \u067e\u0648\u0631\u0679 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u062f\u06cc\u06a9\u06be\u06cc\u06ba \u06a9\u06c1 \u0622\u06cc\u0627 \u0644\u0627\u06af \u0627\u0646 \u0635\u0641\u062d\u06c1 \u0644\u0648\u0688 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 \u0645\u062c\u06be\u06d2 \u0627\u0628\u06be\u06cc \u062a\u06a9 \u0627\u06cc\u067e \u0646\u0638\u0631 \u0646\u06c1\u06cc\u06ba \u0622 \u0631\u06c1\u06cc \u06c1\u06d2\u06d4 \u0686\u06cc\u06a9 \u06a9\u06cc\u0627 \u062c\u0627 \u0631\u06c1\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0622\u06cc\u0627 \u0622\u067e GitOps \u0633\u06d2 \u0645\u0646\u0633\u0644\u06a9 \u06c1\u0648 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u062a\u0641\u0635\u06cc\u0644\u0627\u062a: Argo CD UI\u06d4<\/p>\n<p>\u0645\u0631\u062d\u0644\u06c1 12 \u0645\u0634\u0627\u06c1\u062f\u06d2 \u06a9\u0627 \u0627\u0636\u0627\u0641\u06c1 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u067e\u0648\u0631\u0679 \u0641\u0627\u0631\u0648\u0631\u0688\u0646\u06af \u0627\u0648\u0631 \u06af\u0631\u0627\u0641\u0627\u0646\u0627 \u0645\u06cc\u06ba \u0644\u0627\u06af \u0627\u0646 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f\u060c \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u0626\u06cc\u06ba \u06a9\u06c1 \u0622\u067e \u06a9\u06d2 \u067e\u0627\u0633 \u0686\u06be ClearLedger \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688\u0632 \u062f\u0631\u062c \u06c1\u06cc\u06ba\u06d4 \u067e\u06cc\u0646\u0644 \u0627\u0633 \u0648\u0642\u062a \u062a\u06a9 \u062e\u0627\u0644\u06cc \u06c1\u0648 \u0633\u06a9\u062a\u0627 \u06c1\u06d2 \u062c\u0628 \u062a\u06a9 \u06a9\u06c1 \u0622\u067e \u0627\u06cc\u0648\u0646\u0679 \u0646\u06c1\u06cc\u06ba \u0628\u0646\u0627\u062a\u06d2\u06d4 \u06cc\u06c1 \u06c1\u0648\u0645 \u0644\u06cc\u0628 \u06a9\u0627 \u0645\u0631\u062d\u0644\u06c1 7 \u062c\u06cc\u0633\u0627 \u06c1\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u0645\u0631\u062d\u0644\u06c1 13 \u0645\u0646\u062f\u0631\u062c\u06c1 \u0630\u06cc\u0644 \u067e\u0631 \u0644\u0627\u06af\u0648 \u06c1\u0648\u062a\u0627 \u06c1\u06d2: <code>clearledger-aws<\/code> \u0627\u06cc\u067e Argo CD \u2192 \u067e\u0631 \u0648\u0627\u067e\u0633 \u062c\u0627\u0626\u06cc\u06ba\u06d4 <strong>\u062f\u0631\u062e\u0648\u0627\u0633\u062a<\/strong> \u2192 <code>clearledger-aws<\/code>. \u0622\u067e \u06a9\u0648 \u062a\u0635\u062f\u06cc\u0642\u060c \u0644\u06cc\u062c\u0631\u060c \u0627\u0648\u0631 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631\u060c \u0635\u062d\u062a \u0645\u0646\u062f\u060c \u0627\u0648\u0631 \u0686\u0644\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u067e\u0648\u0688\u0632 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4<\/p>\n<p>\u0645\u0631\u062d\u0644\u06c1 14 \u0622\u067e \u06a9\u06cc \u0627\u06cc\u067e \u06a9\u0648 \u0639\u0648\u0627\u0645\u06cc \u06cc\u0648 \u0622\u0631 \u0627\u06cc\u0644 \u067e\u0631 \u0638\u0627\u06c1\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u06a9\u06be\u0644\u0627 <code>http:\/\/<alb-dns>\/<\/alb-dns><\/code> \u0622\u067e \u06a9\u06d2 \u0628\u0631\u0627\u0624\u0632\u0631 \u0645\u06cc\u06ba: \u0622\u067e \u06a9\u0648 \u0648\u06c1\u06cc ClearLedger \u0644\u0627\u06af \u0627\u0646 UI \u062f\u06cc\u06a9\u06be\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2 \u062c\u06cc\u0633\u0627 \u06a9\u06c1 \u06c1\u0648\u0645 \u0644\u06cc\u0628\u06d4 <code>clearledger.local<\/code>ALB \u0645\u06cc\u06ba \u062f\u0633\u062a\u06cc\u0627\u0628 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 <code>\/etc\/hosts<\/code> \u0627\u0646\u062f\u0631\u0627\u062c<br \/>\u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba <code>\/auth\/health<\/code> \u062c\u0628 \u0622\u067e \u0627\u067e\u0646\u06d2 \u0679\u0631\u0645\u06cc\u0646\u0644 \u0645\u06cc\u06ba \u0641\u0648\u0631\u06cc API \u0686\u06cc\u06a9 \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0648 \u0627\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0627\u0648\u0631 \u0627\u0633\u0679\u06cc\u0679\u0633 URL\u06d4<\/p>\n<p>ALB \u062f\u06cc\u06a9\u06be\u06cc\u06ba\u06d4 \u0627\u06cc\u0633\u0627 \u062a\u0628 \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u062c\u0628 \u067e\u06c1\u0644\u06cc \u0628\u0627\u0631 \u0627\u06cc\u067e \u06a9\u0648 \u0639\u0648\u0627\u0645 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062c\u0627\u0631\u06cc \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u06af\u0631 \u0622\u067e \u0645\u0632\u06cc\u062f \u062a\u0635\u062f\u06cc\u0642 \u0686\u0627\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u06cc\u06c1\u0627\u06ba \u06a9\u0686\u06be \u0627\u062e\u062a\u06cc\u0627\u0631\u06cc \u062a\u0635\u062f\u06cc\u0642\u0627\u062a \u06c1\u06cc\u06ba: <strong>EC2 \u2192 \u0644\u0648\u0688 \u0628\u06cc\u0644\u0646\u0633\u0631 \u2192<\/strong> <code>clearledger<\/code>: \u0635\u0648\u0631\u062a\u062d\u0627\u0644 <strong>\u0641\u0639\u0627\u0644<\/strong>\u06c1\u0645\u0627\u0631\u06d2 \u0641\u0631\u0646\u0679 \u0627\u06cc\u0646\u0688 \u0627\u0648\u0631 API \u0633\u0631\u0648\u0633\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0635\u062d\u062a \u0645\u0646\u062f \u0627\u06c1\u062f\u0627\u0641 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>AWS \u0645\u06cc\u06ba\u060c \u0627\u06cc\u06a9 \u0627\u06cc\u067e \u06a9\u06d2 \u067e\u0627\u0633 \u0627\u06cc\u06a9 ALB \u06a9\u06d2 \u067e\u06cc\u0686\u06be\u06d2 \u0686\u0627\u0631 \u062e\u062f\u0645\u0627\u062a \u06c1\u06cc\u06ba\u06d4 <code>\/<\/code> (\u0644\u0627\u06af \u0627\u0646\u060c \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688\u060c \u0679\u0631\u0627\u0646\u0632\u06cc\u06a9\u0634\u0646) \u0627\u0648\u0631 \u062a\u06cc\u0646 APIs <code>\/auth<\/code>, <code>\/ledger<\/code>\u0627\u0648\u0631 <code>\/notifications<\/code>.<\/p>\n<p>\u0645\u0631\u062d\u0644\u06c1 8 \u0645\u06cc\u06ba \u067e\u0648\u0631\u0679 \u0641\u0648\u0644\u06cc\u0648 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679 ALB URL \u06c1\u06d2 \u062c\u0648 UI \u06a9\u0648 \u0645\u0646\u062f\u0631\u062c\u06c1 \u0630\u06cc\u0644 \u062f\u06a9\u06be\u0627 \u0631\u06c1\u0627 \u06c1\u06d2: <code>http:\/\/clearledger-xxxxxxxxxx.eu-west-1.elb.amazonaws.com<\/code> ClearLedger \u0644\u0627\u06af \u0627\u0646 \u06cc\u0627 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u062f\u06a9\u06be\u0627\u06cc\u0627 \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/07\/1785194533_338_Homelab-\u0633\u06d2-AWS-\u062a\u06a9-\u067e\u0631\u0648\u0688\u06a9\u0634\u0646-\u06a9\u06d2-\u0644\u06cc\u06d2-\u062a\u06cc\u0627\u0631-DevSecOps-\u067e\u0644\u06cc\u0679.png\" alt=\"ALB URL \u06a9\u06d2 \u0633\u0627\u062a\u06be Clearledger UI \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679\" style=\"display:block;margin:0 auto\" width=\"1348\" height=\"364\" loading=\"lazy\" title=\"\"><\/p>\n<p>Argo CD \u0627\u0648\u0631 Grafana \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u0648\u0642\u0641 \u0634\u062f\u06c1 \u0679\u0631\u0645\u06cc\u0646\u0644\u0632 \u0686\u0644\u0627\u0646\u0627 \u062c\u0627\u0631\u06cc \u0631\u06a9\u06be\u06cc\u06ba\u06d4 <code>kubectl port-forward<\/code> \u062c\u0628\u06a9\u06c1 \u0628\u0631\u0627\u0624\u0632\u0631 \u06a9\u0627 \u0679\u06cc\u0628 \u06a9\u06be\u0644\u0627 \u06c1\u06d2\u06d4 <code>Ctrl+C<\/code> \u0633\u0631\u0646\u06af \u0628\u0646\u062f \u06a9\u0631\u0648\u06d4<\/p>\n<h4 id=\"heading-before-you-start\">\u0627\u0633 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06a9\u06c1 \u0622\u067e \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba\u06d4<\/h4>\n<p><strong>\u0645\u0631\u062d\u0644\u06c1 A: \u0627\u06cc\u06a9 \u062d\u0642\u06cc\u0642\u06cc \u067e\u0627\u0633 \u0648\u0631\u0688 \u0633\u06cc\u0679 \u06a9\u0631\u06cc\u06ba\u06d4<\/strong> <code>secrets.tf<\/code><\/p>\n<p>\u06a9\u06be\u0644\u0627 <code>stages\/stage-8-aws-migration\/terraform\/secrets.tf<\/code> \u0644\u0641\u0638\u06cc \u0645\u062a\u0646 \u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba\u06d4 <code>CHANGE_ME_BEFORE_APPLY<\/code>. \u06cc\u06c1 \u0641\u0627\u0626\u0644 \u0645\u06cc\u06ba \u0686\u0627\u0631 \u0628\u0627\u0631 \u0638\u0627\u06c1\u0631 \u06c1\u0648\u062a\u0627 \u06c1\u06d2 (\u067e\u0648\u0633\u0679\u06af\u0631\u06cc\u0633 \u067e\u0627\u0633 \u0648\u0631\u0688\u060c \u062c\u06d2 \u0688\u0628\u0644\u06cc\u0648 \u0679\u06cc \u0633\u06cc\u06a9\u0631\u06cc\u0679\u060c \u0627\u0648\u0631 \u062f\u0648 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06cc\u0648 \u0622\u0631 \u0627\u06cc\u0644)\u06d4 \u062a\u0645\u0627\u0645 \u0627\u0634\u06cc\u0627\u0621 \u06a9\u0648 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p><code>make aws-up<\/code> \u06a9\u0631\u06d2 \u06af\u0627 <strong>\u0686\u0644\u0627\u0646\u06d2 \u0633\u06d2 \u0627\u0646\u06a9\u0627\u0631<\/strong> \u0627\u06af\u0631 \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2\u06d4 <code>CHANGE_ME_BEFORE_APPLY<\/code> \u0645\u062a\u0646 \u0627\u0628\u06be\u06cc \u062a\u06a9 \u0627\u0633 \u0641\u0627\u0626\u0644 \u0645\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u0645\u0631\u062d\u0644\u06c1 B: \u0679\u0631\u0645\u06cc\u0646\u0644 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/strong><\/p>\n<pre><code class=\"language-bash\">aws sts get-caller-identity\nterraform --version\n\n# REQUIRED before first terraform apply; GitHub Actions OIDC (ci-aws.yaml) reads this at apply time:\ncp stages\/stage-8-aws-migration\/terraform\/terraform.tfvars.example \n   stages\/stage-8-aws-migration\/terraform\/terraform.tfvars\n# Edit terraform.tfvars: github_owner = \"YOUR_GITHUB_USERNAME\"   # your GitHub user or org, not a placeholder\n\nterraform -chdir=stages\/stage-8-aws-migration\/terraform validate\n# Fails with \"Set github_owner in terraform.tfvars\" until you replace YOUR_GITHUB_USERNAME\n<\/code><\/pre>\n<p><strong>\u0645\u062a \u0628\u06be\u0627\u06af\u0648<\/strong> <code>terraform apply<\/code> <strong>\u06a9\u0648<\/strong> <code>github_owner<\/code> <strong>\u06cc\u06c1 \u0645\u0642\u0631\u0631 \u06c1\u06d2.<\/strong> \u062c\u0628 \u0622\u067e \u067e\u0644\u06cc\u0633 \u06c1\u0648\u0644\u0688\u0631 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u062f\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 AWS \u0622\u067e \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 IAM \u0631\u0648\u0644 \u062a\u062e\u0644\u06cc\u0642 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <code>clearledger-github-actions-ecr<\/code> \u0627\u0639\u062a\u0645\u0627\u062f \u06a9\u06d2 \u0633\u0627\u062a\u06be <code>repo:YOUR_GITHUB_USERNAME\/...<\/code>. CI \u0627\u0633 \u0645\u06cc\u06ba \u0646\u0627\u06a9\u0627\u0645: <strong>\u062a\u0635\u0648\u06cc\u0631 \u067e\u0648\u0633\u0679 \u06a9\u0631\u06cc\u06ba \u2192 ECR<\/strong> \u06a9\u06d2 \u0633\u0627\u062a\u06be <code>Not authorized to perform sts:AssumeRoleWithWebIdentity<\/code>.<\/p>\n<p>\u062a\u0631\u0645\u06cc\u0645 \u06a9\u0631\u06cc\u06ba: \u062a\u0631\u0645\u06cc\u0645 \u06a9\u0631\u06cc\u06ba\u06d4 <code>terraform.tfvars<\/code> \u2192 <code>terraform apply<\/code> \u062f\u0648\u0628\u0627\u0631\u06c1 \u2192 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 <code>aws iam get-role<\/code> \u067e\u06be\u0631 \u0646\u06cc\u0686\u06d2 \u06c1\u06d2\u06d4 <strong>\u0646\u0627\u06a9\u0627\u0645 \u06a9\u0627\u0645\u0648\u06ba \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4<\/strong> \u0646\u0627\u06a9\u0627\u0645 \u06a9\u0627\u0645 \u0686\u0644\u0627\u062a\u06d2 \u0648\u0642\u062a (\u067e\u0648\u0631\u06cc \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u0646\u06c1\u06cc\u06ba)<\/p>\n<h4 id=\"heading-steps-12-terraform\">\u0645\u0631\u062d\u0644\u06c1 1 \u0627\u0648\u0631 2: \u0679\u06cc\u0631\u0627\u0641\u0627\u0631\u0645<\/h4>\n<pre><code class=\"language-bash\">cd stages\/stage-8-aws-migration\/terraform\nterraform init -upgrade\nterraform apply\n\n# Save outputs:\nterraform output -raw ecr_registry_url\nterraform output -raw github_actions_ecr_role_arn\nterraform output -raw eso_role_arn\nterraform output -raw auth_service_irsa_role_arn\nterraform output -raw kubeconfig_command\ncd ..\/..\/..\n<\/code><\/pre>\n<h4 id=\"heading-aws-console-after-step-2\">\u0645\u0631\u062d\u0644\u06c1 2 \u06a9\u06d2 \u0628\u0639\u062f AWS \u06a9\u0646\u0633\u0648\u0644\u06d4<\/h4>\n<p>\u0627\u067e\u0646\u06d2 \u06a9\u0644\u0633\u0679\u0631 \u06a9\u0648 \u0686\u06be\u0648\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 Terraform \u06a9\u06d2 \u062a\u062e\u0644\u06cc\u0642 \u06a9\u0631\u062f\u06c1 \u0648\u0633\u0627\u0626\u0644 \u06a9\u0648 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<ol>\n<li>\n<p><strong>\u062c\u06cc\u0648\u0646<\/strong> \u2192 \u06a9\u0644\u0633\u0679\u0631 \u2192 <code>clearledger<\/code> \u2192 <strong>\u062d\u06cc\u062b\u06cc\u062a: \u0641\u0639\u0627\u0644<\/strong>, <strong>3 \u0646\u0648\u0688\u0633<\/strong><\/p>\n<\/li>\n<li>\n<p><strong>\u0627\u06cc \u0633\u06cc \u0622\u0631<\/strong> \u2192 \u0630\u062e\u06cc\u0631\u06c1 \u2192 <code>clearledger\/auth-service<\/code>, <code>ledger-service<\/code>, <code>notification-service<\/code>, <code>frontend<\/code> (0 \u062a\u0635\u0627\u0648\u06cc\u0631 \u0644\u06cc\u0648\u0644 4 \u06cc\u0627 CI \u062a\u06a9)<\/p>\n<\/li>\n<li>\n<p><strong>\u0622\u0631 \u0688\u06cc \u0627\u06cc\u0633<\/strong> \u2192 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u2192 <code>clearledger-postgres<\/code> \u2192 <strong>\u062f\u0633\u062a\u06cc\u0627\u0628<\/strong><\/p>\n<\/li>\n<\/ol>\n<p><strong>\u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 GitHub ECR \u067e\u0631 \u062c\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2 (\u0635\u0631\u0641 \u0627\u0633 \u0635\u0648\u0631\u062a \u0645\u06cc\u06ba \u062c\u0628 \u0622\u067e \u0645\u0633\u062a\u0642\u0628\u0644 \u0645\u06cc\u06ba AWS CI \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0627\u0631\u0627\u062f\u06c1 \u0631\u06a9\u06be\u062a\u06d2 \u06c1\u06cc\u06ba)<\/strong><\/p>\n<p>GitHub \u0627\u06cc\u06a9\u0634\u0646\u0632 \u06a9\u0648 \u0622\u067e \u06a9\u06d2 AWS \u0627\u06a9\u0627\u0624\u0646\u0679 \u0645\u06cc\u06ba \u062a\u0635\u0627\u0648\u06cc\u0631 \u06a9\u0648 \u0622\u06af\u06d2 \u0628\u0691\u06be\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u062c\u0627\u0632\u062a \u062f\u0631\u06a9\u0627\u0631 \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4 Terraform \u0627\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 IAM \u06a9\u0631\u062f\u0627\u0631 \u062a\u062e\u0644\u06cc\u0642 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u0635\u0631\u0641 \u0627\u0633 \u0635\u0648\u0631\u062a \u0645\u06cc\u06ba \u062c\u0628 \u0622\u067e \u0627\u06cc\u06a9 \u062d\u0642\u06cc\u0642\u06cc GitHub \u0635\u0627\u0631\u0641 \u0646\u0627\u0645 \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>terraform.tfvars<\/code> \u067e\u06c1\u0644\u06d2 <code>terraform apply<\/code>.<\/p>\n<p>\u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u0622\u06cc\u0627 \u0627\u0633 \u0646\u06d2 \u06a9\u0627\u0645 \u06a9\u06cc\u0627\u06d4<\/p>\n<pre><code class=\"language-bash\">aws iam get-role --role-name clearledger-github-actions-ecr \n  --query 'Role.AssumeRolePolicyDocument.Statement[0].Condition.StringEquals.\"token.actions.githubusercontent.com:sub\"' \n  --output text\n<\/code><\/pre>\n<p><strong>\u0627\u0686\u06be\u0627:<\/strong> <code>repo:your-real-username\/clearledger:environment:production<\/code><\/p>\n<p><strong>\u0628\u0631\u0627:<\/strong> <code>repo:YOUR_GITHUB_USERNAME\/clearledger:...<\/code> \u0645\u06cc\u06ba \u0627\u0633 \u0645\u06cc\u06ba \u062a\u0631\u0645\u06cc\u0645 \u06a9\u0631\u0646\u0627 \u0628\u06be\u0648\u0644 \u06af\u06cc\u0627\u06d4 <code>terraform.tfvars<\/code>.<\/p>\n<p>\u0641\u0627\u0626\u0644 \u0645\u06cc\u06ba \u062a\u0631\u0645\u06cc\u0645 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0633\u06d2 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4 <code>terraform apply<\/code> GitHub \u0645\u06cc\u06ba \u062c\u0627\u0628\u0632 \u067e\u0631 \u0648\u0627\u067e\u0633 \u062c\u0627\u0626\u06cc\u06ba \u0627\u0648\u0631 \u067e\u06be\u0631 Run Failed CI, AWS (ECR + OIDC) \u2192 \u0646\u0627\u06a9\u0627\u0645 \u062c\u0627\u0628 \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0686\u0644\u0627\u0626\u06cc\u06ba \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 \u0635\u0631\u0641 \u067e\u0634 \u0633\u0679\u06cc\u067e \u067e\u0631 \u062f\u0648\u0628\u0627\u0631\u06c1 \u06a9\u0648\u0634\u0634 \u06a9\u0631\u06cc\u06ba\u06d4 \u06c1\u0631 \u0686\u06cc\u0632 \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0628\u0646\u0627\u0646\u06d2 \u0627\u0648\u0631 \u062a\u0644\u0627\u0634 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0633 \u067e\u0648\u0631\u06d2 \u0628\u0644\u0627\u06a9 \u06a9\u0648 \u0635\u0631\u0641 \u0627\u0633 \u0635\u0648\u0631\u062a \u0645\u06cc\u06ba \u0686\u06be\u0648\u0691\u06cc\u06ba \u062c\u0628 \u0622\u067e \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba: <code>make aws-up<\/code> \u0627\u0633 \u0648\u0642\u062a\u060c \u0645\u06cc\u06ba \u0646\u06d2 \u0627\u0628\u06be\u06cc \u062a\u06a9 AWS CI \u06a9\u0648 \u0641\u0639\u0627\u0644 \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u0627\u06cc \u0633\u06cc \u0622\u0631 \u06a9\u06d2 \u0630\u062e\u06cc\u0631\u06d2 \u06a9\u0628 \u0638\u0627\u06c1\u0631 \u06c1\u0648\u06ba \u06af\u06d2\u061f<\/strong><\/p>\n<p>\u062f\u0648\u0631\u0627\u0646 <code>terraform apply<\/code> <strong>(\u0645\u0631\u062d\u0644\u06c1 2)<\/strong>\u062c\u0628 \u0622\u067e \u0622\u0633 \u067e\u0627\u0633 \u06c1\u0648\u06ba \u062a\u0648 \u0646\u06c1\u06cc\u06ba\u06d4 <code>docker push<\/code>. \u0679\u06cc\u0631\u0627\u0641\u0627\u0631\u0645 \u0627\u0633\u06d2 \u062a\u06cc\u0627\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <strong>\u0645\u0641\u062a<\/strong> \u062a\u0635\u0648\u06cc\u0631\u06cc \u0630\u062e\u06cc\u0631\u06c1: <code>clearledger\/auth-service<\/code>, <code>ledger-service<\/code>, <code>notification-service<\/code>\u0627\u0648\u0631 <code>frontend<\/code>\u0644\u06c1\u0630\u0627\u060c \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u06d2 \u0641\u0648\u0631\u0627\u064b \u0628\u0639\u062f 0 \u062a\u0635\u0627\u0648\u06cc\u0631 \u062f\u06cc\u06a9\u06be\u0646\u0627 \u0645\u0639\u0645\u0648\u0644 \u06a9\u06cc \u0628\u0627\u062a \u06c1\u06d2\u06d4<\/p>\n<p>\u062a\u0635\u0648\u06cc\u0631 \u06a9\u0648 \u0628\u0639\u062f \u0645\u06cc\u06ba \u0645\u0631\u062d\u0644\u06c1 4 \u0645\u06cc\u06ba \u06a9\u0627\u067e\u06cc \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2 \u06af\u0627 (\u062f\u0633\u062a\u06cc \u0637\u0648\u0631 \u067e\u0631 <code>docker push<\/code>) \u06cc\u0627 \u0627\u06af\u0631 GitHub \u0627\u06cc\u06a9\u0634\u0646\u0632 CI \u06a9\u0627\u0645\u06cc\u0627\u0628 \u06c1\u06d2\u06d4<\/p>\n<p><strong>AWS CLI \u0631\u06cc\u062c\u0646 \u06a9\u0648 \u0627\u0633 \u067e\u0631 \u0633\u06cc\u0679 \u06a9\u0631\u06cc\u06ba:<\/strong> <code>eu-west-1<\/code><\/p>\n<p>\u0627\u0633 \u0644\u06cc\u0628 \u0645\u06cc\u06ba \u062a\u0645\u0627\u0645 \u0627\u0634\u06cc\u0627\u0621 eu-west-1 (\u0622\u0626\u0631\u0644\u06cc\u0646\u0688) \u0645\u06cc\u06ba \u0648\u0627\u0642\u0639 \u06c1\u06cc\u06ba\u06d4 \u062c\u0628 CLI \u0688\u06cc\u0641\u0627\u0644\u0679 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 <code>us-east-1<\/code>\u06a9\u0645\u0627\u0646\u0688 \u0633\u06d2 \u067e\u062a\u06c1 \u0686\u0644\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0648\u0633\u0627\u0626\u0644 \u0645\u0648\u062c\u0648\u062f \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0628\u0627\u0648\u062c\u0648\u062f \u063a\u0627\u0626\u0628 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\">aws configure set region eu-west-1\naws configure get region   # expect: eu-west-1\n<\/code><\/pre>\n<h4 id=\"heading-steps-34-security-services-ecr-images\">\u0645\u0631\u062d\u0644\u06c1 3-4: \u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u0633\u0631\u0648\u0633 + ECR \u0627\u0645\u06cc\u062c<\/h4>\n<pre><code class=\"language-bash\">AWS_REGION=eu-west-1   # or rely on aws configure set region above\n\n# Step 3: verify security services (must pass --region eu-west-1)\naws guardduty list-detectors --region \"${AWS_REGION}\"\n# Expect: DetectorIds: [\"<id>\"]  \u2014 empty [] means wrong region, not \"not created\"\n\naws cloudtrail get-trail-status --name clearledger-trail --region \"${AWS_REGION}\"\n# Expect: IsLogging: true\n# Error \"Unknown trail ... us-east-1\" \u2192 you forgot --region eu-west-1\n\n# Step 4: build and push images to the ECR repos Terraform already created\nECR_REGISTRY=$(terraform -chdir=stages\/stage-8-aws-migration\/terraform output -raw ecr_registry_url)\nAUTH_ECR=$(terraform -chdir=stages\/stage-8-aws-migration\/terraform output -raw auth_service_ecr_url)\nLEDGER_ECR=$(terraform -chdir=stages\/stage-8-aws-migration\/terraform output -raw ledger_service_ecr_url)\nNOTIFY_ECR=$(terraform -chdir=stages\/stage-8-aws-migration\/terraform output -raw notification_service_ecr_url)\nTAG=$(git rev-parse --short HEAD)\n\naws ecr get-login-password --region \"${AWS_REGION}\" \n  | docker login --username AWS --password-stdin \"${ECR_REGISTRY}\"\n\ndocker build -t \"${AUTH_ECR}:${TAG}\" app\/auth-service && docker push \"${AUTH_ECR}:${TAG}\"\ndocker build -t \"${LEDGER_ECR}:${TAG}\" app\/ledger-service && docker push \"${LEDGER_ECR}:${TAG}\"\ndocker build -t \"${NOTIFY_ECR}:${TAG}\" app\/notification-service && docker push \"${NOTIFY_ECR}:${TAG}\"\n\n# Confirm images landed (optional)\naws ecr describe-images --repository-name clearledger\/auth-service --region \"${AWS_REGION}\" \n  --query 'imageDetails[*].imageTags' --output table\n<\/id><\/code><\/pre>\n<p><strong>ECR \u06a9\u0646\u0633\u0648\u0644 (\u0645\u0631\u062d\u0644\u06c1 4 \u06cc\u0627 \u06af\u0631\u06cc\u0646 CI \u06a9\u06d2 \u0628\u0639\u062f)<\/strong>: \u06a9\u06be\u0648\u0644\u06cc\u06ba \u0627\u0648\u0631 \u06c1\u0631 \u0627\u06cc\u06a9 \u0630\u062e\u06cc\u0631\u06c1 \u067e\u0631 \u062a\u0634\u0631\u06cc\u0641 \u0644\u06d2 \u062c\u0627\u0626\u06cc\u06ba\u06d4 \u0627\u0645\u06cc\u062c\u0632 \u0679\u06cc\u0628 \u067e\u0631 \u062c\u0627\u0626\u06cc\u06ba\u06d4 \u0622\u067e \u06a9\u0648 \u06af\u0679 \u06a9\u0645\u0679 SHA \u0633\u06d2 \u200b\u200b\u0645\u0645\u0627\u062b\u0644 \u0679\u06cc\u06af\u0632 \u062f\u06cc\u06a9\u06be\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2\u06d4 \u0627\u06af\u0631 \u0630\u062e\u06cc\u0631\u06c1 \u062e\u0627\u0644\u06cc \u06c1\u06d2 \u062a\u0648\u060c ArgoCD \u062f\u06a9\u06be\u0627\u06cc\u0627 \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4 <code>ImagePullBackOff<\/code> \u0628\u0639\u062f \u0645\u06cc\u06ba<\/p>\n<p><strong>GitHub \u0627\u06cc\u06a9\u0634\u0646\u0632 (\u0627\u06af\u0631 \u062f\u0633\u062a\u06cc \u062f\u06be\u06a9\u0627 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 CI \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631 \u0631\u06c1\u06d2 \u06c1\u0648\u06ba)<\/strong>: \u0630\u062e\u06cc\u0631\u06c1 \u2192 \u0679\u0627\u0633\u06a9\u0633 \u2192 \u0648\u0631\u06a9 \u0641\u0644\u0648 CI\u06d4 AWS (ECR + OIDC)\u06d4<\/p>\n<p>\u0627\u06af\u0631 \u0633\u0628 \u06a9\u0686\u06be \u0633\u0628\u0632 \u06c1\u06d2 \u062a\u0648 \u0645\u06cc\u06ba \u062a\u0635\u0648\u06cc\u0631 \u067e\u0648\u0633\u0679 \u06a9\u0631\u0648\u06ba \u06af\u0627\u06d4 ECR \u06a9\u0627\u0645\u06cc\u0627\u0628 \u06c1\u0648 \u06af\u06cc\u0627\u06d4 \u06cc\u06c1 \u067e\u0631\u06cc \u0688\u0633\u0679\u0631\u06cc \u0628\u06cc\u0648\u0634\u0646 \u0633\u067e\u0644\u0627\u0626\u06cc \u0686\u06cc\u0646 \u06a9\u0627 \u062b\u0628\u0648\u062a \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-step-5-gitops-source-of-truth\">\u0645\u0631\u062d\u0644\u06c1 5: GitOps \u0645\u0639\u0644\u0648\u0645\u0627\u062a \u06a9\u06d2 \u0630\u0631\u0627\u0626\u0639<\/h4>\n<p>\u067e\u06cc\u0686 \u067e\u0644\u06cc\u0633 \u06c1\u0648\u0644\u0688\u0631 <code>kustomization.yaml<\/code> (\u0627\u06cc\u06a9 \u06c1\u06cc <code>sed<\/code> \u067e\u0633\u0646\u062f <code>aws-spinup.sh<\/code> \u0645\u0631\u062d\u0644\u06c1 5):<\/p>\n<pre><code class=\"language-bash\">AWS_REGION=eu-west-1\nECR_REGISTRY=$(terraform -chdir=stages\/stage-8-aws-migration\/terraform output -raw ecr_registry_url)\nTAG=$(git rev-parse --short HEAD)\nKUST=stages\/stage-8-aws-migration\/manifests\/kustomization.yaml\n\nsed -i.bak \n  -e \"s|REPLACE_ECR_REGISTRY|${ECR_REGISTRY}|g\" \n  -e \"s|REPLACE_IMAGE_TAG|${TAG}|g\" \n  \"${KUST}\"\nrm -f \"${KUST}.bak\"\n\n# Region in ESO + CSI manifests (only if not eu-west-1)\nif [[ \"${AWS_REGION}\" != \"eu-west-1\" ]]; then\n  sed -i.bak \"s|region: eu-west-1|region: ${AWS_REGION}|g\" \n    stages\/stage-8-aws-migration\/manifests\/external-secrets.yaml \n    stages\/stage-8-aws-migration\/manifests\/csi\/auth-service-spc.yaml \n    stages\/stage-8-aws-migration\/manifests\/csi\/ledger-service-spc.yaml\n  rm -f stages\/stage-8-aws-migration\/manifests\/external-secrets.yaml.bak \n        stages\/stage-8-aws-migration\/manifests\/csi\/*.bak 2>\/dev\/null || true\nfi\n\n# Verify before commit\ngrep -E 'newName:|newTag:' \"${KUST}\"\n# Expect: YOUR_AWS_ACCOUNT.dkr.ecr.eu-west-1.amazonaws.com\/clearledger\/... and your git SHA\n\ngit add stages\/stage-8-aws-migration\/manifests\/kustomization.yaml\ngit commit -m \"stage8: ECR images ${TAG}\"\ngit push\n<\/code><\/pre>\n<p>\u0627\u06cc\u06a9 \u0628\u0627\u0631 ArgoCD \u0627\u06cc\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0631\u06cc\u067e\u0648\u0632\u0679\u0631\u06cc \u06cc\u0648 \u0622\u0631 \u0627\u06cc\u0644 \u0645\u06cc\u06ba \u0628\u06be\u06cc \u062a\u0631\u0645\u06cc\u0645 \u06a9\u0631\u06cc\u06ba (\u0627\u067e\u0646\u06d2 GitHub \u0635\u0627\u0631\u0641 \u0646\u0627\u0645 \u0633\u06d2 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u06cc\u06ba)\u06d4<\/p>\n<pre><code class=\"language-bash\"># Example: YOUR_GITHUB_USERNAME\/clearledger \u2014 check: git remote get-url origin\nsed -i.bak 's|YOUR_GITHUB_USERNAME|YOUR_ACTUAL_GITHUB_USER|g' \n  stages\/stage-8-aws-migration\/argocd\/clearledger-aws-app.yaml\nrm -f stages\/stage-8-aws-migration\/argocd\/clearledger-aws-app.yaml.bak\n<\/code><\/pre>\n<h4 id=\"heading-step-6-cluster-access-terraform-outputs\">\u0645\u0631\u062d\u0644\u06c1 6: \u06a9\u0644\u0633\u0679\u0631 \u0631\u0633\u0627\u0626\u06cc + \u0679\u06cc\u0631\u0627\u0641\u0627\u0631\u0645 \u0622\u0624\u0679 \u067e\u0679<\/h4>\n<p>\u0631\u06cc\u067e\u0648\u0632\u0679\u0631\u06cc \u0631\u0648\u0679 \u0633\u06d2 \u0686\u0644\u0627\u0626\u06cc\u06ba: \u067e\u06c1\u0644\u06d2 CLI \u0631\u06cc\u062c\u0646 \u0633\u06cc\u0679 \u06a9\u0631\u06cc\u06ba (EKS \u0627\u0648\u0631 IAM \u0622\u0624\u0679 \u067e\u0679 \u0631\u06cc\u062c\u0646\u0632 \u06c1\u06cc\u06ba)\u060c \u0627\u06cc\u06a9 kubeconfig \u06a9\u0631\u06cc\u06ba\u060c \u0627\u0648\u0631 \u067e\u06be\u0631 IRSA \u0631\u0648\u0644 ARN \u06a9\u0648 \u0627\u06cc\u06a9\u0633\u067e\u0648\u0631\u0679 \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u0642\u062f\u0627\u0645\u0627\u062a 9 \u0627\u0648\u0631 10 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062f\u0631\u06a9\u0627\u0631 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\">aws configure set region eu-west-1\n\neval \"$(terraform -chdir=stages\/stage-8-aws-migration\/terraform output -raw kubeconfig_command)\"\nkubectl get nodes\n\nexport AWS_REGION=eu-west-1\nexport ESO_ROLE_ARN=$(terraform -chdir=stages\/stage-8-aws-migration\/terraform output -raw eso_role_arn)\nexport FALCO_ROLE_ARN=$(terraform -chdir=stages\/stage-8-aws-migration\/terraform output -raw falco_role_arn)\nexport REPLACE_AUTH_IRSA_ROLE_ARN=$(terraform -chdir=stages\/stage-8-aws-migration\/terraform output -raw auth_service_irsa_role_arn)\nexport REPLACE_LEDGER_IRSA_ROLE_ARN=$(terraform -chdir=stages\/stage-8-aws-migration\/terraform output -raw ledger_service_irsa_role_arn)\nexport REPLACE_NOTIFICATION_IRSA_ROLE_ARN=$(terraform -chdir=stages\/stage-8-aws-migration\/terraform output -raw notification_service_irsa_role_arn)\n\n# Sanity check (all should print ARNs, not empty)\necho \"ESO:      ${ESO_ROLE_ARN}\"\necho \"Falco:    ${FALCO_ROLE_ARN}\"\necho \"Auth IRSA: ${REPLACE_AUTH_IRSA_ROLE_ARN}\"\n<\/code><\/pre>\n<h4 id=\"heading-steps-712-platform-stack-on-the-cluster\">\u0645\u0631\u062d\u0644\u06c1 7 \u0633\u06d2 12: \u06a9\u0644\u0633\u0679\u0631 \u06a9\u0627 \u067e\u0644\u06cc\u0679 \u0641\u0627\u0631\u0645 \u0627\u0633\u0679\u06cc\u06a9<\/h4>\n<p>\u0645\u06a9\u0645\u0644 \u0634\u062f\u06c1 \u0645\u0631\u0627\u062d\u0644 1-6 (AWS \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2\u060c \u062a\u0635\u0627\u0648\u06cc\u0631 ECR \u0645\u06cc\u06ba \u06c1\u06cc\u06ba\u060c <code>kubectl<\/code> \u0641\u06cc\u06a9\u0679\u0631\u06cc)\u06d4 \u0645\u0631\u062d\u0644\u06c1 7 \u0633\u06d2 12 \u0627\u0628 \u067e\u0644\u06cc\u0679 \u0641\u0627\u0631\u0645 \u0627\u0633\u0679\u06cc\u06a9 \u06a9\u0648 \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u060c \u062c\u0648 \u0627\u06cc\u06a9 \u06c1\u06cc \u062c\u0632\u0648 \u06c1\u06d2 \u062c\u06cc\u0633\u0627 \u06a9\u06c1: <code>aws-spinup.sh<\/code>\u062a\u0627\u06c1\u0645\u060c \u06cc\u06c1 \u0646\u06cc\u0686\u06d2 \u062f\u06cc\u06d2 \u06af\u0626\u06d2 \u0633\u06cc\u06a9\u0634\u0646 \u0645\u06cc\u06ba \u06a9\u0645\u0627\u0646\u0688 \u0686\u0644\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0646\u06c1 \u06a9\u06c1 \u0627\u0633\u06a9\u0631\u067e\u0679\u06d4<\/p>\n<p>\u06c1\u0631 \u0642\u062f\u0645 \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u0627\u0646\u0633\u0679\u0627\u0644\u06cc\u0634\u0646 \u06a9\u0648\u0688 \u0628\u0644\u0627\u06a9 \u0686\u0644\u0627\u0626\u06cc\u06ba\u060c \u0627\u0633 \u06a9\u06d2 \u0628\u0639\u062f \u0641\u0648\u0631\u0627\u064b \u0646\u06cc\u0686\u06d2 \u062a\u0635\u062f\u06cc\u0642\u06cc \u0628\u0644\u0627\u06a9\u06d4 \u0627\u06af\u0644\u06d2 \u0645\u0631\u062d\u0644\u06d2 \u067e\u0631 \u0646\u06c1 \u062c\u0627\u0626\u06cc\u06ba \u062c\u0628 \u062a\u06a9 \u06a9\u06c1 \u0622\u067e Running Pods (\u06cc\u0627 ClusterPolicy \u0641\u06c1\u0631\u0633\u062a) \u0646\u06c1 \u062f\u06cc\u06a9\u06be\u06cc\u06ba\u06d4 \"\u06a9\u0645\u0627\u0646\u0688 \u0622\u0624\u0679 \u067e\u0679 \u06a9\u06d2 \u0628\u063a\u06cc\u0631 \u0628\u0627\u06c1\u0631 \u0646\u06a9\u0644 \u06af\u0626\u06cc\" \u06a9\u0627\u0641\u06cc \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<table>\n<thead>\n<tr>\n<th>\u0642\u062f\u0645<\/th>\n<th>\u0646\u0627\u0645 \u06a9\u06cc \u062c\u06af\u06c1<\/th>\n<th>\u062c\u0648 \u0622\u067e \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba\u06d4<\/th>\n<th>\u067e\u06be\u0644\u06cc\u0648\u06ba \u06a9\u06cc \u062a\u062e\u0645\u06cc\u0646\u06cc \u062a\u0639\u062f\u0627\u062f<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>7<\/td>\n<td><code>argocd<\/code><\/td>\n<td>GitOps \u06a9\u0646\u0679\u0631\u0648\u0644\u0631<\/td>\n<td>~7 \u067e\u06be\u0644\u06cc\u0627\u06ba<\/td>\n<\/tr>\n<tr>\n<td>8<\/td>\n<td><code>kyverno<\/code><\/td>\n<td>\u062f\u0627\u062e\u0644\u06c1 \u06a9\u06cc \u067e\u0627\u0644\u06cc\u0633\u06cc<\/td>\n<td>~4 \u067e\u0648\u0688\u0632 + \u06a9\u0644\u0633\u0679\u0631 \u067e\u0627\u0644\u06cc\u0633\u06cc<\/td>\n<\/tr>\n<tr>\n<td>9<\/td>\n<td><code>falco<\/code><\/td>\n<td>\u0631\u0646 \u0679\u0627\u0626\u0645 \u06a9\u0627 \u067e\u062a\u06c1 \u0644\u06af\u0627\u0646\u0627<\/td>\n<td>1 \u0688\u06cc\u0645\u0648\u0646 \u0633\u06cc\u0679 \u067e\u0648\u0688 <strong>\u0641\u06cc \u0646\u0648\u0688<\/strong> (3 \u0627\u0633 \u06a9\u0644\u0633\u0679\u0631 \u0645\u06cc\u06ba)<\/td>\n<\/tr>\n<tr>\n<td>10<\/td>\n<td><code>external-secrets<\/code> + <code>clearledger<\/code><\/td>\n<td>ESO + IRSA \u0633\u0631\u0648\u0633 \u0627\u06a9\u0627\u0624\u0646\u0679<\/td>\n<td>~3 ESO Pods + 3 \u0633\u0631\u0648\u0633 \u0627\u06a9\u0627\u0624\u0646\u0679\u0633<\/td>\n<\/tr>\n<tr>\n<td>11<\/td>\n<td><code>kube-system<\/code> + <code>clearledger<\/code><\/td>\n<td>CSI \u0688\u0631\u0627\u0626\u06cc\u0648\u0631 + AWS \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0646\u0646\u062f\u06c1<\/td>\n<td>3 \u0688\u0631\u0627\u0626\u06cc\u0648\u0631 + 3 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0646\u0646\u062f\u06af\u0627\u0646 (1 \u0641\u06cc \u0646\u0648\u0688)<\/td>\n<\/tr>\n<tr>\n<td>12<\/td>\n<td><code>monitoring<\/code><\/td>\n<td>\u067e\u0631\u0648\u0645\u06cc\u062a\u06be\u06cc\u0633\u060c \u06af\u0631\u0627\u0641\u0627\u0646\u0627\u060c \u0644\u0648\u06a9\u06cc<\/td>\n<td>~ 10 \u06cc\u0627 \u0627\u0633 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u067e\u06be\u0644\u06cc\u0627\u06ba<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u0645\u0631\u062d\u0644\u06c1 13-15 (\u0627\u06cc\u067e \u06a9\u06cc \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc\u060c ALB \u0627\u0646\u062a\u0638\u0627\u0631\u060c UI \u06a9\u06cc \u062a\u0648\u062b\u06cc\u0642) \u0646\u06cc\u0686\u06d2 12 \u06a9\u06d2 \u0628\u0639\u062f \u0627\u0646\u062c\u0627\u0645 \u062f\u06cc\u06d2 \u06af\u0626\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-step-7-argocd\">\u0645\u0631\u062d\u0644\u06c1 7: ArgoCD<\/h4>\n<pre><code class=\"language-bash\">kubectl create namespace argocd --dry-run=client -o yaml | kubectl apply -f -\nkubectl apply -n argocd --server-side --force-conflicts \n  -f https:\/\/raw.githubusercontent.com\/argoproj\/argo-cd\/stable\/manifests\/install.yaml\nkubectl rollout status deployment\/argocd-server -n argocd --timeout=180s\n<\/code><\/pre>\n<p><strong>\u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u06a9\u06cc\u0627 \u0628\u0646\u0627\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4<\/strong><\/p>\n<pre><code class=\"language-bash\">kubectl get pods -n argocd\nkubectl get svc -n argocd\nkubectl get deploy -n argocd\n<\/code><\/pre>\n<p><strong>\u0645\u062a\u0648\u0642\u0639:<\/strong> <code>argocd-server<\/code>, <code>argocd-repo-server<\/code>, <code>argocd-application-controller<\/code>\u0648\u063a\u06cc\u0631\u06c1: \u0633\u0628 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0641\u0648\u0631\u0688 <strong>\u0686\u0644 \u0631\u06c1\u0627 \u06c1\u06d2<\/strong> <strong>1\/1<\/strong> \u06cc\u0627 <strong>2\/2<\/strong>. <code>argocd-server<\/code> \u0633\u0631\u0648\u0633 \u067e\u0648\u0631\u0679 443 \u06a9\u0648 \u0628\u06d2 \u0646\u0642\u0627\u0628 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p><strong>UI (\u0641\u06cc \u0627\u0644\u062d\u0627\u0644 \u0627\u062e\u062a\u06cc\u0627\u0631\u06cc\u060c \u0645\u0631\u062d\u0644\u06c1 13 \u06a9\u06d2 \u0628\u0639\u062f \u062f\u0631\u06a9\u0627\u0631 \u06c1\u06d2):<\/strong> \u0646\u06cc\u0627 \u0679\u0631\u0645\u06cc\u0646\u0644\u060c \u0686\u0644\u062a\u06d2 \u0631\u06c1\u06cc\u06ba\u06d4 \u0645\u0641\u062a \u0645\u0642\u0627\u0645\u06cc \u0628\u0646\u062f\u0631\u06af\u0627\u06c1 (<code>8081<\/code> \u0627\u06af\u0631 <code>8080<\/code> \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u0645\u06cc\u06ba):<\/p>\n<pre><code class=\"language-bash\">kubectl port-forward svc\/argocd-server -n argocd 8080:443\n# Or if 8080 is taken:\n# kubectl port-forward svc\/argocd-server -n argocd 8081:443\n# https:\/\/localhost:8080 (or 8081)  user: admin\nkubectl get secret argocd-initial-admin-secret -n argocd -o jsonpath=\"{.data.password}\" | base64 -d; echo\n<\/code><\/pre>\n<p>\u0645\u0631\u062d\u0644\u06c1 13 \u062a\u06a9\u060c \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u06cc \u0641\u06c1\u0631\u0633\u062a \u062e\u0627\u0644\u06cc \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0639\u0627\u0645 \u0628\u0627\u062a \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-step-8-kyverno-policies\">\u0645\u0631\u062d\u0644\u06c1 8: Kyverno + \u067e\u0627\u0644\u06cc\u0633\u06cc\u0627\u06ba<\/h4>\n<p><code>cosign.pub<\/code> \/ <code>infra\/cosign.pub<\/code> \u0627\u0633\u06d2 \u0646\u0638\u0631 \u0627\u0646\u062f\u0627\u0632 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2 (\u0646\u062c\u06cc \u06a9\u0644\u06cc\u062f \u06a9\u0627 \u0627\u0631\u062a\u06a9\u0627\u0628 \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u0627 \u062c\u0627\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2\u061b \u0639\u0648\u0627\u0645\u06cc \u06a9\u0644\u06cc\u062f \u06c1\u0631 \u0633\u06cc\u06a9\u06be\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u06a9\u06d2 \u0644\u0626\u06d2 \u0645\u062e\u0635\u0648\u0635 \u06c1\u06d2)\u06d4<br \/>\u0631\u06cc\u067e\u0648\u0632\u0679\u0631\u06cc \u0645\u062b\u0627\u0644 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u06a9\u0644\u06cc\u062f\u06cc\u06ba \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u06cc \u06c1\u06d2: <code>require-signed-images.yaml<\/code> \/ <code>require-signed-images-ecr.yaml<\/code>.<br \/>\u0627\u06af\u0631 \u0622\u067e \u0646\u06d2 \u0645\u0631\u062d\u0644\u06c1 3 \u0645\u06cc\u06ba \u06a9\u0644\u06cc\u062f \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u062a\u062e\u0644\u06cc\u0642 \u06a9\u06cc\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u0627\u0633\u06d2 \u0644\u0627\u06af\u0648 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0627\u067e\u0646\u06cc \u0645\u0642\u0627\u0645\u06cc \u0639\u0648\u0627\u0645\u06cc \u06a9\u0644\u06cc\u062f \u06a9\u0648 \u067e\u0627\u0644\u06cc\u0633\u06cc \u0633\u06d2 \u06c1\u0645 \u0622\u06c1\u0646\u06af \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\"># infra\/cosign.pub exists locally but is gitignored \u2014 safe to copy into committed policy YAMLs\nbash scripts\/embed-cosign-pub-in-policies.sh\ndiff infra\/cosign.pub <(grep -A3 'BEGIN PUBLIC KEY' infra\/policies\/require-signed-images-ecr.yaml | grep -v publicKeys)\n<\/code><\/pre>\n<pre><code class=\"language-bash\">helm repo add kyverno https:\/\/kyverno.github.io\/kyverno\/ --force-update\nhelm upgrade --install kyverno kyverno\/kyverno \n  --namespace kyverno --create-namespace \n  -f stages\/stage-4-admission-control\/infra\/kyverno\/values.yaml \n  --set admissionController.replicas=1 \n  --wait --timeout=180s\nkubectl apply -f infra\/policies\/\n<\/code><\/pre>\n<p><strong>\u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba:<\/strong><\/p>\n<pre><code class=\"language-bash\">kubectl get pods -n kyverno\nkubectl get clusterpolicy\nkubectl get clusterpolicy require-signed-images-ecr -o jsonpath=\"{.spec.rules[0].verifyImages[0].attestors[0].entries[0].keys.publicKeys}\" | head -3\n<\/code><\/pre>\n<p><strong>\u0645\u062a\u0648\u0642\u0639:<\/strong> \u062f\u0627\u062e\u0644\u06c1 \u06a9\u0646\u0679\u0631\u0648\u0644\u0631\u060c \u0628\u06cc\u06a9 \u06af\u0631\u0627\u0624\u0646\u0688 \u06a9\u0646\u0679\u0631\u0648\u0644\u0631\u060c \u06a9\u0644\u06cc\u0646\u0632 \u06a9\u0646\u0679\u0631\u0648\u0644\u0631\u060c \u0627\u0648\u0631 \u0631\u067e\u0648\u0631\u0679 \u06a9\u0646\u0679\u0631\u0648\u0644\u0631 \u067e\u0648\u0688\u0632 \u0686\u0644 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p><code>kubectl get clusterpolicy<\/code> 6 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u067e\u0627\u0644\u06cc\u0633\u06cc\u0627\u06ba \u062f\u0631\u062c \u06c1\u06cc\u06ba\u060c \u0628\u0634\u0645\u0648\u0644: <code>require-signed-images-ecr<\/code>, <code>disallow-root-containers<\/code>\u0648\u063a\u06cc\u0631\u06c1 \u0648\u06c1 <code>publicKeys<\/code> \u0622\u067e \u06a9\u0648 \u0622\u0624\u0679 \u067e\u0679 \u062f\u06cc\u06a9\u06be\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2\u06d4 <code>-----BEGIN PUBLIC KEY-----<\/code>\u0646\u06c1\u06cc\u06ba <code>PASTE_YOUR_COSIGN_PUBLIC_KEY_HERE<\/code> (Kyverno \u067e\u0644\u06cc\u0633 \u06c1\u0648\u0644\u0688\u0631 \u06a9\u0648 \u0641\u0627\u0626\u0644 \u067e\u0627\u062a\u06be \u0633\u0645\u062c\u06be\u06d2 \u06af\u0627 \u0627\u0648\u0631 \u06a9\u0633\u06cc \u0628\u06be\u06cc \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u06a9\u0648 \u0631\u0648\u06a9 \u062f\u06d2 \u06af\u0627)\u06d4<\/p>\n<p><code>require-signed-images-ecr<\/code> \u0688\u06cc\u0641\u0627\u0644\u0679 \u0622\u0688\u0679 \u06c1\u06d2 \u062c\u0628 \u062a\u06a9 \u06a9\u06c1 CI Cosign ECR \u0627\u0645\u06cc\u062c \u067e\u0631 \u062f\u0633\u062a\u062e\u0637 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u0627 (<code>COSIGN_PRIVATE_KEY<\/code> + <code>COSIGN_PASSWORD<\/code> GitHub \u067e\u0631)\u06d4 \u063a\u06cc\u0631 \u062f\u0633\u062a\u062e\u0637 \u0634\u062f\u06c1 \u062a\u0635\u0627\u0648\u06cc\u0631 \u06a9\u06cc \u062a\u0642\u0633\u06cc\u0645 \u062c\u0627\u0631\u06cc \u0631\u06c1\u06d2 \u06af\u06cc\u06d4 \u062f\u0633\u062a\u062e\u0637 \u0634\u062f\u06c1 \u062a\u0635\u0648\u06cc\u0631 \u06a9\u0648 \u0628\u0639\u062f \u0645\u06cc\u06ba \u0644\u06af\u0627\u0646\u0627 \u0627\u062e\u062a\u06cc\u0627\u0631\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u06af\u0631 <code>verify-slsa-provenance<\/code> \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u062f\u06cc\u0646\u06d2 \u0645\u06cc\u06ba \u0646\u0627\u06a9\u0627\u0645 (\u0634\u06a9\u0631\u06cc\u06c1 + <code>mutateDigest<\/code>)\u060c \u0633\u06cc\u0679 <code>mutateDigest: false<\/code> \u0627\u0633\u06d2 \u0627\u0633 \u0641\u0627\u0626\u0644 \u0645\u06cc\u06ba \u0631\u06a9\u06be\u06cc\u06ba \u06cc\u0627 \u0627\u0633\u06d2 \u0686\u06be\u0648\u0691 \u062f\u06cc\u06ba\u06d4 \u0645\u0631\u062d\u0644\u06c1 8 \u0627\u062e\u062a\u06cc\u0627\u0631\u06cc \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-step-9-falco\">\u0645\u0631\u062d\u0644\u06c1 9: \u0641\u0627\u0644\u06a9\u0648<\/h4>\n<pre><code class=\"language-bash\">helm repo add falcosecurity https:\/\/falcosecurity.github.io\/charts --force-update\nhelm upgrade --install falco falcosecurity\/falco \n  --namespace falco --create-namespace \n  -f stages\/stage-6-runtime-security\/infra\/falco\/helm-values.yaml \n  --set driver.kind=modern_ebpf \n  --set \"serviceAccount.annotations.eks.amazonaws.com\/role-arn=${FALCO_ROLE_ARN}\" \n  --wait --timeout=300s\n<\/code><\/pre>\n<p><strong>\u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba:<\/strong><\/p>\n<pre><code class=\"language-bash\">kubectl get pods -n falco -o wide\nkubectl get daemonset -n falco\nkubectl get sa falco -n falco -o jsonpath=\"{.metadata.annotations.eks.amazonaws.com\/role-arn}\"; echo\n<\/code><\/pre>\n<p><strong>\u0645\u062a\u0648\u0642\u0639:<\/strong> DESIRED = Falco DaemonSet \u0646\u0648\u0688\u0633 \u06a9\u06cc \u062a\u0639\u062f\u0627\u062f \u06a9\u06d2 \u0633\u0627\u062a\u06be (3)\u06d4 \u06c1\u0631 \u067e\u06be\u0644\u06cc <strong>\u0686\u0644 \u0631\u06c1\u0627 \u06c1\u06d2<\/strong>. \u0633\u0631\u0648\u0633 \u0627\u06a9\u0627\u0624\u0646\u0679 \u06a9\u06cc \u062a\u0634\u0631\u06cc\u062d \u06cc\u06c1 \u06c1\u06d2\u06d4 <code>FALCO_ROLE_ARN<\/code>.<\/p>\n<h4 id=\"heading-step-10-external-secrets-operator-irsa-serviceaccounts\">\u0645\u0631\u062d\u0644\u06c1 10: \u0627\u06cc\u06a9\u0633\u0679\u0631\u0646\u0644 \u0633\u06cc\u06a9\u0631\u0679 \u0622\u067e\u0631\u06cc\u0679\u0631 + IRSA \u0633\u0631\u0648\u0633 \u0627\u06a9\u0627\u0624\u0646\u0679\u0633<\/h4>\n<pre><code class=\"language-bash\">helm repo add external-secrets https:\/\/charts.external-secrets.io --force-update\nhelm upgrade --install external-secrets external-secrets\/external-secrets \n  --namespace external-secrets --create-namespace \n  --set \"serviceAccount.annotations.eks.amazonaws.com\/role-arn=${ESO_ROLE_ARN}\" \n  --wait --timeout=180s\nkubectl apply -f stages\/stage-8-aws-migration\/manifests\/resources\/namespace.yaml\nenvsubst < stages\/stage-8-aws-migration\/manifests\/clearledger-serviceaccounts.yaml | kubectl apply -f -\n<\/code><\/pre>\n<p><strong>\u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba:<\/strong><\/p>\n<pre><code class=\"language-bash\">kubectl get pods -n external-secrets\nkubectl get sa -n external-secrets external-secrets -o jsonpath=\"{.metadata.annotations.eks.amazonaws.com\/role-arn}\"; echo\nkubectl get sa -n clearledger\n<\/code><\/pre>\n<p><strong>\u0645\u062a\u0648\u0642\u0639:<\/strong> <code>external-secrets<\/code> \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc <strong>\u0686\u0644 \u0631\u06c1\u0627 \u06c1\u06d2<\/strong> (\u0627\u06a9\u062b\u0631 3 \u06a9\u0646\u0679\u06cc\u0646\u0631\u0632\/1 \u067e\u0648\u0688) 3 \u0633\u0631\u0648\u0633 \u0627\u06a9\u0627\u0624\u0646\u0679\u0633 <code>clearledger<\/code>: <code>auth-service<\/code>, <code>ledger-service<\/code>, <code>notification-service<\/code>: \u06c1\u0631 \u0627\u06cc\u06a9 <code>eks.amazonaws.com\/role-arn<\/code> \u062a\u0634\u0631\u06cc\u062d \u0627\u0628\u06be\u06cc \u062a\u06a9 \u06a9\u0648\u0626\u06cc \u0627\u06cc\u067e \u067e\u0648\u0688 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2 (ArgoCD \u0627\u0646\u06c1\u06cc\u06ba \u0645\u0631\u062d\u0644\u06c1 13 \u0645\u06cc\u06ba \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2)\u06d4<\/p>\n<p><strong>\u0645\u0631\u062d\u0644\u06c1 11: CSI \u0688\u0631\u0627\u0626\u06cc\u0648\u0631 + SecretProviderClasses<\/strong><\/p>\n<pre><code class=\"language-bash\">bash stages\/stage-8-aws-migration\/scripts\/install-csi-secrets.sh\n<\/code><\/pre>\n<p><strong>\u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba:<\/strong><\/p>\n<pre><code class=\"language-bash\">kubectl get pods -n kube-system | grep -E 'secrets-store|provider-aws'\nkubectl get secretproviderclass -n clearledger\nhelm list -n kube-system | grep -E 'csi-secrets|secrets-provider'\n<\/code><\/pre>\n<p><strong>\u0645\u062a\u0648\u0642\u0639:<\/strong> CSI \u0688\u0631\u0627\u0626\u06cc\u0648\u0631 \u067e\u0648\u0688 <strong>3\/3 \u0631\u0646<\/strong> (\u0627\u06cc\u06a9 \u0641\u06cc \u0646\u0648\u0688) AWS \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0646\u0646\u062f\u06c1 \u067e\u0648\u0688 <strong>1\/1 \u0631\u0646<\/strong> \u0641\u06cc \u0646\u0648\u0688 \u062f\u0648 <code>SecretProviderClass<\/code> \u06a9\u0627 \u0627\u0639\u062a\u0631\u0627\u0636 <code>clearledger<\/code>. \u067e\u0686\u0646\u06af \u0634\u0648 <code>csi-secrets-store<\/code> \u0627\u0648\u0631\/\u06cc\u0627 <code>secrets-provider-aws<\/code> <strong>\u0631\u06a9\u06be\u0627<\/strong>.<\/p>\n<p>\u062c\u0628 \u06c1\u06cc\u0644\u0645 \u0631\u067e\u0648\u0631\u0679 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <code>meta.helm.sh\/release-name<\/code> \u0627\u06af\u0631 \u06a9\u0648\u0626\u06cc \u062a\u0635\u0627\u062f\u0645 \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u062a\u0648 \u0627\u0633\u06a9\u0631\u067e\u0679 \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4 \u0688\u0631\u0627\u0626\u06cc\u0648\u0631 \u0686\u0627\u0631\u0679\u0633 \u06a9\u0648 \u0646\u0642\u0644 \u06a9\u06cc\u06d2 \u0628\u063a\u06cc\u0631 AWS \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0646\u0646\u062f\u06af\u0627\u0646 \u06a9\u0648 \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-step-12-observability\">\u0645\u0631\u062d\u0644\u06c1 12: \u0645\u0634\u0627\u06c1\u062f\u06c1<\/h4>\n<pre><code class=\"language-bash\">bash stages\/stage-7-observability\/scripts\/install-observability.sh\n<\/code><\/pre>\n<p><strong>\u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba:<\/strong><\/p>\n<pre><code class=\"language-bash\">kubectl get pods -n monitoring\nkubectl get svc -n monitoring | grep -E 'grafana|prometheus|loki'\nkubectl get configmap -n monitoring -l grafana_dashboard=1 --no-headers | wc -l\n<\/code><\/pre>\n<p><strong>\u0645\u062a\u0648\u0642\u0639:<\/strong> \u06af\u0631\u0627\u0641\u0627\u0646\u0627 <strong>3\/3 \u0631\u0646<\/strong>\u067e\u0631\u0648\u0645\u06cc\u062a\u06be\u06cc\u0633 \u0627\u0648\u0631 \u0644\u0648\u06a9\u06cc \u0641\u0648\u0631\u0688 <strong>\u0686\u0644 \u0631\u06c1\u0627 \u06c1\u06d2<\/strong>. \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u0645\u06cc\u06ba ConfigMaps \u06a9\u06cc \u062a\u0639\u062f\u0627\u062f \u062f\u0631\u062c \u0630\u06cc\u0644 \u06c1\u06d2: <strong>6<\/strong> (ClearLedger \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688)\u06d4 \u067e\u0631\u0646\u0679 \u0633\u06a9\u0631\u067e\u0679 <code>http:\/\/grafana.local<\/code>: EKS \u0627\u0633 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u067e\u0648\u0631\u0679 \u0641\u0627\u0631\u0648\u0631\u0688\u0646\u06af \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\"># New terminal \u2014 keep running\nkubectl port-forward -n monitoring svc\/kube-prometheus-stack-grafana 3000:80\n# http:\/\/localhost:3000  admin \/ admin123\n# http:\/\/localhost:3000\/dashboards?tag=clearledger\n<\/code><\/pre>\n<p>\u067e\u06cc\u0646\u0644 \u0645\u06cc\u06ba \u062f\u06a9\u06be\u0627\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 <strong>\u06a9\u0648\u0626\u06cc \u0688\u06cc\u0679\u0627 \u0646\u06c1\u06cc\u06ba<\/strong> \u062c\u0628 \u062a\u06a9 \u0622\u067e \u06a9\u0633\u06cc \u0627\u06cc\u0648\u0646\u0679 \u06a9\u0648 \u0645\u062a\u062d\u0631\u06a9 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba (\u00a77.4 \u0645\u0634\u0642 \u0628\u06be\u06cc \u0627\u0633 \u06a9\u0644\u0633\u0679\u0631 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u06cc \u06c1\u06d2)\u06d4<\/p>\n<p><strong>\u067e\u0644\u06cc\u0679 \u0641\u0627\u0631\u0645 \u0627\u0633\u0679\u06cc\u06a9 \u06a9\u0627 \u062e\u0644\u0627\u0635\u06c1<\/strong>: \u0645\u0631\u062d\u0644\u06c1 13 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0641\u0648\u0631\u06cc \u062d\u06cc\u062b\u06cc\u062a \u06a9\u06cc \u062c\u0627\u0646\u0686:<\/p>\n<pre><code class=\"language-bash\">for ns in argocd kyverno falco external-secrets monitoring clearledger; do\n  echo \"=== ${ns} ===\"\n  kubectl get pods -n \"${ns}\" --no-headers 2>\/dev\/null | awk '{print $3}' | sort | uniq -c || echo \"(no pods yet)\"\ndone\nkubectl get clusterpolicy --no-headers | wc -l | xargs echo \"ClusterPolicies:\"\nkubectl get secretproviderclass -n clearledger --no-headers | wc -l | xargs echo \"SecretProviderClasses:\"\n<\/code><\/pre>\n<p><strong>\u0645\u062a\u0648\u0642\u0639:<\/strong> \u062a\u0645\u0627\u0645 \u0646\u0627\u0645 \u06a9\u06cc \u062c\u06af\u06c1\u06cc\u06ba \u0627\u0633 \u0637\u0631\u062d \u0638\u0627\u06c1\u0631 \u06c1\u0648\u062a\u06cc \u06c1\u06cc\u06ba: <code>Running<\/code> (\u06cc\u0627 <code>Completed<\/code> \u067e\u06cc\u0634\u06c1 \u0648\u0631\u0627\u0646\u06c1 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06d2 \u0644\u06cc\u06d2)\u06d4 <code>clearledger<\/code> ArgoCD \u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631 \u06c1\u0648\u0646\u06d2 \u062a\u06a9 \u06cc\u06c1 \u062e\u0627\u0644\u06cc \u06c1\u0648 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u06a9\u0644\u0633\u0679\u0631 \u067e\u0627\u0644\u06cc\u0633\u06cc\u0627\u06ba \u2265 6. SecretProviderClasses = 2\u06d4<\/p>\n<p><strong>\u0646\u0627\u0645 \u06a9\u06cc \u062c\u06af\u06c1 \u0628\u0646\u0627\u062a\u06d2 \u0648\u0642\u062a EKS API \u0679\u0627\u0626\u0645 \u0622\u0624\u0679\u061f<\/strong> \u0622\u067e \u062f\u06cc\u06a9\u06be \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba <code>Unexpected error when reading response body<\/code> \/ <code>context deadline exceeded<\/code> \u0627\u0648\u0631 \u0627\u0628 \u0628\u06be\u06cc \u062d\u0627\u0635\u0644 \u06a9\u0631\u06cc\u06ba <code>namespace\/argocd created<\/code>. \u06a9\u06c1 <strong>\u0639\u0627\u0631\u0636\u06cc \u06a9\u0644\u0627\u0626\u0646\u0679 \u0679\u0627\u0626\u0645 \u0622\u0624\u0679<\/strong> \u0646\u0627\u06a9\u0627\u0645 \u062a\u062e\u0644\u06cc\u0642 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 EKS API (\u067e\u06c1\u0644\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u060c \u0633\u0633\u062a \u0646\u06cc\u0679 \u0648\u0631\u06a9\u060c \u06cc\u0627 \u06a9\u0646\u0679\u0631\u0648\u0644 \u067e\u0644\u06cc\u0646 \u06a9\u06cc\u0686 \u0627\u067e) \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0628\u0627\u062a \u0686\u06cc\u062a \u06a9\u0631\u06cc\u06ba\u06d4 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba <code>kubectl get namespace argocd<\/code> \u0627\u0648\u0631 \u0686\u0644\u062a\u06d2 \u0631\u06c1\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u06a9\u0645\u0627\u0646\u0688 \u06a9\u0627 \u0648\u0642\u062a \u062e\u062a\u0645 \u06c1\u0648\u062a\u0627 \u0631\u06c1\u062a\u0627 \u06c1\u06d2 \u062a\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u06a9\u0648\u0634\u0634 \u06a9\u0631\u06cc\u06ba \u06cc\u0627 \u0627\u0633\u06d2 \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4 <code>kubectl cluster-info<\/code> \u0627\u067e\u0646\u0627 \u06a9\u0646\u06a9\u0634\u0646 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-steps-1314-deploy-via-argocd-see-the-alb\">\u0645\u0631\u062d\u0644\u06c1 13-14: ArgoCD + ALB \u062d\u0648\u0627\u0644\u06c1 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631\u06cc\u06ba\u06d4<\/h4>\n<p>\u0627\u06af\u0644\u06cc \u0627\u06cc\u067e YAML <code>stages\/stage-8-aws-migration\/manifests\/<\/code> \u06c1\u0627\u062a\u06be \u0633\u06d2 \u0646\u06c1\u06cc\u06ba \u0644\u06af\u0627\u06cc\u0627 \u062c\u0627\u062a\u0627\u06d4 \u0645\u0631\u062d\u0644\u06c1 13 \u0622\u067e \u06a9\u0648 \u06af\u0679 \u06a9\u0648 \u0622\u0631\u06af\u0648 \u0633\u06cc \u0688\u06cc \u0633\u06d2 \u06c1\u0645 \u0622\u06c1\u0646\u06af \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u06c1\u062f\u0627\u06cc\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 Argo CD \u067e\u06be\u0631 \u062a\u0642\u0633\u06cc\u0645\u060c \u062e\u062f\u0645\u0627\u062a\u060c \u0648\u0635\u0648\u0644 \u0627\u0648\u0631 \u0628\u0627\u0642\u06cc \u062a\u062e\u0644\u06cc\u0642 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u0631\u06cc\u067e\u0648 \u062a\u06a9 \u062a\u0631\u062c\u06cc\u062d\u06cc \u0631\u0633\u0627\u0626\u06cc<\/strong><\/p>\n<p>\u0627\u06af\u0631 \u0622\u067e \u06a9\u0627 GitHub \u0630\u062e\u06cc\u0631\u06c1 \u0646\u062c\u06cc \u06c1\u06d2 \u062a\u0648 Argo CD \u2192 \u062a\u0631\u062a\u06cc\u0628\u0627\u062a \u2192 Repository \u0645\u06cc\u06ba PAT \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u0622\u067e \u0631\u06cc\u067e\u0648\u0632\u0679\u0631\u06cc \u06a9\u0648 \u067e\u0628\u0644\u06a9 \u067e\u0631 \u0633\u06cc\u0679 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0648 \u0627\u06cc\u067e \u06a9\u0648 \u0631\u06cc\u0641\u0631\u06cc\u0634 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 <code>ComparisonError: authentication required<\/code> \u0635\u0627\u0641 \u06c1\u0648\u0646\u0627 \u0636\u0631\u0648\u0631\u06cc \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u0627\u06af\u0631 \u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631\u06cc \u0627\u0628 \u0628\u06be\u06cc \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4<\/strong>\u0639\u0627\u0645 \u0648\u062c\u0648\u06c1\u0627\u062a \u06a9\u0648 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba:<\/p>\n<ul>\n<li>\n<p><code>external-secrets.io\/v1beta1<\/code> <strong>\u0646\u06c1\u06cc\u06ba \u0645\u0644\u0627<\/strong>\u0622\u067e \u06a9\u06d2 \u06a9\u0644\u0633\u0679\u0631 \u0645\u06cc\u06ba \u062a\u0627\u0632\u06c1 \u062a\u0631\u06cc\u0646 ESO API \u06c1\u06d2\u06d4 \u062f\u06be\u06a9\u0627 <code>external-secrets.yaml<\/code> \u06a9\u06d2 \u0633\u0627\u062a\u06be <code>apiVersion: external-secrets.io\/v1<\/code>.<\/p>\n<\/li>\n<li>\n<p><strong>Kyverno \u0634\u06a9\u0627\u06cc\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2:<\/strong> <code>PASTE_YOUR_COSIGN_PUBLIC_KEY_HERE<\/code> \u0686\u0644\u0627\u0626\u06cc\u06ba <code>bash scripts\/embed-cosign-pub-in-policies.sh<\/code>\u067e\u06be\u0631 <code>kubectl apply -f infra\/policies\/<\/code>.<\/p>\n<\/li>\n<li>\n<p><code>SecretSyncedError<\/code> <strong>\u062a\u0635\u062f\u06cc\u0642 \u06a9\u06d2 \u0628\u0639\u062f\u060c<\/strong> <code>database_url<\/code> <strong>\u06cc\u0627<\/strong> <code>jwt_secret<\/code> <strong>\u0646\u06c1\u06cc\u06ba \u0645\u0644\u0627<\/strong> - AWS \u0631\u0627\u0632 <code>clearledger\/auth-service<\/code> \u0622\u067e \u06a9\u0648 \u062f\u0648\u0646\u0648\u06ba \u06a9\u0644\u06cc\u062f\u0648\u06ba \u06a9\u0648 \u0634\u0627\u0645\u0644 \u06a9\u0631\u0646\u0627 \u06c1\u0648\u06af\u0627 (\u0679\u06cc\u0631\u0627\u0641\u0627\u0631\u0645 \u0645\u0646\u062f\u0631\u062c\u06c1 \u0630\u06cc\u0644 \u06a9\u0644\u06cc\u062f\u0648\u06ba \u06a9\u0648 \u0644\u06a9\u06be\u062a\u0627 \u06c1\u06d2): <code>secrets.tf<\/code>)\u06d4 \u062f\u0648\u0628\u0627\u0631\u06c1 \u06a9\u0631\u06cc\u06ba <code>terraform apply<\/code> \u0679\u06be\u06cc\u06a9 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f <code>CHANGE_ME_BEFORE_APPLY<\/code> \u0642\u06cc\u0645\u062a \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba \u06cc\u0627 AWS \u06a9\u0646\u0633\u0648\u0644 \u0645\u06cc\u06ba \u0631\u0627\u0632 \u06a9\u0648 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0641\u0648\u0631\u0688 \u0631\u06a9 \u06af\u06cc\u0627\u06d4<\/strong> <code>Pending<\/code> <strong>\u06cc\u0627 '\u0628\u06c1\u062a \u0632\u06cc\u0627\u062f\u06c1 \u067e\u06be\u0644\u06cc'<\/strong> \u0644\u06cc\u0628 \u0646\u0648\u0688\u0633 \u0686\u06be\u0648\u0679\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0679\u06cc\u0631\u0627\u0641\u0627\u0631\u0645 \u0645\u06cc\u06ba \u0646\u0648\u0688 \u06af\u0631\u0648\u067e \u06a9\u0648 \u067e\u06be\u06cc\u0644\u0627\u0626\u06cc\u06ba \u06cc\u0627 \u0645\u06cc\u0646\u06cc \u0641\u06cc\u0633\u0679 \u0645\u06cc\u06ba \u0646\u0642\u0644 \u06a9\u06cc \u062a\u0639\u062f\u0627\u062f \u06a9\u0648 \u06a9\u0645 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ul>\n<p>\u0627\u067e\u0646\u06cc \u0627\u06cc\u067e \u06a9\u0648 \u0631\u062c\u0633\u0679\u0631 \u06a9\u0631\u06cc\u06ba:<\/p>\n<pre><code class=\"language-bash\">kubectl apply -f stages\/stage-8-aws-migration\/argocd\/clearledger-aws-app.yaml\n<\/code><\/pre>\n<p>\u062c\u0628 \u062a\u06a9 \u0622\u067e \u0622\u0631\u06af\u0648 \u0633\u06cc \u0688\u06cc \u0646\u06c1\u06cc\u06ba \u062f\u06cc\u06a9\u06be\u062a\u06d2 <code>clearledger-aws<\/code> \u06c1\u06d2 <strong>\u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631<\/strong> \u0627\u0648\u0631 <strong>\u0635\u062d\u062a \u0645\u0646\u062f<\/strong>. \u0627\u0633 \u0645\u0642\u0627\u0645 \u067e\u0631\u060c \u0627\u06cc\u067e \u067e\u0648\u0688 \u0638\u0627\u06c1\u0631 \u06c1\u0648\u06af\u0627\u06d4 <code>clearledger<\/code>.<\/p>\n<h4 id=\"heading-step-13-watch-argocd-sync-ui-cli\">\u0645\u0631\u062d\u0644\u06c1 13: ArgoCD Sync (UI + CLI) \u062f\u06cc\u06a9\u06be\u06cc\u06ba<\/h4>\n<p>\u0622\u0631\u06af\u0648 \u0633\u06cc \u0688\u06cc \u0628\u0631\u0627\u0624\u0632\u0631 \u0679\u06cc\u0628 \u06a9\u0648 \u06a9\u06be\u0648\u0644\u06cc\u06ba \u062c\u0648 \u0622\u067e \u0646\u06d2 \u06a9\u06be\u0648\u0644\u0627 \u062a\u06be\u0627 (\u0645\u0631\u062d\u0644\u06c1 7 \u0645\u06cc\u06ba \u067e\u0648\u0631\u0679 \u0641\u0627\u0631\u0648\u0631\u0688\u0646\u06af)\u06d4<\/p>\n<pre><code class=\"language-plaintext\">https:\/\/localhost:8080        \u2190 or 8081 if 8080 was busy\n<\/code><\/pre>\n<p>\u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba <code>clearledger-aws<\/code>. \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u0648 <strong>\u0646\u0627\u0631\u0645\u0644 + \u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631<\/strong> (\u067e\u06c1\u0644\u06cc \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u06a9\u06d2 \u0644\u06cc\u06d2 2-5 \u0645\u0646\u0679) \u0622\u067e \u0648\u06c1\u06cc \u0645\u0639\u0644\u0648\u0645\u0627\u062a \u0627\u067e\u0646\u06d2 \u0628\u0631\u0627\u0624\u0632\u0631 \u06a9\u0648 \u0686\u06be\u0648\u0626\u06d2 \u0628\u063a\u06cc\u0631 \u0627\u067e\u0646\u06d2 \u0679\u0631\u0645\u06cc\u0646\u0644 \u0645\u06cc\u06ba \u062f\u06cc\u06a9\u06be \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">kubectl get application clearledger-aws -n argocd -w\n# Ctrl-C when HEALTH STATUS shows Healthy\n<\/code><\/pre>\n<p>\u062c\u0628 \u0627\u0633\u06d2 \u062d\u0644 \u06a9\u06cc\u0627 \u062c\u0627 \u0631\u06c1\u0627 \u06c1\u06d2\u060c \u0648\u0627\u0686 \u067e\u0648\u0688 \u062f\u0648\u0633\u0631\u06d2 \u0679\u0631\u0645\u06cc\u0646\u0644 \u0645\u06cc\u06ba \u0634\u0631\u0648\u0639 \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4<\/p>\n<pre><code class=\"language-bash\">kubectl get pods -n clearledger -w\n# All pods should reach 1\/1 Running within 2 minutes\n# Ctrl-C when everything is Running\n<\/code><\/pre>\n<h4 id=\"heading-step-14-get-your-public-app-url-alb\">\u0645\u0631\u062d\u0644\u06c1 14: \u0639\u0648\u0627\u0645\u06cc \u0627\u06cc\u067e URL (ALB) \u062d\u0627\u0635\u0644 \u06a9\u0631\u06cc\u06ba<\/h4>\n<p>AWS \u06a9\u0648 ArgoCD \u06a9\u06cc \u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631\u06cc \u06a9\u06d2 \u0628\u0639\u062f \u0644\u0648\u0688 \u0628\u06cc\u0644\u0646\u0633 \u06a9\u06cc \u0641\u0631\u0627\u06c1\u0645\u06cc \u0645\u06cc\u06ba 2 \u0633\u06d2 5 \u0645\u0646\u0679 \u0644\u06af\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<br \/>\u0627\u0633\u06d2 \u0686\u0644\u0627\u0626\u06cc\u06ba \u0627\u0648\u0631 ADDRESS \u06a9\u0627\u0644\u0645 \u06a9\u06d2 \u0622\u0628\u0627\u062f \u06c1\u0648\u0646\u06d2 \u06a9\u0627 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">kubectl get ingress clearledger-ingress -n clearledger -w\n# ADDRESS is empty at first, then shows something like:\n# clearledger-xxxxxxxxxx.eu-west-1.elb.amazonaws.com\n# Ctrl-C once the hostname appears\n<\/code><\/pre>\n<p>\u0630\u06cc\u0644 \u06a9\u06d2 \u0645\u0631\u0627\u062d\u0644 \u06a9\u06d2 \u0644\u06cc\u06d2 URL \u0628\u0631\u0622\u0645\u062f \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">export ALB_DNS=$(kubectl get ingress clearledger-ingress -n clearledger \n  -o jsonpath=\"{.status.loadBalancer.ingress[0].hostname}\")\necho \"Your app is live at: http:\/\/${ALB_DNS}\"\n<\/code><\/pre>\n<p><strong>10 \u0645\u0646\u0679 \u06a9\u06d2 \u0628\u0639\u062f \u0628\u06be\u06cc \u062e\u0627\u0644\u06cc \u06c1\u06d2\u061f<\/strong> ALB\/Receive \u0648\u0635\u0648\u0644\u06cc \u06a9\u06d2 \u0645\u0631\u0627\u062d\u0644 \u06a9\u06d2 \u0644\u06cc\u06d2\u060c Troubleshooting.md \u062f\u06cc\u06a9\u06be\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-step-15-open-the-app-in-your-browser\">\u0645\u0631\u062d\u0644\u06c1 15: \u0627\u067e\u0646\u06d2 \u0628\u0631\u0627\u0624\u0632\u0631 \u0645\u06cc\u06ba \u0627\u06cc\u067e \u06a9\u06be\u0648\u0644\u06cc\u06ba\u06d4<\/h4>\n<p>ALB \u0631\u0648\u0679 URL \u06a9\u0648 \u0627\u067e\u0646\u06d2 \u0628\u0631\u0627\u0624\u0632\u0631 \u0645\u06cc\u06ba \u0686\u0633\u067e\u0627\u06ba \u06a9\u0631\u06cc\u06ba\u06d4 \u06a9\u0648\u0626\u06cc DNS \u0627\u0646\u062f\u0631\u0627\u062c\u0627\u062a\u060c \u067e\u0648\u0631\u0679 \u0641\u0627\u0631\u0648\u0631\u0688\u0646\u06af\u060c \u06cc\u0627 VPN \u0646\u06c1\u06cc\u06ba:<\/p>\n<pre><code class=\"language-plaintext\">http:\/\/clearledger-xxxxxxxxxx.eu-west-1.elb.amazonaws.com\/\n<\/code><\/pre>\n<p>ClearLedger \u0644\u0627\u06af \u0627\u0646 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0638\u0627\u06c1\u0631 \u06c1\u0648\u062a\u06cc \u06c1\u06d2 (\u0648\u06c1\u06cc SPA \u06c1\u0648\u0645 \u0644\u06cc\u0628 \u06a9\u06cc \u0637\u0631\u062d)\u06d4 <code>clearledger.local<\/code>)\u06d4 \u0631\u062c\u0633\u0679\u0631 \u06a9\u0631\u06cc\u06ba \u06cc\u0627 \u0644\u0627\u06af \u0627\u0646 \u06a9\u0631\u06cc\u06ba\u060c \u0644\u06cc\u0646 \u062f\u06cc\u0646 \u062c\u0645\u0639 \u06a9\u0631\u0648\u0627\u0626\u06cc\u06ba\u060c \u0627\u0648\u0631 \u0627\u067e\u0646\u0627 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u0644\u0648\u0688 \u062f\u06cc\u06a9\u06be\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0622\u067e \u06a9\u06d2 \u0645\u0631\u062d\u0644\u06c1 8 \u06a9\u06d2 \u067e\u0648\u0631\u0679 \u0641\u0648\u0644\u06cc\u0648 \u06a9\u0627 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u0641\u0648\u0631\u06cc API \u0627\u0633\u0679\u06cc\u0679\u0633 \u0686\u06cc\u06a9<\/strong> (\u0679\u0631\u0645\u06cc\u0646\u0644 \u06cc\u0627 \u0628\u0631\u0627\u0624\u0632\u0631):<\/p>\n<pre><code class=\"language-bash\">curl -fsS \"http:\/\/${ALB_DNS}\/auth\/health\" && echo\ncurl -fsS \"http:\/\/${ALB_DNS}\/ledger\/health\" && echo\ncurl -fsS \"http:\/\/${ALB_DNS}\/notifications\/health\" && echo\n<\/code><\/pre>\n<p>\u06c1\u0631 \u0627\u06cc\u06a9 \u06a9\u0648 \u0627\u0633 \u0637\u0631\u062d JSON \u0648\u0627\u067e\u0633 \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2: <code>{\"status\":\"ok\",\"service\":\"auth-service\"}<\/code>.<\/p>\n<h4 id=\"heading-step-16-verify-in-the-aws-console-optional-but-recommended\">\u0645\u0631\u062d\u0644\u06c1 16: AWS \u06a9\u0646\u0633\u0648\u0644 \u0645\u06cc\u06ba \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631\u06cc\u06ba (\u0627\u062e\u062a\u06cc\u0627\u0631\u06cc\u060c \u0644\u06cc\u06a9\u0646 \u062a\u062c\u0648\u06cc\u0632 \u06a9\u0631\u062f\u06c1)<\/h4>\n<p>AWS \u0633\u0627\u0626\u06cc\u0688 \u067e\u0631 \u062a\u0639\u06cc\u0646\u0627\u062a \u0627\u0633\u0679\u06cc\u06a9 \u06a9\u06cc\u0633\u0627 \u062f\u06a9\u06be\u062a\u0627 \u06c1\u06d2 \u0648\u06c1 \u06cc\u06c1 \u06c1\u06d2:<\/p>\n<table>\n<thead>\n<tr>\n<th>\u06a9\u0646\u0633\u0648\u0644 \u06a9\u0627 \u0645\u0642\u0627\u0645<\/th>\n<th>\u0622\u067e \u06a9\u0648 \u06a9\u06cc\u0627 \u062a\u0644\u0627\u0634 \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2\u061f<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>EC2 \u2192 \u0644\u0648\u0688 \u0628\u06cc\u0644\u0646\u0633\u0631<\/strong><\/td>\n<td>\u0646\u0627\u0645 \u0644\u0648\u0688 \u0628\u06cc\u0644\u0646\u0633\u0631 <code>clearledger-\u2026<\/code> \u062d\u06cc\u062b\u06cc\u062a \u06a9\u06d2 \u0633\u0627\u062a\u06be <strong>\u0641\u0639\u0627\u0644<\/strong><\/td>\n<\/tr>\n<tr>\n<td><strong>EC2 \u2192 \u06c1\u062f\u0641 \u06af\u0631\u0648\u067e<\/strong><\/td>\n<td>2-3 \u0679\u0627\u0631\u06af\u0679 \u06af\u0631\u0648\u067e\u0633\u060c \u062a\u0645\u0627\u0645 \u0627\u06c1\u062f\u0627\u0641 \u062f\u06a9\u06be\u0627\u0626\u06cc\u06ba\u06d4 <strong>\u0635\u062d\u062a \u0645\u0646\u062f<\/strong><\/td>\n<\/tr>\n<tr>\n<td><strong>ECR \u2192 \u0627\u0633\u0679\u0648\u0631\u06cc\u062c<\/strong><\/td>\n<td><code>clearledger\/auth-service<\/code>, <code>clearledger\/ledger-service<\/code>, <code>clearledger\/notification-service<\/code>, <code>clearledger\/frontend<\/code> - \u06c1\u0631 \u0627\u06cc\u06a9 \u06a9\u06d2 \u067e\u0627\u0633 \u062d\u0627\u0644 \u06c1\u06cc \u0645\u06cc\u06ba \u062f\u06be\u06a9\u0627 \u062f\u06cc\u0627 \u06af\u06cc\u0627 \u0627\u0645\u06cc\u062c \u0679\u06cc\u06af \u06c1\u06d2\u06d4<\/td>\n<\/tr>\n<tr>\n<td><strong>EKS \u2192 \u06a9\u0644\u0633\u0679\u0631 \u2192 Clearledger \u2192 \u06a9\u0627\u0645 \u06a9\u0627 \u0628\u0648\u062c\u06be<\/strong><\/td>\n<td>\u067e\u0648\u0688 \u0631\u0646\u0646\u06af \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0638\u0627\u06c1\u0631 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 <code>clearledger<\/code> \u0646\u0627\u0645 \u06a9\u06cc \u062c\u06af\u06c1<\/td>\n<\/tr>\n<tr>\n<td><strong>\u062e\u0641\u06cc\u06c1 \u0645\u06cc\u0646\u06cc\u062c\u0631<\/strong><\/td>\n<td><code>clearledger\/auth-service<\/code>, <code>clearledger\/ledger-service<\/code>, <code>clearledger\/postgres<\/code> - \u06c1\u0631 \u06a9\u0648\u0626\u06cc \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2\u06d4<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><strong>ALB \u0645\u06cc\u06ba 502\/503\u061f<\/strong> \u0644\u0648\u0688 \u0628\u06cc\u0644\u0646\u0633 \u062e\u062a\u0645 \u06c1\u0648 \u06af\u06cc\u0627 \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u067e\u0648\u0688\u0632 \u0627\u0628\u06be\u06cc \u062a\u06a9 \u0635\u062d\u062a \u0645\u0646\u062f \u0646\u06c1\u06cc\u06ba \u06c1\u06cc\u06ba \u06cc\u0627 \u0631\u0627\u0632 \u06c1\u0645 \u0622\u06c1\u0646\u06af\u06cc \u0633\u06d2 \u0628\u0627\u06c1\u0631 \u06c1\u06cc\u06ba\u06d4 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba: <code>kubectl get pods -n clearledger<\/code> (\u06c1\u0631 <code>1\/1 Running<\/code>\u061f) \u0627\u0648\u0631 <code>kubectl get externalsecret -n clearledger<\/code> (\u062f\u0648\u0646\u0648\u06ba <code>SecretSynced True<\/code>\u061f)\u06d4<\/p>\n<p><strong> \u067e\u0631\u06cc\u06a9\u0679\u0633 \u0686\u06cc\u06a9 \u067e\u0648\u0627\u0626\u0646\u0679: \u0627\u06cc\u067e \u0639\u0648\u0627\u0645\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0642\u0627\u0628\u0644 \u0631\u0633\u0627\u0626\u06cc \u06c1\u06d2\u06d4<\/strong><\/p>\n<pre><code class=\"language-bash\"># All three must print {\"status\":\"ok\",...}\ncurl -fsS \"http:\/\/${ALB_DNS}\/auth\/health\"         && echo\ncurl -fsS \"http:\/\/${ALB_DNS}\/ledger\/health\"        && echo\ncurl -fsS \"http:\/\/${ALB_DNS}\/notifications\/health\" && echo\n\n# All pods Running\nkubectl get pods -n clearledger\n\n# Nothing printed here = all pods Running (non-Running pods would show)\nkubectl get pods -n clearledger --field-selector=status.phase!=Running\n<\/code><\/pre>\n<p><code>ImagePullBackOff<\/code> \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 \u067e\u0648\u0688 \u0644\u0633\u0679 \u0645\u06cc\u06ba \u0627\u0628\u06be\u06cc \u062a\u06a9 \u06a9\u0648\u0626\u06cc ECR \u0627\u0645\u06cc\u062c\u0632 \u0646\u06c1\u06cc\u06ba \u06c1\u06cc\u06ba\u06d4 GitHub \u0627\u06cc\u06a9\u0634\u0646\u0632 \u06a9\u0648 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0648\u0631\u06a9 \u0641\u0644\u0648 \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4 \u06a9\u0648\u0626\u06cc \u0631\u0627\u0633\u062a\u06c1 \u0646\u06c1\u06cc\u06ba <code>502<\/code> \u0627\u0633\u0679\u06cc\u0679\u0633 \u06cc\u0648 \u0622\u0631 \u0627\u06cc\u0644 \u0645\u06cc\u06ba \u0645\u0648\u062c\u0648\u062f \u0645\u0639\u0644\u0648\u0645\u0627\u062a \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 \u067e\u0648\u0688 \u0627\u0628\u06be\u06cc \u062a\u06cc\u0627\u0631 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0628\u0631\u0627\u06c1 \u06a9\u0631\u0645 30 \u0633\u06cc\u06a9\u0646\u0688 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u062f\u0648\u0628\u0627\u0631\u06c1 \u06a9\u0648\u0634\u0634 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-84-verify-eso-default-secret-path\">8.4: \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0637\u06d2 \u0634\u062f\u06c1 \u062e\u0641\u06cc\u06c1 \u0631\u0627\u0633\u062a\u06d2 (ESO) \u06a9\u06cc \u062c\u0627\u0646\u0686 \u06a9\u0631\u0646\u0627<\/h3>\n<p>\u0622\u0631\u06af\u0648 \u0633\u06cc \u0688\u06cc \u06a9\u06d2 \u0633\u0646\u06a9\u0631\u0648\u0646\u0627\u0626\u0632 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f\u060c \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u0628\u06cc\u0631\u0648\u0646\u06cc \u0633\u06cc\u06a9\u0631\u0679 \u0622\u067e\u0631\u06cc\u0679\u0631 \u0646\u06d2 AWS \u0633\u06cc\u06a9\u0631\u0679\u0633 \u0645\u06cc\u0646\u06cc\u062c\u0631 \u0633\u06d2 \u0631\u06cc\u06af\u0648\u0644\u0631 Kubernetes \u0633\u06cc\u06a9\u0631\u0679\u0633 \u0645\u06cc\u06ba \u0627\u0642\u062f\u0627\u0631 \u06a9\u0648 \u06a9\u0627\u067e\u06cc \u06a9\u06cc\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\">kubectl get externalsecret,secret -n clearledger\nkubectl describe externalsecret auth-service-secret -n clearledger | grep -A6 \"Conditions:\"\nkubectl get pods -n clearledger -l app=auth-service\nkubectl exec -n clearledger deploy\/auth-service -c auth-service -- env | grep DATABASE_URL\n<\/code><\/pre>\n<h4 id=\"heading-command-1-externalsecrets-secrets\">\u06a9\u0645\u0627\u0646\u0688 1: \u0628\u06cc\u0631\u0648\u0646\u06cc \u0631\u0627\u0632 + \u062e\u0641\u06cc\u06c1<\/h4>\n<p>\u0622\u067e \u06a9\u0648 \u062f\u0648 \u0628\u06cc\u0631\u0648\u0646\u06cc \u0631\u0627\u0632\u0648\u06ba \u0633\u06d2 \u0645\u0645\u0627\u062b\u0644 \u062f\u0648 \u0631\u0627\u0632 \u062f\u06cc\u06a9\u06be\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2 (\u062a\u0635\u062f\u06cc\u0642 \u0645\u06cc\u06ba \u062f\u0648 \u06a9\u0644\u06cc\u062f\u06cc\u06ba \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0627\u06cc\u06a9 \u0644\u06cc\u062c\u0631 \u0645\u06cc\u06ba)\u06d4<\/p>\n<pre><code class=\"language-plaintext\">NAME                                                     STORE                 REFRESH INTERVAL   STATUS         READY\nexternalsecret.external-secrets.io\/auth-service-secret   aws-secrets-manager   1h                 SecretSynced   True\nexternalsecret.external-secrets.io\/ledger-service-secret aws-secrets-manager   1h                 SecretSynced   True\n\nNAME                         TYPE     DATA   AGE\nsecret\/auth-service-secret   Opaque   2      3m\nsecret\/ledger-service-secret Opaque   1      3m\n<\/code><\/pre>\n<p><code>STATUS<\/code> \u06c1\u0648\u0646\u0627 \u0636\u0631\u0648\u0631\u06cc \u06c1\u06d2 <strong>\u062e\u0641\u06cc\u06c1 \u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631<\/strong> \u0627\u0648\u0631 <strong>\u062a\u06cc\u0627\u0631<\/strong> \u06c1\u0648\u0646\u0627 \u0636\u0631\u0648\u0631\u06cc \u06c1\u06d2 <strong>\u0633\u0686\u0627\u0626\u06cc<\/strong>. \u0627\u06af\u0631 \u0622\u067e \u062f\u06cc\u06a9\u06be\u062a\u06d2 \u06c1\u06cc\u06ba <code>SecretSyncedError<\/code>\u06cc\u06c1\u0627\u06ba \u0631\u06a9\u06cc\u06ba \u0627\u0648\u0631 \u00a78.5 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 IRSA \u06a9\u0648 \u0679\u06be\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-command-2-describe-auth-externalsecret\">\u06a9\u0645\u0627\u0646\u0688 2: \u062a\u0648\u062b\u06cc\u0642 \u0628\u06cc\u0631\u0648\u0646\u06cc \u062e\u0641\u06cc\u06c1 \u062a\u0641\u0635\u06cc\u0644<\/h4>\n<p>\u0627\u0633\u06d2 \u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba\u06d4 <code>Reason: SecretSynced<\/code> \u0627\u0648\u0631 <code>Status: True<\/code>:<\/p>\n<pre><code class=\"language-plaintext\">  Conditions:\n    Last Transition Time:   2026-07-10T22:15:00Z\n    Message:                Secret was synced\n    Reason:                 SecretSynced\n    Status:                 True\n    Type:                   Ready\n<\/code><\/pre>\n<h4 id=\"heading-command-3-auth-pods-running\">\u06a9\u0645\u0627\u0646\u0688 3: \u062a\u0648\u062b\u06cc\u0642 \u067e\u0648\u0688 \u0686\u0644\u0627\u0646\u0627<\/h4>\n<pre><code class=\"language-plaintext\">NAME                            READY   STATUS    RESTARTS   AGE\nauth-service-xxxxxxxxxx-xxxxx   1\/1     Running   0          2m\nauth-service-xxxxxxxxxx-xxxxx   1\/1     Running   0          2m\n<\/code><\/pre>\n<p>\u062f\u0648\u0646\u0648\u06ba \u0646\u0642\u0644\u06cc\u06ba <strong>1\/1 \u0631\u0646<\/strong>. \u0627\u06af\u0631 \u0622\u067e \u06a9\u0627 \u067e\u0648\u0688 \u0627\u0633 \u0637\u0631\u062d \u06c1\u06d2: <code>CrashLoopBackOff<\/code> \u06cc\u0627 <code>CreateContainerConfigError<\/code>\u0622\u067e \u06a9\u0627 K8s \u067e\u0627\u0633 \u0648\u0631\u0688 \u063a\u0627\u0626\u0628 \u06cc\u0627 \u062e\u0627\u0644\u06cc \u06c1\u0648 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-command-4-databaseurl-is-an-env-var-eso-path-not-a-file-path\">\u06a9\u0645\u0627\u0646\u0688 4: DATABASE_URL \u0627\u06cc\u06a9 \u0645\u0627\u062d\u0648\u0644\u06cc\u0627\u062a\u06cc \u0645\u062a\u063a\u06cc\u0631 (ESO \u067e\u0627\u062a\u06be) \u06c1\u06d2\u060c \u0641\u0627\u0626\u0644 \u067e\u0627\u062a\u06be \u0646\u06c1\u06cc\u06ba\u06d4<\/h4>\n<pre><code class=\"language-plaintext\">DATABASE_URL=postgresql:\/\/clearledger:*****@clearledger-postgres.xxxxx.eu-west-1.rds.amazonaws.com:5432\/clearledger\n<\/code><\/pre>\n<p>\u0627\u0686\u06be\u0627: \u0628\u06cc <code>postgresql:\/\/...<\/code> \u06a9\u0646\u06a9\u0634\u0646 \u0633\u0679\u0631\u0646\u06af (\u067e\u0627\u0633 \u0648\u0631\u0688 \u062f\u0631\u062c \u0630\u06cc\u0644 \u0638\u0627\u06c1\u0631 \u06c1\u0648\u062a\u0627 \u06c1\u06d2) <code>*****<\/code> \u06cc\u0627 \u0627\u0635\u0644 \u067e\u0627\u0633 \u0648\u0631\u0688)\u06d4<\/p>\n<p>\u0627\u0633 \u0633\u06cc\u06a9\u0634\u0646 \u0645\u06cc\u06ba \u0641\u0679 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2: <code>\/mnt\/secrets\/database_url<\/code> \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0637\u06d2 \u0634\u062f\u06c1 ESO env-var \u067e\u0627\u062a\u06be \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 CSI \u0641\u0627\u0626\u0644\u0648\u06ba (\u00a78.5) \u06a9\u0648 \u0628\u0691\u06be\u0627\u0646\u0627\u06d4<\/p>\n<p>\u0622\u067e \u06cc\u06c1 \u0628\u06be\u06cc \u0686\u06cc\u06a9 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u06a9\u06c1 \u0622\u06cc\u0627 \u0642\u06cc\u0645\u062a \u067e\u0631\u0646\u0679 \u06a9\u06cc\u06d2 \u0628\u063a\u06cc\u0631 \u06a9\u0648\u0626\u06cc \u0631\u0627\u0632 \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\">kubectl get secret auth-service-secret -n clearledger -o jsonpath=\"{.data}\" | grep -o 'database_url|jwt_secret'\n# Expect: database_url and jwt_secret (two keys)\n<\/code><\/pre>\n<p>\u0627\u06af\u0631 <code>SecretSynced=False<\/code>ESO \u0644\u0627\u06af\u0632 \u0627\u0648\u0631 IRSA \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">kubectl logs -n external-secrets deploy\/external-secrets -c external-secrets | tail -30\nkubectl get sa auth-service -n clearledger -o yaml | grep role-arn\n<\/code><\/pre>\n<p><strong> \u0686\u06cc\u06a9 \u067e\u0648\u0627\u0626\u0646\u0679\u0633 \u06a9\u06cc \u0645\u0634\u0642 \u06a9\u0631\u06cc\u06ba\u06d4 \u0628\u06cc\u0631\u0648\u0646\u06cc \u0631\u0627\u0632 \u062f\u0631\u0627\u0635\u0644 AWS \u0633\u06d2 \u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631 \u06c1\u06cc\u06ba\u06d4<\/strong><\/p>\n<pre><code class=\"language-bash\">kubectl get externalsecret -n clearledger\nkubectl get secret -n clearledger\n<\/code><\/pre>\n<p>\u0645\u062a\u0648\u0642\u0639: <code>auth-service-secret<\/code> \u0627\u0648\u0631 <code>ledger-service-secret<\/code> \u06c1\u0631 \u0634\u0648 <code>SecretSynced<\/code> \/ \u062a\u06cc\u0627\u0631 <code>True<\/code>. \u0627\u06cc\u06a9 \u0645\u0645\u0627\u062b\u0644 Kubernetes \u0631\u0627\u0632 \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2\u06d4 <code>clearledger<\/code>. \u06a9\u0648\u0626\u06cc \u0631\u0627\u0633\u062a\u06c1 \u0646\u06c1\u06cc\u06ba <code>SecretSyncedError<\/code> \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 IRSA\/IAM \u0633\u06cc\u06a9\u0631\u0679\u0633 \u0645\u06cc\u0646\u06cc\u062c\u0631 \u0633\u06d2 \u0631\u0627\u0628\u0637\u06c1 \u0646\u06c1\u06cc\u06ba \u06a9\u0631 \u0633\u06a9\u062a\u0627\u06d4 \u00a78.5 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0631\u0648\u0644 \u0628\u0627\u0626\u0646\u0688\u0646\u06af \u0645\u06cc\u06ba \u062a\u0631\u0645\u06cc\u0645 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u06af\u0631 \u0622\u067e \u0627\u0633\u06d2 \u0686\u06be\u0648\u0691 \u062f\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0648\u060c \u00a78.5 (CSI \u0688\u0631\u0627\u0626\u06cc\u0648\u0631) \u06a9\u0627\u0645 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06cc \u062e\u0641\u06cc\u06c1 \u0631\u0633\u0627\u0626\u06cc \u06a9\u06d2 \u0627\u0648\u067e\u0631 \u0628\u0646\u0627\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u060c \u062c\u06c1\u0627\u06ba \u062e\u0627\u0645\u0648\u0634 IAM \u0646\u0627\u06a9\u0627\u0645\u06cc\u0627\u06ba \u062f\u0648 \u062d\u0635\u0648\u06ba \u06a9\u06d2 \u0628\u0639\u062f \u0628\u0638\u0627\u06c1\u0631 \u063a\u06cc\u0631 \u0645\u062a\u0639\u0644\u0642\u06c1 \u067e\u0648\u0688 \u06a9\u06cc \u063a\u0644\u0637\u06cc\u0648\u06ba \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0638\u0627\u06c1\u0631 \u06c1\u0648\u062a\u06cc \u06c1\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-85-hands-on-csi-driver-file-mounts\">8.5: \u0644\u06cc\u0628\u060c CSI \u0688\u0631\u0627\u0626\u06cc\u0648\u0631 (\u0641\u0627\u0626\u0644 \u0645\u0627\u0624\u0646\u0679)<\/h3>\n<p>\u0688\u06cc\u0641\u0627\u0644\u0679 \u067e\u0648\u0688 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u06c1\u06cc ESO \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4 \u0631\u0627\u0632 \u06a9\u0628\u0631\u0646\u06cc\u0679\u0633 \u0633\u06cc\u06a9\u0631\u06cc\u0679 \u0622\u0628\u062c\u06cc\u06a9\u0679 \u0645\u06cc\u06ba \u0645\u0627\u062d\u0648\u0644\u06cc\u0627\u062a\u06cc \u0645\u062a\u063a\u06cc\u0631 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0622\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0645\u0634\u0642 \u0627\u06cc\u06a9 \u0633\u0648\u0626\u0686 \u06c1\u06d2\u06d4 <code>auth-service<\/code> \u0627\u0633 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 CSI \u06a9\u06d2 \u0631\u0627\u0633\u062a\u06d2 \u067e\u0631: \u0631\u0627\u0632 \u06a9\u0648 \u0628\u0627\u0642\u0627\u0639\u062f\u06c1 \u0641\u0627\u0626\u0644 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0646\u0635\u0628 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 <code>\/mnt\/secrets\/<\/code>\u0627\u06cc\u067e \u0627\u067e\u0646\u06d2 \u0645\u0648\u0627\u062f \u06a9\u0648 \u0688\u0633\u06a9 \u0633\u06d2 \u067e\u0691\u06be\u062a\u06cc \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0648\u06c1\u06cc \u06a9\u0648\u0688 \u067e\u0627\u062a\u06be \u06c1\u06d2 \u062c\u0633\u06d2 \u06c1\u0648\u0645 \u0644\u06cc\u0628 \u0648\u0627\u0644\u0679 (<code>DATABASE_URL_FILE<\/code> \/ <code>JWT_SECRET_FILE<\/code>)\u06d4<\/p>\n<p>\u0627\u0633\u067e\u0646 \u0627\u067e \u0645\u0631\u062d\u0644\u06c1 11 \u0645\u06cc\u06ba CSI \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u06c1\u06cc \u0627\u0646\u0633\u0679\u0627\u0644 \u062a\u06be\u0627\u060c \u0644\u06c1\u0630\u0627 \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0648\u0626\u06cc \u0627\u0636\u0627\u0641\u06cc \u0686\u06cc\u0632 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-step-1-confirm-csi-is-running\">\u0645\u0631\u062d\u0644\u06c1 1: \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 CSI \u0686\u0644 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4<\/h4>\n<pre><code class=\"language-bash\">kubectl get pods -n kube-system -l app=secrets-store-csi-driver\nkubectl get secretproviderclass -n clearledger\n<\/code><\/pre>\n<p>\u0622\u067e \u06a9\u0648 \u06c1\u0631 \u0646\u0648\u0688 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 CSI \u0688\u0631\u0627\u0626\u06cc\u0648\u0631 \u067e\u0648\u0688 \u0646\u0638\u0631 \u0622\u0626\u06d2 \u06af\u0627\u060c \u0622\u067e \u06a9\u0648 \u062f\u0648 \u0646\u0638\u0631 \u0622\u0626\u06cc\u06ba \u06af\u06d2\u06d4 <code>SecretProviderClass<\/code> \u0622\u0628\u062c\u06cc\u06a9\u0679: \u0627\u06cc\u06a9 \u062a\u0648\u062b\u06cc\u0642 \u06a9\u06cc \u062e\u062f\u0645\u062a \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0648\u0631 \u0627\u06cc\u06a9 \u0644\u06cc\u062c\u0631 \u0633\u0631\u0648\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2\u06d4<\/p>\n<h4 id=\"heading-step-2-swap-the-deployment-in-git\">\u0645\u0631\u062d\u0644\u06c1 2: \u06af\u0679 \u0645\u06cc\u06ba \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u06a9\u0648 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/h4>\n<p>\u06a9\u06be\u0644\u0627 <code>stages\/stage-8-aws-migration\/manifests\/kustomization.yaml<\/code> \u0627\u06cc\u06a9 \u0644\u0627\u0626\u0646 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u06cc\u06ba:<\/p>\n<pre><code class=\"language-yaml\"># Before\n  - deployments\/auth-service.yaml\n\n# After\n  - deployments\/auth-service-csi.yaml\n<\/code><\/pre>\n<p>\u06a9\u0645\u0679 \u06a9\u0631\u06cc\u06ba\u060c \u062f\u0628\u0627\u0626\u06cc\u06ba\u060c \u0627\u0648\u0631 \u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631\u06cc \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">argocd app sync clearledger-aws\nkubectl rollout status deployment\/auth-service -n clearledger\n<\/code><\/pre>\n<p>ArgoCD \u0627\u06cc\u06a9 \u0646\u0626\u06cc \u062a\u0635\u062f\u06cc\u0642\u06cc \u0633\u0631\u0648\u0633 \u067e\u0648\u0688 \u0634\u0631\u0648\u0639 \u06a9\u0631\u06d2 \u06af\u0627 \u062c\u0633 \u0645\u06cc\u06ba CSI \u0648\u0627\u0644\u06cc\u0648\u0645 \u0645\u0646\u0633\u0644\u06a9 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-step-3-confirm-the-files-are-there\">\u0645\u0631\u062d\u0644\u06c1 3: \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u0622\u06cc\u0627 \u0641\u0627\u0626\u0644 \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2\u06d4<\/h4>\n<pre><code class=\"language-bash\"># Find the new pod\nkubectl get pod -n clearledger -l secrets=csi\n\n# List the mounted secret files\nkubectl exec -n clearledger deploy\/auth-service -- ls \/mnt\/secrets\n\n# Check the database URL was written correctly\nkubectl exec -n clearledger deploy\/auth-service -- cat \/mnt\/secrets\/database_url\n\n# Confirm the service is still healthy\ncurl -s \"http:\/\/$(kubectl get ingress clearledger-ingress -n clearledger \n  -o jsonpath=\"{.status.loadBalancer.ingress[0].hostname}\")\/auth\/health\"\n<\/code><\/pre>\n<p>\u0622\u067e \u06a9\u0648 \u062f\u06cc\u06a9\u06be\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2 <code>database_url<\/code> \u0627\u0648\u0631 <code>jwt_secret<\/code> \u0627\u0633\u06d2 \u0627\u06cc\u06a9 \u0641\u0627\u0626\u0644 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u062f\u0631\u062c \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2 \u06af\u0627 \u0627\u0648\u0631 \u0627\u0633\u0679\u06cc\u0679\u0633 \u0686\u06cc\u06a9 \u06a9\u0648 \u0648\u0627\u067e\u0633 \u06a9\u06cc\u0627 \u062c\u0627\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4 <code>{\"status\":\"ok\"}<\/code>.<\/p>\n<p><strong>ESO \u0628\u0645\u0642\u0627\u0628\u0644\u06c1 CSI: \u0648\u0627\u0642\u0639\u06cc \u06a9\u06cc\u0627 \u0628\u062f\u0644\u0627 \u06c1\u06d2\u061f<\/strong><\/p>\n<p>\u062f\u0648\u0646\u0648\u06ba \u0631\u0627\u0633\u062a\u06d2 AWS \u0633\u06cc\u06a9\u0631\u0679\u0633 \u0645\u06cc\u0646\u06cc\u062c\u0631 \u0633\u06d2 \u0627\u06cc\u06a9 \u06c1\u06cc \u0631\u0627\u0632 \u067e\u0691\u06be\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0635\u0631\u0641 \u0634\u067e\u0646\u06af \u06a9\u0627 \u0637\u0631\u06cc\u0642\u06c1 \u0628\u062f\u0644 \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4<\/p>\n<p><strong>ESO (\u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0637\u06d2 \u0634\u062f\u06c1\u060c \u062c\u06cc\u0633\u0627 \u06a9\u06c1 \u00a78.4 \u0645\u06cc\u06ba \u062f\u06cc\u06a9\u06be\u0627 \u06af\u06cc\u0627 \u06c1\u06d2)<\/strong><\/p>\n<p>ESO \u06a9\u0648 \u0627\u06cc\u06a9 \u06a9\u0644\u0633\u0679\u0631 \u067e\u0631 \u0686\u0644\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u06a9\u0627\u067e\u06cc \u0622\u0641\u0633 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0633\u0648\u0686\u06cc\u06ba\u06d4<\/p>\n<ol>\n<li>\n<p>ESO \u06a9\u06cc \u0627\u067e\u0646\u06cc AWS \u0627\u062c\u0627\u0632\u062a\u06cc\u06ba (IAM \u0631\u0648\u0644\u0632) \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u06cc\u06c1 \u067e\u0691\u06be\u062a\u0627 \u06c1\u06d2 <code>clearledger\/auth-service<\/code> \u0633\u06cc\u06a9\u0631\u0679\u0633 \u0645\u06cc\u0646\u06cc\u062c\u0631 \u0645\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0627\u0642\u062f\u0627\u0631 \u06a9\u0648 \u0627\u06cc\u06a9 \u0639\u0627\u0645 Kubernetes \u0631\u0627\u0632 \u0645\u06cc\u06ba \u06a9\u0627\u067e\u06cc \u06a9\u0631\u06cc\u06ba \u062c\u0633 \u06a9\u0627 \u0646\u0627\u0645 \u06c1\u06d2: <code>auth-service-secret<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u062a\u0648\u062b\u06cc\u0642 \u067e\u0648\u0688 \u067e\u0691\u06be\u062a\u0627 \u06c1\u06d2: <code>DATABASE_URL<\/code> \u0627\u0648\u0631 <code>JWT_SECRET<\/code> \u067e\u0633\u0646\u062f <strong>\u0645\u0627\u062d\u0648\u0644\u06cc\u0627\u062a\u06cc \u0645\u062a\u063a\u06cc\u0631\u0627\u062a\u06d4<\/strong><\/p>\n<\/li>\n<\/ol>\n<p>\u0631\u0627\u0632 \u06a9\u0644\u0633\u0679\u0631 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0627\u06cc\u06a9 Kubernetes \u062e\u0641\u06cc\u06c1 \u0622\u0628\u062c\u06cc\u06a9\u0679 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0645\u062e\u062a\u0635\u0631 \u0637\u0648\u0631 \u067e\u0631 \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2\u06d4<\/p>\n<p><strong>CSI (\u06cc\u06c1 \u0645\u0634\u0642\u060c \u0645\u0627\u0624\u0646\u0679 \u0641\u0627\u0626\u0644)<\/strong><\/p>\n<p>\u0622\u067e CSI \u06a9\u0648 \u0627\u06cc\u06a9 \u067e\u0648\u0688 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0633\u0648\u0686 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u0648 \u0634\u0631\u0648\u0639 \u06c1\u0648\u0646\u06d2 \u067e\u0631 \u0627\u067e\u0646\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0631\u0627\u0632 \u0627\u06a9\u0679\u06be\u0627 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<ol>\n<li>\n<p>auth-service pod \u06a9\u06d2 \u067e\u0627\u0633 \u0627\u067e\u0646\u06cc AWS \u0627\u062c\u0627\u0632\u062a\u06cc\u06ba \u06c1\u06cc\u06ba (IRSA for ServiceAccount)\u06d4<\/p>\n<\/li>\n<li>\n<p>\u062c\u0628 \u06a9\u0648\u0626\u06cc \u067e\u0648\u0688 \u0634\u0631\u0648\u0639 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 CSI \u0688\u0631\u0627\u0626\u06cc\u0648\u0631 \u0633\u06cc\u06a9\u0631\u0679\u0633 \u0645\u06cc\u0646\u06cc\u062c\u0631 \u0633\u06d2 \u0627\u0642\u062f\u0627\u0631 \u06a9\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u06cc\u06c1 \u0630\u06cc\u0644 \u0645\u06cc\u06ba \u0641\u0627\u0626\u0644 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0638\u0627\u06c1\u0631 \u06c1\u0648\u062a\u0627 \u06c1\u06d2. <code>\/mnt\/secrets\/<\/code> (<code>database_url<\/code>, <code>jwt_secret<\/code>)\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0641\u0648\u0631\u0688 \u06a9\u06cc\u0627 \u06a9\u06c1\u062a\u0627 \u06c1\u06d2\u06d4 <code>DATABASE_URL_FILE=\/mnt\/secrets\/database_url<\/code> \u0688\u0633\u06a9 \u0633\u06d2 \u067e\u0691\u06be\u06cc\u06ba K8s \u06a9\u06d2 \u0631\u0627\u0632 \u06a9\u0627\u067e\u06cc \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u06d2 \u06af\u0626\u06d2\u06d4<\/p>\n<\/li>\n<\/ol>\n<p>\u0627\u0633 \u0631\u0627\u0633\u062a\u06d2 \u0645\u06cc\u06ba \u0627\u0633 \u0642\u062f\u0631 \u06a9\u06d2 \u0644\u06cc\u06d2 Kubernetes \u0631\u0627\u0632 \u06a9\u06cc \u06a9\u0648\u0626\u06cc \u06a9\u0627\u067e\u06cc \u0646\u06c1\u06cc\u06ba \u0628\u0646\u0627\u0626\u06cc \u06af\u0626\u06cc \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u0627\u06cc\u06a9 \u06c1\u06cc \u0627\u06cc\u067e \u06a9\u0648\u0688 \u062f\u0648\u0646\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u06cc\u0648\u06ba \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u061f<\/strong><\/p>\n<p><code>app\/auth-service\/main.py<\/code> \u062a\u06be\u0648\u0691\u0627 \u0633\u0627 \u0645\u062f\u062f\u06af\u0627\u0631 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 <code>_read_secret()<\/code>:<\/p>\n<p>\u0627\u06cc\u06a9 \u06c1\u06cc \u062a\u0635\u0648\u06cc\u0631\u060c \u0648\u06c1\u06cc \u06a9\u0648\u0688: YAML \u0635\u0631\u0641 \u0627\u0633 \u062a\u0642\u0633\u06cc\u0645 \u06a9\u0648 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0633 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0622\u0631\u06af\u0648 \u0633\u06cc \u0688\u06cc \u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631 \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p><strong>ESO \u067e\u0631 \u0648\u0627\u067e\u0633 \u062c\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2:<\/strong> \u06a9\u0648 <code>kustomization.yaml<\/code>\u062a\u0628\u062f\u06cc\u0644\u06cc <code>auth-service-csi.yaml<\/code> \u062f\u0648\u0628\u0627\u0631\u06c1 <code>auth-service.yaml<\/code>\u06a9\u0645\u0679\u060c \u062f\u06be\u06a9\u0627 \u0627\u0648\u0631 <code>argocd app sync clearledger-aws<\/code>.<\/p>\n<p><strong>\u0679\u06cc\u0631\u0627\u0641\u0627\u0631\u0645<\/strong> \u062a\u0645\u0627\u0645 AWS \u0648\u0633\u0627\u0626\u0644 (VPC\u060c EKS\u060c RDS\u060c ECR\u060c \u0633\u06cc\u06a9\u0631\u0679\u0633 \u0645\u06cc\u0646\u06cc\u062c\u0631\u060c \u0627\u0648\u0631 IAM \u06a9\u0631\u062f\u0627\u0631) \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u06cc\u06ba\u06d4 <code>.tf<\/code> \u0641\u0627\u0626\u0644 <code>stages\/stage-8-aws-migration\/terraform\/<\/code>.<\/p>\n<h3 id=\"heading-two-oidc-ideas-in-stage-8\">8 \u0645\u0631\u0627\u062d\u0644 \u0645\u06cc\u06ba \u062f\u0648 OIDC \u0622\u0626\u06cc\u0688\u06cc\u0627\u0632<\/h3>\n<p>\u0645\u0631\u062d\u0644\u06c1 8 \u062f\u0648 \u0645\u062e\u062a\u0644\u0641 \u062c\u06af\u06c1\u0648\u06ba \u067e\u0631 OIDC \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06af\u0631\u0686\u06c1 \u0648\u06c1 \u0627\u06cc\u06a9 \u062c\u06cc\u0633\u06d2 \u0646\u0638\u0631 \u0622\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0648\u06c1 \u0645\u062e\u062a\u0644\u0641 \u0645\u0633\u0627\u0626\u0644 \u06a9\u0648 \u062d\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba.<\/p>\n<p><strong>\u06af\u0679 \u06c1\u0628 \u0627\u06cc\u06a9\u0634\u0646 OIDC<\/strong> \u0622\u067e \u06a9\u06cc CI \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 GitHub \u0645\u06cc\u06ba \u0637\u0648\u06cc\u0644 \u0639\u0631\u0635\u06d2 \u062a\u06a9 AWS \u06a9\u06cc\u0632 \u06a9\u0648 \u0630\u062e\u06cc\u0631\u06c1 \u06a9\u06cc\u06d2 \u0628\u063a\u06cc\u0631 \u062a\u0635\u0627\u0648\u06cc\u0631 \u06a9\u0648 ECR \u067e\u0631 \u062f\u06be\u06a9\u06cc\u0644 \u0633\u06a9\u062a\u06cc \u06c1\u06d2\u06d4 \u062c\u0628 \u06a9\u0648\u0626\u06cc \u06a9\u0627\u0645 \u0686\u0644\u062a\u0627 \u06c1\u06d2\u060c GitHub \u0627\u06cc\u06a9 \u0645\u062e\u062a\u0635\u0631 \u0645\u062f\u062a \u06a9\u0627 \u0679\u0648\u06a9\u0646 \u062c\u0627\u0631\u06cc \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0648 \u06a9\u0627\u0645 \u06a9\u06cc \u0634\u0646\u0627\u062e\u062a \u06a9\u0648 \u062b\u0627\u0628\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 AWS \u0627\u0633 \u0679\u0648\u06a9\u0646 \u067e\u0631 \u0628\u06be\u0631\u0648\u0633\u06c1 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0645\u06cc\u062c \u06a9\u0648 \u0622\u06af\u06d2 \u0628\u0691\u06be\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0627\u0641\u06cc \u0639\u0627\u0631\u0636\u06cc \u0627\u0633\u0646\u0627\u062f \u0648\u0627\u067e\u0633 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><strong>IRSA<\/strong> \u06cc\u06c1 \u0627\u0646 \u067e\u06be\u0644\u06cc\u0648\u06ba \u06a9\u0627 \u0645\u0639\u0627\u0645\u0644\u06c1 \u06c1\u06d2 \u062c\u0648 \u0627\u06cc\u06a9 \u06c1\u06cc \u06a9\u0627\u0645 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u0644\u06cc\u06a9\u0646 EKS \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0686\u0644\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 GitHub \u0679\u0648\u06a9\u0646 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2\u060c Pods \u0627\u06cc\u06a9 Kubernetes ServiceAccount \u0679\u0648\u06a9\u0646 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 AWS EKS \u06a9\u0644\u0633\u0679\u0631 \u06a9\u06d2 OIDC \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0646\u0646\u062f\u06c1 \u067e\u0631 \u0628\u06be\u0631\u0648\u0633\u06c1 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0679\u0648\u06a9\u0646 \u06a9\u06cc \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u067e\u0648\u0688 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062f\u0631\u06a9\u0627\u0631 \u062f\u0627\u0626\u0631\u0648\u06ba \u0645\u06cc\u06ba \u0639\u0627\u0631\u0636\u06cc \u0627\u0633\u0646\u0627\u062f \u0648\u0627\u067e\u0633 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06c1\u0631 \u0622\u0626\u0679\u0645 \u06a9\u0648 \u0686\u06cc\u06a9 \u06a9\u0631\u0646\u0627 \u0645\u0641\u06cc\u062f \u06c1\u0648\u06af\u0627\u06d4<\/p>\n<pre><code class=\"language-text\">GitHub Actions OIDC:\n  Pipeline says \u2192 \"I am a job in the production environment of YOUR_USERNAME\/clearledger\"\n  AWS replies   \u2192 \"Here are credentials to push to ECR, valid for one hour\"\n\nIRSA:\n  Pod says   \u2192 \"I am the auth-service ServiceAccount in the clearledger namespace\"\n  AWS replies \u2192 \"Here are credentials to read only the auth-service secret, valid for one hour\"\n<\/code><\/pre>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/07\/1785194533_1_Homelab-\u0633\u06d2-AWS-\u062a\u06a9-\u067e\u0631\u0648\u0688\u06a9\u0634\u0646-\u06a9\u06d2-\u0644\u06cc\u06d2-\u062a\u06cc\u0627\u0631-DevSecOps-\u067e\u0644\u06cc\u0679.png\" alt=\"\u062a\u0635\u0648\u06cc\u0631\u06cc \u0641\u0644\u0648 \u0686\u0627\u0631\u0679 OIDC \u0627\u0648\u0631 IRSA \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u0641\u0631\u0642 \u062f\u06a9\u06be\u0627 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4\" style=\"display:block;margin:0 auto\" width=\"1536\" height=\"1024\" loading=\"lazy\" title=\"\"><\/p>\n<p>\u06a9\u0644\u06cc\u062f \u06a9\u06cc\u0627 \u06c1\u06d2\u061f <em>~ \u0646\u06c1\u06cc\u06ba<\/em> \u06a9\u06c1\u06cc\u06ba \u0628\u06be\u06cc \u0630\u062e\u06cc\u0631\u06c1:<\/p>\n<pre><code class=\"language-text\">No AWS_ACCESS_KEY_ID in GitHub Secrets\nNo AWS_SECRET_ACCESS_KEY in GitHub Secrets\nNo AWS keys inside Kubernetes Secrets\n<\/code><\/pre>\n<p>Terraform \u06a9\u0631\u062f\u0627\u0631 \u062a\u062e\u0644\u06cc\u0642 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <code>clearledger-github-actions-ecr<\/code> \u062f\u0648\u0646\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0639\u062a\u0645\u0627\u062f \u06a9\u06cc \u067e\u0627\u0644\u06cc\u0633\u06cc \u06a9\u0648 \u0645\u0646\u0633\u0644\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 <code>.github\/workflows\/ci-aws.yaml<\/code> \u06a9\u0631\u062f\u0627\u0631 \u0633\u0646\u0628\u06be\u0627\u0644\u06cc\u06ba\u060c \u062a\u0635\u0648\u06cc\u0631 \u06a9\u0648 ECR \u067e\u0631 \u067e\u0634 \u06a9\u0631\u06cc\u06ba\u060c \u0627\u0648\u0631 \u0627\u0633\u06d2 \u0627\u067e \u0688\u06cc\u0679 \u06a9\u0631\u06cc\u06ba\u06d4 <code>kustomization.yaml<\/code>. ArgoCD \u062a\u0628\u062f\u06cc\u0644\u06cc\u0627\u06ba \u0627\u0679\u06be\u0627\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0646\u0626\u06cc \u062a\u0635\u0648\u06cc\u0631 \u06a9\u0648 \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-ci-routing-stages-17-vs-stage-8\">CI \u0631\u0648\u0679\u0646\u06af: \u0645\u0631\u0627\u062d\u0644 1-7 \u0627\u0648\u0631 8<\/h3>\n<p>\u0630\u062e\u06cc\u0631\u06c1 \u062f\u0648 \u0648\u0631\u06a9 \u0641\u0644\u0648 \u0641\u0627\u0626\u0644\u06cc\u06ba \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2: \u0622\u067e \u06a9\u0648 \u0627\u06cc\u06a9 \u06c1\u06cc \u0648\u0642\u062a \u0645\u06cc\u06ba \u062f\u0648\u0646\u0648\u06ba \u06a9\u0648 \u0686\u0644\u0627\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<p><code>ci.yaml<\/code> \u06cc\u06c1 \u0645\u0631\u062d\u0644\u06c1 1 \u0633\u06d2 7 \u062a\u06a9 \u06c1\u0648\u0645 \u0644\u06cc\u0628 \u06a9\u06cc \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06c1\u06d2\u06d4 \u062e\u0648\u062f \u0645\u06cc\u0632\u0628\u0627\u0646 \u0645\u0644\u0679\u06cc \u067e\u0627\u0633 VM \u067e\u0631 \u0686\u0644\u062a\u06cc \u06c1\u06d2\u060c \u062a\u0635\u0627\u0648\u06cc\u0631 \u06a9\u0648 Docker Hub \u0645\u06cc\u06ba \u062f\u06be\u06a9\u06cc\u0644\u062a\u06cc \u06c1\u06d2\u060c <code>clearledger-infra<\/code> GitOps \u0630\u062e\u06cc\u0631\u06c1\u06d4 \u06cc\u06c1 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0637\u06d2 \u0634\u062f\u06c1 \u06c1\u06d2\u06d4 \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0686\u06be \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<p><code>ci-aws.yaml<\/code> \u0627\u0633\u0679\u06cc\u062c 8 \u06a9\u06d2 \u0644\u06cc\u06d2 AWS \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646\u06d4 GitHub \u067e\u0631 \u0645\u06cc\u0632\u0628\u0627\u0646\u06cc \u06a9\u06cc \u06af\u0626\u06cc\u06d4 <code>ubuntu-latest<\/code> \u0631\u0646\u0631\u060c \u067e\u0634 \u0627\u0648\u0631 \u062a\u0635\u0627\u0648\u06cc\u0631 \u06a9\u0648 \u0627\u06cc \u0633\u06cc \u0622\u0631 \u0645\u06cc\u06ba \u0627\u067e \u0688\u06cc\u0679 \u06a9\u0631\u06cc\u06ba\u06d4 <code>kustomization.yaml<\/code> \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0627\u0633 \u0645\u062e\u0632\u0646 \u0633\u06d2\u06d4 \u06cc\u06c1 \u0635\u0631\u0641 \u0627\u0633 \u0648\u0642\u062a \u0686\u0627\u0644\u0648 \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u062c\u0628 \u0622\u067e \u0631\u06cc\u067e\u0648 \u0645\u062a\u063a\u06cc\u0631 \u06a9\u0648 \u0633\u06cc\u0679 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>CLEARLEDGER_CI_TARGET=aws<\/code>.<\/p>\n<p><strong>\u0627\u06af\u0631 \u0622\u067e 1-7 \u0645\u0631\u0627\u062d\u0644 \u0645\u06cc\u06ba \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u06a9\u0686\u06be \u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4<\/strong> \u06a9\u06c1 <code>CLEARLEDGER_CI_TARGET<\/code> \u0645\u062a\u063a\u06cc\u0631 \u0628\u0637\u0648\u0631 \u0688\u06cc\u0641\u0627\u0644\u0679 \u0633\u06cc\u0679 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u060c \u0644\u06c1\u0630\u0627 \u06c1\u0631 \u062f\u06be\u06a9\u0627 \u067e\u0631 \u0639\u0645\u0644 \u062f\u0631\u0622\u0645\u062f \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 <code>ci.yaml<\/code> \u0639\u0627\u0645 \u0637\u0648\u0631 \u067e\u0631 \u062e\u0648\u062f \u0645\u06cc\u0632\u0628\u0627\u0646 \u0631\u0646\u0631 \u067e\u0631\u06d4 AWS \u0648\u0631\u06a9 \u0641\u0644\u0648 \u0641\u0627\u0626\u0644 \u0631\u06cc\u067e\u0648\u0632\u0679\u0631\u06cc \u0645\u06cc\u06ba \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u06a9\u0627\u0645 \u0686\u06be\u0648\u0691 \u062f\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u0633\u06cc\u0679 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/strong> <code>CLEARLEDGER_CI_TARGET=aws<\/code> <strong>\u062c\u0628 \u062a\u06a9 EKS \u06a9\u0644\u0633\u0679\u0631 \u0646\u06c1\u06cc\u06ba \u0686\u0644 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4<\/strong><\/p>\n<p>\u0627\u06af\u0631 \u0622\u067e \u0627\u0633\u06d2 \u062c\u0644\u062f \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>ci.yaml<\/code> \u067e\u0634 \u0686\u0644\u0646\u0627 \u0628\u0646\u062f \u06c1\u0648\u062c\u0627\u062a\u0627 \u06c1\u06d2 (\u0645\u0632\u06cc\u062f \u0688\u0648\u06a9\u0631 \u06c1\u0628 \u0646\u06c1\u06cc\u06ba \u0628\u0646\u062a\u0627 \u06c1\u06d2)\u06d4 <code>ci-aws.yaml<\/code> \u06cc\u06c1 \u0641\u0648\u0631\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u06af\u0627 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u0622\u067e \u06a9\u06d2 \u067e\u0627\u0633 \u0627\u0628\u06be\u06cc \u062a\u06a9 ECR\u060c OIDC \u0631\u0648\u0644\u060c \u06cc\u0627 AWS \u0627\u0646\u0641\u0631\u0627\u0633\u0679\u0631\u06a9\u0686\u0631 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0645\u062a\u063a\u06cc\u0631 \u06a9\u0648 \u062d\u0630\u0641 \u06a9\u0631\u06cc\u06ba \u0627\u06af\u0631 \u063a\u0644\u0637\u06cc \u0633\u06d2 \u0633\u06cc\u0679 \u06c1\u0648 \u062c\u0627\u0626\u06d2: GitHub \u2192 repo <strong>\u062a\u0631\u062a\u06cc\u0628<\/strong> \u2192 <strong>\u0631\u0627\u0632 \u0627\u0648\u0631 \u0645\u062a\u063a\u06cc\u0631\u0627\u062a<\/strong> \u2192 <strong>\u0639\u0645\u0644<\/strong> \u2192 <strong>\u0645\u062a\u063a\u06cc\u0631<\/strong> \u2192 \u062d\u0630\u0641 \u06a9\u0631\u06cc\u06ba\u06d4 <code>CLEARLEDGER_CI_TARGET<\/code>.<\/p>\n<p><strong>AWS CI \u06a9\u0648 \u0641\u0639\u0627\u0644 \u06a9\u0631\u06cc\u06ba (\u0622\u067e \u06cc\u06c1 \u0628\u0639\u062f \u0645\u06cc\u06ba \u06a9\u0631\u06cc\u06ba \u06af\u06d2)<\/strong> <code>terraform apply<\/code> <strong>\u0645\u06a9\u0645\u0644)<\/strong><\/p>\n<p>\u0627\u06cc\u06a9 \u0641\u0627\u0626\u0644 \u06a9\u06d2 \u0644\u06cc\u06d2 3 \u0633\u0679\u0648\u0631\u06cc\u062c \u0645\u062a\u063a\u06cc\u0631\u0627\u062a \u0627\u0648\u0631 1 \u062e\u0641\u06cc\u06c1 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4 <code>production<\/code> \u0645\u0627\u062d\u0648\u0644<\/p>\n<p>\u0633\u0628 \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u060c \u0645\u062a\u063a\u06cc\u0631\u0627\u062a \u06a9\u0648 \u0633\u06cc\u0679 \u06a9\u0631\u06cc\u06ba. <code>YOUR_USERNAME<\/code> \u0627\u067e\u0646\u06d2 GitHub \u0635\u0627\u0631\u0641 \u0646\u0627\u0645 \u06a9\u06d2 \u0633\u0627\u062a\u06be:<\/p>\n<pre><code class=\"language-bash\">gh variable set CLEARLEDGER_CI_TARGET --body aws --repo YOUR_USERNAME\/clearledger\n\ngh variable set AWS_ACCOUNT_ID --body \"$(aws sts get-caller-identity --query Account --output text)\" --repo YOUR_USERNAME\/clearledger\n\ngh variable set AWS_REGION --body eu-west-1 --repo YOUR_USERNAME\/clearledger\n<\/code><\/pre>\n<p>\u067e\u06be\u0631 <code>production<\/code> \u0627\u067e\u0646\u0627 \u0645\u0627\u062d\u0648\u0644 \u0645\u0646\u062a\u062e\u0628 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 OIDC \u0631\u0648\u0644 ARN \u06a9\u0648 \u0628\u0637\u0648\u0631 \u0631\u0627\u0632 \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\"># Create the environment first, gh secret set returns 404 if it does not exist\ngh api --method PUT \"repos\/YOUR_USERNAME\/clearledger\/environments\/production\"\n\ngh secret set AWS_ACTIONS_ROLE_ARN \n  --env production \n  --body \"$(terraform -chdir=stages\/stage-8-aws-migration\/terraform output -raw github_actions_ecr_role_arn)\" \n  --repo YOUR_USERNAME\/clearledger\n<\/code><\/pre>\n<p><strong>\u0645\u06cc\u0645\u0648<\/strong>: GitHub \u0627\u0633 \u0633\u06d2 \u0634\u0631\u0648\u0639 \u06c1\u0648\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u062e\u0641\u06cc\u06c1 \u0646\u0627\u0645\u0648\u06ba \u06a9\u0648 \u0631\u0648\u06a9\u062a\u0627 \u06c1\u06d2: <code>GITHUB_<\/code>. \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba <code>AWS_ACTIONS_ROLE_ARN<\/code>\u0646\u06c1\u06cc\u06ba <code>GITHUB_ACTIONS_ROLE_ARN<\/code>.<\/p>\n<p>\u0628\u06be\u06cc \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 <code>github_owner<\/code> \u0635\u062d\u06cc\u062d \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4 <code>terraform.tfvars<\/code> (\u062f\u06cc\u06a9\u06be\u06cc\u06ba\u06d4 <code>terraform.tfvars.example<\/code>) \u0686\u0644\u0627\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 <code>terraform apply<\/code>. \u06cc\u06c1 OIDC \u0679\u0631\u0633\u0679 \u067e\u0627\u0644\u06cc\u0633\u06cc \u06a9\u0648 \u0645\u0646\u0633\u0644\u06a9 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062a\u0627\u06a9\u06c1 AWS \u0645\u062e\u0635\u0648\u0635 GitHub \u0627\u06a9\u0627\u0624\u0646\u0679 \u0633\u06d2 \u0679\u0648\u06a9\u0646 \u0642\u0628\u0648\u0644 \u06a9\u0631\u06d2\u06d4<\/p>\n<p>\u0627\u06cc\u06a9 \u0628\u0627\u0631 <code>CLEARLEDGER_CI_TARGET=aws<\/code> \u0627\u06af\u0631 \u0633\u06cc\u0679 \u06c1\u0648 \u062a\u0648\u060c \u062c\u0628 \u0628\u06be\u06cc \u0622\u067e \u062f\u0628\u0627\u0626\u06cc\u06ba \u06af\u06d2\u06d4 <code>main<\/code> AWS \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u0686\u0644\u0627\u0626\u06cc\u06ba: Gitleaks \u2192 Semgrep \u2192 Checkov \u2192 Build \u2192 Trivy scan \u2192 ECR push \u2192 \u06a9\u0633\u0679\u0645\u0627\u0626\u0632\u06cc\u0634\u0646 \u0627\u067e \u0688\u06cc\u0679\u06d4 \u06c1\u0648\u0645 \u0644\u06cc\u0628 <code>ci.yaml<\/code> \u0686\u06be\u0648\u0691\u06cc\u06ba\u06d4<\/p>\n<p><strong>\u0627\u06af\u0631 CI ECR \u067e\u0634 \u0645\u0631\u062d\u0644\u06d2 \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648 \u062c\u0627\u062a\u0627 \u06c1\u06d2:<\/strong><\/p>\n<p>\u0633\u0628 \u0633\u06d2 \u0639\u0627\u0645 \u0646\u0627\u06a9\u0627\u0645\u06cc \u06c1\u06d2 <code>Not authorized to perform sts:AssumeRoleWithWebIdentity<\/code>. \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 IAM \u0631\u0648\u0644 \u0679\u0631\u0633\u0679 \u067e\u0627\u0644\u06cc\u0633\u06cc \u0645\u06cc\u06ba \u0627\u0628 \u0628\u06be\u06cc \u067e\u0644\u06cc\u0633 \u06c1\u0648\u0644\u0688\u0631 \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2\u06d4 <code>YOUR_GITHUB_USERNAME<\/code> \u067e\u0631 <code>:sub<\/code> \u0635\u0648\u0631\u062a \u062d\u0627\u0644 \u0627\u0633\u06d2 \u062a\u0631\u062a\u06cc\u0628\u0627\u062a \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062d\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 <code>github_owner<\/code> \u06a9\u0648 <code>terraform.tfvars<\/code> \u0627\u0648\u0631 \u0686\u0644 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4 <code>terraform apply<\/code> \u0627\u0633 \u06a9\u06d2 \u0628\u0639\u062f \u06cc\u06c1 \u0635\u0631\u0641 \u0646\u0627\u06a9\u0627\u0645 \u06a9\u0627\u0645\u0648\u06ba \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0686\u0644\u0627\u062a\u0627 \u06c1\u06d2 (\u067e\u0648\u0631\u06cc \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u0646\u06c1\u06cc\u06ba: \u067e\u0686\u06be\u0644\u0627 \u0627\u0633\u06a9\u06cc\u0646 \u0645\u0631\u062d\u0644\u06c1 \u06af\u0632\u0631 \u0686\u06a9\u0627 \u06c1\u06d2)\u06d4<\/p>\n<pre><code class=\"language-text\">GitHub \u2192 Actions \u2192 failed run \u2192 Re-run failed jobs\n<\/code><\/pre>\n<p>\u0627\u06af\u0631 \u0622\u067e \u062f\u06cc\u06a9\u06be\u062a\u06d2 \u06c1\u06cc\u06ba <code>404<\/code> \u062c\u0628 \u0686\u0644 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4 <code>gh secret set<\/code>, <code>production<\/code> \u0645\u0627\u062d\u0648\u0644 \u0627\u0628\u06be\u06cc \u0645\u0648\u062c\u0648\u062f \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u067e\u06be\u0627\u0646\u0633\u06cc <code>gh api --method PUT<\/code> \u0633\u0628 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0645\u0646\u062f\u0631\u062c\u06c1 \u0628\u0627\u0644\u0627 \u06a9\u0645\u0627\u0646\u0688.<\/p>\n<p><strong>OIDC \u0645\u06cc\u06ba \u062a\u0631\u0645\u06cc\u0645 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0633\u06d2 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4<\/strong> \u06cc\u06c1 \u0635\u0631\u0641 \u0646\u0627\u06a9\u0627\u0645 \u06a9\u0627\u0645\u0648\u06ba \u067e\u0631 \u0644\u0627\u06af\u0648 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u060c \u067e\u0648\u0631\u06cc \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u067e\u0631 \u0646\u06c1\u06cc\u06ba\u06d4 \u067e\u0686\u06be\u0644\u06d2 \u06af\u06cc\u0679\u0633 (Gitleaks, Build, Scan) \u067e\u06c1\u0644\u06d2 \u06c1\u06cc \u067e\u0627\u0633 \u06c1\u0648 \u0686\u06a9\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0646 \u06a9\u06d2 \u0646\u0645\u0648\u0646\u06d2 \u0627\u0628\u06be\u06cc \u0628\u06be\u06cc \u0648\u0631\u06a9 \u0641\u0644\u0648 \u067e\u0631 \u0639\u0645\u0644\u062f\u0631\u0622\u0645\u062f \u0645\u06cc\u06ba \u06c1\u06cc\u06ba\u06d4 \u06c1\u0631 \u0686\u06cc\u0632 \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u06a9\u0631\u06cc\u06ba \u0635\u0631\u0641 \u0627\u0633 \u0635\u0648\u0631\u062a \u0645\u06cc\u06ba \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba \u062c\u0628 \u0622\u067e \u0646\u06d2 \u0627\u067e\u0646\u0627 \u0627\u06cc\u067e \u06a9\u0648\u0688 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631 \u062f\u06cc\u0627 \u06c1\u0648 \u06cc\u0627 \u0634\u0631\u0648\u0639 \u0633\u06d2 \u06a9\u0644\u06cc\u0646 \u0686\u06cc\u06a9 \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u062a\u06d2 \u06c1\u0648\u06d4<\/p>\n<h3 id=\"heading-production-hardening-checklist\">\u067e\u06cc\u062f\u0627\u0648\u0627\u0631 \u0628\u0691\u06be\u0627\u0646\u06d2 \u06a9\u06cc \u0686\u06cc\u06a9 \u0644\u0633\u0679<\/h3>\n<p>\u0644\u06cc\u0628 \u06a9\u0627 \u0641\u0646 \u062a\u0639\u0645\u06cc\u0631 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u0633\u0679\u0627\u0626\u0644 \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u0627\u06cc\u06a9 \u062d\u0642\u06cc\u0642\u06cc \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u0633\u06cc\u0679 \u0627\u067e \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0636\u0627\u0641\u06cc \u06af\u0627\u0631\u0688\u0631\u06cc\u0644\u0632 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0628\u062a\u0627\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06a9\u06c1 \u06cc\u06c1 \u067e\u06cc\u062f\u0627\u0648\u0627\u0631 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062a\u06cc\u0627\u0631 \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-1-protect-the-main-branches\">1. \u0627\u067e\u0646\u06d2 \u0627\u06c1\u0645 \u0646\u06a9\u0627\u062a \u06a9\u06cc \u062d\u0641\u0627\u0638\u062a \u06a9\u0631\u06cc\u06ba\u06d4<\/h4>\n<p>GitHub \u06a9\u06d2 \u062f\u0648\u0646\u0648\u06ba \u0630\u062e\u06cc\u0631\u0648\u06ba \u06a9\u0648 \u0645\u062d\u0641\u0648\u0638 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-text\">github.com\/YOUR_GITHUB_USERNAME\/clearledger\ngithub.com\/YOUR_GITHUB_USERNAME\/clearledger-infra\n<\/code><\/pre>\n<p>\u06c1\u0631 \u0630\u062e\u06cc\u0631\u06d2 \u067e\u0631 \u062c\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-text\">Settings\n\u2192 Rules\n\u2192 Rulesets\n\u2192 New ruleset\n\u2192 Branch targeting: main\n<\/code><\/pre>\n<p>\u0641\u0639\u0627\u0644 \u06a9\u0631\u06cc\u06ba:<\/p>\n<pre><code class=\"language-text\">Require a pull request before merging\nRequire approvals\nRequire status checks to pass\nRequire branches to be up to date before merging\nBlock force pushes\nBlock branch deletion\n<\/code><\/pre>\n<p>\u06cc\u06c1 \u06a9\u06cc\u0648\u06ba \u0636\u0631\u0648\u0631\u06cc \u06c1\u06d2: \u06a9\u0633\u06cc \u06a9\u0648 \u0628\u06be\u06cc \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u0645\u06cc\u06ba \u06a9\u0648\u0688 \u0631\u06cc\u067e\u0648\u0632\u0679\u0631\u06cc \u06cc\u0627 GitOps \u0631\u06cc\u067e\u0648\u0632\u0679\u0631\u06cc \u06a9\u06cc \u0637\u0631\u0641 \u062f\u06be\u06a9\u06cc\u0644\u0646\u0627 \u0646\u06c1\u06cc\u06ba \u0686\u0627\u06c1\u0626\u06d2\u06d4 \u0628\u0631\u0627 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u062f\u06be\u06a9\u0627 <code>clearledger-infra<\/code> \u06cc\u06c1 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u062a\u0642\u0633\u06cc\u0645 \u06a9\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-2-use-github-environments-with-approvals\">2. \u0627\u062c\u0627\u0632\u062a \u06a9\u06d2 \u0633\u0627\u062a\u06be GitHub \u0645\u0627\u062d\u0648\u0644 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/h4>\n<p>\u0627\u06cc\u06a9 \u0645\u062d\u0641\u0648\u0638 \u0645\u0627\u062d\u0648\u0644 \u0628\u0646\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-text\">clearledger repo\n\u2192 Settings\n\u2192 Environments\n\u2192 New environment\n\u2192 Name: production\n\u2192 Required reviewers: add yourself or the team\n\u2192 Deployment branches: main only\n<\/code><\/pre>\n<p>AWS \u0648\u0631\u06a9 \u0641\u0644\u0648 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2:<\/p>\n<pre><code class=\"language-yaml\">environment: production\n<\/code><\/pre>\n<p>\u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 GitHub \u0622\u067e \u06a9\u06cc AWS \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u06a9\u0648 \u0627\u0633 \u0648\u0642\u062a \u062a\u06a9 \u0631\u0648\u06a9 \u062f\u06d2 \u06af\u0627 \u062c\u0628 \u062a\u06a9 \u06a9\u06c1 \u06a9\u0648\u0626\u06cc \u0645\u0646\u0638\u0648\u0631 \u0634\u062f\u06c1 \u062c\u0627\u0626\u0632\u06c1 \u0644\u06cc\u0646\u06d2 \u0648\u0627\u0644\u0627 \u0627\u0633 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u0646\u06c1\u06cc\u06ba \u062f\u06cc\u062a\u0627\u06d4 \u06cc\u06c1 \"\u06c1\u0631 \u062f\u06be\u06a9\u0627 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u0645\u06cc\u06ba \u062a\u0639\u06cc\u0646\u0627\u062a \u06c1\u0648 \u062c\u0627\u062a\u0627 \u06c1\u06d2\" \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0627\u06cc\u06a9 \u062d\u0642\u06cc\u0642\u06cc \u067e\u0631\u0648\u0645\u0648\u0634\u0646 \u06af\u06cc\u0679 \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-3-prefer-fine-grained-tokens-or-a-github-app\">3. \u062f\u0627\u0646\u06d2 \u062f\u0627\u0631 \u0679\u0648\u06a9\u0646\u0632 \u06cc\u0627 GitHub \u0627\u06cc\u067e\u0633 \u06a9\u0648 \u062a\u0631\u062c\u06cc\u062d \u062f\u06cc\u06ba\u06d4<\/h4>\n<p>\u0628\u0646\u06cc\u0627\u062f\u06cc \u0644\u06cc\u0628\u0627\u0631\u0679\u0631\u06cc\u0648\u06ba \u06a9\u06d2 \u0645\u0639\u0627\u0645\u0644\u06d2 \u0645\u06cc\u06ba\u060c <code>INFRA_REPO_TOKEN<\/code> \u0627\u06cc\u06a9 \u06a9\u0644\u0627\u0633\u06a9 PAT \u06c1\u0648 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u067e\u06cc\u062f\u0627\u0648\u0627\u0631 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0633\u062e\u062a \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u0628\u06c1\u062a\u0631 \u0627\u062e\u062a\u06cc\u0627\u0631\u0627\u062a:<\/p>\n<pre><code class=\"language-text\">Fine-grained personal access token\n\u2192 Repository access: only YOUR_GITHUB_USERNAME\/clearledger-infra\n\u2192 Permissions:\n   Contents: Read and write\n   Metadata: Read\n<\/code><\/pre>\n<p>\u0627\u067e\u0646\u06cc \u0679\u06cc\u0645 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0628\u06c1\u062a\u0631\u06cc\u0646 \u0622\u067e\u0634\u0646: GitHub \u0627\u06cc\u067e\u0633 \u06a9\u0648 \u0635\u0631\u0641 \u0627\u0646 \u067e\u0631 \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u06cc\u06ba: <code>clearledger-infra<\/code>\u0622\u067e \u06a9\u0648 \u0645\u0648\u0627\u062f \u0644\u06a9\u06be\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0646\u062c\u06cc \u0679\u0648\u06a9\u0646 \u06a9\u06d2 \u0645\u0642\u0627\u0628\u0644\u06d2 \u0628\u06c1\u062a\u0631 \u0622\u0688\u0679 \u0644\u0627\u06af \u0627\u0648\u0631 \u0622\u0633\u0627\u0646 \u06af\u0631\u062f\u0634 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0633\u0679\u0648\u0631 <code>INFRA_REPO_TOKEN<\/code> \u0628\u0627\u0642\u0627\u0639\u062f\u06c1 \u0630\u062e\u06cc\u0631\u06c1 \u0631\u0627\u0632 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u067e\u06cc\u062f\u0627\u0648\u0627\u0631\u06cc \u0645\u0627\u062d\u0648\u0644 \u06a9\u06d2 \u0631\u0627\u0632 \u06a9\u06d2 \u0633\u0627\u062a\u06be:<\/p>\n<pre><code class=\"language-text\">clearledger\n\u2192 Settings\n\u2192 Environments\n\u2192 production\n\u2192 Environment secrets\n\u2192 INFRA_REPO_TOKEN\n<\/code><\/pre>\n<h4 id=\"heading-4-lock-aws-oidc-to-the-production-environment\">4. \u067e\u06cc\u062f\u0627\u0648\u0627\u0631 \u0645\u06cc\u06ba AWS OIDC \u067e\u0646 \u06a9\u0631\u06cc\u06ba\u06d4<\/h4>\n<p>\u06cc\u06c1 \u0634\u06cc\u0644 \u06a9\u0645\u0627\u0646\u0688 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0679\u0631\u0633\u0679 \u06a9\u0627 \u0627\u0635\u0648\u0644 \u06c1\u06d2 \u06a9\u06c1 \u062c\u0628 \u0679\u06cc\u0631\u0627\u0641\u0627\u0631\u0645 \u0686\u0644\u062a\u0627 \u06c1\u06d2 \u062a\u0648 AWS \u06a9\u0648 \u0644\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u06d4 <code>terraform apply<\/code>.<\/p>\n<p>\u0645\u06cc\u06ba <code>iam.tf<\/code>IAM \u06a9\u0627 \u06a9\u0631\u062f\u0627\u0631 <code>clearledger-github-actions-ecr<\/code> \u0635\u0631\u0641 \u0645\u0645\u0627\u062b\u0644 \u0639\u0646\u0648\u0627\u0646 \u06a9\u06d2 \u062f\u0639\u0648\u0648\u06ba \u06a9\u06d2 \u0633\u0627\u062a\u06be GitHub \u0679\u0648\u06a9\u0646 \u0642\u0628\u0648\u0644 \u06a9\u06cc\u06d2 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-text\">repo:YOUR_GITHUB_USERNAME\/clearledger:environment:production\n<\/code><\/pre>\n<p>\u0635\u0631\u0641 GitHub \u0627\u06cc\u06a9\u0634\u0646 \u0679\u0627\u0633\u06a9 \u0686\u0644 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>production<\/code> \u0622\u067e \u06a9\u0627 \u0645\u0627\u062d\u0648\u0644 <code>clearledger<\/code> \u0627\u06cc\u06a9 \u0631\u06cc\u067e\u0648 ECR \u067e\u0634 \u0631\u0648\u0644 \u06a9\u0648 \u0644\u06d2 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u0645\u062a\u0639\u0644\u0642\u06c1 \u0645\u0627\u062d\u0648\u0644 \u06a9\u06d2 \u0628\u063a\u06cc\u0631 \u06a9\u0648\u0626\u06cc \u0628\u06be\u06cc \u0628\u0631\u0627\u0646\u0686\u060c \u0641\u0648\u0631\u06a9\u060c \u06cc\u0627 \u0648\u0631\u06a9 \u0641\u0644\u0648 AWS \u0627\u0633\u0646\u0627\u062f \u062d\u0627\u0635\u0644 \u0646\u06c1\u06cc\u06ba \u06a9\u0631 \u0633\u06a9\u062a\u0627\u06d4<\/p>\n<p><strong>\u0622\u067e \u06a9\u06cc\u0627 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba:<\/strong><\/p>\n<ol>\n<li>\n<p>\u0633\u06cc\u0679 <code>github_owner<\/code> \u06a9\u0648 <code>terraform.tfvars<\/code>\u067e\u06be\u0631 <code>terraform apply<\/code> (\u0645\u0631\u062d\u0644\u06c1 2 \u0627\u0632 8)\u06d4<\/p>\n<\/li>\n<li>\n<p>GitHub \u067e\u0631: <strong>\u062a\u0631\u062a\u06cc\u0628\u0627\u062a \u2192 \u0645\u0627\u062d\u0648\u0644\u06cc\u0627\u062a \u2192 \u067e\u06cc\u062f\u0627\u0648\u0627\u0631\u06d4<\/strong> \u0627\u06af\u0631 \u0648\u06c1 \u063a\u0627\u0626\u0628 \u06c1\u0648 \u062a\u0648 \u0627\u0646\u06c1\u06cc\u06ba \u0628\u0646\u0627\u0626\u06cc\u06ba \u0627\u0648\u0631 \u0627\u06af\u0631 \u0686\u0627\u06c1\u06cc\u06ba \u062a\u0648 \u062a\u062d\u0641\u0638 \u06a9\u06d2 \u0627\u0635\u0648\u0644 \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0645\u0627\u062d\u0648\u0644\u06cc\u0627\u062a\u06cc \u067e\u0627\u0633 \u0648\u0631\u0688 \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 <code>AWS_ACTIONS_ROLE_ARN<\/code> = <code>terraform output -raw github_actions_ecr_role_arn<\/code>.<\/p>\n<\/li>\n<li>\n<p><code>ci-aws.yaml<\/code> \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0633\u06cc\u0679 <code>environment: production<\/code> ECR \u0622\u067e\u0631\u06cc\u0634\u0646\u0632 \u0645\u06cc\u06ba\u060c \u06cc\u06c1 \u0648\u06c1\u06cc \u0686\u06cc\u0632 \u06c1\u06d2 \u062c\u0648 GitHub \u0645\u0646\u0679 \u06a9\u0648 \u0645\u0645\u0627\u062b\u0644 \u0679\u0648\u06a9\u0646 \u0628\u0646\u0627\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<\/ol>\n<p><strong>\u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u0622\u06cc\u0627 \u06a9\u0648\u0626\u06cc \u0627\u0635\u0648\u0644 \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2 (\u0627\u062e\u062a\u06cc\u0627\u0631\u06cc)\u06d4<\/strong><\/p>\n<pre><code class=\"language-bash\">aws iam get-role --role-name clearledger-github-actions-ecr \n  --query 'Role.AssumeRolePolicyDocument.Statement[0].Condition.StringEquals.\"token.actions.githubusercontent.com:sub\"' \n  --output text\n<\/code><\/pre>\n<p>\u062a\u0648\u0642\u0639: <code>repo:your-username\/clearledger:environment:production<\/code><\/p>\n<p>\u062f\u0633\u062a\u06cc 8 \u0642\u062f\u0645\u06cc \u0631\u0627\u0633\u062a\u06c1 \u0622\u067e \u06a9\u0648 GitHub CI \u06a9\u0648 \u0645\u06a9\u0645\u0644 \u0637\u0648\u0631 \u067e\u0631 \u0686\u06be\u0648\u0691\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u062a\u0627\u0644\u0627 \u0635\u0631\u0641 \u0627\u0633 \u0635\u0648\u0631\u062a \u0645\u06cc\u06ba \u0627\u06c1\u0645 \u06c1\u06d2 \u062c\u0628 \u0622\u067e CI, AWS (ECR + OIDC) \u06a9\u0648 \u0641\u0639\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-5-staging-before-production-promote-dont-rebuild\">5. \u067e\u0631\u06cc \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u06a9\u06cc \u062a\u06cc\u0627\u0631\u06cc (\u06a9\u0648\u0626\u06cc \u067e\u0631\u0648\u0645\u0648\u0634\u0646 \u0646\u06c1\u06cc\u06ba\u060c \u062f\u0648\u0628\u0627\u0631\u06c1 \u062a\u0639\u0645\u06cc\u0631 \u0646\u06c1\u06cc\u06ba)<\/h4>\n<p><strong>\u0644\u06cc\u0628 \u06a9\u0627 \u0628\u06c1\u0627\u0624:<\/strong> \u0627\u0646\u062f\u0631 \u062f\u06be\u06a9\u06cc\u0644\u0646\u0627 <code>main<\/code> \u2192 <code>ci-aws.yaml<\/code> \u0628\u0646\u0627\u0626\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0633\u06a9\u06cc\u0646 \u06a9\u0631\u06cc\u06ba \u2192 CI \u0627\u067e \u0688\u06cc\u0679 <code>stages\/stage-8-aws-migration\/manifests\/kustomization.yaml<\/code> \u2192 \u0622\u0631\u06af\u0648 \u0633\u06cc \u0688\u06cc \u06a9\u0648 \u0646\u0626\u06d2 \u0627\u0645\u06cc\u062c \u0679\u06cc\u06af\u0632 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0633\u0646\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 <code>clearledger-aws<\/code>.<\/p>\n<p>\u06c1\u0648\u0645 \u0644\u06cc\u0628 \u06a9\u06d2 \u0645\u0631\u0627\u062d\u0644 1-7 \u0627\u0628 \u0628\u06be\u06cc \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u06d2 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>clearledger-infra<\/code> \u0627\u0648\u0631 \u0688\u0648\u06a9\u0631 \u062d\u0628\u06d4 \u0645\u0631\u062d\u0644\u06c1 8 AWS \u0631\u06cc\u067e\u0648\u0632\u0679\u0631\u06cc \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u06a9\u0633\u0679\u0645\u0627\u0626\u0632 \u067e\u0627\u062a\u06be \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u062d\u0642\u06cc\u0642\u06cc \u067e\u06cc\u062f\u0627\u0648\u0627\u0631 \u0645\u06cc\u06ba\u060c \u06c1\u0645 \u062f\u0631\u0645\u06cc\u0627\u0646 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0645\u0631\u062d\u0644\u06c1 \u0648\u0627\u0631 \u0634\u0627\u0645\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 \u0622\u067e \u062a\u0635\u0648\u06cc\u0631 \u06a9\u0648 \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u0628\u0646\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u0633\u06cc \u0679\u06cc\u06af \u06cc\u0627 \u0688\u0627\u0626\u062c\u0633\u0679 \u06a9\u0648 \u0627\u0633\u0679\u06cc\u062c\u0646\u06af \u067e\u0631 \u0644\u06af\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u0633\u0645\u0648\u06a9 \u0679\u06cc\u0633\u0679 \u0686\u0644\u0627\u062a\u06d2 \u06c1\u06cc\u06ba \u06cc\u0627 \u062f\u0633\u062a\u06cc \u0645\u0646\u0638\u0648\u0631\u06cc \u062d\u0627\u0635\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u0648\u0631 \u067e\u06be\u0631 \u0627\u0633\u06d2 \u062f\u0648\u0628\u0627\u0631\u06c1 \u062a\u0639\u0645\u06cc\u0631 \u06a9\u06cc\u06d2 \u0628\u063a\u06cc\u0631 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u0645\u06cc\u06ba \u0641\u0631\u0648\u063a \u062f\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u06a9\u06cc\u0648\u06ba \u0627\u0633 \u06a9\u06cc \u0648\u062c\u06c1 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062f\u0648\u0628\u0627\u0631\u06c1 \u062a\u0639\u0645\u06cc\u0631 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0646\u062a\u06cc\u062c\u06d2 \u0645\u06cc\u06ba \u0627\u0633\u0679\u06cc\u062c\u0646\u06af \u06af\u0632\u0631\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u06a9\u0648\u0688 \u0633\u06d2 \u0645\u062e\u062a\u0644\u0641 \u06c1\u0648 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06cc\u06a9 \u0645\u062d\u0641\u0648\u0638 \u0646\u0645\u0648\u0646\u06c1 \u0627\u06cc\u06a9 \u0646\u0645\u0648\u0646\u06c1 \u06c1\u06d2 \u062c\u0648 \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u0622\u0632\u0645\u0627\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u062f\u0648 \u0628\u0627\u0631 \u0641\u0631\u0648\u063a \u062f\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-text\">Build once (one image SHA)\n  \u2192 deploy to staging\n  \u2192 test \/ approve\n  \u2192 deploy the same SHA to production\n<\/code><\/pre>\n<h4 id=\"heading-6-use-private-networking-where-possible\">6. \u062c\u0628 \u0628\u06be\u06cc \u0645\u0645\u06a9\u0646 \u06c1\u0648 \u0630\u0627\u062a\u06cc \u0646\u06cc\u0679 \u0648\u0631\u06a9\u0646\u06af \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/h4>\n<p>\u067e\u06cc\u062f\u0627\u0648\u0627\u0631 AWS \u06a9\u06d2 \u0644\u06cc\u06d2:<\/p>\n<pre><code class=\"language-text\">- EKS nodes in private subnets\n- RDS in private subnets\n- Private EKS API endpoint, or restricted public endpoint\n- Security groups scoped to required ports only\n- ALB public only if the app is public\n- No SSH-based deployment path\n<\/code><\/pre>\n<p>\u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06a9\u0648 AWS APIs \u06a9\u06d2 \u0633\u0627\u062a\u06be IAM\/OIDC \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0631\u0627\u0628\u0637\u06c1 \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2 \u0627\u0648\u0631 GitOps \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4 \u0622\u067e \u06a9\u0648 \u0627\u067e\u0646\u06d2 EC2 \u0645\u062b\u0627\u0644 \u0645\u06cc\u06ba SSH \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2\u06d4<\/p>\n<h4 id=\"heading-7-store-terraform-state-remotely\">7. Terraform \u0631\u06cc\u0627\u0633\u062a \u06a9\u0648 \u062f\u0648\u0631 \u0633\u06d2 \u0645\u062d\u0641\u0648\u0638 \u06a9\u0631\u06cc\u06ba\u06d4<\/h4>\n<p>\u0645\u0642\u0627\u0645\u06cc \u0679\u06cc\u0631\u0627\u0641\u0627\u0631\u0645 \u0631\u06cc\u0627\u0633\u062a \u0644\u06cc\u0628\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u0648\u0632\u0648\u06ba \u06c1\u06d2\u06d4 \u067e\u06cc\u062f\u0627\u0648\u0627\u0631 \u0645\u06cc\u06ba\u060c \u0622\u067e \u06a9\u0648 \u0627\u0646\u06a9\u0631\u067e\u0679\u0688 \u0631\u06cc\u0645\u0648\u0679 \u0627\u0633\u0679\u06cc\u0679 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4<\/p>\n<pre><code class=\"language-text\">- S3 bucket for terraform.tfstate\n- DynamoDB table for state locking\n- SSE encryption enabled\n- Bucket versioning enabled\n- Public access blocked\n<\/code><\/pre>\n<p>\u0679\u06cc\u0631\u0627\u0641\u0627\u0631\u0645 \u0628\u06cc\u06a9 \u0627\u06cc\u0646\u0688 \u0628\u0644\u0627\u06a9\u0633 \u067e\u06c1\u0644\u06d2 \u06c1\u06cc \u0634\u0627\u0645\u0644 \u06c1\u06cc\u06ba\u06d4 <code>stages\/stage-8-aws-migration\/terraform\/main.tf<\/code> \u0627\u06cc\u06a9 \u062a\u0634\u0631\u06cc\u062d \u0634\u062f\u06c1 \u0679\u06cc\u0645\u067e\u0644\u06cc\u0679 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631\u06d4<br \/>S3 \u0628\u0627\u0644\u0679\u06cc \u0627\u0648\u0631 DynamoDB \u0644\u0627\u06a9 \u0679\u06cc\u0628\u0644 \u0628\u0646\u0627\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f\u060c \u0627\u0646 \u067e\u0631 \u062a\u0628\u0635\u0631\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-production-ready-summary\">\u067e\u06cc\u062f\u0627\u0648\u0627\u0631 \u06a9\u06cc \u062a\u06cc\u0627\u0631\u06cc \u06a9\u0627 \u062e\u0644\u0627\u0635\u06c1:<\/h4>\n<pre><code class=\"language-text\">- CI builds and proves the artifact.\n- GitHub Environments approve production.\n- OIDC gives short-lived AWS credentials.\n- ECR stores immutable images.\n- kustomization.yaml (Stage 8 path) records desired state.\n- ArgoCD clearledger-aws deploys from Git.\n- No SSH. No static AWS keys. No direct kubectl from CI.\n<\/code><\/pre>\n<p>\u06cc\u0648 \u0622\u0631 \u0627\u06cc\u0644 \u06a9\u06be\u0648\u0644\u06cc\u06ba\u06d4 ClearLedger AWS \u067e\u0631 \u0686\u0644\u062a\u0627 \u06c1\u06d2\u06d4 \u0648\u06c1\u06cc \u0641\u0646 \u062a\u0639\u0645\u06cc\u0631\u060c \u0648\u06c1\u06cc \u062d\u0641\u0627\u0638\u062a\u06cc \u062a\u06c1\u06c1\u060c \u0646\u06cc\u0627 \u0627\u0646\u0641\u0631\u0627\u0633\u0679\u0631\u06a9\u0686\u0631\u06d4<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/07\/1785194533_483_Homelab-\u0633\u06d2-AWS-\u062a\u06a9-\u067e\u0631\u0648\u0688\u06a9\u0634\u0646-\u06a9\u06d2-\u0644\u06cc\u06d2-\u062a\u06cc\u0627\u0631-DevSecOps-\u067e\u0644\u06cc\u0679.png\" alt=\"ALB URL \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 EKS \u067e\u0631 \u0686\u0644\u0646\u06d2 \u0648\u0627\u0644\u06d2 Clearledger UI \u06a9\u0627 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679\" style=\"display:block;margin:0 auto\" width=\"1473\" height=\"1269\" loading=\"lazy\" title=\"\"><\/p>\n<p><strong>\u0645\u06a9\u0645\u0644 \u06c1\u0648\u0646\u06d2 \u067e\u0631 \u0627\u0633\u06d2 \u0636\u0627\u0626\u0639 \u06a9\u0631 \u062f\u06cc\u06ba\u06d4<\/strong> \u0627\u0633 \u0633\u06d2 \u062a\u0645\u0627\u0645 \u0686\u0627\u0631\u062c\u0632 \u0631\u06a9 \u062c\u0627\u0626\u06cc\u06ba \u06af\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\">make aws-down\n<\/code><\/pre>\n<p>\u062f\u06cc\u06a9\u06be\u06cc\u06ba <code>stages\/stage-8-aws-migration\/README.md<\/code> \u0645\u06a9\u0645\u0644 \u0679\u0648\u0631 \u0627\u0648\u0631 \u0644\u0627\u06af\u062a \u06a9\u06d2 \u062d\u0648\u0627\u0644\u06d2 \u062f\u06cc\u06a9\u06be\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-what-you-learned-in-stage-8\">\u0622\u067e \u0646\u06d2 \u0645\u0631\u062d\u0644\u06c1 8 \u0645\u06cc\u06ba \u06a9\u06cc\u0627 \u0633\u06cc\u06a9\u06be\u0627\u06d4<\/h3>\n<ul>\n<li>\n<p>\u06a9\u0646\u0679\u06cc\u0646\u0631\u0627\u0626\u0632\u0688 \u0627\u06cc\u067e\u0644\u06cc \u06a9\u06cc\u0634\u0646\u0632 \u067e\u0648\u0631\u0679\u06cc\u0628\u0644 \u06c1\u06cc\u06ba\u06d4 \u0627\u06cc\u06a9 \u06c1\u06cc \u06a9\u0648\u0688 \u0644\u06cc\u067e \u0679\u0627\u067e \u0627\u0648\u0631 AWS \u062f\u0648\u0646\u0648\u06ba \u067e\u0631 \u0686\u0644\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>Terraform \u06a9\u06cc\u0627 \u06a9\u0631\u062a\u0627 \u06c1\u06d2: \u0627\u067e\u0646\u06d2 \u0628\u0646\u06cc\u0627\u062f\u06cc \u0688\u06be\u0627\u0646\u0686\u06d2 \u06a9\u0648 \u06a9\u0648\u0688 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0642\u0631\u0627\u0631 \u062f\u06cc\u06ba \u062a\u0627\u06a9\u06c1 \u0622\u067e \u0627\u067e\u0646\u06d2 \u0645\u0627\u062d\u0648\u0644 \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u062a\u06cc\u0627\u0631 \u06a9\u0631 \u0633\u06a9\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u06a9\u0644\u0627\u0624\u0688 \u0645\u0627\u0626\u06cc\u06af\u0631\u06cc\u0634\u0646 \u0645\u06cc\u06ba \u06a9\u06cc\u0627 \u062a\u0628\u062f\u06cc\u0644\u06cc\u0627\u06ba \u0622\u062a\u06cc \u06c1\u06cc\u06ba (\u0645\u0646\u0638\u0645 \u062e\u062f\u0645\u0627\u062a\u060c \u0622\u0626\u06cc \u0627\u06d2 \u0627\u06cc\u0645\u060c \u0646\u06cc\u0679 \u0648\u0631\u06a9\u0646\u06af) \u0627\u0648\u0631 \u06a9\u06cc\u0627 \u0646\u06c1\u06cc\u06ba \u0628\u062f\u0644\u062a\u0627 (\u0627\u06cc\u067e\u0644\u06cc \u06a9\u06cc\u0634\u0646 \u06a9\u0648\u0688\u060c \u0633\u06cc \u0622\u0626\u06cc \u0644\u0627\u062c\u06a9\u060c \u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u067e\u0627\u0644\u06cc\u0633\u06cc\u0627\u06ba)<\/p>\n<\/li>\n<li>\n<p>\u062a\u06cc\u0646 AWS \u062e\u0641\u06cc\u06c1 \u062a\u0631\u0633\u06cc\u0644 \u06a9\u06d2 \u0631\u0627\u0633\u062a\u0648\u06ba \u06a9\u0627 \u0645\u0648\u0627\u0632\u0646\u06c1: ESO (\u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0637\u06d2 \u0634\u062f\u06c1)\u060c CSI \u0641\u0627\u0626\u0644 \u0645\u0627\u0624\u0646\u0679 (\u00a78.5)\u060c \u0627\u0648\u0631 HomeLab's Vault<\/p>\n<\/li>\n<li>\n<p>AWS \u0645\u062e\u0635\u0648\u0635 \u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u0633\u0631\u0648\u0633\u0632: \u06af\u0627\u0631\u0688 \u0688\u06cc\u0648\u0679\u06cc (\u062e\u0637\u0631\u06d2 \u06a9\u0627 \u067e\u062a\u06c1 \u0644\u06af\u0627\u0646\u06d2)\u060c \u06a9\u0644\u0627\u0624\u0688 \u0679\u0631\u06cc\u0644 (API \u0622\u0688\u06cc\u0679\u0646\u06af)\u060c GitHub \u0627\u06cc\u06a9\u0634\u0646\u0632 OIDC (\u0637\u0648\u06cc\u0644 \u0645\u062f\u062a\u06cc \u06a9\u06cc\u0644\u06cc\u0633 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 AWS \u062a\u0635\u062f\u06cc\u0642)\u060c \u0627\u0648\u0631 IRSA (\u067e\u0648\u0688 \u0644\u06cc\u0648\u0644 IAM \u0628\u063a\u06cc\u0631 \u0637\u0648\u06cc\u0644 \u0645\u062f\u062a\u06cc \u0627\u0633\u0646\u0627\u062f \u06a9\u06d2)<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u0627\u0628 \u0622\u067e \u0627\u067e\u0646\u06d2 \u062a\u062c\u0631\u0628\u06d2 \u06a9\u06cc \u0641\u06c1\u0631\u0633\u062a \u0645\u06cc\u06ba \u06a9\u06cc\u0627 \u0688\u0627\u0644 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\/\u0627\u06cc\u06a9 \u0627\u0646\u0679\u0631\u0648\u06cc\u0648 \u0645\u06cc\u06ba \u06a9\u06c1\u06c1 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba:<\/strong><\/p>\n<blockquote>\n<p>\u06c1\u0645 \u0646\u06d2 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0644\u06a9\u06be\u06d2 \u0628\u063a\u06cc\u0631 \u0627\u0633\u06cc \u0641\u0646 \u062a\u0639\u0645\u06cc\u0631 \u06a9\u0648 AWS \u0645\u06cc\u06ba \u0645\u0646\u062a\u0642\u0644 \u06a9\u06cc\u0627 \u062c\u0648 Terraform (\u0628\u0634\u0645\u0648\u0644 EKS\u060c ECR\u060c RDS\u060c ALB\u060c \u0627\u06cc\u06a9\u0633\u0679\u0631\u0646\u0644 \u0633\u06cc\u06a9\u0631\u0679 \u0622\u067e\u0631\u06cc\u0679\u0631\u060c \u0627\u0648\u0631 IRSA \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0631\u0627\u0632) \u0645\u06cc\u06ba \u0641\u0631\u0627\u06c1\u0645 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/blockquote>\n<p><strong>\u062c\u0628 \u0622\u067e AWS \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631 \u0644\u06cc\u06ba \u062a\u0648 \u0627\u0633\u06d2 \u062e\u062a\u0645 \u06a9\u0631 \u062f\u06cc\u06ba \u0627\u0648\u0631 \u0628\u0644\u0646\u06af \u0628\u0646\u062f \u06a9\u0631 \u062f\u06cc\u06ba\u06d4<\/strong><\/p>\n<pre><code class=\"language-bash\">make aws-down\n<\/code><\/pre>\n<p>Homelab VM \u0627\u0644\u06af \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0622\u067e \u0648\u0627\u067e\u0633 \u0622\u0646\u06d2 \u06a9\u0627 \u0627\u0631\u0627\u062f\u06c1 \u0631\u06a9\u06be\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0622\u067e \u06a9\u06d2 \u067e\u0627\u0633 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u06c1\u06cc \u0645\u0631\u062d\u0644\u06c1 7 \u06a9\u0627 \u0633\u0646\u06cc\u067e \u0634\u0627\u0679 \u06c1\u0648\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2 (<code>make snapshots<\/code> \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2)\u06d4 \u0633\u06cc\u0648\u0646\u06af \u067e\u0631\u0648\u06af\u0631\u06cc\u0633 \u062f\u06cc\u06a9\u06be\u06cc\u06ba\u06d4<\/p>\n<p><strong>\u067e\u0648\u0688 \u0632\u06cc\u0631 \u0627\u0644\u062a\u0648\u0627\u0621 \u062d\u0627\u0644\u062a \u0645\u06cc\u06ba \u067e\u06be\u0646\u0633 \u06af\u06cc\u0627:<\/strong><\/p>\n<pre><code class=\"language-bash\">kubectl describe pod POD_NAME -n clearledger\n# Insufficient memory\/cpu \u2192 reduce resource requests\n# Image pull error \u2192 check Docker Hub repo name and credentials\n<\/code><\/pre>\n<p><strong>Kyverno \u0628\u0644\u0627\u06a9 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc:<\/strong><\/p>\n<pre><code class=\"language-bash\">kubectl get events -n clearledger --sort-by='.lastTimestamp' | tail -10\nkubectl get policyreport -n clearledger -o yaml\n<\/code><\/pre>\n<p><strong>\u0648\u0627\u0644\u0679 \u0627\u06cc\u062c\u0646\u0679 \u0631\u0627\u0632 \u0646\u06c1\u06cc\u06ba \u0644\u06af\u0627\u062a\u0627:<\/strong><\/p>\n<pre><code class=\"language-bash\">kubectl logs POD_NAME -n clearledger -c vault-agent-init\nkubectl exec -n vault vault-0 -- vault read auth\/kubernetes\/role\/auth-service\n<\/code><\/pre>\n<p><strong>Falco \u0627\u0646\u062a\u0628\u0627\u06c1 \u062c\u0627\u0631\u06cc \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u0627:<\/strong><\/p>\n<pre><code class=\"language-bash\">kubectl logs -n falco daemonset\/falco | grep -i error | tail -20\n<\/code><\/pre>\n<p><strong>ArgoCD OutOfSync \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2:<\/strong><\/p>\n<pre><code class=\"language-bash\">argocd app sync clearledger --force\nargocd app get clearledger\nkubectl get events -n clearledger --sort-by='.lastTimestamp'\n<\/code><\/pre>\n<p><strong>Clearledger.local \u062d\u0644 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u0627:<\/strong><\/p>\n<pre><code class=\"language-bash\">multipass info clearledger | grep IPv4\ngrep clearledger \/etc\/hosts\n# If the IP changed, update \/etc\/hosts\n<\/code><\/pre>\n<p><strong>VM \u0688\u0633\u06a9 \u0645\u06a9\u0645\u0644 \u06cc\u0627 \u067e\u0648\u0688 \u06c1\u0679\u0627 \u062f\u06cc\u0627 \u06af\u06cc\u0627 (\u0688\u0633\u06a9 \u067e\u0631\u06cc\u0634\u0631):<\/strong><\/p>\n<pre><code class=\"language-bash\">make doctor     # PASS \/ WARN \/ FAIL + PVC and Prometheus TSDB sizes\nmake reclaim    # safe reclaim \u2014 unused images + journald only (not PVCs)\n<\/code><\/pre>\n<p>\u0627\u06af\u0631 \u06cc\u06c1 \u062f\u0648\u0628\u0627\u0631\u06c1 \u062d\u0627\u0635\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f \u0628\u06be\u06cc \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u0627\u0633\u06d2 \u062e\u062a\u0645 \u06a9\u0631 \u06a9\u06d2 \u062f\u0648\u0628\u0627\u0631\u06c1 \u067e\u06cc\u062f\u0627 \u06a9\u0631\u06cc\u06ba\u06d4 <code>make teardown && make setup<\/code>. \u0645\u06a9\u0645\u0644 \u06c1\u062f\u0627\u06cc\u0627\u062a: Troubleshooting.md: \u0688\u0633\u06a9 \u06a9\u06cc \u062d\u06cc\u062b\u06cc\u062a \u0627\u0648\u0631 VM \u0688\u0633\u06a9 \u0628\u06be\u0631\u06cc \u06c1\u0648\u0626\u06cc \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-compliance-reference\">\u062a\u0639\u0645\u06cc\u0644 \u06a9\u0627 \u062d\u0648\u0627\u0644\u06c1<\/h2>\n<p>\u06c1\u0631 \u06a9\u0646\u0679\u0631\u0648\u0644 \u0627\u06cc\u06a9 \u06cc\u0627 \u0632\u06cc\u0627\u062f\u06c1 \u0641\u0631\u06cc\u0645 \u0648\u0631\u06a9 \u06a9\u06d2 \u0646\u0642\u0634\u06d2 \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0645\u06a9\u0645\u0644 \u0646\u0642\u0634\u06c1 \u0633\u0627\u0632\u06cc: <code>docs\/compliance-mapping.md<\/code>.<\/p>\n<table>\n<thead>\n<tr>\n<th>\u06a9\u0646\u0679\u0631\u0648\u0644<\/th>\n<th>\u0633\u0627\u0645\u0627\u0646<\/th>\n<th>\u0642\u062f\u0645<\/th>\n<th>PCI-DSS<\/th>\n<th>SOC2<\/th>\n<th>CIS K8<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>\u062e\u0641\u06cc\u06c1 \u067e\u062a\u06c1 \u0644\u06af\u0627\u0646\u0627<\/td>\n<td>\u06af\u0679\u0644\u06cc\u06a9\u0633<\/td>\n<td>3<\/td>\n<td>6.2<\/td>\n<td>CC8.1<\/td>\n<td>-<\/td>\n<\/tr>\n<tr>\n<td>SAST<\/td>\n<td>\u0634\u06cc\u0645\u06af\u0631\u06cc\u0628<\/td>\n<td>3<\/td>\n<td>6.3.2<\/td>\n<td>CC7.1<\/td>\n<td>-<\/td>\n<\/tr>\n<tr>\n<td>\u0627\u0646\u062d\u0635\u0627\u0631 \u06a9\u06cc \u062a\u0644\u0627\u0634<\/td>\n<td>\u0679\u0631\u06cc\u0648\u06cc \u0627\u06cc\u0633 \u0633\u06cc \u0627\u06d2<\/td>\n<td>3<\/td>\n<td>6.3.3<\/td>\n<td>CC7.1<\/td>\n<td>-<\/td>\n<\/tr>\n<tr>\n<td>IaC \u0627\u0633\u06a9\u06cc\u0646<\/td>\n<td>\u0686\u06cc\u06a9\u0631<\/td>\n<td>3<\/td>\n<td>6.3.1<\/td>\n<td>CC6.1<\/td>\n<td>-<\/td>\n<\/tr>\n<tr>\n<td>\u062a\u0635\u0648\u06cc\u0631 \u06a9\u06d2 \u062f\u0633\u062a\u062e\u0637<\/td>\n<td>\u0645\u0634\u062a\u0631\u06a9\u06c1 \u0646\u0634\u0627\u0646<\/td>\n<td>3<\/td>\n<td>6.3<\/td>\n<td>CC6.1<\/td>\n<td>-<\/td>\n<\/tr>\n<tr>\n<td>SBOM \u0628\u0646\u0627\u0626\u06cc\u06ba<\/td>\n<td>\u0633\u0648\u0641\u0679<\/td>\n<td>3<\/td>\n<td>6.3.3<\/td>\n<td>CC6.1<\/td>\n<td>-<\/td>\n<\/tr>\n<tr>\n<td>\u063a\u06cc\u0631 \u062c\u0691 \u06a9\u0646\u0679\u06cc\u0646\u0631<\/td>\n<td>\u06a9\u06cc\u0628\u0631\u0646\u0648<\/td>\n<td>4<\/td>\n<td>6.5<\/td>\n<td>CC6.3<\/td>\n<td>5.2.6<\/td>\n<\/tr>\n<tr>\n<td>\u0648\u0633\u0627\u0626\u0644 \u06a9\u06cc \u062d\u062f\u0648\u062f<\/td>\n<td>\u06a9\u06cc\u0628\u0631\u0646\u0648<\/td>\n<td>4<\/td>\n<td>-<\/td>\n<td>A1.1<\/td>\n<td>5.2.4<\/td>\n<\/tr>\n<tr>\n<td>\u0645\u0631\u0627\u0639\u0627\u062a \u06a9\u06cc \u06a9\u0648\u0626\u06cc \u0628\u0644\u0646\u062f\u06cc \u0646\u06c1\u06cc\u06ba\u06d4<\/td>\n<td>\u06a9\u06cc\u0628\u0631\u0646\u0648<\/td>\n<td>4<\/td>\n<td>6.5<\/td>\n<td>CC6.3<\/td>\n<td>5.2.5<\/td>\n<\/tr>\n<tr>\n<td>\u062e\u0641\u06cc\u06c1 \u0627\u0646\u062a\u0638\u0627\u0645<\/td>\n<td>\u0648\u0627\u0644\u0679<\/td>\n<td>5<\/td>\n<td>3.5<\/td>\n<td>CC6.1<\/td>\n<td>-<\/td>\n<\/tr>\n<tr>\n<td>\u0631\u0646 \u0679\u0627\u0626\u0645 \u06a9\u0627 \u067e\u062a\u06c1 \u0644\u06af\u0627\u0646\u0627<\/td>\n<td>\u0641\u0627\u0644\u06a9\u0648<\/td>\n<td>6<\/td>\n<td>10.7<\/td>\n<td>CC7.2<\/td>\n<td>-<\/td>\n<\/tr>\n<tr>\n<td>\u0646\u06cc\u0679 \u0648\u0631\u06a9 \u0633\u06cc\u06af\u0645\u0646\u0679\u06cc\u0634\u0646<\/td>\n<td>\u0646\u06cc\u0679 \u0648\u0631\u06a9 \u06a9\u06cc \u067e\u0627\u0644\u06cc\u0633\u06cc<\/td>\n<td>6<\/td>\n<td>1.3<\/td>\n<td>CC6.6<\/td>\n<td>5.3.2<\/td>\n<\/tr>\n<tr>\n<td>\u062d\u0641\u0627\u0638\u062a\u06cc \u0645\u0634\u0627\u06c1\u062f\u06c1<\/td>\n<td>\u06af\u0631\u0627\u0641\u0627\u0646\u0627<\/td>\n<td>7<\/td>\n<td>10.6<\/td>\n<td>CC7.2<\/td>\n<td>-<\/td>\n<\/tr>\n<tr>\n<td>DORA \u0627\u0634\u0627\u0631\u06d2<\/td>\n<td>ArgoCD + \u06af\u0631\u0627\u0641\u0627\u0646\u0627<\/td>\n<td>7<\/td>\n<td>-<\/td>\n<td>-<\/td>\n<td>-<\/td>\n<\/tr>\n<tr>\n<td>\u0627\u06a9\u0627\u0624\u0646\u0679 \u06a9\u06d2 \u062e\u0637\u0631\u06d2 \u06a9\u0627 \u067e\u062a\u06c1 \u0644\u06af\u0627\u0646\u0627<\/td>\n<td>\u06af\u0627\u0631\u0688 \u0688\u06cc\u0648\u0679\u06cc<\/td>\n<td>8<\/td>\n<td>10.6<\/td>\n<td>CC7.2<\/td>\n<td>-<\/td>\n<\/tr>\n<tr>\n<td>API \u0622\u0688\u0679 \u0679\u0631\u06cc\u0644<\/td>\n<td>\u06a9\u0644\u0627\u0624\u0688 \u0679\u0631\u06cc\u0644<\/td>\n<td>8<\/td>\n<td>10.2<\/td>\n<td>CC7.3<\/td>\n<td>-<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><strong>EU \u0688\u06cc\u062c\u06cc\u0679\u0644 \u0622\u067e\u0631\u06cc\u0634\u0646\u0632 \u0631\u06cc\u0633\u06cc\u0644\u06cc\u0646\u0633\u06cc \u0627\u06cc\u06a9\u0679 (DORA):<\/strong> \u062c\u0646\u0648\u0631\u06cc 2025 \u0633\u06d2 \u06cc\u0648\u0631\u067e\u06cc \u06cc\u0648\u0646\u06cc\u0646 \u06a9\u06d2 \u0645\u0627\u0644\u06cc\u0627\u062a\u06cc \u0627\u062f\u0627\u0631\u0648\u06ba \u067e\u0631 \u0644\u0627\u06af\u0648 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 ClearLedger \u062a\u0645\u0627\u0645 \u067e\u0627\u0646\u0686\u0648\u06ba DORA \u0627\u0635\u0648\u0644\u0648\u06ba \u06a9\u0627 \u0646\u0642\u0634\u06c1 \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0645\u06a9\u0645\u0644 \u0646\u0642\u0634\u06c1 \u0633\u0627\u0632\u06cc <code>docs\/compliance-mapping.md<\/code>.<\/p>\n<h2 id=\"heading-interview-preparation\">\u0627\u0646\u0679\u0631\u0648\u06cc\u0648 \u06a9\u06cc \u062a\u06cc\u0627\u0631\u06cc<\/h2>\n<p>\u0645\u06a9\u0645\u0644 \u06a9\u0645\u0632\u0648\u0631\/\u0645\u0636\u0628\u0648\u0637 \u062c\u0648\u0627\u0628\u0627\u062a: <code>docs\/interview-prep.md<\/code><\/p>\n<p>\u062c\u06cc\u0633\u0627 \u06a9\u06c1 \u0622\u067e \u06c1\u0631 \u0642\u062f\u0645 \u06a9\u0648 \u0645\u06a9\u0645\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062f\u0631\u062c \u0630\u06cc\u0644 \u067e\u0631 \u0639\u0645\u0644 \u06a9\u0631\u06cc\u06ba:<\/p>\n<p><strong>\u0645\u0631\u062d\u0644\u06c1 0:<\/strong> Kubernetes \u0645\u06cc\u06ba \u0679\u0631\u06cc\u0641\u06a9 \u06a9\u06cc\u0633\u06d2 \u062e\u062f\u0645\u0627\u062a \u062a\u06a9 \u067e\u06c1\u0646\u0686\u062a\u06cc \u06c1\u06d2\u061f \u062c\u0628 \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u062f\u0633\u062a\u06cc \u06c1\u0648\u062a\u06cc \u06c1\u06d2 \u062a\u0648 \u0633\u0628 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06a9\u0648\u0646 \u0633\u06cc \u0686\u06cc\u0632 \u0631\u06a9 \u062c\u0627\u062a\u06cc \u06c1\u06d2\u061f<\/p>\n<p><strong>\u0645\u0631\u062d\u0644\u06c1 1:<\/strong> \u0645\u06cc\u06ba \u06cc\u06c1 \u06a9\u06cc\u0633\u06d2 \u062b\u0627\u0628\u062a \u06a9\u0631\u0648\u06ba \u06a9\u06c1 \u06a9\u0648\u0646 \u0633\u06cc \u062a\u0635\u0648\u06cc\u0631 \u06a9\u0633\u06cc \u0645\u062e\u0635\u0648\u0635 \u06a9\u0645\u0679 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0644\u06af\u0627\u0626\u06cc \u06af\u0626\u06cc \u062a\u06be\u06cc\u061f \u0688\u0648\u06cc\u0644\u067e\u0631\u0632 \u06a9\u0648 CI \u06a9\u0648 \u0646\u0638\u0631\u0627\u0646\u062f\u0627\u0632 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u06a9\u06cc\u0627 \u0631\u0648\u06a9 \u0631\u06c1\u0627 \u06c1\u06d2\u061f<\/p>\n<p><strong>\u0645\u0631\u062d\u0644\u06c1 2:<\/strong> \u0645\u06cc\u06a9\u0627\u0646\u06a9\u06cc \u0637\u0648\u0631 \u067e\u0631 GitOps \u06a9\u0627 \u06a9\u06cc\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2\u061f \u0622\u067e \u06a9\u06cc\u0633\u06d2 \u062b\u0627\u0628\u062a \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u06a9\u06c1 \u0628\u06c1\u0627\u0624 \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u062f\u0631\u0633\u062a \u06c1\u0648\u062c\u0627\u062a\u0627 \u06c1\u06d2\u061f<\/p>\n<p><strong>\u0645\u0631\u062d\u0644\u06c1 3:<\/strong> SAST\u060c IaC \u0627\u0633\u06a9\u06cc\u0646\u0646\u06af \u0627\u0648\u0631 \u0627\u0645\u06cc\u062c \u0627\u0633\u06a9\u06cc\u0646\u0646\u06af \u0645\u06cc\u06ba \u06a9\u06cc\u0627 \u0641\u0631\u0642 \u06c1\u06d2\u061f \u0645\u0639\u0630\u0648\u0631\u06cc \u06a9\u06cc \u0634\u062f\u062a \u06a9\u06cc \u062d\u062f \u06a9\u06cc\u0627 \u06c1\u06d2\u061f<\/p>\n<p><strong>\u0645\u0631\u062d\u0644\u06c1 4:<\/strong> \u062f\u0627\u062e\u0644\u06c1 \u06a9\u0646\u0679\u0631\u0648\u0644 \u06a9\u06cc\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u06cc\u06c1 CI \u0633\u06d2 \u0645\u062e\u062a\u0644\u0641 \u06a9\u06cc\u0648\u06ba \u06c1\u06d2\u061f \u067e\u0627\u0644\u06cc\u0633\u06cc \u0645\u0633\u062a\u062b\u0646\u06cc\u0627\u062a \u06a9\u0648 \u0645\u062d\u0641\u0648\u0638 \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u06a9\u06cc\u0633\u06d2 \u0645\u062a\u0639\u0627\u0631\u0641 \u06a9\u0631\u0627\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u061f<\/p>\n<p><strong>\u0645\u0631\u062d\u0644\u06c1 5:<\/strong> \u06a9\u0628\u0631\u0646\u06cc\u0679\u0633 \u06a9\u06d2 \u0631\u0627\u0632 \"\u062e\u0641\u06cc\u06c1 \u0627\u0646\u062a\u0638\u0627\u0645\" \u06a9\u06cc\u0648\u06ba \u0646\u06c1\u06cc\u06ba \u06c1\u06cc\u06ba\u061f \u0688\u0627\u0624\u0646 \u0679\u0627\u0626\u0645 \u06a9\u06d2 \u062e\u0637\u0631\u06d2 \u06a9\u0648 \u06a9\u0645 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0622\u067e \u0631\u0627\u0632\u0648\u06ba \u06a9\u0648 \u06a9\u06cc\u0633\u06d2 \u0628\u062f\u0644\u062a\u06d2 \u06c1\u06cc\u06ba\u061f<\/p>\n<p><strong>\u0645\u0631\u062d\u0644\u06c1 6:<\/strong> \u0631\u0646 \u0679\u0627\u0626\u0645 \u06a9\u0627 \u067e\u062a\u06c1 \u0644\u06af\u0627\u0646\u06d2 \u0633\u06d2 \u06a9\u06cc\u0627 \u06af\u0631\u0641\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2 \u062c\u0648 CI \u0627\u0648\u0631 \u0645\u0646\u0638\u0648\u0631\u06cc \u0646\u06c1\u06cc\u06ba \u06a9\u0631 \u0633\u06a9\u062a\u06cc\u061f \u0634\u06cc\u0644 \u0633\u067e\u0648\u0646 \u0648\u0627\u0631\u0646\u0646\u06af \u067e\u0631 \u0622\u067e \u06a9\u0627 \u067e\u06c1\u0644\u0627 \u0631\u062f\u0639\u0645\u0644 \u06a9\u06cc\u0627 \u06c1\u06d2\u061f<\/p>\n<p><strong>\u0645\u0631\u062d\u0644\u06c1 7:<\/strong> \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688\u0632 \u0627\u0648\u0631 \u0627\u0644\u0631\u0679\u0633 \u0645\u06cc\u06ba \u06a9\u06cc\u0627 \u0641\u0631\u0642 \u06c1\u06d2\u061f \u0622\u067e \u0635\u0631\u0641 \u062f\u0639\u0648\u0648\u06ba \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0622\u0688\u0679 \u062b\u0628\u0648\u062a \u06a9\u06cc\u0633\u06d2 \u062a\u06cc\u0627\u0631 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u061f<\/p>\n<p><strong>\u0645\u0631\u062d\u0644\u06c1 8:<\/strong> \u062c\u0628 \u0622\u067e EKS \u067e\u0631 \u0633\u0648\u0626\u0686 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0648 \u0627\u0635\u0644 \u0645\u06cc\u06ba \u06a9\u06cc\u0627 \u062a\u0628\u062f\u06cc\u0644\u06cc\u0627\u06ba \u0622\u062a\u06cc \u06c1\u06cc\u06ba\u061f \u06a9\u06cc\u0627 \u062a\u0628\u062f\u06cc\u0644 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2\u061f IRSA \u062e\u0637\u0631\u06d2 \u06a9\u0648 \u06a9\u06cc\u0633\u06d2 \u06a9\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u061f<\/p>\n<h2 id=\"heading-aws-cost-reference\">AWS \u0644\u0627\u06af\u062a \u06a9\u0627 \u062d\u0648\u0627\u0644\u06c1<\/h2>\n<p>\u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0637\u06d2 \u0634\u062f\u06c1 \u0645\u0631\u062d\u0644\u06c1 8 \u0633\u0627\u0626\u0632 (eu-west-1\u060c \u062a\u062e\u0645\u06cc\u0646\u06cc):<\/p>\n<table>\n<thead>\n<tr>\n<th>\u0645\u0631\u0636\u06cc<\/th>\n<th>\u0645\u0627\u06c1\u0627\u0646\u06c1 (8 \u06af\u06be\u0646\u0679\u06d2 \u0641\u06cc \u062f\u0646)<\/th>\n<th>\u0645\u0627\u06c1\u0627\u0646\u06c1 (\u0633\u0627\u0644 \u0628\u06be\u0631 \u06a9\u06be\u0644\u0627)<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>\u0627\u06cc \u06a9\u06d2 \u0627\u06cc\u0633 \u06a9\u0646\u0679\u0631\u0648\u0644 \u06c1\u0648\u0627\u0626\u06cc \u062c\u06c1\u0627\u0632<\/td>\n<td>~$24<\/td>\n<td>~$73<\/td>\n<\/tr>\n<tr>\n<td>3\u00d7 t3.\u0645\u06cc\u0688\u06cc\u0645 \u0646\u0648\u0688\u0633<\/td>\n<td>~$30<\/td>\n<td>~$92<\/td>\n<\/tr>\n<tr>\n<td>NAT \u06af\u06cc\u0679 \u0648\u06d2<\/td>\n<td>~$11<\/td>\n<td>~$33<\/td>\n<\/tr>\n<tr>\n<td>RDS db.t3.micro<\/td>\n<td>~$4<\/td>\n<td>~$13<\/td>\n<\/tr>\n<tr>\n<td>alb<\/td>\n<td>~$2<\/td>\n<td>~$6<\/td>\n<\/tr>\n<tr>\n<td>\u06af\u0627\u0631\u0688 \u0688\u06cc\u0648\u0679\u06cc + \u06a9\u0644\u0627\u0624\u0688 \u0679\u0631\u06cc\u0644<\/td>\n<td>~$2<\/td>\n<td>~$5<\/td>\n<\/tr>\n<tr>\n<td><strong>\u06a9\u0644 \u062a\u062e\u0645\u06cc\u0646\u06c1<\/strong><\/td>\n<td><strong>~$73<\/strong><\/td>\n<td><strong>~$222<\/strong><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u0645\u06cc\u06ba \u0646\u06c1 \u06c1\u0648\u0646\u06d2 \u067e\u0631 \u06c1\u0645\u06cc\u0634\u06c1 \u062a\u0628\u0627\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">make aws-down\n<\/code><\/pre>\n<h2 id=\"heading-conclusion\">\u0646\u062a\u06cc\u062c\u06c1<\/h2>\n<p>\u0622\u067e \u0646\u06d2 \u0627\u0628 \u0627\u06cc\u06a9 \u0641\u0646\u0679\u06cc\u06a9 \u0627\u06cc\u067e\u0644\u06cc \u06a9\u06cc\u0634\u0646 \u0628\u0646\u0627\u0626\u06cc \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0633 \u06a9\u06d2 \u0627\u0648\u067e\u0631 \u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u0627\u0648\u0631 \u0642\u0627\u0628\u0644 \u0627\u0639\u062a\u0645\u0627\u062f \u06a9\u0646\u0679\u0631\u0648\u0644 \u06a9\u06cc \u0622\u0679\u06be \u067e\u0631\u062a\u06cc\u06ba \u0628\u0646\u0627\u0626\u06cc \u06c1\u06cc\u06ba\u06d4 \u0622\u067e \u06a9\u06d2 \u0644\u06cc\u067e \u0679\u0627\u067e \u067e\u0631 \u0633\u0628 \u0645\u0645\u06a9\u0646 \u06c1\u06d2\u06d4<\/p>\n<p>\u0641\u06cc\u0632 0 \u0645\u06cc\u06ba\u060c \u06c1\u0645 \u0646\u06d2 \u062e\u0627\u0645 \u06a9\u0628\u0631\u0646\u06cc\u0679\u0633 \u0627\u0648\u0631 \u062f\u0633\u062a\u06cc \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0634\u0631\u0648\u0639\u0627\u062a \u06a9\u06cc\u06d4 \u0645\u0631\u062d\u0644\u06c1 1 \u0645\u06cc\u06ba\u060c \u06c1\u0645 \u0646\u06d2 \u0627\u06cc\u06a9 CI \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u0634\u0627\u0645\u0644 \u06a9\u06cc \u06c1\u06d2 \u062c\u0648 \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u062a\u0635\u0627\u0648\u06cc\u0631 \u0628\u0646\u0627\u062a\u06cc\u060c \u0627\u0633\u06a9\u06cc\u0646 \u06a9\u0631\u062a\u06cc \u0627\u0648\u0631 \u0633\u0627\u0626\u0646 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 \u0645\u0631\u062d\u0644\u06c1 2 \u0645\u06cc\u06ba\u060c \u0622\u067e \u0646\u06d2 \u06af\u0679 \u06a9\u0648 \u0627\u067e\u0646\u06d2 \u06a9\u0644\u0633\u0679\u0631 \u0633\u06d2 \u062c\u0648\u0691\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 ArgoCD \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0627\u06d4 \u0641\u06cc\u0632 3 \u0645\u06cc\u06ba\u060c SAST\u060c IaC\u060c \u0627\u0648\u0631 \u0627\u0645\u06cc\u062c \u0627\u0633\u06a9\u06cc\u0646\u0646\u06af \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u062a\u0645\u0627\u0645 \u067e\u0634\u0632 \u06a9\u0648 \u06a9\u0646\u0679\u0631\u0648\u0644 \u06a9\u06cc\u0627 \u06af\u06cc\u0627\u06d4 \u0645\u0631\u062d\u0644\u06c1 4 \u0645\u06cc\u06ba\u060c \u06c1\u0645 \u0646\u06d2 \u06a9\u0644\u0633\u0679\u0631 \u0628\u0627\u0631\u0688\u0631 \u067e\u0631 \u0646\u0627\u06af\u0648\u0627\u0631 \u06a9\u0627\u0645 \u06a9\u06d2 \u0628\u0648\u062c\u06be \u06a9\u0648 \u0631\u0648\u06a9\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 Kyverno \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0627\u06d4 \u0645\u0631\u062d\u0644\u06c1 5 \u0645\u06cc\u06ba\u060c \u0622\u067e \u0646\u06d2 \u0627\u0633\u0646\u0627\u062f \u06a9\u0648 Git \u0627\u0648\u0631 Kubernetes secrets \u0633\u06d2 Vault \u0645\u06cc\u06ba \u0645\u0646\u062a\u0642\u0644 \u06a9\u0631 \u062f\u06cc\u0627\u06d4 Falco \u0627\u0648\u0631 \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0631\u0646 \u0679\u0627\u0626\u0645 \u062e\u0637\u0631\u06d2 \u06a9\u0627 \u067e\u062a\u06c1 \u0644\u06af\u0627\u0646\u0627 \u0634\u0627\u0645\u0644 \u06a9\u06cc\u0627 \u06af\u06cc\u0627\u06d4 6 \u0645\u0631\u0627\u062d\u0644 \u0645\u06cc\u06ba \u062a\u0642\u0633\u06cc\u0645\u06d4 \u0645\u0631\u062d\u0644\u06c1 7 \u0645\u06cc\u06ba\u060c \u06c1\u0645 \u0646\u06d2 \u0627\u06cc\u06a9 \u0645\u0634\u0627\u06c1\u062f\u0627\u062a\u06cc \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u0628\u0646\u0627\u06cc\u0627 \u062c\u0648 \u0622\u0688\u0679 \u06a9\u06d2 \u062b\u0628\u0648\u062a \u062a\u06cc\u0627\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0648\u0631 \u0645\u0631\u062d\u0644\u06c1 8 \u0645\u06cc\u06ba\u060c \u06c1\u0645 \u0646\u06d2 \u06c1\u0631 \u0686\u06cc\u0632 \u06a9\u0648 AWS \u0645\u06cc\u06ba \u0645\u0646\u062a\u0642\u0644 \u06a9\u0631 \u062f\u06cc\u0627\u06d4<\/p>\n<p>\u0627\u0646 \u0627\u0642\u062f\u0627\u0645\u0627\u062a \u0645\u06cc\u06ba \u0633\u06d2 \u06a9\u0648\u0626\u06cc \u0628\u06be\u06cc \u06a9\u06be\u0644\u0648\u0646\u0627 \u0645\u0634\u0642 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u06c1\u0631 \u0627\u06cc\u06a9 \u0627\u06cc\u06a9 \u062d\u0642\u06cc\u0642\u06cc \u0645\u0633\u0626\u0644\u06c1 \u06a9\u06cc \u0646\u0645\u0627\u0626\u0646\u062f\u06af\u06cc \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0633 \u06a9\u0627 \u0633\u0627\u0645\u0646\u0627 \u062d\u0642\u06cc\u0642\u06cc \u0679\u06cc\u0645\u0648\u06ba \u06a9\u0648 \u067e\u06cc\u062f\u0627\u0648\u0627\u0631 \u0645\u06cc\u06ba \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 \u062f\u0631\u062f \u0645\u062d\u0633\u0648\u0633 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f\u060c \u06c1\u0645 \u0646\u06d2 \u0627\u06cc\u06a9 \u062d\u0644 \u0628\u0646\u0627\u06cc\u0627. DevSecOps \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u067e\u0691\u06be\u0646\u06d2 \u0627\u0648\u0631 \u0627\u0633\u06d2 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0642\u0627\u0628\u0644 \u06c1\u0648\u0646\u06d2 \u0645\u06cc\u06ba \u06cc\u06c1\u06cc \u0641\u0631\u0642 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0646\u0679\u0631\u0648\u06cc\u0648 \u06a9\u06cc \u062a\u06cc\u0627\u0631\u06cc \u06a9\u06d2 \u0633\u06cc\u06a9\u0634\u0646 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba \u062c\u0628 \u0622\u067e \u06a9\u0648 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679\u0633 \u0644\u06cc\u0646\u06d2\u060c \u0645\u062e\u0635\u0648\u0635 \u0679\u0648\u0644\u0632 \u0627\u0648\u0631 \u0646\u062a\u0627\u0626\u062c \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u067e\u0646\u06d2 \u0631\u06cc\u0632\u06cc\u0648\u0645\u06d2 \u06a9\u0648 \u0627\u067e \u0688\u06cc\u0679 \u06a9\u0631\u0646\u06d2\u060c \u0627\u0648\u0631 \u0627\u067e\u0646\u06d2 \u06a9\u06cc\u06d2 \u06af\u0626\u06d2 \u0641\u06cc\u0635\u0644\u0648\u06ba \u067e\u0631 \u0628\u062d\u062b \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u06d4 \u0622\u067e \u0646\u06d2 \u0627\u0646 \u0633\u0628 \u06a9\u0648 \u0628\u0646\u0627\u06cc\u0627\u06d4<\/p>\n<p><em>\u0627\u06af\u0631 \u0622\u067e \u06a9\u0648 \u06cc\u06c1 \u06af\u0627\u0626\u06cc\u0688 \u06a9\u0627\u0631\u0622\u0645\u062f \u0645\u0639\u0644\u0648\u0645 \u06c1\u0648\u0627\u060c \u062a\u0648 \u0627\u0633\u06d2 DevOps \u06cc\u0627 DevSecOps \u0645\u06cc\u06ba \u062a\u0648\u0691\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u06a9\u0633\u06cc \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0628\u06be\u06cc \u0634\u06cc\u0626\u0631 \u06a9\u0631\u06cc\u06ba\u06d4<\/em> <em>LinkedIn \u0633\u06d2 \u062c\u0691\u06cc\u06ba\u06d4<\/em><em>.<\/em><\/p>\n<p><em>\u06c1\u0645 \u0688\u06cc \u0627\u0648 \u0627\u0648\u067e\u0633 \u06a9\u06cc \u0645\u0634\u0642\u06cc\u06ba \u0627\u0648\u0631 \u0645\u0644\u0627\u0632\u0645\u062a \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0646\u0679\u0631\u0648\u06cc\u0648 \u06a9\u06cc \u062a\u062c\u0627\u0648\u06cc\u0632 \u0628\u06be\u06cc \u067e\u0648\u0633\u0679 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u067e\u06cc\u0631\u0648\u06cc \u06a9\u0631\u06cc\u06ba \u06cc\u0627<\/em> <em>\u0648\u06c1\u0627\u06ba \u0634\u0627\u0645\u0644 \u06c1\u0648\u06ba<\/em> <em>\u0627\u06af\u0631 \u0622\u067e \u0645\u0632\u06cc\u062f \u0686\u0627\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/em><\/p>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u0627\u0633 \u06a9\u062a\u0627\u0628 \u0645\u06cc\u06ba\u060c \u0622\u067e \u0634\u0631\u0648\u0639 \u0633\u06d2 \u0641\u0646\u0679\u06cc\u06a9 \u0679\u0631\u0627\u0646\u0632\u06cc\u06a9\u0634\u0646 \u0644\u06cc\u062c\u0631 \u0628\u0646\u0627\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0622\u06c1\u0633\u062a\u06c1 \u0622\u06c1\u0633\u062a\u06c1 \u0627\u0633\u06d2 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062a\u06cc\u0627\u0631 DevSecOps \u067e\u0644\u06cc\u0679 \u0641\u0627\u0631\u0645 \u0645\u06cc\u06ba \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06c1\u0645 \u0627\u0633\u06d2 AWS \u067e\u0631 \u0628\u06be\u06cc \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u06cc\u067e \u06a9\u0631\u06cc\u0688\u0679 \u0627\u0648\u0631 \u0688\u06cc\u0628\u0679 \u0644\u06cc\u0646 \u062f\u06cc\u0646 \u067e\u0631 \u06a9\u0627\u0631\u0631\u0648\u0627\u0626\u06cc \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u060c \u062a\u0639\u0645\u06cc\u0644 \u06a9\u06d2 \u0627\u0646\u062a\u0628\u0627\u06c1\u0627\u062a \u06a9\u0648 \u0628\u0691\u06be\u0627\u062a\u06cc \u06c1\u06d2\u060c \u0627\u0648\u0631 \u06c1\u0631 \u0686\u06cc\u0632 \u06a9\u0648 \u0688\u06cc\u0679\u0627 [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":27371,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[1],"tags":[],"class_list":["post-27370","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog"],"_links":{"self":[{"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/posts\/27370","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/comments?post=27370"}],"version-history":[{"count":1,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/posts\/27370\/revisions"}],"predecessor-version":[{"id":27372,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/posts\/27370\/revisions\/27372"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/media\/27371"}],"wp:attachment":[{"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/media?parent=27370"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/categories?post=27370"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/tags?post=27370"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}