构建简单的websocket服务并部署到TKE集群

clb默认支持wss、ws,所以TKE的CLB类型ingress是默认支持的,不需要额外配置,直接使用

nginx ingress类型的ingress也是支持websocket需要开启这个,参考如下文档:

https://kubernetes.github.io/ingress-nginx/user-guide/miscellaneous/#websockets

这里我们将使用Python和WebSocket库创建一个简单的WebSocket服务,然后使用Docker和Kubernetes进行部署。

1,创建WebSocket服务

首先,确保你已经安装了Python和WebSocket库。在命令行中运行以下命令以安装WebSocket库:

代码语言:javascript
复制
pip install websockets

创建一个名为websocket_server.py的文件,然后将以下代码粘贴到文件中:

代码语言:javascript
复制
import asyncio
import websockets

async def echo(websocket, path):
async for message in websocket:
await websocket.send(f"Echo: {message}")

start_server = websockets.serve(echo, "0.0.0.0", 8765)

asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()

2,创建Docker镜像

创建一个名为Dockerfile的文件,然后将以下代码粘贴到文件中:

代码语言:javascript
复制
FROM python:3.8-slim

WORKDIR /app

COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt

COPY . .

CMD ["python", "websocket_server.py"]

在同一目录下创建一个名为requirements.txt的文件,然后将以下内容粘贴到文件中:

代码语言:javascript
复制
websockets

在命令行中运行以下命令以构建Docker镜像:

代码语言:javascript
复制
#镜像仓库替换成自己镜像仓库地址和命名空间名称

docker build -t ccr.ccs.tencentyun.com/chen1900s/my-websocket-server:latest .

3,部署到Kubernetes

这里是使用腾讯云TKE集群进行部署

确保你已经安装了kubectl和配置了Kubernetes集群。创建一个名为deployment.yaml的文件,然后将以下代码粘贴到文件中:

代码语言:yaml
复制
apiVersion: apps/v1
kind: Deployment
metadata:
name: websocket-server
spec:
replicas: 1
selector:
matchLabels:
app: websocket-server
template:
metadata:
labels:
app: websocket-server
spec:
containers:
- name: websocket-server
image: ccr.ccs.tencentyun.com/chen1900s/my-websocket-server:latest
ports:
- containerPort: 8765

apiVersion: v1
kind: Service
metadata:
name: websocket-server
spec:
selector:
app: websocket-server
ports:
- protocol: TCP
port: 80
targetPort: 8765
type: LoadBalancer


apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: qcloud
name: websocket-server
spec:
rules:

  • host: www.chen1900s.cn #替换成自己的域名
    http:
    paths:
    • backend:
      service:
      name: websocket-server
      port:
      number: 80
      path: /
      pathType: ImplementationSpecific
      tls:
  • secretName: chen1900s-6h3tqwaa #需要提前创建好对应secret

在命令行中运行以下命令以部署WebSocket服务:

代码语言:shell
复制
kubectl apply -f deployment.yaml

现在,WebSocket服务应该已经部署到Kubernetes集群,并通过LoadBalancer服务暴露。你可以通过运行以下命令来检查部署状态:

代码语言:shell
复制
kubectl get deployments
kubectl get services

根据输出的LoadBalancer的IP地址和端口,你可以与WebSocket服务建立连接进行测试。

4,功能测试

可以使用这个在线工具测试

http://wstool.jackxiang.com/