AWS Kubernetes Ingress nginx websocket 代理

在需要配置WebSocket的Ingress服务上增加下面注解

metadata:
  annotations:
    nginx.org/websocket-services: "SERVICE_NAME"

WebSocket 测试 ws-test.yaml,注意看Ingress部分配置

apiVersion: v1
kind: Pod
metadata:
  name: ws
  labels:
    app: ws
spec:
  containers:
  - name: ws
    image: cliven/ws-loop:v1
    ports:
    - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: ws
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: ws
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ws
  annotations:
    nginx.org/websocket-services: "ws"
spec:
  rules:
  - host: your.domain.com
    http:
      paths:
      - path: /ws
        backend:
          serviceName: ws
          servicePort: 80

需要自己设置一下本机的 hosts文件 将这个域名指向对应集群的地址或IP

运行服务端测试程序

docker run -p 80:80 cliven/ws-loop:v1

测试页面

<!DOCTYPE html>
<pre id="log"></pre>
<script>
  const SERVER_URL = 'ws://your.domain.com/ws'
  // helper function: log message to screen
  function log(msg) {
    document.getElementById('log').textContent += msg + '\n';
  }

  // setup websocket with callbacks
  var ws = new WebSocket(SERVER_URL);
  ws.onopen = function() {
    log('CONNECT');
  };
  ws.onclose = function() {
    log('DISCONNECT');
  };
  ws.onmessage = function(event) {
    log('MESSAGE: ' + event.data);
  };
</script>

打开页面,依次输出 1-10,然后断开连接
在这里插入图片描述

这种配置只影响到一个服务。

参考

[1]. nginx . inc . examples . WebSocket support . https://github.com/nginxinc/kubernetes-ingress/tree/master/examples/websocket
[2]. websocketd . github . README . https://github.com/joewalnes/websocketd/
[3]. Nginx dropping Connect/Upgrade headers for WebSocket handshake . timdorr . github . https://github.com/kubernetes/ingress-nginx/issues/3746

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值