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.