使用apisix代理后端节点开启websocket比较简单,根据官网设置对应配置即可:

apiVersion: apisix.apache.org/v2
kind: ApisixRoute
metadata:
  name: webssh
  namespace: development
spec:
  http:
  - name: webssh
    websocket: true
    match:
      hosts:
      - 
      paths:
      - /*
    upstreams:
      - name: webssh

其中:websocket: true则表示开启。

代理https则比较麻烦,使用ApisixRoute无法直接代理的,必须配合upstream才可,这里先配置ApisixUpstream,然后在ApisixRoute里面绑定ApisixUpstream名称。

  1. 配置ApisixUpstream
apiVersion: apisix.apache.org/v2
kind: ApisixUpstream
metadata:
  name: webssh
  namespace: development
spec:
  scheme: https
  externalNodes:
  - type: Domain
    name: webssh.development
    port: 2226

因为这里在k8s里面ApisixUpstream对k8s暂时适配不好所以这里用了externalNodes,这个也是多次实验才发现的,scheme: https 这个表示使用HTTPS,下面则是svc.namespace的方式代理后端服务。

  1. 配置ApisixRoute
apiVersion: apisix.apache.org/v2
kind: ApisixRoute
metadata:
  name: webssh
  namespace: development
spec:
  http:
  - name: webssh
    websocket: true
    match:
      hosts:
      - 
      paths:
      - /*
    upstreams:
      - name: webssh

这里upstreams则是上述配置ApisixUpstream的名称,到这里webscoket和https则配置完成,补充一下如果webssh.cdd.group需要配置https则需要ApisixTls的配合,这里官网也是有说明的,这里示例如下:

apiVersion: apisix.apache.org/v2
kind: ApisixTls
metadata:
  name: aaa.com
  namespace: development
spec:
  hosts:
  - 
  - 
  secret:
    name: aaa.com
    namespace: development


ApisixTls下的secret因为可以指定命名空间所以同一个名字的secret只需要创建一个就行,其他命名空间需要的可以指定这个命名空间,

hosts则是需要用这个证书的域名切记不要配错域名和证书,否则https无法使用。