{"id":7060,"date":"2019-07-18T18:41:57","date_gmt":"2019-07-18T18:41:57","guid":{"rendered":"https:\/\/ormuco.com\/?p=7060"},"modified":"2019-11-12T15:54:05","modified_gmt":"2019-11-12T15:54:05","slug":"blog-ambassador-socket-io","status":"publish","type":"post","link":"https:\/\/ormuco.com\/fr\/blog\/ambassador-socket-io","title":{"rendered":"How to Set Up Ambassador with Socket.io"},"content":{"rendered":"<p id=\"5f03\" class=\"ic id eq bh ie b if ig ih ii ij ik il im in io ip\" data-selectable-paragraph=\"\">Long story short: <strong class=\"ie iq\">I need events in my application.<\/strong><\/p>\n<p id=\"18eb\" class=\"ic id eq bh ie b if ig ih ii ij ik il im in io ip\" data-selectable-paragraph=\"\">A little bit more about the project: I\u2019m building a large-scale web application with micro-service architecture. We use\u00a0<strong class=\"ie iq\">Kubernetes<\/strong> to deploy our micro-services with <strong class=\"ie iq\">Ambassador<\/strong>\u00a0acting as the gateway. Everything works great until I need to have a\u00a0<strong class=\"ie iq\">prefix<\/strong>\u00a0for my Socket.io micro-service.<\/p>\n<p id=\"f814\" class=\"ic id eq bh ie b if ig ih ii ij ik il im in io ip\" data-selectable-paragraph=\"\">As usual, I create my service yaml like this:<\/p>\n<pre class=\"hm hn ho hp hq fx do ir\"><span id=\"a51d\" class=\"is it eq bh iu b dg iv iw n ix\" data-selectable-paragraph=\"\">\u2014 -\r\napiVersion: v1\r\nkind: Service\r\nmetadata:\r\n name: test-socket\r\n annotations:\r\n getambassador.io\/config: |\r\n \u2014 -\r\n apiVersion: ambassador\/v1\r\n kind: Mapping\r\n name: test_socket_mapping\r\n prefix: \/test\/\r\n service: test-socket\r\n timeout_ms: 20000\r\n use_websocket: true\r\nspec:\r\n selector:\r\n app: test-socket\r\n ports:\r\n \u2014 name: first\r\n protocol: TCP\r\n port: 443\r\n targetPort: 8000\r\n \u2014 name: second\r\n protocol: TCP\r\n port: 80\r\n targetPort: 8000<\/span><\/pre>\n<p id=\"8cf6\" class=\"ic id eq bh ie b if ig ih ii ij ik il im in io ip\" data-selectable-paragraph=\"\">Also the deployment yaml like this:<\/p>\n<pre class=\"hm hn ho hp hq fx do ir\"><span id=\"bdbf\" class=\"is it eq bh iu b dg iv iw n ix\" data-selectable-paragraph=\"\">apiVersion: extensions\/v1beta1\r\nkind: Deployment\r\nmetadata:\r\n  name: test-socket\r\nspec:\r\n  replicas: 1\r\n  strategy:\r\n    type: RollingUpdate\r\n  template:\r\n    metadata:\r\n      labels:\r\n        app: test-socket\r\n    spec:\r\n      containers:\r\n      - name: spiderkube-event-container\r\n        image: sylhero\/test-socket\r\n        env:\r\n        - name: NODE_ENV\r\n          value: \"development\"\r\n        imagePullPolicy: Always\r\n        ports:\r\n        - containerPort: 8000\r\n        livenessProbe:\r\n          tcpSocket:\r\n            port: 8000\r\n          initialDelaySeconds: 30\r\n          periodSeconds: 10\r\n          successThreshold: 1<\/span><\/pre>\n<p id=\"f1f2\" class=\"ic id eq bh ie b if ig ih ii ij ik il im in io ip\" data-selectable-paragraph=\"\">Life is good. All I need to do is connect my newly deployed test-socket micro-service with my socket client.<\/p>\n<p id=\"8f3e\" class=\"ic id eq bh ie b if ig ih ii ij ik il im in io ip\" data-selectable-paragraph=\"\">I have a simple test client like this:<\/p>\n<pre class=\"hm hn ho hp hq fx do ir\"><span id=\"bf3b\" class=\"is it eq bh iu b dg iv iw n ix\" data-selectable-paragraph=\"\">const\r\n    io = require(\"socket.io-client\"),\r\n    ioClient = io.connect(\"<a href=\"https:\/\/dev.spiderkube.io\/?source=post_page---------------------------\" class=\"aq cc iy iz ja jb\">https:\/\/dev.test.io<\/a>\/test\"); <\/span><\/pre>\n<p id=\"f5e1\" class=\"ic id eq bh ie b if ig ih ii ij ik il im in io ip\" data-selectable-paragraph=\"\">What I expect to see on the pod log is something that says \u201cconnection success\u201d or \u201creceiving request from 1.1.1.1\u201d, etc. However, I don\u2019t see anything on the pod log. Everything works fine on my local! After I spent a whole day looking into this, I finally figured out:<\/p>\n<p id=\"4c23\" class=\"ic id eq bh ie b if ig ih ii ij ik il im in io ip\" data-selectable-paragraph=\"\">It\u2019s the\u00a0<strong class=\"ie iq\">client path<\/strong>.<\/p>\n<p id=\"36cd\" class=\"ic id eq bh ie b if ig ih ii ij ik il im in io ip\" data-selectable-paragraph=\"\">I updated my test client code like this:<\/p>\n<pre class=\"hm hn ho hp hq fx do ir\"><span id=\"9e64\" class=\"is it eq bh iu b dg iv iw n ix\" data-selectable-paragraph=\"\">const\r\n    io = require(\"socket.io-client\"),\r\n    ioClient = io.connect(\"<a href=\"https:\/\/dev.spiderkube.io\/?source=post_page---------------------------\" class=\"aq cc iy iz ja jb\">https:\/\/dev.test.io<\/a>\", {\r\n     path: \"\/test\/socket.io\/\"\r\n    });<\/span><\/pre>\n<p id=\"91af\" class=\"ic id eq bh ie b if ig ih ii ij ik il im in io ip\" data-selectable-paragraph=\"\">Voila! Now it works like a charm!<\/p>\n<p id=\"6fca\" class=\"ic id eq bh ie b if ig ih ii ij ik il im in io ip\" data-selectable-paragraph=\"\">Ambassador is a great gateway for Kubernetes but it\u2019s also very new as a result, documentation is always in need. Hopefully, my small article can contribute to it and help people who are doing the same thing with Ambassador.<\/p>\n<p id=\"2fd5\" class=\"ic id eq bh ie b if ig ih ii ij ik il im in io ip\" data-selectable-paragraph=\"\">Source code link: <a href=\"https:\/\/github.com\/sylhero\/test-socket?source=post_page---------------------------\" class=\"aq cc iy iz ja jb\">https:\/\/github.com\/sylhero\/test-socket<\/a><\/p>\n<p><em>This article was originally published on <a href=\"https:\/\/medium.com\/@felixsong88\/how-to-set-up-ambassador-with-socket-io-e3da52997abc\">Medium<\/a>.<\/em><\/p>\n<p><a href=\"https:\/\/ormuco.com\/fr\/webcast\/openstack-summit-2018\/\"><img loading=\"lazy\" class=\"size-full wp-image-7034 aligncenter\" src=\"https:\/\/ormuco.com\/wp-content\/uploads\/2019\/07\/Qinling-CTA-1-1.png\" alt=\"OpenStack Summit\" width=\"336\" height=\"280\" srcset=\"https:\/\/ormuco.com\/wp-content\/uploads\/2019\/07\/Qinling-CTA-1-1.png 336w, https:\/\/ormuco.com\/wp-content\/uploads\/2019\/07\/Qinling-CTA-1-1-300x250.png 300w, https:\/\/ormuco.com\/wp-content\/uploads\/2019\/07\/Qinling-CTA-1-1-270x225.png 270w\" sizes=\"(max-width: 336px) 100vw, 336px\" \/><\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>Long story short: I need events in my application. A little bit more about the project: I\u2019m building a large-scale web application with micro-service architecture. We use\u00a0Kubernetes to deploy our micro-services with Ambassador\u00a0acting as the gateway. Everything works great until I need to have a\u00a0prefix\u00a0for my Socket.io micro-service. As usual, I create my service yaml [&hellip;]<\/p>","protected":false},"author":5,"featured_media":7066,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"spay_email":""},"categories":[74],"tags":[],"jetpack_featured_media_url":"https:\/\/ormuco.com\/wp-content\/uploads\/2019\/07\/Ambassador.jpg","yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v15.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>How to Set Up Ambassador with Socket.io - Ormuco<\/title>\n<meta name=\"description\" content=\"Learn how to set up Ambassador with Socket.io as the gateway for Kubernetes in a large-scale web application with microservice architecture.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/ormuco.com\/fr\/blog\/ambassador-socket-io\/\" \/>\n<meta property=\"og:locale\" content=\"fr_CA\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to Set Up Ambassador with Socket.io - Ormuco\" \/>\n<meta property=\"og:description\" content=\"Learn how to set up Ambassador with Socket.io as the gateway for Kubernetes in a large-scale web application with microservice architecture.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/ormuco.com\/fr\/blog\/ambassador-socket-io\/\" \/>\n<meta property=\"og:site_name\" content=\"Ormuco\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Ormuco\/\" \/>\n<meta property=\"article:published_time\" content=\"2019-07-18T18:41:57+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-11-12T15:54:05+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/ormuco.com\/wp-content\/uploads\/2019\/07\/Ambassador.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"4415\" \/>\n\t<meta property=\"og:image:height\" content=\"2311\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@Ormuco_Inc\" \/>\n<meta name=\"twitter:site\" content=\"@Ormuco_Inc\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\">\n\t<meta name=\"twitter:data1\" content=\"1 minute\">\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https:\/\/ormuco.com\/#organization\",\"name\":\"Ormuco Inc\",\"url\":\"https:\/\/ormuco.com\/\",\"sameAs\":[\"https:\/\/www.facebook.com\/Ormuco\/\",\"https:\/\/www.linkedin.com\/company\/ormuco-inc-\/\",\"https:\/\/www.youtube.com\/channel\/UCbzzf28bWMg0zhOrq0fI_sQ\",\"https:\/\/twitter.com\/Ormuco_Inc\"],\"logo\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/ormuco.com\/#logo\",\"inLanguage\":\"fr-CA\",\"url\":\"https:\/\/ormuco.com\/wp-content\/uploads\/2018\/07\/Ormuco_logo.png\",\"width\":360,\"height\":89,\"caption\":\"Ormuco Inc\"},\"image\":{\"@id\":\"https:\/\/ormuco.com\/#logo\"}},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/ormuco.com\/#website\",\"url\":\"https:\/\/ormuco.com\/\",\"name\":\"Ormuco\",\"description\":\"Next Generation Mobile Computing\",\"publisher\":{\"@id\":\"https:\/\/ormuco.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":\"https:\/\/ormuco.com\/?s={search_term_string}\",\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"fr-CA\"},{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/ormuco.com\/blog\/ambassador-socket-io\/#primaryimage\",\"inLanguage\":\"fr-CA\",\"url\":\"https:\/\/ormuco.com\/wp-content\/uploads\/2019\/07\/Ambassador.jpg\",\"width\":4415,\"height\":2311,\"caption\":\"Ambassador Kubernetes\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/ormuco.com\/blog\/ambassador-socket-io\/#webpage\",\"url\":\"https:\/\/ormuco.com\/blog\/ambassador-socket-io\/\",\"name\":\"How to Set Up Ambassador with Socket.io - Ormuco\",\"isPartOf\":{\"@id\":\"https:\/\/ormuco.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/ormuco.com\/blog\/ambassador-socket-io\/#primaryimage\"},\"datePublished\":\"2019-07-18T18:41:57+00:00\",\"dateModified\":\"2019-11-12T15:54:05+00:00\",\"description\":\"Learn how to set up Ambassador with Socket.io as the gateway for Kubernetes in a large-scale web application with microservice architecture.\",\"inLanguage\":\"fr-CA\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/ormuco.com\/blog\/ambassador-socket-io\/\"]}]},{\"@type\":\"Article\",\"@id\":\"https:\/\/ormuco.com\/blog\/ambassador-socket-io\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/ormuco.com\/blog\/ambassador-socket-io\/#webpage\"},\"author\":{\"@id\":\"https:\/\/ormuco.com\/#\/schema\/person\/dac5540369f781a1d6ab5f745d1e09be\"},\"headline\":\"How to Set Up Ambassador with Socket.io\",\"datePublished\":\"2019-07-18T18:41:57+00:00\",\"dateModified\":\"2019-11-12T15:54:05+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/ormuco.com\/blog\/ambassador-socket-io\/#webpage\"},\"publisher\":{\"@id\":\"https:\/\/ormuco.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/ormuco.com\/blog\/ambassador-socket-io\/#primaryimage\"},\"articleSection\":\"Developers Corner\",\"inLanguage\":\"fr-CA\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/ormuco.com\/#\/schema\/person\/dac5540369f781a1d6ab5f745d1e09be\",\"name\":\"Yulong Song\",\"description\":\"Yulong leads the team that\\u2019s developing Ormuco's dynamic application deployment platform, with responsibilities in front-end development and DevOps. Yulong has previously worked as a Full-Stack Developer at Ormuco. He graduated with a Master of Computer Science from Concordia University and a Bachelor of Management Science from University of Shanghai for Science and Technology.\",\"sameAs\":[\"https:\/\/www.linkedin.com\/in\/yulong-song-7bbb3262\/\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","jetpack_shortlink":"https:\/\/wp.me\/pa8ID1-1PS","_links":{"self":[{"href":"https:\/\/ormuco.com\/fr\/wp-json\/wp\/v2\/posts\/7060"}],"collection":[{"href":"https:\/\/ormuco.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ormuco.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ormuco.com\/fr\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/ormuco.com\/fr\/wp-json\/wp\/v2\/comments?post=7060"}],"version-history":[{"count":8,"href":"https:\/\/ormuco.com\/fr\/wp-json\/wp\/v2\/posts\/7060\/revisions"}],"predecessor-version":[{"id":7951,"href":"https:\/\/ormuco.com\/fr\/wp-json\/wp\/v2\/posts\/7060\/revisions\/7951"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ormuco.com\/fr\/wp-json\/wp\/v2\/media\/7066"}],"wp:attachment":[{"href":"https:\/\/ormuco.com\/fr\/wp-json\/wp\/v2\/media?parent=7060"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ormuco.com\/fr\/wp-json\/wp\/v2\/categories?post=7060"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ormuco.com\/fr\/wp-json\/wp\/v2\/tags?post=7060"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}