{"id":1028,"date":"2021-07-29T20:28:49","date_gmt":"2021-07-29T12:28:49","guid":{"rendered":"https:\/\/egonlin.com\/?p=1028"},"modified":"2021-07-30T12:20:57","modified_gmt":"2021-07-30T04:20:57","slug":"service%e8%b5%84%e6%ba%90%e7%ae%a1%e7%90%86","status":"publish","type":"post","link":"https:\/\/egonlin.com\/?p=1028","title":{"rendered":"service\u8d44\u6e90\u7ba1\u7406"},"content":{"rendered":"<h1>service\u8d44\u6e90\u7ba1\u7406<\/h1>\n<h2>\u4e00\u3001service\u8d44\u6e90<\/h2>\n<h3>1\u3001\u7b80\u4ecb\uff08k8s\u96c6\u7fa4\u4e2d\u667a\u80fd\u8d1f\u8f7d\u5747\u8861\u5668\uff09<\/h3>\n<pre><code class=\"language-bash\">    service\u662fk8s\u4e2d\u7684\u4e00\u4e2a\u91cd\u8981\u6982\u5ff5\uff0c\u4e3b\u8981\u662f\u63d0\u4f9b\u8d1f\u8f7d\u5747\u8861\u548c\u670d\u52a1\u81ea\u52a8\u53d1\u73b0\u3002\u5b83\u662fk8s\u4e2d\u6700\u6838\u5fc3\u7684\u8d44\u6e90\u4e4b\u4e00\uff0c\u6bcf\u4e00\u4e2aService\u5c31\u662f\u6211\u4eec\u5e73\u5e38\u6240\u8bf4\u7684\u4e00\u4e2a\u201c\u5fae\u670d\u52a1\u201d\u3002\u5728\u975ek8s\u4e16\u754c\u4e2d\uff0c\u7ba1\u7406\u5458\u53ef\u4ee5\u901a\u8fc7\u5728\u914d\u7f6e\u6587\u4ef6\u4e2d\u6307\u5b9aIP\u5730\u5740\u6216\u4e3b\u673a\u540d\uff0c\u5bb9\u8bb8\u5ba2\u6237\u7aef\u8bbf\u95ee\uff0c\u4f46\u5728k8s\u4e2d\u8fd9\u79cd\u65b9\u5f0f\u662f\u884c\u4e0d\u901a\u7684\u3002\u56e0\u4e3aPod\u662f\u6709\u751f\u547d\u5468\u671f\u7684\uff0c\u5b83\u4eec\u53ef\u4ee5\u88ab\u521b\u5efa\u6216\u9500\u6bc1\u3002\u867d\u7136\u901a\u8fc7\u63a7\u5236\u5668\u80fd\u591f\u52a8\u6001\u5730\u521b\u5efaPod\uff0c\u4f46\u5f53Pod\u88ab\u5206\u914d\u5230\u67d0\u4e2a\u8282\u70b9\u65f6\uff0cK8s\u90fd\u4f1a\u4e3a\u5176\u5206\u914d\u4e00\u4e2aIP\u5730\u5740\uff0c\u800c\u8be5IP\u5730\u5740\u4e0d\u603b\u662f\u7a33\u5b9a\u53ef\u4f9d\u8d56\u7684\u3002\u56e0\u6b64\uff0c\u5728Kubernetes\u96c6\u7fa4\u4e2d\uff0c\u5982\u679c\u4e00\u7ec4Pod\uff08\u79f0\u4e3abackend\uff09\u4e3a\u5176\u5b83Pod\uff08\u79f0\u4e3afrontend\uff09\u63d0\u4f9b\u670d\u52a1\uff0c\u90a3\u4e48\u90a3\u4e9bfrontend\u8be5\u5982\u4f55\u53d1\u73b0\uff0c\u5e76\u8fde\u63a5\u5230\u8fd9\u7ec4backend\u7684Pod\u5462\uff1f\n    service --&gt; endpoints --&gt; pod<\/code><\/pre>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/egonlin.com\/wp-content\/uploads\/2021\/07\/service.png'><img class=\"lazyload lazyload-style-2\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  data-original=\"https:\/\/egonlin.com\/wp-content\/uploads\/2021\/07\/service.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" \/><\/div><\/p>\n<pre><code class=\"language-bash\">    \u5982\u4e0a\u56fe\u6240\u793a\uff0cKubernetes \u7684 Service \u5b9a\u4e49\u4e86\u4e00\u4e2a\u670d\u52a1\u7684\u8bbf\u95ee\u5165\u53e3\uff0c\u524d\u7aef\u7684\u5e94\u7528\uff08Pod\uff09\u901a\u8fc7\u8fd9\u4e2a\u5165\u53e3\u5730\u5740\u8bbf \u95ee\u5176\u80cc\u540e\u7684\u4e00\u7ec4\u7531 Pod \u526f\u672c\u7ec4\u6210\u7684\u96c6\u7fa4\u5b9e\u4f8b\uff0cService \u4e0e\u5176\u540e\u7aef\u7684 Pod \u526f\u672c\u96c6\u7fa4\u4e4b\u95f4\u662f\u901a\u8fc7 Label Selector \u6765 \u5b9e\u73b0\u5173\u8054\u7684\uff0c\u800c Deployment \u5219\u662f\u4fdd\u8bc1 Service \u7684\u670d\u52a1\u80fd\u529b\u548c\u670d\u52a1\u8d28\u91cf\u59cb\u7ec8\u5904\u4e8e\u9884\u671f\u7684\u6807\u51c6\u3002\n    \u901a\u8fc7\u5206\u6790\uff0c\u8bc6\u522b\u5e76\u5efa\u6a21\u7cfb\u7edf\u4e2d\u7684\u6240\u6709\u670d\u52a1\u4e3a\u5fae\u670d\u52a1\uff0c\u6700\u7ec8\u6211\u4eec\u7684\u7cfb\u7edf\u662f\u7531\u591a\u4e2a\u63d0\u4f9b\u4e0d\u540c\u4e1a\u52a1\u80fd\u529b\u800c\u5f7c\u6b64\u72ec\u7acb \u7684\u5fae\u670d\u52a1\u5355\u5143\u6240\u7ec4\u6210\uff0c\u670d\u52a1\u4e4b\u95f4\u901a\u8fc7 TCP\/IP \u8fdb\u884c\u901a\u4fe1\uff0c\u4ece\u800c\u5f62\u6210\u4e86\u5f3a\u5927\u800c\u53c8\u7075\u6d3b\u7684\u5f39\u6027\u7f51\u7edc\uff0c\u62e5\u6709\u5f3a\u5927\u7684\u5206\u5e03 \u5f0f\u80fd\u529b\u3001\u5f39\u6027\u6269\u5c55\u80fd\u529b\u3001\u5bb9\u9519\u80fd\u529b\u3002<\/code><\/pre>\n<h3>2\u3001\u521b\u5efaService<\/h3>\n<pre><code class=\"language-bash\">kind: Service\napiVersion: v1\nmetadata:\n  name: test-service\n  namespace: default\n  labels:\n    app: test-service\nspec:\n  type: ClusterIP\n  selector:\n    app: test-service\n  ports:\n    - port: 80\n      targetPort: 80<\/code><\/pre>\n<pre><code class=\"language-bash\">[root@k8s-master-01 ~]# kubectl apply -f test_service.yaml\nservice\/test-service created<\/code><\/pre>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/egonlin.com\/wp-content\/uploads\/2021\/07\/2-34.png'><img class=\"lazyload lazyload-style-2\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  data-original=\"https:\/\/egonlin.com\/wp-content\/uploads\/2021\/07\/2-34.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" \/><\/div><\/p>\n<h3>3\u3001service\u7684\u5de5\u4f5c\u65b9\u5f0f<\/h3>\n<pre><code class=\"language-bash\">    \u5728 Kubernetes \u8fed\u4ee3\u8fc7\u7a0b\u4e2d\uff0c\u7ed9 Service \u8bbe\u7f6e\u91cc\u4e09\u79cd\u5de5\u4f5c\u65b9\u5f0f\uff0c\u5206\u522b\u662f\uff1aUserspace \u65b9\u5f0f\u3001Iptables \u4ee5\u53ca Ipvs\uff0c \u8fd9\u4e09\u79cd\u65b9\u5f0f\u5230\u73b0\u5728\u4e3a\u6b62\uff0c\u5b98\u65b9\u63a8\u8350\u4f7f\u7528 IPVS\uff0c \u5f53\u96c6\u7fa4\u4e0d\u652f\u6301 IPVS \u7684\u65f6\u5019\uff0c\u96c6\u7fa4\u4f1a\u964d\u7ea7\u5230 Iptables\u3002<\/code><\/pre>\n<h4>1\uff09Userspace<\/h4>\n<pre><code class=\"language-bash\">    Client Pod \u8981\u8bbf\u95ee Server Pod \u65f6,\u5b83\u5148\u5c06\u8bf7\u6c42\u53d1\u7ed9\u672c\u673a\u5185\u6838\u7a7a\u95f4\u4e2d\u7684 service \u89c4\u5219\uff0c\u7531\u5b83\u518d\u5c06\u8bf7\u6c42,\u8f6c\u7ed9\u76d1\u542c \u5728\u6307\u5b9a\u5957\u63a5\u5b57\u4e0a\u7684 kube-proxy\uff0ckube-proxy \u5904\u7406\u5b8c\u8bf7\u6c42\uff0c\u5e76\u5206\u53d1\u8bf7\u6c42\u5230\u6307\u5b9a Server Pod \u540e,\u518d\u5c06\u8bf7\u6c42\u9012\u4ea4\u7ed9\u5185 \u6838\u7a7a\u95f4\u4e2d\u7684 service,\u7531 service \u5c06\u8bf7\u6c42\u8f6c\u7ed9\u6307\u5b9a\u7684 Server Pod\u3002\u7531\u4e8e\u5176\u9700\u8981\u6765\u56de\u5728\u7528\u6237\u7a7a\u95f4\u548c\u5185\u6838\u7a7a\u95f4\u4ea4\u4e92\u901a\u4fe1\uff0c \u56e0\u6b64\u6548\u7387\u5f88\u5dee\u3002<\/code><\/pre>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/egonlin.com\/wp-content\/uploads\/2021\/07\/3-30.png'><img class=\"lazyload lazyload-style-2\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  data-original=\"https:\/\/egonlin.com\/wp-content\/uploads\/2021\/07\/3-30.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" \/><\/div><\/p>\n<h4>2\uff09Iptables\u6a21\u578b<\/h4>\n<pre><code class=\"language-bash\">    \u76f4\u63a5\u7531\u5185\u6838\u4e2d\u7684 iptables \u89c4\u5219\uff0c\u63a5\u53d7 Client Pod \u7684\u8bf7\u6c42\uff0c\u5e76\u5904\u7406\u5b8c\u6210\u540e\uff0c\u76f4\u63a5\u8f6c\u53d1\u7ed9\u6307\u5b9a ServerPod\u3002\u8fd9 \u79cd\u65b9\u5f0f\u4e0d\u518d\u5c06\u8bf7\u6c42\u8f6c\u53d1\u7ed9 kube-proxy\uff0c\u6027\u80fd\u63d0\u5347\u5f88\u591a\u3002<\/code><\/pre>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/egonlin.com\/wp-content\/uploads\/2021\/07\/4-28.png'><img class=\"lazyload lazyload-style-2\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  data-original=\"https:\/\/egonlin.com\/wp-content\/uploads\/2021\/07\/4-28.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" \/><\/div><\/p>\n<h4>3\uff09Ipvs\u6a21\u578b<\/h4>\n<pre><code class=\"language-bash\">    \u5728 ipvs \u6a21\u5f0f\u4e0b\uff0ckube-proxy \u76d1\u89c6 Kubernetes \u670d\u52a1\u548c\u7aef\u70b9\uff0c\u8c03\u7528 netlink \u63a5\u53e3\u76f8\u5e94\u5730\u521b\u5efa IPVS \u89c4\u5219\uff0c \u5e76 \u5b9a\u671f\u5c06 IPVS \u89c4\u5219\u4e0e Kubernetes \u670d\u52a1\u548c\u7aef\u70b9\u540c\u6b65\u3002 \u8be5\u63a7\u5236\u5faa\u73af\u53ef\u786e\u4fdd IPVS \u72b6\u6001\u4e0e\u6240\u9700\u72b6\u6001\u5339\u914d\u3002 \u8bbf\u95ee\u670d\u52a1 \u65f6\uff0cIPVS \u5c06\u6d41\u91cf\u5b9a\u5411\u5230\u540e\u7aef Pod \u4e4b\u4e00\u3002 \n    IPVS \u4ee3\u7406\u6a21\u5f0f\u57fa\u4e8e\u7c7b\u4f3c\u4e8e iptables \u6a21\u5f0f\u7684 netfilter \u6302\u94a9\u51fd\u6570\uff0c\u4f46\u662f\u4f7f\u7528\u54c8\u5e0c\u8868\u4f5c\u4e3a\u57fa\u7840\u6570\u636e\u7ed3\u6784\uff0c\u5e76\u4e14 \u5728\u5185\u6838\u7a7a\u95f4\u4e2d\u5de5\u4f5c\u3002 \u8fd9\u610f\u5473\u7740\uff0c\u4e0e iptables \u6a21\u5f0f\u4e0b\u7684 kube-proxy \u76f8\u6bd4\uff0cIPVS \u6a21\u5f0f\u4e0b\u7684 kube-proxy \u91cd\u5b9a\u5411 \u901a\u4fe1\u7684\u5ef6\u8fdf\u8981\u77ed\uff0c\u5e76\u4e14\u5728\u540c\u6b65\u4ee3\u7406\u89c4\u5219\u65f6\u5177\u6709\u66f4\u597d\u7684\u6027\u80fd\u3002\u4e0e\u5176\u4ed6\u4ee3\u7406\u6a21\u5f0f\u76f8\u6bd4\uff0cIPVS \u6a21\u5f0f\u8fd8\u652f\u6301\u66f4\u9ad8\u7684\u7f51\u7edc \u6d41\u91cf\u541e\u5410\u91cf\u3002<\/code><\/pre>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/egonlin.com\/wp-content\/uploads\/2021\/07\/5-29.png'><img class=\"lazyload lazyload-style-2\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  data-original=\"https:\/\/egonlin.com\/wp-content\/uploads\/2021\/07\/5-29.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" \/><\/div><\/p>\n<pre><code class=\"language-bash\">    \u4ee5\u4e0a\u4e0d\u8bba\u54ea\u79cd\uff0ckube-proxy \u90fd\u901a\u8fc7 watch \u7684\u65b9\u5f0f\u76d1\u63a7\u7740 kube-APIServer \u5199\u5165 etcd \u4e2d\u5173\u4e8e Pod \u7684\u6700\u65b0\u72b6\u6001 \u4fe1\u606f,\u5b83\u4e00\u65e6\u68c0\u67e5\u5230\u4e00\u4e2a Pod \u8d44\u6e90\u88ab\u5220\u9664\u4e86 \u6216 \u65b0\u5efa\uff0c\u5b83\u5c06\u7acb\u5373\u5c06\u8fd9\u4e9b\u53d8\u5316\uff0c\u53cd\u5e94\u518d iptables \u6216 ipvs \u89c4\u5219\u4e2d\uff0c \u4ee5\u4fbf iptables \u548c ipvs \u5728\u8c03\u5ea6 Clinet Pod \u8bf7\u6c42\u5230 Server Pod \u65f6\uff0c\u4e0d\u4f1a\u51fa\u73b0 Server Pod \u4e0d\u5b58\u5728\u7684\u60c5\u51b5\u3002 \n    \u81ea k8s1.1 \u4ee5\u540e,service \u9ed8\u8ba4\u4f7f\u7528 ipvs \u89c4\u5219\uff0c\u82e5 ipvs \u6ca1\u6709\u88ab\u6fc0\u6d3b\uff0c\u5219\u964d\u7ea7\u4f7f\u7528 iptables \u89c4\u5219. \u4f46\u5728 1.1 \u4ee5\u524d\uff0c service \u4f7f\u7528\u7684\u6a21\u5f0f\u9ed8\u8ba4\u4e3a userspace\u3002<\/code><\/pre>\n<h3>4\u3001service\u7c7b\u578b<\/h3>\n<pre><code class=\"language-bash\">    Service \u662f Kubernetes \u5bf9\u5916\u8bbf\u95ee\u7684\u7a97\u53e3\uff0c\u9488\u5bf9\u4e0d\u540c\u7684\u573a\u666f\uff0ckubernetes \u4e3a\u6211\u4eec\u8bbe\u7f6e\u4e86\u56db\u79cd Service \u7684\u7c7b\u578b\u3002\n    \u66b4\u9732\u670d\u52a1\u7684\u8d44\u6e90\u7c7b\u578b<\/code><\/pre>\n<pre><code class=\"language-bash\">1\u3001ClusterIP: \u5411\u96c6\u7fa4\u5185\u90e8\u66b4\u9732\u670d\u52a1\n\n2\u3001NodePort\uff1a\u901a\u8fc7\u5bbf\u4e3b\u4e3b\u673a\u7684NodeIP\uff1aNodePort\u6765\u66b4\u9732\u96c6\u7fa4\u5185\u90e8\u670d\u52a1\n\n3\u3001LoadBalancer : \u4f9d\u8d56\u4e8e\u5f39\u6027IP\u7684\u5411\u96c6\u7fa4\u5916\u90e8\u66b4\u9732\u670d\u52a1\u7684\u8d1f\u8f7d\u5747\u8861\u5668\n\n4\u3001ExternalName:\u5c06\u5176\u4ed6\u94fe\u63a5\u8bbe\u7f6e\u4e00\u4e2a\u96c6\u7fa4\u5185\u90e8\u7684\u522b\u540d\u3002<\/code><\/pre>\n<h4>1\uff09ClusterIP\u5185\u7f51<\/h4>\n<pre><code class=\"language-bash\">    kubernetes \u9ed8\u8ba4\u5c31\u662f\u8fd9\u79cd\u65b9\u5f0f\uff0c\u662f\u96c6\u7fa4\u5185\u90e8\u8bbf\u95ee\u7684\u65b9\u5f0f\uff0c\u5916\u90e8\u662f\u65e0\u6cd5\u8bbf\u95ee\u7684\u3002\u5176\u4e3b\u8981\u7528\u4e8e\u4e3a\u96c6\u7fa4\u5185 Pod \u8bbf \u95ee\u65f6,\u63d0\u4f9b\u7684\u56fa\u5b9a\u8bbf\u95ee\u5730\u5740,\u9ed8\u8ba4\u662f\u81ea\u52a8\u5206\u914d\u5730\u5740,\u53ef\u4f7f\u7528 ClusterIP \u5173\u952e\u5b57\u6307\u5b9a\u56fa\u5b9a IP\u3002<\/code><\/pre>\n<pre><code class=\"language-yaml\">[root@k8s-master-01 ~]# vim clusterip.yaml\nkind: Service\napiVersion: v1\nmetadata:\n  name: my-svc\nspec:\n  type: ClusterIP\n  selector:\n    app: nginx\n  ports:\n    - port: 80\n      targetPort: 80<\/code><\/pre>\n<p><strong>\u521b\u5efa\u5e76\u67e5\u770b<\/strong><\/p>\n<pre><code class=\"language-bash\">[root@k8s-master-01 ~]# kubectl apply -f clusterip.yaml\nservice\/my-svc created\n\n[root@k8s-master-01 ~]# kubectl get svc\nNAME           TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE\nkubernetes     ClusterIP   10.96.0.1       &lt;none&gt;        443\/TCP   6d23h\nmy-svc         ClusterIP   10.105.87.145   &lt;none&gt;        80\/TCP    2m40s\ntest-service   ClusterIP   10.111.31.206   &lt;none&gt;        80\/TCP    16m\n<\/code><\/pre>\n<h4>2\uff09nodeport\u5916\u7f51<\/h4>\n<pre><code class=\"language-bash\">    NodePort \u662f\u5c06\u4e3b\u673a IP \u548c\u7aef\u53e3\u8ddf kubernetes \u96c6\u7fa4\u6240\u9700\u8981\u66b4\u9732\u7684 IP \u548c\u7aef\u53e3\u8fdb\u884c\u5173\u8054\uff0c\u65b9\u4fbf\u5176\u5bf9\u5916\u63d0\u4f9b\u670d\u52a1\u3002\u5185\u90e8\u53ef\u4ee5\u901a\u8fc7 ClusterIP \u8fdb\u884c\u8bbf\u95ee\uff0c\u5916\u90e8\u7528\u6237\u53ef\u4ee5\u901a\u8fc7 NodeIP:NodePort \u7684\u65b9\u5f0f\u5355\u72ec\u8bbf\u95ee\u6bcf\u4e2a Node \u4e0a\u7684\u5b9e\u4f8b\u3002<\/code><\/pre>\n<pre><code class=\"language-bash\">[root@kubernetes-master-01 test]# vim nodeport.yaml\nkind: Service\napiVersion: v1\nmetadata:\n  name: my-svc\nspec:\n  type: NodePort\n  selector:\n    app: nginx\n  ports:\n    - port: 80\n      targetPort: 80\n      nodePort: 30080\n\n[root@kubernetes-master-01 test]# kubectl apply -f nodeport.yaml\nservice\/my-svc created\n\n[root@kubernetes-master-01 test]# kubectl get svc\nNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\nkubernetes ClusterIP 10.96.0.1 &lt;none&gt; 443\/TCP 11d\nmy-svc NodePort 10.96.159.234 &lt;none&gt; 80:30080\/TCP 12s\nnginx NodePort 10.96.6.147 &lt;none&gt; 80:42550\/TCP 17m<\/code><\/pre>\n<h4>3\uff09LoadBalancer\u5f39\u6027\u516c\u7f51<\/h4>\n<pre><code class=\"language-bash\">    LoadBalancer \u7c7b\u578b\u7684 service \u662f\u53ef\u4ee5\u5b9e\u73b0\u96c6\u7fa4\u5916\u90e8\u8bbf\u95ee\u670d\u52a1\u7684\u53e6\u5916\u4e00\u79cd\u89e3\u51b3\u65b9\u6848\u3002\u4e0d\u8fc7\u5e76\u4e0d\u662f\u6240\u6709\u7684 k8s\u96c6\u7fa4\u90fd\u4f1a\u652f\u6301\uff0c\u5927\u591a\u662f\u5728\u516c\u6709\u4e91\u6258\u7ba1\u96c6\u7fa4\u4e2d\u4f1a\u652f\u6301\u8be5\u7c7b\u578b\u3002\u8d1f\u8f7d\u5747\u8861\u5668\u662f\u5f02\u6b65\u521b\u5efa\u7684\uff0c\u5173\u4e8e\u88ab\u63d0\u4f9b\u7684\u8d1f\u8f7d\u5747\u8861\u5668\u7684\u4fe1\u606f\u5c06\u4f1a\u901a\u8fc7 Service \u7684 status.loadBalancer \u5b57\u6bb5\u88ab\u53d1\u5e03\u51fa\u53bb\u3002<\/code><\/pre>\n<pre><code class=\"language-bash\">[root@kubernetes-master-01 ~]# cat &gt; svc.yaml &lt;&lt;EOF\napiVersion: v1\nkind: Service\nmetadata:\nname: loadbalancer\nspec:\ntype: LoadBalancer\nports:\n- port: 80\ntargetPort: 80\nselector:\napp: nginx\nEOF\n\n[root@kubernetes-node-01 ~]# kubectl get svc\nNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\nkubernetes ClusterIP 10.0.0.1 &lt;none&gt; 443\/TCP 110d\nloadbalancer LoadBalancer 10.0.129.18 81.71.12.240 80:30346\/TCP 11s<\/code><\/pre>\n<h4>4\uff09ExternalName\uff1a\u5c06\u5176\u4ed6\u94fe\u63a5\u8bbe\u7f6e\u4e00\u4e2a\u96c6\u7fa4\u5185\u90e8\u7684\u522b\u540d\u3002<\/h4>\n<pre><code class=\"language-bash\">    ExternalName Service \u662f Service \u7684\u4e00\u4e2a\u7279\u4f8b\uff0c\u5b83\u6ca1\u6709\u9009\u62e9\u5668\uff0c\u4e5f\u6ca1\u6709\u5b9a\u4e49\u4efb\u4f55\u7aef\u53e3\u6216 Endpoints\u3002\u5b83\u7684\u4f5c\u7528\u662f\u8fd4\u56de\u96c6\u7fa4\u5916 Service \u7684\u5916\u90e8\u522b\u540d\u3002\u5b83\u5c06\u5916\u90e8\u5730\u5740\u7ecf\u8fc7\u96c6\u7fa4\u5185\u90e8\u7684\u518d\u4e00\u6b21\u5c01\u88c5(\u5b9e\u9645\u4e0a\u5c31\u662f\u96c6\u7fa4 DNS \u670d\u52a1\u5668\u5c06CNAME \u89e3\u6790\u5230\u4e86\u5916\u90e8\u5730\u5740\u4e0a)\uff0c\u5b9e\u73b0\u4e86\u96c6\u7fa4\u5185\u90e8\u8bbf\u95ee\u5373\u53ef\u3002\u4f8b\u5982\u4f60\u4eec\u516c\u53f8\u7684\u955c\u50cf\u4ed3\u5e93\uff0c\u6700\u5f00\u59cb\u662f\u7528 ip \u8bbf\u95ee\uff0c\u7b49\u5230\u540e\u9762\u57df\u540d\u4e0b\u6765\u4e86\u518d\u4f7f\u7528\u57df\u540d\u8bbf\u95ee\u3002\u4f60\u4e0d\u53ef\u80fd\u53bb\u4fee\u6539\u6bcf\u5904\u7684\u5f15\u7528\u3002\u4f46\u662f\u53ef\u4ee5\u521b\u5efa\u4e00\u4e2a ExternalName\uff0c\u9996\u5148\u6307\u5411\u5230 ip\uff0c\u7b49\u540e\u9762\u518d\u6307\u5411\u5230\u57df\u540d\u3002<\/code><\/pre>\n<pre><code class=\"language-bash\">apiVersion: v1\nkind: Service\nmetadata:\n  name: baidu\nspec:\n  externalName: www.baidu.com\n  type: ExternalName<\/code><\/pre>\n<h4>5\uff09headless service\u57df\u540d(\u5c5e\u4e8eClusterIP)<\/h4>\n<pre><code class=\"language-bash\">    kubernates \u4e2d\u8fd8\u6709\u4e00\u79cd service \u7c7b\u578b\uff1aheadless serivces \u529f\u80fd\uff0c\u5b57\u9762\u610f\u601d\u65e0 service \u5176\u5b9e\u5c31\u662f\u6539 service \u5bf9\u5916\u65e0\u63d0\u4f9b IP\u3002\u4e00\u822c\u7528\u4e8e\u5bf9\u5916\u63d0\u4f9b\u57df\u540d\u670d\u52a1\u7684\u65f6\u5019\u3002\n\n    Service\u4e0ePod\u4e4b\u95f4\u7684\u5173\u7cfb\n    service -&gt; endprints -&gt; pod<\/code><\/pre>\n<pre><code class=\"language-bash\">kind: Service\napiVersion: v1\nmetadata:\n  name: nginx-svc\nspec:\n  clusterIP: None\n  selector:\n    app: test-svc\n  ports:\n    - port: 80\n      targetPort: 80\n      name: http\n[root@kubernetes-master-01 test]# kubectl apply -f headless-service.yaml\nservice\/my-svc created\n[root@kubernetes-master-01 test]# kubectl get svc\nNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\nkubernetes ClusterIP 10.96.0.1 &lt;none&gt; 443\/TCP 11d\nmy-svc ClusterIP None &lt;none&gt; 80\/TCP 4s\nnginx NodePort 10.96.6.147 &lt;none&gt; 80:42550\/TCP 30m\n\n[root@k8s-m-01 ~]# kubectl describe service service<\/code><\/pre>\n<h4>6\uff09Ingress\uff08\u914d\u5408headless\u4f7f\u7528\uff09<\/h4>\n<h5>\u2460\u7b80\u4ecb<\/h5>\n<pre><code class=\"language-bash\">    Ingress\u4e3aKubernetes\u96c6\u7fa4\u4e2d\u7684\u670d\u52a1\u63d0\u4f9b\u4e86\u5165\u53e3\uff0c\u53ef\u4ee5\u63d0\u4f9b\u8d1f\u8f7d\u5747\u8861\u3001SSL\u7ec8\u6b62\u548c\u57fa\u4e8e\u540d\u79f0\u7684\u865a\u62df\u4e3b\u673a\uff0c\u5728\u751f\u4ea7\u73af\u5883\u4e2d\u5e38\u7528\u7684Ingress\u6709Treafik\u3001Nginx\u3001HAProxy\u3001Istio\u7b49\u3002\u5728Kubernetesv 1.1\u7248\u4e2d\u6dfb\u52a0\u7684Ingress\u7528\u4e8e\u4ece\u96c6\u7fa4\u5916\u90e8\u5230\u96c6\u7fa4\u5185\u90e8Service\u7684HTTP\u548cHTTPS\u8def\u7531\uff0c\u6d41\u91cf\u4eceInternet\u5230Ingress\u518d\u5230Services\u6700\u540e\u5230Pod\u4e0a\uff0c\u901a\u5e38\u60c5\u51b5\u4e0b\uff0cIngress\u90e8\u7f72\u5728\u6240\u6709\u7684Node\u8282\u70b9\u4e0a\u3002Ingress\u53ef\u4ee5\u914d\u7f6e\u63d0\u4f9b\u670d\u52a1\u5916\u90e8\u8bbf\u95ee\u7684URL\u3001\u8d1f\u8f7d\u5747\u8861\u3001\u7ec8\u6b62SSL\uff0c\u5e76\u63d0\u4f9b\u57fa\u4e8e\u57df\u540d\u7684\u865a\u62df\u4e3b\u673a\u3002\u4f46Ingress\u4e0d\u4f1a\u66b4\u9732\u4efb\u610f\u7aef\u53e3\u6216\u534f\u8bae\u3002\n\n    HeadLessService\u5b9e\u9645\u4e0a\u662f\u5c5e\u4e8eClusterIP\n\n    nginx ingress : \u6027\u80fd\u5f3a\n    traefik : \u539f\u751f\u652f\u6301k8s\n    istio : \u670d\u52a1\u7f51\u683c\uff0c\u670d\u52a1\u6d41\u91cf\u7684\u6cbb\u7406\n\n    service ---&gt; endpoints  ---&gt; pod\n    ingress ---&gt; endpoints  ---&gt; pod<\/code><\/pre>\n<h5>\u2461ingress nginx\u5de5\u4f5c\u539f\u7406<\/h5>\n<pre><code class=\"language-bash\">\u6839\u636eingress\u914d\u7f6e\u6e05\u5355\uff0c\u5b9e\u65f6\u751f\u6210nginx\u914d\u7f6e\uff0c\u4f7f\u5176\u751f\u6548\uff0c\u4e4b\u540e\u901a\u8fc7nginx\u53cd\u5411\u4ee3\u7406\u8f6c\u53d1\u6d41\u91cf\u5230pod<\/code><\/pre>\n<h5>\u2462\u6d41\u7a0b<\/h5>\n<pre><code class=\"language-bash\">ingress ---&gt; endpoints\uff08headless service\uff09  ---&gt; pod<\/code><\/pre>\n<h5>\u2463Ingress\u79cd\u7c7b<\/h5>\n<pre><code class=\"language-bash\">1\u3001Nginx Ingress\n\n2\u3001treafik \n\n3\u3001\u670d\u52a1\u7f51\u683c\uff1aistio<\/code><\/pre>\n<h5>\u2464\u5b89\u88c5Ingress<\/h5>\n<pre><code class=\"language-bash\"># \u4e0b\u8f7dIngress Nginx\u914d\u7f6e\u6e05\u5355\n[root@k8s-m-01 ~]# wget https:\/\/raw.githubusercontent.com\/kubernetes\/ingress-nginx\/controller-v0.44.0\/deploy\/static\/provider\/baremetal\/deploy.yaml\n\n# \u4fee\u6539\u955c\u50cf\n[root@k8s-m-01 ~]# sed -i &#039;s#k8s.gcr.io\/ingress-nginx\/controller:v0.44.0@sha256:3dd0fac48073beaca2d67a78c746c7593f9c575168a17139a9955a82c63c4b9a#registry.cn-shanghai.aliyuncs.com\/wxyuan\/open:ingress-nginx.controller.v0.44.0#g&#039; deploy.yaml\n\n# \u5f00\u59cb\u90e8\u7f72\n[root@k8s-m-01 ~]# kubectl apply -f deploy.yaml\n\n# \u68c0\u67e5\n[root@k8s-m-01 ~]# kubectl get pods -n ingress-nginx \nNAME                                        READY   STATUS      RESTARTS   AGE\ningress-nginx-admission-create-g9brk        0\/1     Completed   0          3d22h\ningress-nginx-admission-patch-tzlgf         0\/1     Completed   0          3d22h\ningress-nginx-controller-8494fd5b55-wpf9g   1\/1     Running     0          3d22h<\/code><\/pre>\n<h5>\u2465\u6d4b\u8bd5http<\/h5>\n<pre><code class=\"language-bash\">1\u3001\u90e8\u7f72\u670d\u52a1\uff08Deployment + Service\uff09\n\n2\u3001\u7f16\u5199ingress\u914d\u7f6e\u6e05\u5355\uff08\u89c1\u4e0b\u6587\uff09<\/code><\/pre>\n<ul>\n<li>\u914d\u7f6e\u6e05\u5355<\/li>\n<\/ul>\n<pre><code class=\"language-yaml\">kind: Ingress\napiVersion: extensions\/v1beta1\nmetadata:\n  name: ingress-ingress-nginx\n  annotations:\n    kubernetes.io\/ingress.class: &quot;nginx&quot;\nspec:\n  rules:\n    - host: www.test-nginx.com\n      http:\n        paths:\n          - path: \/\n            backend:\n              serviceName: wordpress-nginx\n              servicePort: 80<\/code><\/pre>\n<h5>\u2466\u6d4b\u8bd5https<\/h5>\n<p><\/p><div id=\"rml_readmorelogin_placeholder\" style=\"position:relative;\"><div id=\"rml_fade_content\" style=\"position: absolute;\r\ntop:-10em;\r\nwidth:100%;\r\nheight:10em;\r\nbackground: -webkit-linear-gradient(rgba(255, 255, 255, 0) 0%,#ffffff 100%);\r\nbackground-image: -moz-linear-gradient(rgba(255, 255, 255, 0) 0%,#ffffff 100%);\r\nbackground-image: -o-linear-gradient(rgba(255, 255, 255, 0) 0%,#ffffff 100%);\r\nbackground-image: linear-gradient(rgba(255, 255, 255, 0) 0%,#ffffff 100%);\r\nbackground-image: -ms-linear-gradient(rgba(255, 255, 255, 0) 0%,#ffffff 100%);\"><\/div><div class=\"wpf-controller aru_rml_from_in_post\" style=\"background-color:#eeeeee;border:5px solid #cce6ff;\" id=\"ARU_ReadMoreLogin_ReadMoreLoginController\"><h2 id=\"Header\">\u67e5\u770b\u66f4\u591a<\/h2><div id=\"Message\"><p>\u8054\u7cfb\u7ba1\u7406\u5458\u5fae\u4fe1tutu19192010\uff0c\u6ce8\u518c\u8d26\u53f7<\/p>\n<\/div><div id=\"StatusBarHeader\"><\/div><form id=\"ARU_ReadMoreLogin_ReadMoreLoginController\"><input name=\"post_id\" value=\"1028\" type=\"hidden\"\/><input name=\"_init_callback\" value=\"InitLogin\" type=\"hidden\"\/><input name=\"post_id\" value=\"1028\" type=\"hidden\"\/><input name=\"rt_ype\" value=\"1\" type=\"hidden\"\/><input name=\"nonce\" value=\"a9b7f98c8d\" type=\"hidden\"\/><input name=\"_wpnonce\" value=\"f48666364f\" type=\"hidden\"\/><input name=\"_controller\" value=\"ARU_ReadMoreLogin\\ReadMoreLoginController\" type=\"hidden\"\/><input name=\"_proxy_controller\" value=\"ARU_ReadMoreLogin\\ReadMoreLoginController\" type=\"hidden\"\/><input name=\"_view\" value=\"ARU_ReadMoreLogin\\ReadMoreLoginView\" type=\"hidden\"\/><table class=\"wpf-table-placeholder\"><tbody class=\"wpf-table-placeholder\"><tr class=\"wpf-table-placeholder\"><td class=\"wpf-table-placeholder-input\" width=\"400px\"><table class=\"wpf-table-placeholder\"><tbody class=\"wpf-table-placeholder\"><tr class=\"wpf-table-placeholder\"><th class=\"wpf-table-placeholder-input\"><label class=\"wpf-label\">Username:<\/label><\/th><\/tr><tr class=\"wpf-table-placeholder\"><td class=\"wpf-table-placeholder-input\"><input class=\"regular-text text_input\" name=\"username\" value=\"\" type=\"text\"\/><\/td><\/tr><tr class=\"wpf-table-placeholder\"><th class=\"wpf-table-placeholder-input\"><label class=\"wpf-label\">Password:<\/label><\/th><\/tr><tr class=\"wpf-table-placeholder\"><td class=\"wpf-table-placeholder-input\"><input class=\"regular-text text_input\" name=\"password\" value=\"\" type=\"password\"\/><\/td><\/tr><\/tbody><\/table><p class=\"wpf-table-placeholder submit\"><button class=\"wp_plugin_framework_ajax_button\" type=\"button\" style=\"background-color:#4D90FE;;color:#ffffff;;border:1px solid #3079ed;\" name=\"_event\" value=\"ButtonLogin\">Log in<\/button><\/p><\/td><td class=\"wpf-table-placeholder-input\"><\/td><\/tr><\/tbody><\/table><\/form><div id=\"ButtonStartRegister\"><a href=\"https:\/\/egonlin.com\/wp-login.php?action=register\">Register<\/a><\/div><div id=\"Link1\"><a href=\"https:\/\/egonlin.com\/wp-login.php?action=lostpassword\">Forgotten username or password?<\/a><\/div><div id=\"StatusBarFooter\"><\/div><\/div><\/div><div id=aru_remaining_content><\/div>","protected":false},"excerpt":{"rendered":"<p>service\u8d44\u6e90\u7ba1\u7406 \u4e00\u3001service\u8d44\u6e90 1\u3001\u7b80\u4ecb\uff08k8s\u96c6\u7fa4\u4e2d\u667a\u80fd\u8d1f\u8f7d\u5747\u8861\u5668\uff09 service\u662fk8s [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":1033,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[128],"tags":[21,133,134,135,19,22,132,20],"_links":{"self":[{"href":"https:\/\/egonlin.com\/index.php?rest_route=\/wp\/v2\/posts\/1028"}],"collection":[{"href":"https:\/\/egonlin.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/egonlin.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/egonlin.com\/index.php?rest_route=\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/egonlin.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1028"}],"version-history":[{"count":0,"href":"https:\/\/egonlin.com\/index.php?rest_route=\/wp\/v2\/posts\/1028\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/egonlin.com\/index.php?rest_route=\/wp\/v2\/media\/1033"}],"wp:attachment":[{"href":"https:\/\/egonlin.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1028"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/egonlin.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1028"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/egonlin.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1028"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}