{"id":7886,"date":"2019-11-28T07:10:33","date_gmt":"2019-11-28T07:10:33","guid":{"rendered":"https:\/\/www.devopsschool.com\/blog\/?p=7886"},"modified":"2021-11-15T09:46:13","modified_gmt":"2021-11-15T09:46:13","slug":"how-to-expose-multiple-port-in-services-in-kubernetes-or-multi-port-services","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/how-to-expose-multiple-port-in-services-in-kubernetes-or-multi-port-services\/","title":{"rendered":"How to expose multiple port in services in kubernetes or Multi-Port Services"},"content":{"rendered":"\n<p><strong>You have two options:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>You could have multiple services, one for each port. As you pointed out, each service will end up with a different IP address<\/li><li>You could have a single service with multiple ports. In this particular case, you must give all ports a name.<\/li><\/ol>\n\n\n\n<p>For some Services, you need to expose more than one port. Kubernetes lets you configure multiple port definitions on a Service object. When using multiple ports for a Service, you must give all of your ports names so that these are unambiguous. For example:<\/p>\n\n\n\n<script src=\"https:\/\/gist.github.com\/devops-school\/cc1f462b3b10fa50ed7f1a7cb082a4dd.js\"><\/script>\n\n\n\n<p><strong>How to work with command line?<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\">&#91;ec2-user@ip-172-31-26-152 ~]$ kubectl create service  clusterip svc3 --tcp=8080:80 --tcp=8090:80\nservice\/svc3 created\n\n&#91;ec2-user@ip-172-31-26-152 ~]$ kubectl get svc\nNAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)             AGE\nkubernetes   ClusterIP   10.96.0.1       <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">none<\/span>&gt;<\/span>        443\/TCP             4d1h\nsvc1         ClusterIP   10.98.191.0     <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">none<\/span>&gt;<\/span>        8080\/TCP            33m\nsvc2         ClusterIP   10.104.34.223   <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">none<\/span>&gt;<\/span>        8080\/TCP,8090\/TCP   5m41s\nsvc3         ClusterIP   10.102.66.226   <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">none<\/span>&gt;<\/span>        8080\/TCP,8090\/TCP   8s\n\n&#91;ec2-user@ip-172-31-26-152 ~]$ kubectl describe svc svc3\nName:              svc3\nNamespace:         default\nLabels:            app=svc3\nAnnotations:       <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">none<\/span>&gt;<\/span>\nSelector:          app=svc3\nType:              ClusterIP\nIP:                10.102.66.226\nPort:              8080-80  8080\/TCP\nTargetPort:        80\/TCP\nEndpoints:         <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">none<\/span>&gt;<\/span>\nPort:              8090-80  8090\/TCP\nTargetPort:        80\/TCP\nEndpoints:         <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">none<\/span>&gt;<\/span>\nSession Affinity:  None\nEvents:            <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">none<\/span>&gt;<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n<div class=\"epyt-gallery\" data-currpage=\"1\" id=\"epyt_gallery_45250\"><figure class=\"wp-block-embed wp-block-embed-youtube is-type-video is-provider-youtube epyt-figure\"><div class=\"wp-block-embed__wrapper\"><iframe loading=\"lazy\"  id=\"_ytid_86112\"  width=\"760\" height=\"427\"  data-origwidth=\"760\" data-origheight=\"427\" src=\"https:\/\/www.youtube.com\/embed\/?enablejsapi=1&#038;autoplay=0&#038;cc_load_policy=0&#038;cc_lang_pref=&#038;iv_load_policy=1&#038;loop=0&#038;rel=1&#038;fs=1&#038;playsinline=0&#038;autohide=2&#038;theme=dark&#038;color=red&#038;controls=1&#038;disablekb=0&#038;\" class=\"__youtube_prefs__  no-lazyload\" title=\"YouTube player\"  data-epytgalleryid=\"epyt_gallery_45250\"  allow=\"fullscreen; accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen data-no-lazy=\"1\" data-skipgform_ajax_framebjll=\"\"><\/iframe><\/div><\/figure><div class=\"epyt-gallery-list\"><div>Sorry, there was a YouTube error.<\/div><\/div><\/div>","protected":false},"excerpt":{"rendered":"<p>You have two options: You could have multiple services, one for each port. As you pointed out, each service will end up with a different IP address You could have a single service with multiple ports. In this particular case, you must give all ports a name. For some Services, you need to expose more&#8230;<\/p>\n","protected":false},"author":1,"featured_media":7912,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","_joinchat":[],"footnotes":""},"categories":[4859],"tags":[5449,4860,3618,456,229],"class_list":["post-7886","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-kubernetes","tag-devopsschool","tag-kubernetes","tag-multiple","tag-port","tag-services"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/7886","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=7886"}],"version-history":[{"count":3,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/7886\/revisions"}],"predecessor-version":[{"id":25299,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/7886\/revisions\/25299"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media\/7912"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=7886"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=7886"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=7886"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}