I want use a websocket client to exec commands in a Kubernetes pod,Develop a web terminal using xterm.js, i wrote websocket for the backend via asp.net core 3.1,
websocket websocket
xterm.js -----------------> websocketServer ----------------> k8s
cmd:ls cmd:ls
here is my websocketServer code:(asp.net core 3.1)
[HttpGet("/ws"), AllowAnonymous]
public async Task Terminal()
{
var config = KubernetesClientConfiguration.BuildConfigFromConfigFile(Environment.GetEnvironmentVariable("KUBECONFIG"));
var client = new Kubernetes(config);
var namespaces = client.ListNamespace();
if (!HttpContext.WebSockets.IsWebSocketRequest)
{
HttpContext.Response.StatusCode = 400;
}
//web websocketServer
using var websocketServer = await
HttpContext.WebSockets.AcceptWebSocketAsync();
await Echo(websocketServer);
//k8s websocket
var k8sWebSocket = await client.WebSocketNamespacedPodExecAsync(pod.Metadata.Name, "winter", "ls",pod.Spec.Containers[0].Name).ConfigureAwait(false);
//receive user input
async Task Echo(WebSocket webSocket)
{
var buffer = new byte[1024 * 4];
var result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);
while (!result.CloseStatus.HasValue)
{
var serverMsg = Encoding.UTF8.GetBytes($"{Encoding.UTF8.GetString(buffer)}");
await webSocket.SendAsync(new ArraySegment<byte>(serverMsg, 0, serverMsg.Length), result.MessageType, result.EndOfMessage, CancellationToken.None);
//todo:
//how to transfer user input to k8sWebsocket...
//...
result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);
//todo:
//how to transfer k8sWebsocket stdout to websocket...
//...
}
await webSocket.CloseAsync(result.CloseStatus.Value, result.CloseStatusDescription, CancellationToken.None);
}
when run the project, execute the command as blow:
let webSocket = new WebSocket('ws://localhost:29126/ws');
an error occured: WebSocket connection to 'ws://localhost:29126/ws' failed:
and the error detail is Unable to read data from the transport connection: Software in your host aborted an established connection. .