使用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名称。
- 配置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的方式代理后端服务。
- 配置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无法使用。