Jiyus
  • All Resources & Services
    • Compute
      • Virtual Instances
      • Bare Metal Instances
      • Managed Kubernetes
      • Big Data
      • Functions Engine
      • Data Protection
    • Services
      • Managed Databases
      • Applications Marketplace
      • Orchestration
      • Developer Tools
      • Management Tools
      • User Interface
    • Storage
      • Object Storage
      • Block Storage
      • File Storage
    • Networking
      • Software-Defined Networking
  • Why Choose Jiyus?
  • Pricing
  • Security
  • About
Jiyus
  • All Resources & Services
    • Compute
      • Virtual Instances
      • Bare Metal Instances
      • Managed Kubernetes
      • Big Data
      • Functions Engine
      • Data Protection
    • Services
      • Managed Databases
      • Applications Marketplace
      • Orchestration
      • Developer Tools
      • Management Tools
      • User Interface
    • Storage
      • Object Storage
      • Block Storage
      • File Storage
    • Networking
      • Software-Defined Networking
  • Why Choose Jiyus?
  • Pricing
  • Security
  • About

How to Set Up Ambassador with Socket.io

byYulong Song inUncategorized posted onJuly 18, 2019
0
0

Long story short: I need events in my application.

A little bit more about the project: I’m building a large-scale web application with micro-service architecture. We use Kubernetes to deploy our micro-services with Ambassador acting as the gateway. Everything works great until I need to have a prefix for my Socket.io micro-service.

As usual, I create my service yaml like this:

— -
apiVersion: v1
kind: Service
metadata:
 name: test-socket
 annotations:
 getambassador.io/config: |
 — -
 apiVersion: ambassador/v1
 kind: Mapping
 name: test_socket_mapping
 prefix: /test/
 service: test-socket
 timeout_ms: 20000
 use_websocket: true
spec:
 selector:
 app: test-socket
 ports:
 — name: first
 protocol: TCP
 port: 443
 targetPort: 8000
 — name: second
 protocol: TCP
 port: 80
 targetPort: 8000

Also the deployment yaml like this:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: test-socket
spec:
  replicas: 1
  strategy:
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: test-socket
    spec:
      containers:
      - name: spiderkube-event-container
        image: sylhero/test-socket
        env:
        - name: NODE_ENV
          value: "development"
        imagePullPolicy: Always
        ports:
        - containerPort: 8000
        livenessProbe:
          tcpSocket:
            port: 8000
          initialDelaySeconds: 30
          periodSeconds: 10
          successThreshold: 1

Life is good. All I need to do is connect my newly deployed test-socket micro-service with my socket client.

I have a simple test client like this:

const
    io = require("socket.io-client"),
    ioClient = io.connect("https://dev.test.io/test"); 

What I expect to see on the pod log is something that says “connection success” or “receiving request from 1.1.1.1”, etc. However, I don’t 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:

It’s the client path.

I updated my test client code like this:

const
    io = require("socket.io-client"),
    ioClient = io.connect("https://dev.test.io", {
     path: "/test/socket.io/"
    });

Voila! Now it works like a charm!

Ambassador is a great gateway for Kubernetes but it’s 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.

Source code link: https://github.com/sylhero/test-socket

This article was originally published on Medium.

OpenStack Summit

Share:
Yulong Song

Yulong leads the team that’s 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.

Previous

A Quickstart Guide to Deploying Qinling in Production

Next

Currying Functions in JavaScript, Recursively

Keep on reading

September 5, 2018
Kubernetes vs. Docker: Untangling the Mesh
No Comments
October 27, 2015
[PR] Global Cloud Solution Provider, Ormuco, Today Announces it has Selected Olympus.io as its File Sharing Partner
No Comments
August 28, 2018
What Is Fog Computing?
No Comments

Search

Categories

  • Business
  • Developers Corner
  • Press Releases
  • Technology
  • Uncategorized

Jiyus

Jiyus is an infrastructure-as-a-service platform that aggregates the computing resources of local data center providers, and transforms these resources into a global network of decentralized computing. Resources available on Jiyus include compute, storage, networking, and databases.

CREATE AN ACCOUNT

Company

  • Why Choose Jiyus?
  • Newsroom

Legal

  • Privacy Policy
  • Security
  • Pricing

Contact Us

  • info@jiyus.com
© 2020 Ormuco Inc.