摘要:
VirtualService-hosts;Gateway-hosts;websockets;os halt;
- GitHub - hiroakis/tornado-websocket-example
- istio/samples/websockets at master · istio/istio · GitHub
1、kubectl apply -f yaml假如yaml里没有指定namespace,可以在kubectl命令中指定;yaml里指定namespace也是kubectl -n bookinfo优先。
# kubectl -n bookinfo apply -f yaml
2、问题:Gateway和VirtualService的hosts设置都为- "*",浏览器访问http://book.atc.com:30933/hello失败HTTP ERROR 404;Gateway或vs添加上 - "book.atc.com",顺序无关,浏览器访问正常。
kind: Gateway
spec:
servers:
- port:
hosts:
- "*"
- "book.atc.com"
---
kind: VirtualService
spec:
hosts:
- "book.atc.com"
- "*"
C:\Windows\System32\drivers\etc\hosts
192.168.31.213 book.atc.com
3、部署websockets示例应用程序,在ingress-nginx入口流量上使用升级的websockets连接。app.yaml创建了一个Kubernetes服务和一个部署,该部署基于Hirakis的Tornado Websocket的Docker映像。
- WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket在浏览器和服务器之间创建持久性的连接,并进行双向数据传输,允许服务端主动向客户端推送数据,而不是轮询。
- 在 Ingress 中访问不同命名空间下的服务;跨命名空间的 Ingress 的配置。ingress在study命名空间,tornado在bookinfo命名空间,所以在study命名空间创建type: ExternalName的Service:tornado-ext
- 处于study命名空间下的ingress-test中- backend:项不支持svc-name.ns-name.svc.cluster.local 方式跨命名空间访问的方式;要访问到处于bookinfo命名空间下的tornado,使用使用 ExternalName 方式。
# k -n study get ingress,svc
NAME CLASS HOSTS ADDRESS PORTS
ingress.networking.k8s.io/ingress-test nginx ingress.test.com,dj.atc.com 10.16.205.49 80
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S)
service/nginx ClusterIP 10.16.39.192 <none> 80/TCP
service/tornado-ext ExternalName <none> tornado.bookinfo.svc.cluster.local <none>
---使用ExternalName将外部服务映射到内部服务---
apiVersion: v1
kind: Service
metadata:
name: tornado-ext
namespace: study
spec:
type: ExternalName
externalName: tornado.bookinfo.svc.cluster.local
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-test
namespace: study
spec:
ingressClassName: nginx
rules:
- host: dj.atc.com
http:
paths:
- backend:
service:
name: tornado-ext
port:
number: 8888
path: /
pathType: ImplementationSpecific
# kb get svc
tornado ClusterIP 10.16.171.87 <none> 8888/TCP
---Set the "id 1" value to 300( The row No 1 will change to yellow )---
# curl "http://10.16.171.87:8888/api?id=1&value=300"
---Set The "id 1" value to 600( The row No 1 will change to red )---
# curl "http://10.16.171.87:8888/api?id=1&value=600"
4、websockets示例应用程序,演示了在使用Istio VirtualService时的测试情况。
- 注意:v1alpha3路由规则中添加的websockets升级支持是在Istio v0.8.0发布后才添加的。
- 测试问题:必须是根目录prefix: / 不能prefix: /tornado,否者报错“404: Not Found”,原因未明。
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: tornado
namespace: bookinfo
spec:
hosts:
- "*"
- "book.atc.com"
gateways:
- tornado-gateway
http:
- match:
- uri:
prefix: /
route:
- destination:
host: tornado
port:
number: 8888
weight: 100
- Istio vs使用地址重写,浏览器访问http://192.168.31.216:30933/tornado页面有显示,但是WebSocket status : closed。curl测试主动向客户端推送数据功能失败。value值一直为0,不变。
- uri:
prefix: /tornado
rewrite:
uri: /
---Set The "id 1" value to 600( The row No 1 will change to red )---
# curl "http://10.16.171.87:8888/api?id=1&value=600"
5、替换libc.so.6导致centos7.9系统halt,但是自动重启正常。