{"id":317290,"date":"2021-02-01T15:00:47","date_gmt":"2021-02-01T15:00:47","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=317290"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=317290","title":{"rendered":"\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 Kubernetes \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u0445 \u0441 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0439 \u0438 \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u043e\u0439 \u0441\u0435\u0442\u044c\u044e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Kubeadm"},"content":{"rendered":"\n<div class=\"post__text post__text_v2\" id=\"post-content-body\">\n<p>\u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u044f \u0431\u044b \u0445\u043e\u0442\u0435\u043b \u0438\u043c\u0435\u0442\u044c \u0442\u0430\u043a\u0443\u044e \u0441\u0442\u0430\u0442\u044c\u044e \u043f\u0435\u0440\u0435\u0434 \u0433\u043b\u0430\u0437\u0430\u043c\u0438, \u043a\u043e\u0433\u0434\u0430 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043b \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u043f\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438. \u0421\u0440\u0430\u0437\u0443 \u0445\u043e\u0447\u0443 \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u043d\u0435 \u044f\u0432\u043b\u044f\u044e\u0441\u044c \u044d\u043a\u0441\u043f\u0435\u0440\u0442\u043e\u043c \u0432 K8S, \u043e\u0434\u043d\u0430\u043a\u043e \u0438\u043c\u0435\u043b \u043e\u043f\u044b\u0442 \u0441 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435\u043c \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432\u044b\u0445 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043e\u043a DC\/OS (\u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043d\u0430 Apache Mesos). \u0414\u043e\u043b\u0433\u043e\u0435 \u0432\u0440\u0435\u043c\u044f K8S \u043c\u0435\u043d\u044f \u043e\u0442\u043f\u0443\u0433\u0438\u0432\u0430\u043b \u0442\u0435\u043c, \u0447\u0442\u043e, \u043f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u0435\u0433\u043e \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f, \u0442\u0435\u0431\u044f \u0437\u0430\u043a\u0438\u0434\u044b\u0432\u0430\u044e\u0442 \u043a\u0443\u0447\u0435\u0439 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u0439 \u0438 \u0442\u0435\u0440\u043c\u0438\u043d\u043e\u0432, \u043e\u0442\u0447\u0435\u0433\u043e \u043c\u043e\u0437\u0433 \u0432\u0437\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f.<\/p>\n<p>\u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u0443 \u043c\u0435\u043d\u044f \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u044b\u0439 Bare Metal \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0432 \u0441\u0432\u044f\u0437\u0438 \u0441 \u0447\u0435\u043c \u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f. \u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0430 \u044f \u0437\u0430\u0442\u0440\u043e\u043d\u0443 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0430\u0441\u043f\u0435\u043a\u0442\u044b:<\/p>\n<ul>\n<li>\n<p>\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u0430\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 K8S \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e kubeadm \u043d\u0430 \u0443\u0437\u043b\u0430\u0445 \u0441 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 NIC;<\/p>\n<\/li>\n<li>\n<p>\u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0433\u043e Control Plane \u0441 \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u043c \u043f\u043e \u043e\u0431\u0449\u0435\u043c\u0443 IP \u0438 DNS-\u0438\u043c\u0435\u043d\u0438;<\/p>\n<\/li>\n<li>\n<p>\u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f Ingress \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u043d\u0430 \u0431\u0430\u0437\u0435 Nginx \u043d\u0430 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u0443\u0437\u043b\u0430\u0445 \u0441 \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u043c \u0438\u0437 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0439 \u0441\u0435\u0442\u0438;<\/p>\n<\/li>\n<li>\n<p>\u043f\u0440\u043e\u0431\u0440\u043e\u0441 K8S API \u0432 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u0443\u044e \u0441\u0435\u0442\u044c;<\/p>\n<\/li>\n<li>\n<p>\u0434\u043e\u0441\u0442\u0443\u043f \u043a K8S Dashboard UI \u0441 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430.<\/p>\n<\/li>\n<\/ul>\n<p>\u042f \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 \u0432 \u0441\u0440\u0435\u0434\u0435 Ubuntu 18.04, \u0432 \u0441\u0432\u044f\u0437\u0438 \u0441 \u0447\u0435\u043c \u0447\u0430\u0441\u0442\u044c \u0438\u0437 \u0448\u0430\u0433\u043e\u0432 \u043c\u043e\u0436\u0435\u0442 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432 \u0432\u0430\u0448\u0435\u043c \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u0435, \u043f\u043b\u044e\u0441 \u0443 \u043c\u0435\u043d\u044f \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0438 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 Keepalived, Pacemaker. \u0412 \u0442\u0435\u043a\u0441\u0442\u0435 \u043c\u043e\u0433\u0443\u0442 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0442\u044c\u0441\u044f \u0444\u0440\u0430\u0437\u044b &#171;\u043a\u0430\u043a \u044f \u043f\u043e\u043d\u044f\u043b&#8230;&#187; \u0438 &#171;\u044f \u043d\u0435 \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u043d\u0435 \u0432\u043f\u043e\u043b\u043d\u0435 \u043f\u043e\u043d\u044f\u043b&#8230;&#187;.<\/p>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0443\u0437\u043b\u043e\u0432\u0443\u044e \u0442\u043e\u043f\u043e\u043b\u043e\u0433\u0438\u044e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u0442\u044c K8S. \u042d\u0442\u043e \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u043d\u0430\u044f \u0442\u043e\u043f\u043e\u043b\u043e\u0433\u0438\u044f, \u0431\u0435\u0437 \u043b\u0438\u0448\u043d\u0438\u0445 \u0434\u0435\u0442\u0430\u043b\u0435\u0439.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8a0\/8bb\/05c\/8a08bb05c394a8efacf92c177af3efea.png\" width=\"881\" height=\"741\"><figcaption><\/figcaption><\/figure>\n<p>\u041e\u0442\u043b\u0438\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c\u044e \u0432 \u043c\u043e\u0435\u043c \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e, \u0447\u0442\u043e \u0443 \u0432\u0441\u0435\u0445 \u0443\u0437\u043b\u043e\u0432 \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u0434\u0432\u0430 \u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044f &#8212; \u043d\u0430 eth0 \u0432\u0441\u0435\u0433\u0434\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441, \u0430 \u043d\u0430 <code>eth1<\/code> &#8212; \u0430\u0434\u0440\u0435\u0441 \u0438\u0437 \u0441\u0435\u0442\u0438 <code>10.120.0.0\/16<\/code>. <\/p>\n<blockquote>\n<p>\u0421\u0442\u043e\u0438\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e K8S \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0449\u0435 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u0432 \u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u043a\u043e\u0433\u0434\u0430 \u043c\u0430\u0448\u0438\u043d\u044b \u0438\u043c\u0435\u044e\u0442 \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 NIC. \u0415\u0441\u043b\u0438 \u0432\u0430\u0448\u0430 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u0430\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u0430\u0448\u0438\u043d\u044b \u0441 \u043e\u0434\u043d\u0438\u043c \u0441\u0435\u0442\u0435\u0432\u044b\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c \u0438 \u0438\u043c\u0435\u0442\u044c \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 &#8212; \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e \u0442\u0430\u043a \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u0435\u043b\u0430\u0442\u044c. <\/p>\n<\/p>\n<p>\u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u043e\u0435\u0439 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0442\u0430\u043a\u0430\u044f \u0442\u043e\u043f\u043e\u043b\u043e\u0433\u0438\u044f \u0445\u043e\u0442\u044f \u0438 \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u0430, \u043d\u043e \u044f \u043f\u043e\u043d\u044f\u043b \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e K8S \u043f\u0440\u043e\u0449\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043c\u0430\u0448\u0438\u043d \u0441 \u043e\u0434\u043d\u043e\u0439 NIC \u0443\u0436\u0435 \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043d\u0430\u0447\u0430\u043b \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0435\u0448\u0438\u043b &#171;\u043f\u043e\u0431\u0435\u0434\u0438\u0442\u044c&#187; \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0442\u043e\u043f\u043e\u043b\u043e\u0433\u0438\u0438, \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0432 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u043a\u0430\u0436\u0434\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0438\u0437 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441\u0435\u0442\u0435\u0439. <\/p>\n<\/p>\n<p>Kubeadm \u043f\u0440\u0438 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0438 \u0441\u043b\u0443\u0436\u0431 \u0441\u0447\u0438\u0442\u0430\u0435\u0442, \u0447\u0442\u043e \u0447\u0442\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 IP-\u0430\u0434\u0440\u0435\u0441 &#8212; \u044d\u0442\u043e \u0442\u043e\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0442\u043e\u0439 \u0436\u0435 \u0441\u0435\u0442\u0438, \u0433\u0434\u0435 \u0448\u043b\u044e\u0437 &#171;\u043f\u043e-\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e&#187;, \u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043d\u0435 \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u043d\u0438\u0447\u0435\u0433\u043e \u0445\u043e\u0440\u043e\u0448\u0435\u0433\u043e \u043d\u0435 \u0432\u044b\u0439\u0434\u0435\u0442.<\/p>\n<\/blockquote>\n<p>\u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f Enterprise \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u0441 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0432\u043d\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f K8S, \u043c\u0430\u0448\u0438\u043d\u044b \u0441 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u0441\u0435\u0442\u0435\u0432\u044b\u043c\u0438 \u043a\u0430\u0440\u0442\u0430\u043c\u0438 \u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u043c \u043a \u043d\u0438\u043c \u0438\u0437 \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u0435\u0442\u0435\u0439 &#8212; \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0440\u044f\u0434\u043e\u0432\u0430\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0430\u043d\u043d\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0432\u043f\u043e\u043b\u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u0442\u044c\u0441\u044f, \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, Ceph \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0443\u0437\u043b\u0430\u043c \u043f\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0432\u044b\u0441\u043e\u043a\u043e\u0441\u043a\u043e\u0440\u043e\u0441\u0442\u043d\u043e\u0439 \u0441\u0435\u0442\u0438 \u0438\u043b\u0438 VLAN-\u0443.<\/p>\n<p>\u0425\u043e\u0447\u0443 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0441\u0432\u043e\u0439 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u044f \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Ansible, \u043d\u043e \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f \u043d\u0435 \u0431\u0443\u0434\u0443 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c playbook-\u0438, \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u0443\u044f\u0441\u044c \u043d\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 \u0440\u0443\u043a\u0430\u043c\u0438. \u0418\u0442\u0430\u043a, \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u043c. <\/p>\n<h2> \u0417\u0430\u043c\u0435\u043d\u0430 DNS-\u0440\u0435\u043a\u0443\u0440\u0441\u043e\u0440\u0430<\/h2>\n<p>\u042f \u0445\u043e\u0447\u0443 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c \u0432\u0441\u0435\u0445 \u0443\u0437\u043b\u043e\u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0447\u0435\u0440\u0435\u0437 DNS-\u0438\u043c\u0435\u043d\u0430 \u043f\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u043c IP-\u0430\u0434\u0440\u0435\u0441\u0430\u043c, \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0432 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u0438\u043c\u0435\u043d \u0443\u0437\u043b\u043e\u0432 \u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e, \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u0445 <code>gw-1<\/code>, <code>gw-2<\/code> \u044f \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443 pdns-recursor \u0438 \u0443\u043a\u0430\u0436\u0443 \u0435\u0433\u043e \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0440\u0435\u043a\u0443\u0440\u0441\u043e\u0440\u0430 \u043d\u0430 \u0432\u0441\u0435\u0445 \u0443\u0437\u043b\u0430\u0445 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430.<\/p>\n<p>\u0411\u0430\u0437\u043e\u0432\u0430\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 pdns-recursor \u043d\u0430 <code>gw-1<\/code>, <code>gw-2<\/code> \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432:<\/p>\n<pre><code class=\"bash\">allow-from=10.120.0.0\/8, 127.0.0.0\/8 etc-hosts-file=\/etc\/hosts.resolv export-etc-hosts=on export-etc-hosts-search-suffix=cluster<\/code><\/pre>\n<p>\u0421\u0430\u043c \u0444\u0430\u0439\u043b <code>\/etc\/hosts.resolv<\/code> \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e ansible \u0438 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"bash\"># Ansible managed  10.120.29.231  gw-1 gw-1 10.120.28.23  gw-2 gw-2 10.120.29.32  video-accessors-1 video-accessors-1 10.120.29.226  video-accessors-2 video-accessors-2 10.120.29.153  mongo-1 mongo-1 10.120.29.210  mongo-2 mongo-2 10.120.29.220  mongo-3 mongo-3 10.120.28.172  compute-1 compute-1 10.120.28.26  compute-2 compute-2 10.120.29.70  compute-3 compute-3 10.120.28.127  zk-1 zk-1 10.120.29.110  zk-2 zk-2 10.120.29.245  zk-3 zk-3 10.120.28.21  minio-1 minio-1 10.120.28.25  minio-2 minio-2 10.120.28.158  minio-3 minio-3 10.120.28.122  minio-4 minio-4 10.120.29.187  k8s-1 k8s-1 10.120.28.37  k8s-2 k8s-2 10.120.29.204  k8s-3 k8s-3 10.120.29.135  kafka-1 kafka-1 10.120.29.144  kafka-2 kafka-2 10.120.28.130  kafka-3 kafka-3 10.120.29.194  clickhouse-1 clickhouse-1 10.120.28.66  clickhouse-2 clickhouse-2 10.120.28.61  clickhouse-3 clickhouse-3 10.120.29.244  app-1 app-1 10.120.29.228  app-2 app-2 10.120.29.33  prometeus prometeus 10.120.29.222  manager manager  10.120.29.187 k8s-cp <\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u0428\u0430\u0431\u043b\u043e\u043d Ansible \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code># {{ ansible_managed }}  {% for item in groups['all'] %} {% set short_name = item.split('.') %} {{ hostvars[item]['host'] }}  {{ item }} {{ short_name[0] }} {% endfor %}  10.120.0.1 k8s-cp <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0432\u0441\u0435 \u0443\u0437\u043b\u044b \u0432\u043c\u0435\u0441\u0442\u043e DNS-\u0440\u0435\u043a\u0443\u0440\u0441\u043e\u0440\u043e\u0432, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c\u044b\u0445 \u0438\u0437 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a DHCP, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 DNS-\u044b. \u0412 Ubuntu 18.04 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f <code>systemd-resolved<\/code>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e <em>\u043f\u043e\u0434\u0441\u0443\u043d\u0443\u0442\u044c <\/em>\u0435\u043c\u0443 \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u044b\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u044b <code>gw-1, gw-2<\/code>. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0445\u043e\u0441\u0442\u0435 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b systemd, \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0449\u0438\u0439 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 <code>systemd-resolved<\/code>, \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u0432 \u0435\u0433\u043e \u043f\u043e \u043f\u0443\u0442\u0438 <code>\/etc\/systemd\/network\/0-eth0.network<\/code>:<\/p>\n<pre><code>[Match] Name=eth0  [Network] DHCP=ipv4 DNS=10.120.28.23 10.120.29.231 Domains=cluster  [DHCP] UseDNS=false UseDomains=false<\/code><\/pre>\n<p>\u0414\u0435\u043b\u0430\u0435\u0442 \u043e\u043d \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435: \u0434\u043b\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 DHCP, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0445 \u0447\u0435\u0440\u0435\u0437 eth0 \u0431\u0443\u0434\u0443\u0442 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f DNS-\u0441\u0435\u0440\u0432\u0435\u0440\u044b \u0438 \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u044b\u0435 \u0434\u043e\u043c\u0435\u043d\u044b, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u043d\u0430 DHCP-\u0441\u0435\u0440\u0432\u0435\u0440\u0435. \u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u044b <code>10.120.28.23, 10.120.29.231<\/code> \u0438 \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u044b\u0439 \u0434\u043e\u043c\u0435\u043d <code>*.cluster<\/code>. <\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0443\u0437\u0435\u043b \u0438\u043b\u0438 \u0441\u0435\u0442\u0435\u0432\u0443\u044e \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0443\u0437\u043b\u0430, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a <code>systemd-resolved<\/code> \u043d\u0435 \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u0443\u0435\u0442 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e DHCP. \u042f \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0436\u0430\u044e \u0445\u043e\u0441\u0442 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f \u0432 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u043c \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0438 \u043f\u0440\u0438 \u0441\u0442\u0430\u0440\u0442\u0435 \u0443\u0437\u043b\u0430.<\/p>\n<p>\u041f\u0440\u0438 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0439 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 <code>systemd-resolve --status<\/code> \u0432\u044b\u0434\u0430\u0441\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043b\u0438\u0441\u0442\u0438\u043d\u0433:<\/p>\n<pre><code>Global           DNSSEC NTA: 10.in-addr.arpa                       16.172.in-addr.arpa                       168.192.in-addr.arpa                       17.172.in-addr.arpa                       18.172.in-addr.arpa                       19.172.in-addr.arpa                       20.172.in-addr.arpa                       21.172.in-addr.arpa                       22.172.in-addr.arpa                       23.172.in-addr.arpa                       24.172.in-addr.arpa                       25.172.in-addr.arpa                       26.172.in-addr.arpa                       27.172.in-addr.arpa                       28.172.in-addr.arpa                       29.172.in-addr.arpa                       30.172.in-addr.arpa                       31.172.in-addr.arpa                       corp                       d.f.ip6.arpa                       home                       internal                       intranet                       lan                       local                       private                       test  Link 3 (eth1)       Current Scopes: none        LLMNR setting: yes MulticastDNS setting: no       DNSSEC setting: no     DNSSEC supported: no  Link 2 (eth0)       Current Scopes: DNS        LLMNR setting: yes MulticastDNS setting: no       DNSSEC setting: no     DNSSEC supported: no          DNS Servers: 10.120.28.23                       10.120.29.231           DNS Domain: cluster <\/code><\/pre>\n<p>\u042d\u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043d\u0430 \u0432\u0441\u0435\u0445 \u0443\u0437\u043b\u0430\u0445 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430. \u041f\u0440\u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u043a\u0430\u0436\u0434\u044b\u0439 \u0443\u0437\u0435\u043b \u0441\u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c <code>ping gw-1<\/code>, <code>ping gw-1.cluster<\/code> \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043e\u0442\u0432\u0435\u0442 \u043e\u0442 \u0434\u0430\u043d\u043d\u044b\u0445 \u0443\u0437\u043b\u043e\u0432 \u043f\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u043c ip-\u0430\u0434\u0440\u0435\u0441\u0430\u043c.<\/p>\n<h2>\u041e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u0430 \u043f\u043e\u0434\u043a\u0430\u0447\u043a\u0438<\/h2>\n<p><strong>\u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u0432\u0441\u0435\u0445 \u0443\u0437\u043b\u0430\u0445. <\/strong>Kubernetes \u043d\u0435 \u0445\u043e\u0447\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043f\u0440\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 \u0440\u0430\u0437\u0434\u0435\u043b\u043e\u0432 \u043f\u043e\u0434\u043a\u0430\u0447\u043a\u0438 \u043d\u0430 \u0443\u0437\u043b\u0430\u0445. \u0414\u043b\u044f \u0438\u0445 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0434\u043d\u043e\u0441\u0442\u0440\u043e\u0447\u043d\u0438\u043a\u043e\u043c:<\/p>\n<pre><code>sudo -- sh -c \"swapoff -a &amp;&amp; sed -i '\/ swap \/ s\/^\/#\/' \/etc\/fstab\"<\/code><\/pre>\n<p>\u0414\u043b\u044f \u043f\u0443\u0449\u0435\u0439 \u0443\u0432\u0435\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0443\u0434\u0430\u043b\u0438\u0442\u0435 swap-\u0440\u0430\u0437\u0434\u0435\u043b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>fdisk<\/code>.<\/p>\n<h2>\u0412\u043d\u0435\u0441\u0435\u043d\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432 \u0441\u0435\u0442\u0435\u0432\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u044f\u0434\u0440\u0430 <\/h2>\n<p><strong>\u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u0432\u0441\u0435\u0445 \u0443\u0437\u043b\u0430\u0445. <\/strong>\u042f \u0431\u0443\u0434\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Flannel &#8212; \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0439 \u043e\u0432\u0435\u0440\u043b\u0435\u0439\u043d\u044b\u0439 \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u043f\u043b\u0430\u0433\u0438\u043d \u0434\u043b\u044f K8S. \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 <code>VXLAN<\/code>. \u042d\u0442\u043e \u043d\u0430\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b. <\/p>\n<p>\u0412 \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0432\u0430\u043c \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c <code>multicast<\/code>, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 <code>VXLAN<\/code> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 <code>multicast<\/code>-\u0433\u0440\u0443\u043f\u043f\u044b, \u0434\u043b\u044f \u0441\u0432\u043e\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u044b. \u0415\u0441\u043b\u0438 <code>multicast<\/code> &#8212; \u043d\u0435 \u0432\u0430\u0448 \u0432\u0430\u0440\u0438\u0430\u043d\u0442, \u043d\u043e \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440, \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 <code>VXLAN<\/code>, \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 <code>VXLAN<\/code> \u0447\u0435\u0440\u0435\u0437 <a href=\"https:\/\/bitworks.software\/2018-10-24-vxlan-bgp-evpn.html\" rel=\"noopener noreferrer nofollow\">BGP<\/a> \u0438\u043b\u0438 <a href=\"https:\/\/bitworks.software\/2018-09-18-vxlan-and-linux.html\" rel=\"noopener noreferrer nofollow\">\u0434\u0440\u0443\u0433\u0438\u043c\u0438<\/a> \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438. \u041e\u0434\u043d\u0430\u043a\u043e, \u0441\u043c\u043e\u0436\u0435\u0442 \u043b\u0438 \u0436\u0438\u0442\u044c \u0441 \u044d\u0442\u0438\u043c \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u0432\u0430\u043c\u0438 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b Kubernetes &#8212; \u044d\u0442\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0432\u043e\u043f\u0440\u043e\u0441. \u0412 \u043e\u0431\u0449\u0435\u043c, Flannel \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 <code>VXLAN<\/code> \u0447\u0435\u0440\u0435\u0437 multicast. \u0412 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e <code>VXLAN+multicast<\/code> over <code>VXLAN+multicast<\/code> over <code>Ethernet<\/code>, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432 \u043c\u043e\u0435\u0439 \u0441\u0435\u0442\u0438 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u043c\u0430\u0448\u0438\u043d\u044b \u0438\u043c\u0435\u044e\u0442 <code>VXLAN-\u0431\u044d\u043a\u0431\u043e\u043d<\/code>, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u043f\u043e\u0432\u0435\u0440\u0445 <code>Ethernet<\/code> \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c <code>multicast<\/code> &#8212; \u0442\u0430\u043a \u0442\u043e\u0436\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442.<\/p>\n<p>\u0412 <strong>\/etc\/modules<\/strong> \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 <code>br_netfilter, overlay<\/code>. <\/p>\n<p>\u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0435 <code>modprobe br_netfilter &amp;&amp; modprobe overlay<\/code>, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u0438.<\/p>\n<p>\u0412 <code>\/etc\/sysctl.conf<\/code> \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435:<\/p>\n<pre><code>net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 <\/code><\/pre>\n<p>\u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0435 <code>sysctl -p<\/code> \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439.<\/p>\n<h2>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0421ontainerd<\/h2>\n<p><strong>\u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u0432\u0441\u0435\u0445 \u0443\u0437\u043b\u0430\u0445. <\/strong>Kubernetes \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Containerd (\u0432\u043f\u0440\u043e\u0447\u0435\u043c, \u043d\u043e\u0432\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 Docker \u0442\u043e\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 Containerd), \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c \u0435\u0433\u043e:<\/p>\n<pre><code class=\"bash\">sudo apt-get update sudo apt install containerd sudo sh -- -c \"containerd config default | tee \/etc\/containerd\/config.toml\" sudo service containerd restart<\/code><\/pre>\n<h2>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c kubeadm, kubelet, kubectl<\/h2>\n<p><strong>\u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u0432\u0441\u0435\u0445 \u0443\u0437\u043b\u0430\u0445. <\/strong>\u0417\u0434\u0435\u0441\u044c \u043f\u0440\u044f\u043c \u0438\u0437 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0430 \u043f\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 K8S:<\/p>\n<pre><code class=\"bash\">sudo apt-get update &amp;&amp; sudo apt-get install -y apt-transport-https curl curl -s https:\/\/packages.cloud.google.com\/apt\/doc\/apt-key.gpg | sudo apt-key add - cat &lt;&lt;EOF | sudo tee \/etc\/apt\/sources.list.d\/kubernetes.list deb https:\/\/apt.kubernetes.io\/ kubernetes-xenial main EOF sudo apt-get update sudo apt-get install -y kubelet kubeadm kubectl sudo apt-mark hold kubelet kubeadm kubectl<\/code><\/pre>\n<h2>\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0443\u0437\u043b\u043e\u0432 Control Plane<\/h2>\n<p>\u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u0443\u0437\u043b\u0430\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u0442\u044c Control Plane K8S &#8212; \u0432 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 <code>k8s-{1,2,3}<\/code>. \u0417\u0434\u0435\u0441\u044c \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u043d\u044e\u0430\u043d\u0441\u044b, \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u0435 \u0434\u043b\u044f \u043c\u043e\u0435\u0433\u043e \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f:<\/p>\n<pre><code>kubeadm init --pod-network-cidr=10.244.0.0\/16 \\       --control-plane-endpoint=k8s-cp \\       --apiserver-advertise-address=10.120.29.187<\/code><\/pre>\n<p>\u0414\u043b\u044f Flannel \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0430\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>--pod-network-cidr=10.244.0.0\/16<\/code>. \u0421 \u0434\u0440\u0443\u0433\u0438\u043c \u0430\u0434\u0440\u0435\u0441\u043d\u044b\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e\u043c \u0434\u043b\u044f POD-\u043e\u0432 K8S \u043e\u043d \u043d\u0435 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0441\u044f.<\/p>\n<blockquote>\n<p>&#8212;control-plane-endpoint string        Specify a stable IP address or DNS name for the control plane.<\/p>\n<\/blockquote>\n<p>\u0417\u0434\u0435\u0441\u044c \u0412\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0442\u043e\u0442 DNS \u0438\u043b\u0438 IP, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u0441\u0432\u044f\u0437\u0438 \u0432\u0441\u0435\u0445 <em>\u0448\u0443\u0440\u0443\u0448\u043a\u043e\u0432<\/em> K8S-\u0430 \u0441 Control Plane. \u042f \u0440\u0435\u0448\u0438\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043e\u043c\u0435\u043d\u043d\u043e\u0435 \u0438\u043c\u044f <code>k8s-cp<\/code>, \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0435 \u043a \u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u043c\u0443 ip-\u0430\u0434\u0440\u0435\u0441\u0443 <code>10.120.0.1<\/code> (\u0441\u043c. \u0434\u0430\u043b\u0435\u0435, \u043d\u0430 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442, k8s-cp \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u043e\u0434\u0438\u043d \u0438\u0437 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 Control Plane: <code>10.120.29.187 k8s-cp<\/code>).<\/p>\n<p>\u0412\u0430\u0436\u043d\u044b\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 <code>--api-server-advertise-address<\/code>. \u041e\u043d \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 <code>api-server<\/code>, \u043d\u043e \u0438 \u043d\u0430 <code>Etcd<\/code>, \u0447\u0442\u043e \u043d\u0438\u0433\u0434\u0435 \u043d\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u043e, \u043d\u043e \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u044c\u043d\u043e \u0432\u0430\u0436\u043d\u043e \u0434\u043b\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0439 \u0442\u043e\u043f\u043e\u043b\u043e\u0433\u0438\u0438. \u0415\u0441\u043b\u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u044c, \u0442\u043e <code>kubeadm<\/code> \u0432\u043e\u0437\u044c\u043c\u0435\u0442 \u0430\u0434\u0440\u0435\u0441 \u0441 \u0442\u043e\u0439 \u0441\u0435\u0442\u0438, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0448\u043b\u044e\u0437 \u043f\u043e-\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u0447\u0442\u043e \u043d\u0435 <em>\u0432\u0441\u0435\u0433\u0434\u0430<\/em> \u0432\u0435\u0440\u043d\u043e. \u0412 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0442\u043e\u043c\u0443, \u0447\u0442\u043e <code>Etcd<\/code> \u0441\u0442\u0430\u0440\u0442\u0443\u0435\u0442 \u043d\u0430 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435, \u0430 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 <code>Etcd<\/code> \u0445\u043e\u0447\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043f\u043e \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0439 \u0441\u0435\u0442\u0438, \u0447\u0442\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u043e\u0440\u0442\u043e\u0432 \u0438 \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0430\u0442\u0430\u043a\u0438 \u043d\u0430 \u044d\u0442\u0443 \u0441\u043b\u0443\u0436\u0431\u0443. \u042d\u0442\u043e \u043c\u0435\u043d\u044f \u043d\u0435 \u0443\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442. <\/p>\n<p>\u0415\u0441\u043b\u0438 \u044d\u0442\u043e\u0442 \u0430\u0434\u0440\u0435\u0441 \u043d\u0435 \u0437\u0430\u0434\u0430\u0442\u044c \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e, \u0442\u043e Flannel \u0442\u043e\u0436\u0435 \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f, \u0431\u0443\u0434\u0435\u0442 \u043f\u0430\u0434\u0430\u0442\u044c \u0441 \u043e\u0448\u0438\u0431\u043a\u0430\u043c\u0438, \u0447\u0442\u043e \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0441\u0432\u044f\u0437\u0430\u0442\u044c\u0441\u044f \u0441 Control Plane (\u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u0442 \u0436\u0435 IP-\u0430\u0434\u0440\u0435\u0441 \u0438\u0437 \u0441\u0435\u0442\u0438 \u0441\u043e \u0448\u043b\u044e\u0437\u043e\u043c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0434\u043b\u044f \u0441\u0432\u044f\u0437\u0438). <\/p>\n<p>\u0412 \u043e\u0431\u0449\u0435\u043c, \u044d\u0442\u043e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043f\u0440\u0438\u0432\u043d\u043e\u0441\u0438\u0442 \u043c\u043d\u043e\u0433\u043e \u0433\u0435\u043c\u043e\u0440\u0440\u043e\u044f \u0438 \u0432\u0435\u0434\u0435\u0442 \u043a \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u0435 \u0432\u0441\u0435\u0433\u043e, \u0447\u0442\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u043e\u0436\u0435\u0442 \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c, \u0435\u0441\u043b\u0438 \u0432\u0441\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u0432\u0435\u0440\u043d\u043e, \u0442\u043e <code>Kubeadm<\/code> \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0435\u0442 K8S \u043d\u0430 \u0434\u0430\u043d\u043d\u043e\u043c \u0443\u0437\u043b\u0435. \u042f \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u0443\u0437\u043b\u0430 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f \u0447\u0442\u043e Control Plane \u0441\u0442\u0430\u0440\u0442\u0443\u0435\u0442 \u043a\u0430\u043a \u043d\u0430\u0434\u043e. \u0423\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c \u0432 \u044d\u0442\u043e\u043c, \u0437\u0430\u043f\u0440\u043e\u0441\u0438\u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0445 \u0437\u0430\u0434\u0430\u0447 \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0443\u0437\u043b\u0430:<\/p>\n<pre><code class=\"bash\">ps xa  | grep -E '(kube-apiserver|etcd|kube-proxy|kube-controller-manager|kube-scheduler)'<\/code><\/pre>\n<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u0434\u043e \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430 \u043a \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0443 \u0432 \u0434\u043e\u043c\u0430\u0448\u043d\u0438\u0439 \u043a\u0430\u0442\u0430\u043b\u043e\u0433. \u042d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0443\u0442\u0438\u043b\u0438\u0442\u0430 <code>kubectl<\/code> \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430 \u0441 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u043c \u0444\u0430\u0439\u043b\u043e\u043c \u043f\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u043c\u0443 \u043f\u0443\u0442\u0438:<\/p>\n<pre><code class=\"bash\">mkdir -p $HOME\/.kube sudo cp -i \/etc\/kubernetes\/admin.conf $HOME\/.kube\/config sudo chown $(id -u):$(id -g) $HOME\/.kube\/config<\/code><\/pre>\n<p>\u0414\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u0438 <code>kubectl<\/code> \u0437\u0430\u043f\u0440\u043e\u0441\u0438\u0442\u0435 \u0437\u0430\u0434\u0430\u0447\u0438, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0435 \u043d\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u043c \u0443\u0437\u043b\u0435 \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u044b <code>kubectl get pods --all-namespaces<\/code>. \u0412\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0432\u044b\u0432\u043e\u0434, \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443:<\/p>\n<pre><code>NAMESPACE              NAME                                         READY   STATUS      RESTARTS   AGE kube-system            etcd-k8s-1                                   1\/1     Running     0          2d23h kube-system            kube-apiserver-k8s-1                         1\/1     Running     0          2d23h kube-system            kube-controller-manager-k8s-1                1\/1     Running     1          2d23h kube-system            kube-scheduler-k8s-1                         1\/1     Running     1          2d23h <\/code><\/pre>\n<p>\u042f \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432\u044b\u0432\u043e\u0434 \u044d\u0442\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0435\u0449\u0435 \u043f\u0430\u0440\u0443 \u0440\u0430\u0437, \u0441 \u043f\u0435\u0440\u0435\u0440\u044b\u0432\u043e\u043c 1 \u043c\u0438\u043d\u0443\u0442\u0443, \u0447\u0442\u043e\u0431\u044b \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e <code>RESTARTS<\/code> \u043d\u0435 \u0440\u0430\u0441\u0442\u0443\u0442, \u0430 \u0441\u0442\u0430\u0442\u0443\u0441 <code>Running<\/code>.<\/p>\n<p>\u0421\u0430\u043c Kubernetes \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u0441\u0435\u0442\u0438 \u043d\u0435 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442, \u0434\u0435\u043b\u0435\u0433\u0438\u0440\u0443\u044f \u044d\u0442\u043e \u043f\u043b\u0430\u0433\u0438\u043d\u0430\u043c <a href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/329830\/\" rel=\"noopener noreferrer nofollow\">CNI<\/a>. \u041c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 CNI &#8212; Flannel. \u0415\u0433\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439:<\/p>\n<pre><code>kubectl apply -f https:\/\/github.com\/coreos\/flannel\/raw\/master\/Documentation\/kube-flannel.yml<\/code><\/pre>\n<p>\u041e\u043f\u044f\u0442\u044c \u0436\u0435, \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0435 <code>kubectl get pods --all-namespaces<\/code> \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437, \u0447\u0442\u043e\u0431\u044b \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e Flannel \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0431\u0435\u0437 \u043e\u0448\u0438\u0431\u043e\u043a \u0438 RESTARTS \u043d\u0435 \u0440\u0430\u0441\u0442\u0443\u0442. \u0415\u0441\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0448\u043b\u043e \u043d\u0435 \u0442\u0430\u043a, \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u0436\u0443\u0440\u043d\u0430\u043b \u0441\u043e\u0431\u044b\u0442\u0438\u0439 Flannel \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c (\u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0438\u043c\u044f POD-\u0430 Flannel):<\/p>\n<pre><code class=\"bash\">kubectl logs -n kube-system kube-flannel-ds-xn2j9<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u043e\u0448\u0438\u0431\u043e\u043a \u043d\u0435\u0442, \u043c\u043e\u0436\u043d\u043e \u0434\u0432\u0438\u0433\u0430\u0442\u044c\u0441\u044f \u0434\u0430\u043b\u044c\u0448\u0435. \u0422\u0435\u043f\u0435\u0440\u044c \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0434\u0432\u0430 \u0434\u0440\u0443\u0433\u0438\u0445 \u0443\u0437\u043b\u0430 Control Plane \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u043c\u0430\u043d\u0434, \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u043e\u0439 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0438\u0437 \u043d\u0438\u0445:<\/p>\n<pre><code class=\"bash\"># ssh k8s-2 sudo kubeadm join k8s-cp:6443 --apiserver-advertise-address=10.120.28.37 --token tfqsms.kiek2vk129tpf0b7 --discovery-token-ca-cert-hash sha256:0c446bfabcd99aae7e650d110f8b9d6058cac432078c4fXXXXX6055b4bd --control-plane  mkdir -p $HOME\/.kube sudo cp -i \/etc\/kubernetes\/admin.conf $HOME\/.kube\/config sudo chown $(id -u):$(id -g) $HOME\/.kube\/config  # ssh k8s-3 sudo kubeadm join k8s-cp:6443 --apiserver-advertise-address=10.120.29.204 --token tfqsms.kiek2vk129tpf0b7 --discovery-token-ca-cert-hash sha256:0c446bfabcd99aae7e650d110f8b9d6058cac432078c4fXXXXXec6055b4bd --control-plane  mkdir -p $HOME\/.kube sudo cp -i \/etc\/kubernetes\/admin.conf $HOME\/.kube\/config sudo chown $(id -u):$(id -g) $HOME\/.kube\/config<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0434\u0440\u0443\u0433 <code>--token<\/code> &#171;\u043f\u0440\u043e\u0442\u0443\u0445&#187;, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 <code>kubeadm token create<\/code>, \u0447\u0442\u043e\u0431\u044b \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0443\u0437\u043b\u0430 \u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0437\u0430 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c <code>Etcd<\/code>:<\/p>\n<pre><code>kubectl get pods --all-namespaces | grep etcd kube-system            etcd-k8s-1                                   1\/1     Running     0          2d23h kube-system            etcd-k8s-2                                   1\/1     Running     1          2d22h kube-system            etcd-k8s-3                                   1\/1     Running     1          2d22h<\/code><\/pre>\n<p>\u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c Running, \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043e\u043a \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c. \u041a\u043e\u043c\u0430\u043d\u0434\u0430 <code>kubectl get pods --all-namespaces<\/code> \u0434\u043e\u043b\u0436\u043d\u0430 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u0442\u0440\u0435\u0445\u043a\u0440\u0430\u0442\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u043d\u0430 \u0432\u0441\u0435\u0445 \u0443\u0437\u043b\u0430\u0445 Control Plane:<\/p>\n<pre><code>NAME                            READY   STATUS    RESTARTS   AGE coredns-74ff55c5b-h2zjq         1\/1     Running   0          2d23h coredns-74ff55c5b-n6b49         1\/1     Running   0          2d23h etcd-k8s-1                      1\/1     Running   0          2d23h etcd-k8s-2                      1\/1     Running   1          2d22h etcd-k8s-3                      1\/1     Running   1          2d22h kube-apiserver-k8s-1            1\/1     Running   0          2d23h kube-apiserver-k8s-2            1\/1     Running   1          2d22h kube-apiserver-k8s-3            1\/1     Running   1          2d22h kube-controller-manager-k8s-1   1\/1     Running   1          2d23h kube-controller-manager-k8s-2   1\/1     Running   1          2d22h kube-controller-manager-k8s-3   1\/1     Running   1          2d22h kube-flannel-ds-2f6d5           1\/1     Running   0          2d3h kube-flannel-ds-2p5vx           1\/1     Running   0          2d3h kube-flannel-ds-4ng99           1\/1     Running   3          2d22h kube-proxy-22jpt                1\/1     Running   0          2d3h kube-proxy-25rxn                1\/1     Running   0          2d23h kube-proxy-2qp8r                1\/1     Running   0          2d3h kube-scheduler-k8s-1            1\/1     Running   1          2d23h kube-scheduler-k8s-2            1\/1     Running   1          2d22h kube-scheduler-k8s-3            1\/1     Running   1          2d22h<\/code><\/pre>\n<p>\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0448\u0430\u0433\u043e\u043c \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043c \u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u044b\u0439 IP-\u0430\u0434\u0440\u0435\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a Control Plane. <\/p>\n<h2>\u041e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u044b\u0439 IP \u0438 DNS \u0438\u043c\u044f<\/h2>\n<p>\u0412 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0431\u044b\u043b\u043e \u0442\u0440\u0438 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430:<\/p>\n<ol>\n<li>\n<p>Keepalived;<\/p>\n<\/li>\n<li>\n<p>Pacemaker;<\/p>\n<\/li>\n<li>\n<p>kube-vip.<\/p>\n<\/li>\n<\/ol>\n<p>\u0417\u0434\u0435\u0441\u044c \u044f \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u043b \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0447\u0442\u043e\u0431\u044b \u0432\u0441\u0435 \u0437\u0430\u0432\u0435\u0441\u0442\u0438. \u041d\u0430\u0447\u0430\u043b \u044f \u0441 <code>Keepalived<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u043c\u043e\u0438\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 &#8212; \u0432 \u043e\u0431\u0449\u0435\u043c-\u0442\u043e, \u044f \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043b \u0438\u043c \u0438 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u0442\u044c. \u041e\u0434\u043d\u0430\u043a\u043e, \u043e\u043d \u0443 \u043c\u0435\u043d\u044f \u043d\u0435 \u0437\u0430\u0432\u0435\u043b\u0441\u044f, \u043d\u0435 \u0437\u043d\u0430\u044e \u0432 \u0447\u0435\u043c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 &#8212; \u0432 Ubuntu 18.04 \u0438\u043b\u0438 \u0432 <code>VXLAN<\/code>-\u0441\u0435\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 Underlay. <code>Tcpdump<\/code> \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u043b \u0432\u0435\u0441\u0435\u043b\u044b\u0435 <code>VRRP<\/code>-\u043f\u0430\u043a\u0435\u0442\u0438\u043a\u0438, \u043b\u0435\u0442\u044f\u0449\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 <code>k8s-{1,2,3}<\/code>, \u043d\u043e IP-\u0430\u0434\u0440\u0435\u0441 \u0432\u0435\u0448\u0430\u043b\u0441\u044f \u0432\u0441\u0435\u043c\u0438 3\u043c\u044f \u0443\u0437\u043b\u0430\u043c\u0438, \u0432\u0441\u0435 \u0441\u0447\u0438\u0442\u0430\u043b\u0438 \u0441\u0435\u0431\u044f <code>MASTER<\/code>-\u0430\u043c\u0438. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 debug \u043d\u0438\u0447\u0435\u0433\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0433\u043e \u043d\u0435 \u0434\u0430\u043b, \u044f \u043e\u0442\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u043e\u0442 <code>Keepalived<\/code> \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043b \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 \u043d\u0430 <code>Pacemaker<\/code>. \u0422\u0443\u0442 \u043c\u0435\u043d\u044f \u0436\u0434\u0430\u043b\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u0430\u044f \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u043e\u0441\u0442\u044c &#8212; <code>Corosync<\/code> \u0438 <code>Pacemaker<\/code> \u043d\u0435 \u0432\u0437\u043b\u0435\u0442\u0430\u043b\u0438 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u0438 \u0441\u0442\u0430\u0440\u0442\u0435, \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u044b\u0439 \u0440\u0438\u0442\u0443\u0430\u043b:<\/p>\n<pre><code>sudo systemctl enable corosync sudo systemctl enable pacemaker<\/code><\/pre>\n<p>\u042f \u043f\u0440\u0438\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0441\u044c \u0442\u0430\u043a\u043e\u0433\u043e \u043c\u043d\u0435\u043d\u0438\u044f, \u0447\u0442\u043e \u043a\u043e\u0440\u043d\u0435\u0432\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0438\u043b\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0438\u043b\u0438 \u043d\u0435 \u043d\u0430\u0434\u043e \u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c, \u0432 <code>\/etc\/rc.local<\/code> \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u044d\u0442\u0438 \u0441\u043b\u0443\u0436\u0431\u044b \u043d\u0435 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c. <\/p>\n<p>\u0412 \u0438\u0442\u043e\u0433\u0435, \u044f \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u043b\u0441\u044f \u0441\u043e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c \u043f\u043e \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044e \u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0433\u043e IP-\u0430\u0434\u0440\u0435\u0441\u0430 <a href=\"https:\/\/kube-vip.io\/\" rel=\"noopener noreferrer nofollow\">kube-vip<\/a>, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u043c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f Kubernetes. \u0414\u043b\u044f \u0435\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0442\u0440\u0438 \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u0430, \u043a\u0430\u0436\u0434\u044b\u0439 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 kube-vip \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0438\u0437 \u0443\u0437\u043b\u043e\u0432 Control Plane:<\/p>\n<pre><code>apiVersion: v1 kind: Pod metadata:   creationTimestamp: null   name: kube-vip-cp-k8s-1         # \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u0438\u043c\u044f, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0443\u0437\u043b\u0443   namespace: kube-system spec:   nodeName: k8s-1                 # \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u0441\u044f \u0438\u043c\u0435\u043d\u043d\u043e \u043d\u0430 \u044d\u0442\u043e\u043c \u0443\u0437\u043b\u0435   containers:   - args:     - start     env:     - name: vip_arp       value: \"true\"     - name: vip_interface       value: eth1     - name: vip_leaderelection       value: \"true\"     - name: vip_leaseduration       value: \"5\"     - name: vip_renewdeadline       value: \"3\"     - name: vip_retryperiod       value: \"1\"     - name: vip_address       value: 10.120.0.1          # \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 IP, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f     image: plndr\/kube-vip:0.3.1  # \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e     imagePullPolicy: Always     name: kube-vip-cp     resources: {}     securityContext:       capabilities:         add:         - NET_ADMIN         - SYS_TIME     volumeMounts:     - mountPath: \/etc\/kubernetes\/admin.conf       name: kubeconfig     - mountPath: \/etc\/ssl\/certs       name: ca-certs       readOnly: true   hostNetwork: true   volumes:   - hostPath:       path: \/etc\/kubernetes\/admin.conf     name: kubeconfig   - hostPath:       path: \/etc\/ssl\/certs     name: ca-certs status: {} <\/code><\/pre>\n<p>\u0414\u0430\u043d\u043d\u044b\u0439 \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 Control Plane \u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u0441\u0435:<\/p>\n<pre><code>kubectl apply -f cluster_config\/vip-{1,2,3}.yml<\/code><\/pre>\n<p>\u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0432\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0442\u0440\u0438 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0438\u0445\u0441\u044f POD-\u0430, \u043a\u0430\u0436\u0434\u044b\u0439 \u043d\u0430 \u0441\u0432\u043e\u0435\u043c \u0443\u0437\u043b\u0435, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0430\u0434\u0440\u0435\u0441 <code>10.120.0.1<\/code> \u0434\u043e\u043b\u0436\u0435\u043d \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u0438\u043d\u0433\u043e\u0432\u0430\u0442\u044c\u0441\u044f. \u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435, \u0447\u0442\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0438\u0437 <code>kube-vip<\/code> \u0432\u043b\u0430\u0434\u0435\u0435\u0442 IP \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>arping<\/code>:<\/p>\n<pre><code>sudo arping 10.120.0.1 ARPING 10.120.0.1 42 bytes from 1e:01:17:00:01:22 (10.120.0.1): index=0 time=319.476 usec 42 bytes from 1e:01:17:00:01:22 (10.120.0.1): index=1 time=306.360 msec 42 bytes from 1e:01:17:00:01:22 (10.120.0.1): index=2 time=349.666 usec<\/code><\/pre>\n<p>\u0427\u0435\u043c \u0445\u043e\u0440\u043e\u0448 kube-vip? \u041e\u043d \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u044b\u0439 IP, \u043d\u043e \u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u043a\u043e\u0433\u0434\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u043d\u0430 \u0445\u043e\u0441\u0442\u0435, \u0433\u0434\u0435 \u043e\u043d \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f, \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d, \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0432\u0430\u044f \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u043d\u0435\u0433\u043e \u0442\u0440\u0430\u0444\u0438\u043a.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c, \u043a\u043e\u0433\u0434\u0430 kube-vip \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a Kubernetes \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043d\u0430 \u0445\u043e\u0441\u0442\u0430\u0445-\u0440\u0435\u043a\u0443\u0440\u0441\u043e\u0440\u0430\u0445 <code>gw-1<\/code>, <code>gw-2<\/code> \u0432 <code>\/etc\/hosts.resolv<\/code> \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u0438 \u0434\u043b\u044f <code>k8s-cp<\/code>:<\/p>\n<pre><code>10.120.0.1 k8s-cp<\/code><\/pre>\n<p>\u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 pdns-recursor \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <code>sudo service pdns-recursor restart<\/code> \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435, \u0447\u0442\u043e <code>k8s-cp<\/code> \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0441\u043e \u0432\u0441\u0435\u0445 \u0443\u0437\u043b\u043e\u0432 IP \u0430\u0434\u0440\u0435\u0441\u043e\u043c <code>10.120.0.1<\/code>. \u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435, \u0447\u0442\u043e <code>kubectl<\/code> \u0432\u0441\u0435 \u0435\u0449\u0435 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u043d\u043e\u0432\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u044c\u044e \u0434\u043b\u044f <code>k8s-cp<\/code>.<\/p>\n<p> \u041d\u0430 \u0434\u0430\u043d\u043d\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0433\u043e Control Plane K8S. \u042f \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437 \u043f\u043e\u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c <code>k8s-{1,2,3}<\/code>, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0447\u0442\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0432 \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438.<\/p>\n<h2>\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0443\u0437\u043b\u0430 Worker-\u0430<\/h2>\n<p>\u0412 \u043d\u0430\u0448\u0435\u0439 \u0442\u043e\u043f\u043e\u043b\u043e\u0433\u0438\u0438 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u0432\u0443\u0445 \u0443\u0437\u043b\u043e\u0432 <code>gw-1<\/code>, <code>gw-2<\/code>, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d Nginx Ingress \u0438 \u043e\u0434\u0438\u043d \u0443\u0437\u0435\u043b \u043e\u0431\u0449\u0435\u0433\u043e \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f (<code>compute-1<\/code>).<\/p>\n<p>\u0412\u0441\u0435 \u044d\u0442\u0438 \u0443\u0437\u043b\u044b \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"bash\">kubeadm token create --print-join-command  kubeadm join k8s-cp:6443 --token rn0s5p.y6waq1t6y2y6z9vw     --discovery-token-ca-cert-hash sha256:0c446bfabcd99aae7e650d110f8b9d6058cac432078c4fXXXe22ec6055b4bd  # ssh gw-1 sudo kubeadm join k8s-cp:6443 --token rn0s5p.y6waq1t6y2y6z9vw     --discovery-token-ca-cert-hash sha256:0c446bfabcd99aae7e650d110f8b9d6058cac432078c4fXXXe22ec6055b4bd  # ssh gw-2 ...  # ssh compute-1<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f <code>kubectl get pds --all-namespaces<\/code> \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0438\u0445\u0441\u044f POD-\u043e\u0432, \u0430 <code>kubectl get nodes<\/code> \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u0432\u0441\u0435 \u0443\u0437\u043b\u044b \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430:<\/p>\n<pre><code class=\"bash\">kubectl get nodes NAME                STATUS   ROLES                  AGE     VERSION compute-1           Ready    compute                2d23h   v1.20.2 gw-1                Ready    gateway                2d4h    v1.20.2 gw-2                Ready    gateway                2d4h    v1.20.2 k8s-1               Ready    control-plane,master   2d23h   v1.20.2 k8s-2               Ready    control-plane,master   2d23h   v1.20.2 k8s-3               Ready    control-plane,master   2d23h   v1.20.2 <\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u0443\u0437\u043b\u0430\u043c \u0440\u043e\u043b\u0438, \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0438\u043c\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u043f\u0440\u0438 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439. \u0412 \u043b\u0438\u0441\u0442\u0438\u043d\u0433\u0435 \u0432\u044b\u0448\u0435 \u0440\u043e\u043b\u0438 \u0443\u0436\u0435 \u0437\u0430\u0434\u0430\u043d\u044b, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043e\u043d \u0441\u0434\u0435\u043b\u0430\u043d \u0441 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430.<\/p>\n<h2>\u041d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0440\u043e\u043b\u0435\u0439 \u0443\u0437\u043b\u0430\u043c<\/h2>\n<p>\u0420\u043e\u043b\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e:<\/p>\n<pre><code>kubectl label node gw-1 node-role.kubernetes.io\/gateway=true kubectl label node gw-2 node-role.kubernetes.io\/gateway=true kubectl label node compute-1 node-role.kubernetes.io\/compute=true  # \u0435\u0441\u043b\u0438 \u043d\u0430\u0434\u043e \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0440\u043e\u043b\u044c kubectl label node compute-1 node-role.kubernetes.io\/compute-<\/code><\/pre>\n<h2>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 Ingress<\/h2>\n<p>\u0421\u0435\u0439\u0447\u0430\u0441 \u0432\u0441\u0435 \u0433\u043e\u0442\u043e\u0432\u043e \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435 Nginx Ingress \u043d\u0430 \u0443\u0437\u043b\u0430\u0445 <code>gw-1<\/code>, <code>gw-2<\/code>. \u0412\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u043e\u043c Nginx Ingress, \u043d\u043e \u0432\u043d\u0435\u0441\u0435\u043c \u0432 \u043d\u0435\u0433\u043e \u0440\u044f\u0434 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439:<\/p>\n<ul>\n<li>\n<p>\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0431\u0443\u0434\u0435\u043c \u0441 \u0441\u0435\u0442\u044c\u044e <code>hostNetwork<\/code>;<\/p>\n<\/li>\n<li>\n<p>\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0431\u0443\u0434\u0435\u043c \u0432 \u0432\u0438\u0434\u0435 Deployment \u0441 \u0444\u0430\u043a\u0442\u043e\u0440\u043e\u043c \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f &#171;2&#187;;<\/p>\n<\/li>\n<li>\n<p>\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0431\u0443\u0434\u0435\u043c \u043d\u0430 \u0443\u0437\u043b\u0430\u0445 \u0441 \u0440\u043e\u043b\u044c\u044e <code>gateway<\/code>.<\/p>\n<\/li>\n<\/ul>\n<p>\u0420\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c <code>hostNetwork<\/code>. \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 K8S \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043a\u0430\u043a\u043e\u0433\u043e-\u0442\u043e \u043e\u0431\u043b\u0430\u0447\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430, \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0447\u0435\u0440\u0435\u0437 API \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0443\u0437\u043b\u0443 External IP, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c\u0438 \u0434\u043b\u044f \u0441\u0432\u044f\u0437\u0438 \u0441 \u0432\u043d\u0435\u0448\u043d\u0438\u043c \u043c\u0438\u0440\u043e\u043c. \u0422\u0430\u043a \u0432\u043e\u0442, \u0443 \u043d\u0430\u0441 \u0432 bare metal \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 External IP \u043d\u0435\u0442:<\/p>\n<pre><code>kubectl get nodes --output wide NAME                STATUS   ROLES                  AGE     VERSION   INTERNAL-IP     EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION       CONTAINER-RUNTIME compute-1           Ready    compute                3d      v1.20.2   10.120.28.172   &lt;none&gt;        Ubuntu 18.04.5 LTS   4.15.0-135-generic   containerd:\/\/1.3.3 gw-1                Ready    gateway                2d4h    v1.20.2   10.120.29.231   &lt;none&gt;        Ubuntu 18.04.5 LTS   4.15.0-135-generic   containerd:\/\/1.3.3 gw-2                Ready    gateway                2d4h    v1.20.2   10.120.28.23    &lt;none&gt;        Ubuntu 18.04.5 LTS   4.15.0-135-generic   containerd:\/\/1.3.3 k8s-1               Ready    control-plane,master   3d      v1.20.2   10.120.29.187   &lt;none&gt;        Ubuntu 18.04.5 LTS   4.15.0-135-generic   containerd:\/\/1.3.3 k8s-2               Ready    control-plane,master   2d23h   v1.20.2   10.120.28.37    &lt;none&gt;        Ubuntu 18.04.5 LTS   4.15.0-135-generic   containerd:\/\/1.3.3 k8s-3               Ready    control-plane,master   2d23h   v1.20.2   10.120.29.204   &lt;none&gt;        Ubuntu 18.04.5 LTS   4.15.0-135-generic   containerd:\/\/1.3.3<\/code><\/pre>\n<p>\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043d\u0430\u0437\u043d\u0430\u0447\u0438\u0442\u044c \u044d\u0442\u043e\u0442 External IP \u043c\u043e\u0436\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0435\u0440\u0435\u0437 API, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043e\u043d \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u0438\u043c Kubernetes \u0432\u0440\u0435\u043c\u044f \u043e\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0439 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438. \u0412 \u043e\u0431\u0449\u0435\u043c, \u044d\u0442\u043e \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u043d\u0435 \u043c\u043e\u0436\u0435\u0442. <\/p>\n<p>\u042f \u0447\u0438\u0442\u0430\u043b \u0434\u043b\u0438\u043d\u043d\u0443\u044e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u043a\u0443 \u043d\u0430 GitHub, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0430\u0441\u044c \u043d\u0438\u0447\u0435\u043c \u0432\u0440\u0430\u0437\u0443\u043c\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c, \u0435\u0449\u0435 \u0441\u043e\u0432\u0435\u0442\u0443\u044e\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <a href=\"https:\/\/metallb.universe.tf\/\" rel=\"noopener noreferrer nofollow\">metallb<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u043e\u0436\u0435 \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u043e \u0432 \u043a\u0430\u043a\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438. \u041a\u0430\u043a \u0438\u0442\u043e\u0433, \u044f \u0440\u0435\u0448\u0438\u043b \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u0432\u0435\u0441\u0442\u0438 Nginx Ingress, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f <code>hostNetworking<\/code>, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u044d\u0442\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0443 \u0434\u0430\u043d\u043d\u043e\u0433\u043e Ingress \u0441 \u0430\u0434\u0440\u0435\u0441\u0430\u043c <code>0.0.0.0:443<\/code>, <code>0.0.0.0:80<\/code> \u0438 \u0440\u0435\u0448\u0430\u0435\u0442 \u043c\u043e\u044e \u0437\u0430\u0434\u0430\u0447\u0443.<\/p>\n<p>\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 Nginx Ingress \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<details class=\"spoiler\">\n<summary>\u041e\u0447\u0435\u043d\u044c \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 YAML<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>apiVersion: v1 kind: Namespace metadata:   name: ingress-nginx   labels:     app.kubernetes.io\/name: ingress-nginx     app.kubernetes.io\/instance: ingress-nginx  --- # Source: ingress-nginx\/templates\/controller-serviceaccount.yaml apiVersion: v1 kind: ServiceAccount metadata:   labels:     helm.sh\/chart: ingress-nginx-3.21.0     app.kubernetes.io\/name: ingress-nginx     app.kubernetes.io\/instance: ingress-nginx     app.kubernetes.io\/version: 0.43.0     app.kubernetes.io\/managed-by: Helm     app.kubernetes.io\/component: controller   name: ingress-nginx   namespace: ingress-nginx --- # Source: ingress-nginx\/templates\/controller-configmap.yaml apiVersion: v1 kind: ConfigMap metadata:   labels:     helm.sh\/chart: ingress-nginx-3.21.0     app.kubernetes.io\/name: ingress-nginx     app.kubernetes.io\/instance: ingress-nginx     app.kubernetes.io\/version: 0.43.0     app.kubernetes.io\/managed-by: Helm     app.kubernetes.io\/component: controller   name: ingress-nginx-controller   namespace: ingress-nginx data: --- # Source: ingress-nginx\/templates\/clusterrole.yaml apiVersion: rbac.authorization.k8s.io\/v1 kind: ClusterRole metadata:   labels:     helm.sh\/chart: ingress-nginx-3.21.0     app.kubernetes.io\/name: ingress-nginx     app.kubernetes.io\/instance: ingress-nginx     app.kubernetes.io\/version: 0.43.0     app.kubernetes.io\/managed-by: Helm   name: ingress-nginx rules:   - apiGroups:       - ''     resources:       - configmaps       - endpoints       - nodes       - pods       - secrets     verbs:       - list       - watch   - apiGroups:       - ''     resources:       - nodes     verbs:       - get   - apiGroups:       - ''     resources:       - services     verbs:       - get       - list       - watch   - apiGroups:       - extensions       - networking.k8s.io   # k8s 1.14+     resources:       - ingresses     verbs:       - get       - list       - watch   - apiGroups:       - ''     resources:       - events     verbs:       - create       - patch   - apiGroups:       - extensions       - networking.k8s.io   # k8s 1.14+     resources:       - ingresses\/status     verbs:       - update   - apiGroups:       - networking.k8s.io   # k8s 1.14+     resources:       - ingressclasses     verbs:       - get       - list       - watch --- # Source: ingress-nginx\/templates\/clusterrolebinding.yaml apiVersion: rbac.authorization.k8s.io\/v1 kind: ClusterRoleBinding metadata:   labels:     helm.sh\/chart: ingress-nginx-3.21.0     app.kubernetes.io\/name: ingress-nginx     app.kubernetes.io\/instance: ingress-nginx     app.kubernetes.io\/version: 0.43.0     app.kubernetes.io\/managed-by: Helm   name: ingress-nginx roleRef:   apiGroup: rbac.authorization.k8s.io   kind: ClusterRole   name: ingress-nginx subjects:   - kind: ServiceAccount     name: ingress-nginx     namespace: ingress-nginx --- # Source: ingress-nginx\/templates\/controller-role.yaml apiVersion: rbac.authorization.k8s.io\/v1 kind: Role metadata:   labels:     helm.sh\/chart: ingress-nginx-3.21.0     app.kubernetes.io\/name: ingress-nginx     app.kubernetes.io\/instance: ingress-nginx     app.kubernetes.io\/version: 0.43.0     app.kubernetes.io\/managed-by: Helm     app.kubernetes.io\/component: controller   name: ingress-nginx   namespace: ingress-nginx rules:   - apiGroups:       - ''     resources:       - namespaces     verbs:       - get   - apiGroups:       - ''     resources:       - configmaps       - pods       - secrets       - endpoints     verbs:       - get       - list       - watch   - apiGroups:       - ''     resources:       - services     verbs:       - get       - list       - watch   - apiGroups:       - extensions       - networking.k8s.io   # k8s 1.14+     resources:       - ingresses     verbs:       - get       - list       - watch   - apiGroups:       - extensions       - networking.k8s.io   # k8s 1.14+     resources:       - ingresses\/status     verbs:       - update   - apiGroups:       - networking.k8s.io   # k8s 1.14+     resources:       - ingressclasses     verbs:       - get       - list       - watch   - apiGroups:       - ''     resources:       - configmaps     resourceNames:       - ingress-controller-leader-nginx     verbs:       - get       - update   - apiGroups:       - ''     resources:       - configmaps     verbs:       - create   - apiGroups:       - ''     resources:       - events     verbs:       - create       - patch --- # Source: ingress-nginx\/templates\/controller-rolebinding.yaml apiVersion: rbac.authorization.k8s.io\/v1 kind: RoleBinding metadata:   labels:     helm.sh\/chart: ingress-nginx-3.21.0     app.kubernetes.io\/name: ingress-nginx     app.kubernetes.io\/instance: ingress-nginx     app.kubernetes.io\/version: 0.43.0     app.kubernetes.io\/managed-by: Helm     app.kubernetes.io\/component: controller   name: ingress-nginx   namespace: ingress-nginx roleRef:   apiGroup: rbac.authorization.k8s.io   kind: Role   name: ingress-nginx subjects:   - kind: ServiceAccount     name: ingress-nginx     namespace: ingress-nginx --- # Source: ingress-nginx\/templates\/controller-service-webhook.yaml apiVersion: v1 kind: Service metadata:   labels:     helm.sh\/chart: ingress-nginx-3.21.0     app.kubernetes.io\/name: ingress-nginx     app.kubernetes.io\/instance: ingress-nginx     app.kubernetes.io\/version: 0.43.0     app.kubernetes.io\/managed-by: Helm     app.kubernetes.io\/component: controller   name: ingress-nginx-controller-admission   namespace: ingress-nginx spec:   type: ClusterIP   ports:     - name: https-webhook       port: 443       targetPort: webhook   selector:     app.kubernetes.io\/name: ingress-nginx     app.kubernetes.io\/instance: ingress-nginx     app.kubernetes.io\/component: controller --- # Source: ingress-nginx\/templates\/controller-deployment.yaml apiVersion: apps\/v1 kind: Deployment metadata:   labels:     helm.sh\/chart: ingress-nginx-3.21.0     app.kubernetes.io\/name: ingress-nginx     app.kubernetes.io\/instance: ingress-nginx     app.kubernetes.io\/version: 0.43.0     app.kubernetes.io\/managed-by: Helm     app.kubernetes.io\/component: controller   name: ingress-nginx-controller   namespace: ingress-nginx spec:   replicas: 2   selector:     matchLabels:       app.kubernetes.io\/name: ingress-nginx       app.kubernetes.io\/instance: ingress-nginx       app.kubernetes.io\/component: controller   revisionHistoryLimit: 10   minReadySeconds: 0   template:     metadata:       labels:         app.kubernetes.io\/name: ingress-nginx         app.kubernetes.io\/instance: ingress-nginx         app.kubernetes.io\/component: controller     spec:       hostNetwork: true       dnsPolicy: ClusterFirst       containers:         - name: controller           image: k8s.gcr.io\/ingress-nginx\/controller:v0.43.0@sha256:9bba603b99bf25f6d117cf1235b6598c16033ad027b143c90fa5b3cc583c5713           imagePullPolicy: IfNotPresent           lifecycle:             preStop:               exec:                 command:                   - \/wait-shutdown           args:             - \/nginx-ingress-controller             - --election-id=ingress-controller-leader             - --ingress-class=nginx             - --configmap=$(POD_NAMESPACE)\/ingress-nginx-controller             - --validating-webhook=:8443             - --validating-webhook-certificate=\/usr\/local\/certificates\/cert             - --validating-webhook-key=\/usr\/local\/certificates\/key           securityContext:             capabilities:               drop:                 - ALL               add:                 - NET_BIND_SERVICE             runAsUser: 101             allowPrivilegeEscalation: true           env:             - name: POD_NAME               valueFrom:                 fieldRef:                   fieldPath: metadata.name             - name: POD_NAMESPACE               valueFrom:                 fieldRef:                   fieldPath: metadata.namespace             - name: LD_PRELOAD               value: \/usr\/local\/lib\/libmimalloc.so           livenessProbe:             httpGet:               path: \/healthz               port: 10254               scheme: HTTP             initialDelaySeconds: 10             periodSeconds: 10             timeoutSeconds: 1             successThreshold: 1             failureThreshold: 5           readinessProbe:             httpGet:               path: \/healthz               port: 10254               scheme: HTTP             initialDelaySeconds: 10             periodSeconds: 10             timeoutSeconds: 1             successThreshold: 1             failureThreshold: 3           ports:             - name: http               containerPort: 80               protocol: TCP             - name: https               containerPort: 443               protocol: TCP             - name: webhook               containerPort: 8443               protocol: TCP           volumeMounts:             - name: webhook-cert               mountPath: \/usr\/local\/certificates\/               readOnly: true           resources:             requests:               cpu: 100m               memory: 90Mi       nodeSelector:         node-role.kubernetes.io\/gateway: \"true\"       serviceAccountName: ingress-nginx       terminationGracePeriodSeconds: 300       volumes:         - name: webhook-cert           secret:             secretName: ingress-nginx-admission --- # Source: ingress-nginx\/templates\/admission-webhooks\/validating-webhook.yaml # before changing this value, check the required kubernetes version # https:\/\/kubernetes.io\/docs\/reference\/access-authn-authz\/extensible-admission-controllers\/#prerequisites apiVersion: admissionregistration.k8s.io\/v1 kind: ValidatingWebhookConfiguration metadata:   labels:     helm.sh\/chart: ingress-nginx-3.21.0     app.kubernetes.io\/name: ingress-nginx     app.kubernetes.io\/instance: ingress-nginx     app.kubernetes.io\/version: 0.43.0     app.kubernetes.io\/managed-by: Helm     app.kubernetes.io\/component: admission-webhook   name: ingress-nginx-admission webhooks:   - name: validate.nginx.ingress.kubernetes.io     matchPolicy: Equivalent     rules:       - apiGroups:           - networking.k8s.io         apiVersions:           - v1beta1         operations:           - CREATE           - UPDATE         resources:           - ingresses     failurePolicy: Fail     sideEffects: None     admissionReviewVersions:       - v1       - v1beta1     clientConfig:       service:         namespace: ingress-nginx         name: ingress-nginx-controller-admission         path: \/networking\/v1beta1\/ingresses --- # Source: ingress-nginx\/templates\/admission-webhooks\/job-patch\/serviceaccount.yaml apiVersion: v1 kind: ServiceAccount metadata:   name: ingress-nginx-admission   annotations:     helm.sh\/hook: pre-install,pre-upgrade,post-install,post-upgrade     helm.sh\/hook-delete-policy: before-hook-creation,hook-succeeded   labels:     helm.sh\/chart: ingress-nginx-3.21.0     app.kubernetes.io\/name: ingress-nginx     app.kubernetes.io\/instance: ingress-nginx     app.kubernetes.io\/version: 0.43.0     app.kubernetes.io\/managed-by: Helm     app.kubernetes.io\/component: admission-webhook   namespace: ingress-nginx --- # Source: ingress-nginx\/templates\/admission-webhooks\/job-patch\/clusterrole.yaml apiVersion: rbac.authorization.k8s.io\/v1 kind: ClusterRole metadata:   name: ingress-nginx-admission   annotations:     helm.sh\/hook: pre-install,pre-upgrade,post-install,post-upgrade     helm.sh\/hook-delete-policy: before-hook-creation,hook-succeeded   labels:     helm.sh\/chart: ingress-nginx-3.21.0     app.kubernetes.io\/name: ingress-nginx     app.kubernetes.io\/instance: ingress-nginx     app.kubernetes.io\/version: 0.43.0     app.kubernetes.io\/managed-by: Helm     app.kubernetes.io\/component: admission-webhook rules:   - apiGroups:       - admissionregistration.k8s.io     resources:       - validatingwebhookconfigurations     verbs:       - get       - update --- # Source: ingress-nginx\/templates\/admission-webhooks\/job-patch\/clusterrolebinding.yaml apiVersion: rbac.authorization.k8s.io\/v1 kind: ClusterRoleBinding metadata:   name: ingress-nginx-admission   annotations:     helm.sh\/hook: pre-install,pre-upgrade,post-install,post-upgrade     helm.sh\/hook-delete-policy: before-hook-creation,hook-succeeded   labels:     helm.sh\/chart: ingress-nginx-3.21.0     app.kubernetes.io\/name: ingress-nginx     app.kubernetes.io\/instance: ingress-nginx     app.kubernetes.io\/version: 0.43.0     app.kubernetes.io\/managed-by: Helm     app.kubernetes.io\/component: admission-webhook roleRef:   apiGroup: rbac.authorization.k8s.io   kind: ClusterRole   name: ingress-nginx-admission subjects:   - kind: ServiceAccount     name: ingress-nginx-admission     namespace: ingress-nginx --- # Source: ingress-nginx\/templates\/admission-webhooks\/job-patch\/role.yaml apiVersion: rbac.authorization.k8s.io\/v1 kind: Role metadata:   name: ingress-nginx-admission   annotations:     helm.sh\/hook: pre-install,pre-upgrade,post-install,post-upgrade     helm.sh\/hook-delete-policy: before-hook-creation,hook-succeeded   labels:     helm.sh\/chart: ingress-nginx-3.21.0     app.kubernetes.io\/name: ingress-nginx     app.kubernetes.io\/instance: ingress-nginx     app.kubernetes.io\/version: 0.43.0     app.kubernetes.io\/managed-by: Helm     app.kubernetes.io\/component: admission-webhook   namespace: ingress-nginx rules:   - apiGroups:       - ''     resources:       - secrets     verbs:       - get       - create --- # Source: ingress-nginx\/templates\/admission-webhooks\/job-patch\/rolebinding.yaml apiVersion: rbac.authorization.k8s.io\/v1 kind: RoleBinding metadata:   name: ingress-nginx-admission   annotations:     helm.sh\/hook: pre-install,pre-upgrade,post-install,post-upgrade     helm.sh\/hook-delete-policy: before-hook-creation,hook-succeeded   labels:     helm.sh\/chart: ingress-nginx-3.21.0     app.kubernetes.io\/name: ingress-nginx     app.kubernetes.io\/instance: ingress-nginx     app.kubernetes.io\/version: 0.43.0     app.kubernetes.io\/managed-by: Helm     app.kubernetes.io\/component: admission-webhook   namespace: ingress-nginx roleRef:   apiGroup: rbac.authorization.k8s.io   kind: Role   name: ingress-nginx-admission subjects:   - kind: ServiceAccount     name: ingress-nginx-admission     namespace: ingress-nginx --- # Source: ingress-nginx\/templates\/admission-webhooks\/job-patch\/job-createSecret.yaml apiVersion: batch\/v1 kind: Job metadata:   name: ingress-nginx-admission-create   annotations:     helm.sh\/hook: pre-install,pre-upgrade     helm.sh\/hook-delete-policy: before-hook-creation,hook-succeeded   labels:     helm.sh\/chart: ingress-nginx-3.21.0     app.kubernetes.io\/name: ingress-nginx     app.kubernetes.io\/instance: ingress-nginx     app.kubernetes.io\/version: 0.43.0     app.kubernetes.io\/managed-by: Helm     app.kubernetes.io\/component: admission-webhook   namespace: ingress-nginx spec:   template:     metadata:       name: ingress-nginx-admission-create       labels:         helm.sh\/chart: ingress-nginx-3.21.0         app.kubernetes.io\/name: ingress-nginx         app.kubernetes.io\/instance: ingress-nginx         app.kubernetes.io\/version: 0.43.0         app.kubernetes.io\/managed-by: Helm         app.kubernetes.io\/component: admission-webhook     spec:       containers:         - name: create           image: docker.io\/jettech\/kube-webhook-certgen:v1.5.1           imagePullPolicy: IfNotPresent           args:             - create             - --host=ingress-nginx-controller-admission,ingress-nginx-controller-admission.$(POD_NAMESPACE).svc             - --namespace=$(POD_NAMESPACE)             - --secret-name=ingress-nginx-admission           env:             - name: POD_NAMESPACE               valueFrom:                 fieldRef:                   fieldPath: metadata.namespace       restartPolicy: OnFailure       serviceAccountName: ingress-nginx-admission       securityContext:         runAsNonRoot: true         runAsUser: 2000 --- # Source: ingress-nginx\/templates\/admission-webhooks\/job-patch\/job-patchWebhook.yaml apiVersion: batch\/v1 kind: Job metadata:   name: ingress-nginx-admission-patch   annotations:     helm.sh\/hook: post-install,post-upgrade     helm.sh\/hook-delete-policy: before-hook-creation,hook-succeeded   labels:     helm.sh\/chart: ingress-nginx-3.21.0     app.kubernetes.io\/name: ingress-nginx     app.kubernetes.io\/instance: ingress-nginx     app.kubernetes.io\/version: 0.43.0     app.kubernetes.io\/managed-by: Helm     app.kubernetes.io\/component: admission-webhook   namespace: ingress-nginx spec:   template:     metadata:       name: ingress-nginx-admission-patch       labels:         helm.sh\/chart: ingress-nginx-3.21.0         app.kubernetes.io\/name: ingress-nginx         app.kubernetes.io\/instance: ingress-nginx         app.kubernetes.io\/version: 0.43.0         app.kubernetes.io\/managed-by: Helm         app.kubernetes.io\/component: admission-webhook     spec:       containers:         - name: patch           image: docker.io\/jettech\/kube-webhook-certgen:v1.5.1           imagePullPolicy: IfNotPresent           args:             - patch             - --webhook-name=ingress-nginx-admission             - --namespace=$(POD_NAMESPACE)             - --patch-mutating=false             - --secret-name=ingress-nginx-admission             - --patch-failure-policy=Fail           env:             - name: POD_NAMESPACE               valueFrom:                 fieldRef:                   fieldPath: metadata.namespace       restartPolicy: OnFailure       serviceAccountName: ingress-nginx-admission       securityContext:         runAsNonRoot: true         runAsUser: 2000 <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0432 \u0435\u0433\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>kubectl apply -f nginx-ingress.yaml<\/code>, \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0434\u0432\u0430 POD-\u0430 Nginx, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0438\u0445\u0441\u044f \u043d\u0430 \u0443\u0437\u043b\u0430\u0445 <code>gw-1<\/code>, <code>gw-2<\/code> \u0438 \u0441\u043b\u0443\u0448\u0430\u044e\u0449\u0438\u0445 443-\u0439 \u0438 80-\u0439 \u043f\u043e\u0440\u0442\u044b:<\/p>\n<pre><code>kubectl get pods --all-namespaces | grep nginx ingress-nginx          ingress-nginx-admission-create-4mm9m         0\/1     Completed   0          46h ingress-nginx          ingress-nginx-admission-patch-7jkwg          0\/1     Completed   2          46h ingress-nginx          ingress-nginx-controller-b966cf6cd-7kpzm     1\/1     Running     1          46h ingress-nginx          ingress-nginx-controller-b966cf6cd-ckl97     1\/1     Running     0          46h<\/code><\/pre>\n<p>\u041d\u0430 \u0443\u0437\u043b\u0430\u0445 <code>gw-1<\/code>, <code>gw-2<\/code>:<\/p>\n<pre><code>sudo netstat -tnlp | grep -E ':(443|80)' tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      2661\/nginx: master   tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      2661\/nginx: master   tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      2661\/nginx: master   tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      2661\/nginx: master   tcp6       0      0 :::443                  :::*                    LISTEN      2661\/nginx: master   tcp6       0      0 :::443                  :::*                    LISTEN      2661\/nginx: master   tcp6       0      0 :::80                   :::*                    LISTEN      2661\/nginx: master   tcp6       0      0 :::80                   :::*                    LISTEN      2661\/nginx: master   <\/code><\/pre>\n<p>\u041c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u0442\u0443\u0447\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 <code>gw-1<\/code>, <code>gw-2<\/code> \u043f\u043e 80-\u043c\u0443 \u043f\u043e\u0440\u0442\u0443 \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 Nginx. \u0414\u0430\u043b\u0435\u0435, \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 <code>gw-1<\/code>, <code>gw-2<\/code> \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0435\u0439 DNS, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432 CDN \u0438 \u0442.\u043f.<\/p>\n<p>\u041f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 inress \u043c\u043e\u0436\u043d\u043e, \u0441\u043e\u0437\u0434\u0430\u0432 \u0441\u0435\u0440\u0432\u0438\u0441, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 Ingress \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0440\u0430\u0444\u0438\u043a (\u0432\u0437\u044f\u0442\u043e <a href=\"https:\/\/www.digitalocean.com\/community\/tutorials\/how-to-set-up-an-nginx-ingress-with-cert-manager-on-digitalocean-kubernetes-ru\" rel=\"noopener noreferrer nofollow\">\u043e\u0442\u0441\u044e\u0434\u0430<\/a>) &#8212; <code>echo1.yaml<\/code>:<\/p>\n<pre><code>apiVersion: v1 kind: Service metadata:   name: echo1 spec:   ports:   - port: 80     targetPort: 5678   selector:     app: echo1 --- apiVersion: apps\/v1 kind: Deployment metadata:   name: echo1 spec:   selector:     matchLabels:       app: echo1   replicas: 2   template:     metadata:       labels:         app: echo1     spec:       containers:       - name: echo1         image: hashicorp\/http-echo         args:         - \"-text=echo1\"         ports:         - containerPort: 5678<\/code><\/pre>\n<p>\u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>kubectl apply -f echo1.yaml<\/code>. \u0422\u0435\u043f\u0435\u0440\u044c \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u043e Ingress (<code>ingress-echo1.yaml<\/code>):<\/p>\n<pre><code>apiVersion: networking.k8s.io\/v1beta1 kind: Ingress metadata:   name: echo-ingress spec:   rules:   - host: echo1.example.com     http:       paths:       - backend:           serviceName: echo1           servicePort: 80<\/code><\/pre>\n<p>\u0412\u044b\u043f\u043e\u043b\u043d\u0438\u043c \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442 <code>kubectl apply -f ingress-echo1.yaml<\/code>. \u0422\u0435\u043f\u0435\u0440\u044c, \u0435\u0441\u043b\u0438 \u043d\u0430 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u043c \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0435 \u0432 <code>\/etchosts<\/code> \u0432\u043d\u0435\u0441\u0442\u0438 \u0437\u0430\u043f\u0438\u0441\u044c \u0434\u043b\u044f <code>echo1.example.com<\/code>:<\/p>\n<pre><code>127.0.0.1\tlocalhost 127.0.1.1\tmanager  # The following lines are desirable for IPv6 capable hosts ::1     localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters  X.Y.Z.C echo1.example.com<\/code><\/pre>\n<p>\u0422\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u0440\u043e\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u0447\u0435\u0440\u0435\u0437 Nginx Ingress. \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>curl<\/code>:<\/p>\n<pre><code>curl echo1.example.com echo1<\/code><\/pre>\n<h2>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 K8S Dashboard<\/h2>\n<p>\u0414\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 Dashboard \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443:<\/p>\n<pre><code class=\"bash\">kubectl apply -f https:\/\/raw.githubusercontent.com\/kubernetes\/dashboard\/v2.0.0\/aio\/deploy\/recommended.yaml<\/code><\/pre>\n<p>Dashboard \u0438\u043c\u0435\u0435\u0442 \u0440\u044f\u0434 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043e\u043d \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0447\u0435\u0440\u0435\u0437 <code>http<\/code>, \u0435\u0441\u043b\u0438 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0435 \u0441 <code>localhost<\/code>. \u0412 \u0446\u0435\u043b\u043e\u043c, \u043d\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u043a-\u043b\u0438\u0431\u043e \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a Dashboard \u0438\u0437\u0432\u043d\u0435 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0447\u0435\u0440\u0435\u0437 Ingress. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, Dashboard \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 RBAC Kubernetes, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438 \u0434\u0430\u0442\u044c \u0435\u043c\u0443 \u043f\u0440\u0430\u0432\u0430 \u043d\u0430 Dashboard.<\/p>\n<p>\u0418\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u0432\u0437\u044f\u0442\u0430 \u0441 <a href=\"https:\/\/github.com\/kubernetes\/dashboard\/blob\/master\/docs\/user\/access-control\/creating-sample-user.md\" rel=\"noopener noreferrer nofollow\">\u044d\u0442\u043e\u0439<\/a> \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b. \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0430\u043a\u043a\u0430\u0443\u043d\u0442:<\/p>\n<pre><code class=\"bash\">cat &lt;&lt;EOF | kubectl apply -f - apiVersion: v1 kind: ServiceAccount metadata:   name: admin-user   namespace: kubernetes-dashboard EOF<\/code><\/pre>\n<p>\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u0440\u043e\u043b\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f:<\/p>\n<pre><code class=\"bash\">cat &lt;&lt;EOF | kubectl apply -f - apiVersion: rbac.authorization.k8s.io\/v1 kind: ClusterRoleBinding metadata:   name: admin-user roleRef:   apiGroup: rbac.authorization.k8s.io   kind: ClusterRole   name: cluster-admin subjects: - kind: ServiceAccount   name: admin-user   namespace: kubernetes-dashboard EOF<\/code><\/pre>\n<p>\u041f\u043e\u043b\u0443\u0447\u0438\u043c \u0442\u043e\u043a\u0435\u043d, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0441\u043c\u043e\u0436\u0435\u0442 \u0432\u043e\u0439\u0442\u0438 \u0432 Dashboard:<\/p>\n<pre><code class=\"bash\">kubectl -n kubernetes-dashboard get secret $(kubectl -n kubernetes-dashboard get sa\/admin-user -o jsonpath=\"{.secrets[0].name}\") -o go-template=\"{{.data.token | base64decode}}\"<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u043d\u0430 \u0432\u0430\u0448\u0435\u0439 \u043c\u0430\u0448\u0438\u043d\u0435 \u0443\u0436\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d <code>kubect<\/code> \u0438 \u0435\u0441\u0442\u044c <code>$HOME\/.kube\/config<\/code>, \u0430 \u0441\u0430\u043c\u0430 \u043c\u0430\u0448\u0438\u043d\u0430 &#171;\u0432\u0438\u0434\u0438\u0442&#187; <code>k8s-cp<\/code>, \u0442\u043e \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c <code>kubectl proxy<\/code> \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a Dashboard \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435: <a href=\"http:\/\/localhost:8001\/api\/v1\/namespaces\/kubernetes-dashboard\/services\/https:kubernetes-dashboard:\/proxy\/\" rel=\"noopener noreferrer nofollow\">http:\/\/localhost:8001\/api\/v1\/namespaces\/kubernetes-dashboard\/services\/https:kubernetes-dashboard:\/proxy\/<\/a>.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0436\u0435 \u0432\u0430\u0448\u0430 \u043c\u0430\u0448\u0438\u043d\u0430 \u0441 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043e\u043c \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u043d\u0435 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430, \u0442\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 \u0448\u0430\u0433\u0443, \u0433\u0434\u0435 \u043c\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043c \u043f\u0440\u043e\u0431\u0440\u043e\u0441 API Kubernetes \u043d\u0430\u0440\u0443\u0436\u0443 \u0447\u0435\u0440\u0435\u0437 HAProxy.<\/p>\n<h2>\u0414\u043e\u0441\u0442\u0443\u043f \u043a API K8S \u0438\u0437 \u0432\u043d\u0435\u0448\u043d\u0435\u0439 \u0441\u0435\u0442\u0438<\/h2>\n<p>\u041d\u0430 \u0443\u0437\u043b\u0430\u0445 <code>gw-1<\/code>, <code>gw-2<\/code> \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c <code>haproxy<\/code>. \u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b <code>\/etc\/haproxy\/haproxy.cfg<\/code> \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0434\u0430\u043b\u0435\u0435 \u0441\u0435\u043a\u0446\u0438\u0438 <code>defaults<\/code> \u043e\u043d \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u043b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code>defaults     # mode is inherited by sections that follow     mode tcp  frontend k8s     # receives traffic from clients     bind :6443     default_backend kubernetes  backend kubernetes     # relays the client messages to servers     server k8s k8s-cp:6443 <\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u043a API K8S \u0438\u0437\u0432\u043d\u0435, \u0443\u043a\u0430\u0437\u0430\u0432 \u0432 <code>\/etc\/hosts<\/code> \u0441\u0432\u043e\u0435\u0439 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u044b \u0430\u0434\u0440\u0435\u0441 <code>gw-1<\/code> \u0438\u043b\u0438 <code>gw-2<\/code> \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 <code>k8s-cp<\/code>. \u0412\u0430\u043c \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0441 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u044b \u0432\u0441\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b <code>kubectl<\/code>, \u0432\u043a\u043b\u044e\u0447\u0430\u044f <code>kubectl proxy<\/code>:<\/p>\n<pre><code>kubectl proxy Starting to serve on 127.0.0.1:8001<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435  <a href=\"http:\/\/localhost:8001\/api\/v1\/namespaces\/kubernetes-dashboard\/services\/https:kubernetes-dashboard:\/proxy\/\" rel=\"noopener noreferrer nofollow\">http:\/\/localhost:8001\/api\/v1\/namespaces\/kubernetes-dashboard\/services\/https:kubernetes-dashboard:\/proxy\/<\/a> \u0438 \u043d\u0430\u0441\u043b\u0430\u0434\u0438\u0442\u044c\u0441\u044f \u0432\u0438\u0434\u043e\u043c \u043f\u0440\u0438\u0433\u043b\u0430\u0448\u0435\u043d\u0438\u044f \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 Dashboard K8S:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/44d\/e3a\/444\/44de3a4442398675f9882dc1acab5217.png\" width=\"1920\" height=\"1080\"><figcaption><\/figcaption><\/figure>\n<p>\u0412\u0432\u043e\u0434\u0438\u043c \u0442\u043e\u043a\u0435\u043d \u0434\u043b\u044f \u0440\u0430\u043d\u0435\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f Dasboard, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e:<\/p>\n<pre><code>kubectl -n kubernetes-dashboard get secret $(kubectl -n kubernetes-dashboard get sa\/admin-user -o jsonpath=\"{.secrets[0].name}\") -o go-template=\"{{.data.token | base64decode}}\" eyJhbGciOiJSUzI1NiIsImtpZCI6IlFkcGxwMTN2YlpyNS1TOTYtUnVYdsfadfsdjfksdlfjm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLWd6anprIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiJjM2RiOWFkMS0yYjdmLTQ3YTYtOTM3My1hZWI2ZjJkZjk0NTAiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZXJuZXRlcy1kYXNoYm9hcmQ6YWRtaW4tdXNlciJ9.ht-RyqLXY4UzBnxIzJcnQn8Kk2iHWZzKVeAjUhKkJ-vOAtyqBu50rExgiRWsEHWfJp1p9xN8sXFKg62FFFbHWftPf6PmwfcBK2lXPy6OL9OaooP17WJVn75KKXIZHPWLO9VmRXPB1S-v2xFuG_J8jHB8pZHJlFjp4zIXfB--QwhrxeoTt5zv3CfXCl1_VYgCoqaxRsa7e892-vtMijBo7EZfJiyuAUQr_TsAIDY3zOWFJeHbwPFWzL_1fF9Y2o3r0pw7hYZHUoI8Z-3hbfOi10QBRyQlNZTMFSh7Z38RRbV1tw2ZmMvgSQyHa9TZFy2kYik6VnugNB2cilamo_b7hg<\/code><\/pre>\n<p>\u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043d\u0430 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u044d\u043a\u0440\u0430\u043d Dashboard:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/354\/9d6\/05b\/3549d605be180320155d843f2c1be2b7.png\" width=\"1920\" height=\"1080\"><figcaption><\/figcaption><\/figure>\n<h2>\u0412\u043c\u0435\u0441\u0442\u043e \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f<\/h2>\n<p>\u041a\u0430\u043a \u044f \u043f\u0438\u0441\u0430\u043b \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0441\u0442\u0430\u0442\u044c\u0438, \u0443 \u043c\u0435\u043d\u044f \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u043e\u043f\u044b\u0442 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0441\u0438\u0441\u0442\u0435\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430\u043c\u0438 \u043d\u0430 \u0431\u0430\u0437\u0435 Docker, Apache Mesos (DC\/OS). \u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f Kubernetes \u043c\u043d\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u0441\u043b\u043e\u0436\u043d\u043e\u0439, \u0437\u0430\u043f\u0443\u0442\u0430\u043d\u043d\u043e\u0439 \u0438 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430\u0440\u043d\u043e\u0439. \u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u044f \u043f\u0440\u043e\u0448\u0435\u0440\u0441\u0442\u0438\u043b \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e\u043c \u043c\u043d\u043e\u0433\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432, Issue GitHub \u0438, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e Kubernetes. \u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u043e\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0432\u0430\u043c \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u044c \u0441\u0432\u043e\u0435 \u0432\u0440\u0435\u043c\u044f.<\/p>\n<\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/540220\/\"> https:\/\/habr.com\/ru\/post\/540220\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text_v2\" id=\"post-content-body\">\n<p>\u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u044f \u0431\u044b \u0445\u043e\u0442\u0435\u043b \u0438\u043c\u0435\u0442\u044c \u0442\u0430\u043a\u0443\u044e \u0441\u0442\u0430\u0442\u044c\u044e \u043f\u0435\u0440\u0435\u0434 \u0433\u043b\u0430\u0437\u0430\u043c\u0438, \u043a\u043e\u0433\u0434\u0430 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043b \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u043f\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438. \u0421\u0440\u0430\u0437\u0443 \u0445\u043e\u0447\u0443 \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u043d\u0435 \u044f\u0432\u043b\u044f\u044e\u0441\u044c \u044d\u043a\u0441\u043f\u0435\u0440\u0442\u043e\u043c \u0432 K8S, \u043e\u0434\u043d\u0430\u043a\u043e \u0438\u043c\u0435\u043b \u043e\u043f\u044b\u0442 \u0441 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435\u043c \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432\u044b\u0445 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043e\u043a DC\/OS (\u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043d\u0430 Apache Mesos). \u0414\u043e\u043b\u0433\u043e\u0435 \u0432\u0440\u0435\u043c\u044f K8S \u043c\u0435\u043d\u044f \u043e\u0442\u043f\u0443\u0433\u0438\u0432\u0430\u043b \u0442\u0435\u043c, \u0447\u0442\u043e, \u043f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u0435\u0433\u043e \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f, \u0442\u0435\u0431\u044f \u0437\u0430\u043a\u0438\u0434\u044b\u0432\u0430\u044e\u0442 \u043a\u0443\u0447\u0435\u0439 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u0439 \u0438 \u0442\u0435\u0440\u043c\u0438\u043d\u043e\u0432, \u043e\u0442\u0447\u0435\u0433\u043e \u043c\u043e\u0437\u0433 \u0432\u0437\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f.<\/p>\n<p>\u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u0443 \u043c\u0435\u043d\u044f \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u044b\u0439 Bare Metal \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0432 \u0441\u0432\u044f\u0437\u0438 \u0441 \u0447\u0435\u043c \u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f. \u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0430 \u044f \u0437\u0430\u0442\u0440\u043e\u043d\u0443 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0430\u0441\u043f\u0435\u043a\u0442\u044b:<\/p>\n<ul>\n<li>\n<p>\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u0430\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 K8S \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e kubeadm \u043d\u0430 \u0443\u0437\u043b\u0430\u0445 \u0441 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 NIC;<\/p>\n<\/li>\n<li>\n<p>\u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0433\u043e Control Plane \u0441 \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u043c \u043f\u043e \u043e\u0431\u0449\u0435\u043c\u0443 IP \u0438 DNS-\u0438\u043c\u0435\u043d\u0438;<\/p>\n<\/li>\n<li>\n<p>\u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f Ingress \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u043d\u0430 \u0431\u0430\u0437\u0435 Nginx \u043d\u0430 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u0443\u0437\u043b\u0430\u0445 \u0441 \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u043c \u0438\u0437 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0439 \u0441\u0435\u0442\u0438;<\/p>\n<\/li>\n<li>\n<p>\u043f\u0440\u043e\u0431\u0440\u043e\u0441 K8S API \u0432 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u0443\u044e \u0441\u0435\u0442\u044c;<\/p>\n<\/li>\n<li>\n<p>\u0434\u043e\u0441\u0442\u0443\u043f \u043a K8S Dashboard UI \u0441 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430.<\/p>\n<\/li>\n<\/ul>\n<p>\u042f \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 \u0432 \u0441\u0440\u0435\u0434\u0435 Ubuntu 18.04, \u0432 \u0441\u0432\u044f\u0437\u0438 \u0441 \u0447\u0435\u043c \u0447\u0430\u0441\u0442\u044c \u0438\u0437 \u0448\u0430\u0433\u043e\u0432 \u043c\u043e\u0436\u0435\u0442 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432 \u0432\u0430\u0448\u0435\u043c \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u0435, \u043f\u043b\u044e\u0441 \u0443 \u043c\u0435\u043d\u044f \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0438 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 Keepalived, Pacemaker. \u0412 \u0442\u0435\u043a\u0441\u0442\u0435 \u043c\u043e\u0433\u0443\u0442 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0442\u044c\u0441\u044f \u0444\u0440\u0430\u0437\u044b &#171;\u043a\u0430\u043a \u044f \u043f\u043e\u043d\u044f\u043b&#8230;&#187; \u0438 &#171;\u044f \u043d\u0435 \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u043d\u0435 \u0432\u043f\u043e\u043b\u043d\u0435 \u043f\u043e\u043d\u044f\u043b&#8230;&#187;.<\/p>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0443\u0437\u043b\u043e\u0432\u0443\u044e \u0442\u043e\u043f\u043e\u043b\u043e\u0433\u0438\u044e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u0442\u044c K8S. \u042d\u0442\u043e \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u043d\u0430\u044f \u0442\u043e\u043f\u043e\u043b\u043e\u0433\u0438\u044f, \u0431\u0435\u0437 \u043b\u0438\u0448\u043d\u0438\u0445 \u0434\u0435\u0442\u0430\u043b\u0435\u0439.<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u041e\u0442\u043b\u0438\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c\u044e \u0432 \u043c\u043e\u0435\u043c \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e, \u0447\u0442\u043e \u0443 \u0432\u0441\u0435\u0445 \u0443\u0437\u043b\u043e\u0432 \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u0434\u0432\u0430 \u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044f &#8212; \u043d\u0430 eth0 \u0432\u0441\u0435\u0433\u0434\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441, \u0430 \u043d\u0430 <code>eth1<\/code> &#8212; \u0430\u0434\u0440\u0435\u0441 \u0438\u0437 \u0441\u0435\u0442\u0438 <code>10.120.0.0\/16<\/code>. <\/p>\n<blockquote>\n<p>\u0421\u0442\u043e\u0438\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e K8S \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0449\u0435 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u0432 \u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u043a\u043e\u0433\u0434\u0430 \u043c\u0430\u0448\u0438\u043d\u044b \u0438\u043c\u0435\u044e\u0442 \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 NIC. \u0415\u0441\u043b\u0438 \u0432\u0430\u0448\u0430 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u0430\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u0430\u0448\u0438\u043d\u044b \u0441 \u043e\u0434\u043d\u0438\u043c \u0441\u0435\u0442\u0435\u0432\u044b\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c \u0438 \u0438\u043c\u0435\u0442\u044c \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 &#8212; \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e \u0442\u0430\u043a \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u0435\u043b\u0430\u0442\u044c. <\/p>\n<\/p>\n<p>\u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u043e\u0435\u0439 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0442\u0430\u043a\u0430\u044f \u0442\u043e\u043f\u043e\u043b\u043e\u0433\u0438\u044f \u0445\u043e\u0442\u044f \u0438 \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u0430, \u043d\u043e \u044f \u043f\u043e\u043d\u044f\u043b \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e K8S \u043f\u0440\u043e\u0449\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043c\u0430\u0448\u0438\u043d \u0441 \u043e\u0434\u043d\u043e\u0439 NIC \u0443\u0436\u0435 \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043d\u0430\u0447\u0430\u043b \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0435\u0448\u0438\u043b &#171;\u043f\u043e\u0431\u0435\u0434\u0438\u0442\u044c&#187; \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0442\u043e\u043f\u043e\u043b\u043e\u0433\u0438\u0438, \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0432 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u043a\u0430\u0436\u0434\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0438\u0437 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441\u0435\u0442\u0435\u0439. <\/p>\n<\/p>\n<p>Kubeadm \u043f\u0440\u0438 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0438 \u0441\u043b\u0443\u0436\u0431 \u0441\u0447\u0438\u0442\u0430\u0435\u0442, \u0447\u0442\u043e \u0447\u0442\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 IP-\u0430\u0434\u0440\u0435\u0441 &#8212; \u044d\u0442\u043e \u0442\u043e\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0442\u043e\u0439 \u0436\u0435 \u0441\u0435\u0442\u0438, \u0433\u0434\u0435 \u0448\u043b\u044e\u0437 &#171;\u043f\u043e-\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e&#187;, \u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043d\u0435 \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u043d\u0438\u0447\u0435\u0433\u043e \u0445\u043e\u0440\u043e\u0448\u0435\u0433\u043e \u043d\u0435 \u0432\u044b\u0439\u0434\u0435\u0442.<\/p>\n<\/blockquote>\n<p>\u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f Enterprise \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u0441 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0432\u043d\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f K8S, \u043c\u0430\u0448\u0438\u043d\u044b \u0441 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u0441\u0435\u0442\u0435\u0432\u044b\u043c\u0438 \u043a\u0430\u0440\u0442\u0430\u043c\u0438 \u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u043c \u043a \u043d\u0438\u043c \u0438\u0437 \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u0435\u0442\u0435\u0439 &#8212; \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0440\u044f\u0434\u043e\u0432\u0430\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0430\u043d\u043d\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0432\u043f\u043e\u043b\u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u0442\u044c\u0441\u044f, \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, Ceph \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0443\u0437\u043b\u0430\u043c \u043f\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0432\u044b\u0441\u043e\u043a\u043e\u0441\u043a\u043e\u0440\u043e\u0441\u0442\u043d\u043e\u0439 \u0441\u0435\u0442\u0438 \u0438\u043b\u0438 VLAN-\u0443.<\/p>\n<p>\u0425\u043e\u0447\u0443 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0441\u0432\u043e\u0439 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u044f \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Ansible, \u043d\u043e \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f \u043d\u0435 \u0431\u0443\u0434\u0443 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c playbook-\u0438, \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u0443\u044f\u0441\u044c \u043d\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 \u0440\u0443\u043a\u0430\u043c\u0438. \u0418\u0442\u0430\u043a, \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u043c. <\/p>\n<h2> \u0417\u0430\u043c\u0435\u043d\u0430 DNS-\u0440\u0435\u043a\u0443\u0440\u0441\u043e\u0440\u0430<\/h2>\n<p>\u042f \u0445\u043e\u0447\u0443 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c \u0432\u0441\u0435\u0445 \u0443\u0437\u043b\u043e\u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0447\u0435\u0440\u0435\u0437 DNS-\u0438\u043c\u0435\u043d\u0430 \u043f\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u043c IP-\u0430\u0434\u0440\u0435\u0441\u0430\u043c, \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0432 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u0438\u043c\u0435\u043d \u0443\u0437\u043b\u043e\u0432 \u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e, \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u0445 <code>gw-1<\/code>, <code>gw-2<\/code> \u044f \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443 pdns-recursor \u0438 \u0443\u043a\u0430\u0436\u0443 \u0435\u0433\u043e \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0440\u0435\u043a\u0443\u0440\u0441\u043e\u0440\u0430 \u043d\u0430 \u0432\u0441\u0435\u0445 \u0443\u0437\u043b\u0430\u0445 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430.<\/p>\n<p>\u0411\u0430\u0437\u043e\u0432\u0430\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 pdns-recursor \u043d\u0430 <code>gw-1<\/code>, <code>gw-2<\/code> \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432:<\/p>\n<pre><code class=\"bash\">allow-from=10.120.0.0\/8, 127.0.0.0\/8 etc-hosts-file=\/etc\/hosts.resolv export-etc-hosts=on export-etc-hosts-search-suffix=cluster<\/code><\/pre>\n<p>\u0421\u0430\u043c \u0444\u0430\u0439\u043b <code>\/etc\/hosts.resolv<\/code> \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e ansible \u0438 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"bash\"># Ansible managed  10.120.29.231  gw-1 gw-1 10.120.28.23  gw-2 gw-2 10.120.29.32  video-accessors-1 video-accessors-1 10.120.29.226  video-accessors-2 video-accessors-2 10.120.29.153  mongo-1 mongo-1 10.120.29.210  mongo-2 mongo-2 10.120.29.220  mongo-3 mongo-3 10.120.28.172  compute-1 compute-1 10.120.28.26  compute-2 compute-2 10.120.29.70  compute-3 compute-3 10.120.28.127  zk-1 zk-1 10.120.29.110  zk-2 zk-2 10.120.29.245  zk-3 zk-3 10.120.28.21  minio-1 minio-1 10.120.28.25  minio-2 minio-2 10.120.28.158  minio-3 minio-3 10.120.28.122  minio-4 minio-4 10.120.29.187  k8s-1 k8s-1 10.120.28.37  k8s-2 k8s-2 10.120.29.204  k8s-3 k8s-3 10.120.29.135  kafka-1 kafka-1 10.120.29.144  kafka-2 kafka-2 10.120.28.130  kafka-3 kafka-3 10.120.29.194  clickhouse-1 clickhouse-1 10.120.28.66  clickhouse-2 clickhouse-2 10.120.28.61  clickhouse-3 clickhouse-3 10.120.29.244  app-1 app-1 10.120.29.228  app-2 app-2 10.120.29.33  prometeus prometeus 10.120.29.222  manager manager  10.120.29.187 k8s-cp <\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u0428\u0430\u0431\u043b\u043e\u043d Ansible \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code># {{ ansible_managed }}  {% for item in groups['all'] %} {% set short_name = item.split('.') %} {{ hostvars[item]['host'] }}  {{ item }} {{ short_name[0] }} {% endfor %}  10.120.0.1 k8s-cp <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0432\u0441\u0435 \u0443\u0437\u043b\u044b \u0432\u043c\u0435\u0441\u0442\u043e DNS-\u0440\u0435\u043a\u0443\u0440\u0441\u043e\u0440\u043e\u0432, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c\u044b\u0445 \u0438\u0437 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a DHCP, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 DNS-\u044b. \u0412 Ubuntu 18.04 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f <code>systemd-resolved<\/code>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e <em>\u043f\u043e\u0434\u0441\u0443\u043d\u0443\u0442\u044c <\/em>\u0435\u043c\u0443 \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u044b\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u044b <code>gw-1, gw-2<\/code>. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0445\u043e\u0441\u0442\u0435 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b systemd, \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0449\u0438\u0439 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 <code>systemd-resolved<\/code>, \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u0432 \u0435\u0433\u043e \u043f\u043e \u043f\u0443\u0442\u0438 <code>\/etc\/systemd\/network\/0-eth0.network<\/code>:<\/p>\n<pre><code>[Match] Name=eth0  [Network] DHCP=ipv4 DNS=10.120.28.23 10.120.29.231 Domains=cluster  [DHCP] UseDNS=false UseDomains=false<\/code><\/pre>\n<p>\u0414\u0435\u043b\u0430\u0435\u0442 \u043e\u043d \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435: \u0434\u043b\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 DHCP, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0445 \u0447\u0435\u0440\u0435\u0437 eth0 \u0431\u0443\u0434\u0443\u0442 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f DNS-\u0441\u0435\u0440\u0432\u0435\u0440\u044b \u0438 \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u044b\u0435 \u0434\u043e\u043c\u0435\u043d\u044b, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u043d\u0430 DHCP-\u0441\u0435\u0440\u0432\u0435\u0440\u0435. \u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u044b <code>10.120.28.23, 10.120.29.231<\/code> \u0438 \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u044b\u0439 \u0434\u043e\u043c\u0435\u043d <code>*.cluster<\/code>. <\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0443\u0437\u0435\u043b \u0438\u043b\u0438 \u0441\u0435\u0442\u0435\u0432\u0443\u044e \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0443\u0437\u043b\u0430, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a <code>systemd-resolved<\/code> \u043d\u0435 \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u0443\u0435\u0442 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e DHCP. \u042f \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0436\u0430\u044e \u0445\u043e\u0441\u0442 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f \u0432 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u043c \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0438 \u043f\u0440\u0438 \u0441\u0442\u0430\u0440\u0442\u0435 \u0443\u0437\u043b\u0430.<\/p>\n<p>\u041f\u0440\u0438 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0439 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 <code>systemd-resolve --status<\/code> \u0432\u044b\u0434\u0430\u0441\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043b\u0438\u0441\u0442\u0438\u043d\u0433:<\/p>\n<pre><code>Global           DNSSEC NTA: 10.in-addr.arpa                       16.172.in-addr.arpa                       168.192.in-addr.arpa                       17.172.in-addr.arpa                       18.172.in-addr.arpa                       19.172.in-addr.arpa                       20.172.in-addr.arpa                       21.172.in-addr.arpa                       22.172.in-addr.arpa                       23.172.in-addr.arpa                       24.172.in-addr.arpa                       25.172.in-addr.arpa                       26.172.in-addr.arpa                       27.172.in-addr.arpa                       28.172.in-addr.arpa                       29.172.in-addr.arpa                       30.172.in-addr.arpa                       31.172.in-addr.arpa                       corp                       d.f.ip6.arpa                       home                       internal                       intranet                       lan                       local                       private                       test  Link 3 (eth1)       Current Scopes: none        LLMNR setting: yes MulticastDNS setting: no       DNSSEC setting: no     DNSSEC supported: no  Link 2 (eth0)       Current Scopes: DNS        LLMNR setting: yes MulticastDNS setting: no       DNSSEC setting: no     DNSSEC supported: no          DNS Servers: 10.120.28.23                       10.120.29.231           DNS Domain: cluster <\/code><\/pre>\n<p>\u042d\u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043d\u0430 \u0432\u0441\u0435\u0445 \u0443\u0437\u043b\u0430\u0445 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430. \u041f\u0440\u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u043a\u0430\u0436\u0434\u044b\u0439 \u0443\u0437\u0435\u043b \u0441\u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c <code>ping gw-1<\/code>, <code>ping gw-1.cluster<\/code> \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043e\u0442\u0432\u0435\u0442 \u043e\u0442 \u0434\u0430\u043d\u043d\u044b\u0445 \u0443\u0437\u043b\u043e\u0432 \u043f\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u043c ip-\u0430\u0434\u0440\u0435\u0441\u0430\u043c.<\/p>\n<h2>\u041e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u0430 \u043f\u043e\u0434\u043a\u0430\u0447\u043a\u0438<\/h2>\n<p><strong>\u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u0432\u0441\u0435\u0445 \u0443\u0437\u043b\u0430\u0445. <\/strong>Kubernetes \u043d\u0435 \u0445\u043e\u0447\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043f\u0440\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 \u0440\u0430\u0437\u0434\u0435\u043b\u043e\u0432 \u043f\u043e\u0434\u043a\u0430\u0447\u043a\u0438 \u043d\u0430 \u0443\u0437\u043b\u0430\u0445. \u0414\u043b\u044f \u0438\u0445 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0434\u043d\u043e\u0441\u0442\u0440\u043e\u0447\u043d\u0438\u043a\u043e\u043c:<\/p>\n<pre><code>sudo -- sh -c \"swapoff -a &amp;&amp; sed -i '\/ swap \/ s\/^\/#\/' \/etc\/fstab\"<\/code><\/pre>\n<p>\u0414\u043b\u044f \u043f\u0443\u0449\u0435\u0439 \u0443\u0432\u0435\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0443\u0434\u0430\u043b\u0438\u0442\u0435 swap-\u0440\u0430\u0437\u0434\u0435\u043b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>fdisk<\/code>.<\/p>\n<h2>\u0412\u043d\u0435\u0441\u0435\u043d\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432 \u0441\u0435\u0442\u0435\u0432\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u044f\u0434\u0440\u0430 <\/h2>\n<p><strong>\u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u0432\u0441\u0435\u0445 \u0443\u0437\u043b\u0430\u0445. <\/strong>\u042f \u0431\u0443\u0434\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Flannel &#8212; \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0439 \u043e\u0432\u0435\u0440\u043b\u0435\u0439\u043d\u044b\u0439 \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u043f\u043b\u0430\u0433\u0438\u043d \u0434\u043b\u044f K8S. \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 <code>VXLAN<\/code>. \u042d\u0442\u043e \u043d\u0430\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b. <\/p>\n<p>\u0412 \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0432\u0430\u043c \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c <code>multicast<\/code>, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 <code>VXLAN<\/code> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 <code>multicast<\/code>-\u0433\u0440\u0443\u043f\u043f\u044b, \u0434\u043b\u044f \u0441\u0432\u043e\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u044b. \u0415\u0441\u043b\u0438 <code>multicast<\/code> &#8212; \u043d\u0435 \u0432\u0430\u0448 \u0432\u0430\u0440\u0438\u0430\u043d\u0442, \u043d\u043e \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440, \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 <code>VXLAN<\/code>, \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 <code>VXLAN<\/code> \u0447\u0435\u0440\u0435\u0437 <a href=\"https:\/\/bitworks.software\/2018-10-24-vxlan-bgp-evpn.html\" rel=\"noopener noreferrer nofollow\">BGP<\/a> \u0438\u043b\u0438 <a href=\"https:\/\/bitworks.software\/2018-09-18-vxlan-and-linux.html\" rel=\"noopener noreferrer nofollow\">\u0434\u0440\u0443\u0433\u0438\u043c\u0438<\/a> \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438. \u041e\u0434\u043d\u0430\u043a\u043e, \u0441\u043c\u043e\u0436\u0435\u0442 \u043b\u0438 \u0436\u0438\u0442\u044c \u0441 \u044d\u0442\u0438\u043c \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u0432\u0430\u043c\u0438 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b Kubernetes &#8212; \u044d\u0442\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0432\u043e\u043f\u0440\u043e\u0441. \u0412 \u043e\u0431\u0449\u0435\u043c, Flannel \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 <code>VXLAN<\/code> \u0447\u0435\u0440\u0435\u0437 multicast. \u0412 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e <code>VXLAN+multicast<\/code> over <code>VXLAN+multicast<\/code> over <code>Ethernet<\/code>, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432 \u043c\u043e\u0435\u0439 \u0441\u0435\u0442\u0438 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u043c\u0430\u0448\u0438\u043d\u044b \u0438\u043c\u0435\u044e\u0442 <code>VXLAN-\u0431\u044d\u043a\u0431\u043e\u043d<\/code>, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u043f\u043e\u0432\u0435\u0440\u0445 <code>Ethernet<\/code> \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c <code>multicast<\/code> &#8212; \u0442\u0430\u043a \u0442\u043e\u0436\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442.<\/p>\n<p>\u0412 <strong>\/etc\/modules<\/strong> \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 <code>br_netfilter, overlay<\/code>. <\/p>\n<p>\u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0435 <code>modprobe br_netfilter &amp;&amp; modprobe overlay<\/code>, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u0438.<\/p>\n<p>\u0412 <code>\/etc\/sysctl.conf<\/code> \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435:<\/p>\n<pre><code>net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 <\/code><\/pre>\n<p>\u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0435 <code>sysctl -p<\/code> \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439.<\/p>\n<h2>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0421ontainerd<\/h2>\n<p><strong>\u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u0432\u0441\u0435\u0445 \u0443\u0437\u043b\u0430\u0445. <\/strong>Kubernetes \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Containerd (\u0432\u043f\u0440\u043e\u0447\u0435\u043c, \u043d\u043e\u0432\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 Docker \u0442\u043e\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 Containerd), \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c \u0435\u0433\u043e:<\/p>\n<pre><code class=\"bash\">sudo apt-get update sudo apt install containerd sudo sh -- -c \"containerd config default | tee \/etc\/containerd\/config.toml\" sudo service containerd restart<\/code><\/pre>\n<h2>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c kubeadm, kubelet, kubectl<\/h2>\n<p><strong>\u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u0432\u0441\u0435\u0445 \u0443\u0437\u043b\u0430\u0445. <\/strong>\u0417\u0434\u0435\u0441\u044c \u043f\u0440\u044f\u043c \u0438\u0437 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0430 \u043f\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 K8S:<\/p>\n<pre><code class=\"bash\">sudo apt-get update &amp;&amp; sudo apt-get install -y apt-transport-https curl curl -s https:\/\/packages.cloud.google.com\/apt\/doc\/apt-key.gpg | sudo apt-key add - cat &lt;&lt;EOF | sudo tee \/etc\/apt\/sources.list.d\/kubernetes.list deb https:\/\/apt.kubernetes.io\/ kubernetes-xenial main EOF sudo apt-get update sudo apt-get install -y kubelet kubeadm kubectl sudo apt-mark hold kubelet kubeadm kubectl<\/code><\/pre>\n<h2>\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0443\u0437\u043b\u043e\u0432 Control Plane<\/h2>\n<p>\u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u0443\u0437\u043b\u0430\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u0442\u044c Control Plane K8S &#8212; \u0432 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 <code>k8s-{1,2,3}<\/code>. \u0417\u0434\u0435\u0441\u044c \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u043d\u044e\u0430\u043d\u0441\u044b, \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u0435 \u0434\u043b\u044f \u043c\u043e\u0435\u0433\u043e \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f:<\/p>\n<pre><code>kubeadm init<\/code><\/pre>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-317290","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/317290","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=317290"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/317290\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=317290"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=317290"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=317290"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}