1.websocket介绍
WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就可以直接创建持久性的连接,并进行双向数据传输。Websocket最大的优势在于服务器和客户端能够实时进行双向通信,在游戏、实时消息推送、在线聊天、实时数据展示等场景中,提供高效和稳定的数据传输。传统的HTTP通信中每次通信都需要客户端发起请求,服务器相应请求,且每次请求都要带上一些额外的信息,而websocket通过一次握手建立持久连接,之后的传输都不需要额外信息,减少了网络延迟。
2.查询容器远程登录信息
path参数
名称 | 类型 | 说明 | 示例 |
---|---|---|---|
clusterName | String | 集群名 | test |
query参数
名称 | 类型 | 说明 | 示例 |
---|---|---|---|
namespaceName | String | 命名空间名称 | kube-system |
podName | String | pod名称 | pod-test |
containerName | String | 容器名称 | pod-test-1 |
3.实现逻辑如下:
1.对用户进行身份认证
2.获取集群配置,建立Kubernetes Client,并获得pod的ip地址,这是建立websocket连接的前提
3.根据入参创建JWT(JSON Web Token,一种用于在网络应用间传递安全信息的开放标准,提供了一种无状态、可扩展且安全的身份验证和授权机制),设置过期时间为5分钟。
4.对JWT进行签名
5.将返回的字符串作为请求query参数放在发起远程登陆请求的url中,客户端会根据请求url是否携带jwt来决定是否执行用户身份校验
6.如果用户携带jwt,会进行解密操作获取clusterName、podName等相关身份信息,如果身份信息与请求发送的信息一致,验证通过。反之,如果用户没有携带JWT或者错误携带JWT,身份认证都不会通过,无法成功远程登陆到容器中。