Giter Site home page Giter Site logo

astefanutti / kubebox Goto Github PK

View Code? Open in Web Editor NEW
2.1K 49.0 142.0 18.79 MB

⎈❏ Terminal and Web console for Kubernetes

Home Page: http://astefanutti.github.io/kubebox

License: MIT License

JavaScript 99.59% Dockerfile 0.41%
kubernetes terminal console openshift monitoring dashboard tui cui gui

kubebox's Introduction

Kubebox ⎈❏

Terminal and Web console for Kubernetes

Features

  • ✓ Configuration from kubeconfig files (KUBECONFIG environment variable or $HOME/.kube)

  • ✓ Switch contexts interactively

  • Authentication support (bearer token, basic auth, private key / cert, OAuth, OpenID Connect, Amazon EKS, Google Kubernetes Engine, Digital Ocean)

  • ✓ Namespace selection and pods list watching

  • ✓ Container log scrolling / watching

  • ✓ Container resources usage (memory, CPU, network, file system charts) [1]

  • ✓ Container remote exec terminal

  • ✓ Cluster, namespace, pod events

  • ❏ Object configuration editor and CRUD operations

  • ❏ Cluster and nodes views / monitoring

See the Screenshots section for some examples, and follow %40kubebox 00ACEE for some updates.

Run

The following alternatives are available for you to use Kubebox, depending on your preferences and constraints:

Executable

Download the Kubebox standalone executable for your OS:

# Linux (x86_64)
$ curl -Lo kubebox https://github.com/astefanutti/kubebox/releases/download/v0.10.0/kubebox-linux && chmod +x kubebox
# Linux (ARMv7)
$ curl -Lo kubebox https://github.com/astefanutti/kubebox/releases/download/v0.10.0/kubebox-linux-arm && chmod +x kubebox
# OSX
$ curl -Lo kubebox https://github.com/astefanutti/kubebox/releases/download/v0.10.0/kubebox-macos && chmod +x kubebox
# Windows
$ curl -Lo kubebox.exe https://github.com/astefanutti/kubebox/releases/download/v0.10.0/kubebox-windows.exe

Then run:

$ ./kubebox

Server

Kubebox can be served from a service hosted in your Kubernetes cluster. Terminal emulation is provided by Xterm.js and the communication with the Kubernetes master API is proxied by the server.

To deploy the server in your Kubernetes cluster, run:

$ kubectl apply -f https://raw.github.com/astefanutti/kubebox/master/kubernetes.yaml

To shut down the server and clean-up resources, run:

$ kubectl delete namespace kubebox

For the Ingress resource to work, the cluster must have an Ingress controller running. See Ingress controllers for more information.

Alternatively, to deploy the server in your OpenShift cluster, run:

$ oc new-app -f https://raw.github.com/astefanutti/kubebox/master/openshift.yaml

Kubectl

You can run Kubebox as an in-cluster client with kubectl, e.g.:

$ kubectl run kubebox -it --rm --env="TERM=xterm" --image=astefanutti/kubebox --restart=Never

If RBAC is enabled, you’ll have to use the --serviceaccount option and reference a service account with sufficient permissions.

Docker

You can run Kubebox using Docker, e.g.:

$ docker run -it --rm astefanutti/kubebox

You may want to mount your home directory so that Kubebox can rely on the ~/.kube/config file, e.g.:

$ docker run -it --rm -v ~/.kube/:/home/node/.kube/:ro astefanutti/kubebox

Online

Kubebox is available online at https://astefanutti.github.com/kubebox. Note that it requires this address to match the allowed origins for CORS by the API server. This can be achived with the Kubernetes API server CLI, e.g.:

$ kube-apiserver --cors-allowed-origins .*

Authentication

We try to support the various authentication strategies supported by kubectl, in order to provide seamless integration with your local setup. Here are the different authentication strategies we support, depending on how you’re using Kubebox:

Executable Docker Online

OpenID Connect

✔️

✔️

✔️[2]

Amazon EKS

✔️

Digital Ocean

✔️

Google Kubernetes Engine

✔️

If the mode you’re using isn’t supported, you can refresh the authentication token/certs manually and update your kubeconfig file accordingly.

cAdvisor

Kubebox relies on cAdvisor to retrieve the resource usage metrics. Before version 0.8.0, Kubebox used to access the cAdvisor endpoints, that are embedded in the Kubelet. However, these endpoints are being deprecated, and will eventually be removed, as discussed in kubernetes#68522.

Starting version 0.8.0, Kubebox expects cAdvisor to be deployed as a DaemonSet. This can be achieved with:

$ kubectl apply -f https://raw.githubusercontent.com/astefanutti/kubebox/master/cadvisor.yaml

It’s recommended to use the provided cadvisor.yaml file, that’s tested to work with Kubebox. However, the DaemonSet example, from the cAdvisor project, should also work just fine. Note that the cAdvisor containers must run with a privileged security context, so that they can access the container runtime on each node.

You can change the default --storage_duration and --housekeeping_interval options, added to the cAdvisor container arguments declared in the cadvisor.yaml file, to adjust the duration of the storage moving window (default to 5m0s), and the sampling period (default to 10s) respectively. You may also have to provide the path of your cluster container runtime socket, in case it’s not following the usual convention.

Hotkeys

Keybinding Description

General

l, Ctrl+l

Login

n

Change current namespace

[Shift+],
[Alt+]1, …​, 9

Navigate screens
(use Shift or Alt inside exec terminal)

Tab, Shift+Tab

Change focus within the active screen

,

Navigate list / form / log

PgUp, PgDn

Move one page up / down

Enter

Select item / submit form

Esc

Close modal window / cancel form

Ctrl+z

Close current screen

q, Ctrl+q

Exit [3]

Login

,

Navigate Kube configurations

Pods

Enter

Select pod / cycle containers

r

Remote shell into container

m

Memory usage

c

CPU usage

t

Network usage

f

File system usage

e

Pod events

Shift+e

Namespace events

Ctrl+e

Cluster events

FAQ

  • Resources usage metrics are unavailable!

    • Starting version 0.8.0, Kubebox expects cAdvisor to be deployed as a DaemonSet. See the cAdvisor section for more details;

    • The metrics are retrieved from the REST API, of the cAdvisor pod running on the same node as the container for which the metrics are being requested. That REST API is accessed via the API server proxy, which requires proper RBAC permission, e.g.:

      # Permission to list the cAdvisor pods (selected using the `spec.nodeName` field selector)
      $ kubectl auth can-i list pods -n cadvisor
      yes
      # Permission to proxy the selected cAdvisor pod, to call its REST API
      $ kubectl auth can-i get pod --subresource proxy -n cadvisor
      yes

Development

$ git clone https://github.com/astefanutti/kubebox.git
$ cd kubebox
$ npm install
$ node index.js

Screenshots

Cluster events:

Shell into a container:

Terminal theme support:

Web browser version:


1. Requires cAdvisor to be deployed as a DaemonSet. See the cAdvisor section for more details.
2. Custom IDP certificate authority files are not supported in Web versions.
3. Not available in Web versions.

kubebox's People

Contributors

593769290 avatar astefanutti avatar codertao avatar dependabot[bot] avatar ensonic avatar fpaparoni avatar gheinrich avatar jespersm avatar johnpoth avatar ledroide avatar liji-canva avatar lucian avatar robholland avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

kubebox's Issues

kubebox 0.6.0 segmentation fault on Linux

I updated to the last kubebox 0.6.0 version.

Distributor ID: Ubuntu
Description: Ubuntu 18.04.3 LTS
Release: 18.04
Codename: bionic

After I start the kubebox it crashes nearly in 10 seconds with the error:
Segmentation fault (core dumped)

It makes the soft unusable.

The strace log:

sudo strace -p 11043
strace: Process 11043 attached
strace: [ Process PID=11043 runs in x32 mode. ]
strace: [ Process PID=11043 runs in 64 bit mode. ]
epoll_pwait(3, [], 1024, 0, NULL, 8)    = 0
write(17, "\0337\33[55;1H\33[55;2H\33[47;90m\342\240\207\33[m\0338", 32) = 32
epoll_pwait(3, [], 1024, 75, NULL, 8)   = 0
futex(0x7f9e56cb9a04, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0x7f9e5a22cddc, FUTEX_WAKE_PRIVATE, 1) = 1
epoll_pwait(3, [], 1024, 0, NULL, 8)    = 0
write(17, "\0337\33[55;1H\33[55;2H\33[47;90m\342\240\217\33[m\0338", 32) = 32
epoll_pwait(3, [], 1024, 72, NULL, 8)   = 0
mprotect(0x662d2804000, 503808, PROT_READ|PROT_WRITE) = 0
mprotect(0x662d2804000, 503808, PROT_READ|PROT_EXEC) = 0
epoll_pwait(3, [], 1024, 0, NULL, 8)    = 0
write(17, "\0337\33[55;1H\33[55;2H\33[47;90m\342\240\213\33[m\0338", 32) = 32
epoll_pwait(3, [], 1024, 76, NULL, 8)   = 0
epoll_pwait(3, [], 1024, 0, NULL, 8)    = 0
write(17, "\0337\33[55;1H\33[55;2H\33[47;90m\342\240\231\33[m\0338", 32) = 32
epoll_pwait(3, [], 1024, 77, NULL, 8)   = 0
futex(0x7f9e574bca04, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0x7f9e5a22cddc, FUTEX_WAKE_PRIVATE, 1) = 1
epoll_pwait(3, [], 1024, 0, NULL, 8)    = 0
write(17, "\0337\33[55;1H\33[55;2H\33[47;90m\342\240\271\33[m\0338", 32) = 32
epoll_pwait(3, [], 1024, 74, NULL, 8)   = 0
mprotect(0x662d2804000, 503808, PROT_READ|PROT_WRITE) = 0
mprotect(0x662d2804000, 503808, PROT_READ|PROT_EXEC) = 0
epoll_pwait(3, [], 1024, 0, NULL, 8)    = 0
write(17, "\0337\33[55;1H\33[55;2H\33[47;90m\342\240\270\33[m\0338", 32) = 32
epoll_pwait(3, [], 1024, 73, NULL, 8)   = 0
epoll_pwait(3, [], 1024, 0, NULL, 8)    = 0
write(17, "\0337\33[55;1H\33[55;2H\33[47;90m\342\240\274\33[m\0338", 32) = 32
epoll_pwait(3, [], 1024, 73, NULL, 8)   = 0
epoll_pwait(3, [], 1024, 0, NULL, 8)    = 0
write(17, "\0337\33[55;1H\33[55;2H\33[47;90m\342\240\264\33[m\0338", 32) = 32
epoll_pwait(3, [], 1024, 76, NULL, 8)   = 0
epoll_pwait(3, [], 1024, 0, NULL, 8)    = 0
write(17, "\0337\33[55;1H\33[55;2H\33[47;90m\342\240\246\33[m\0338", 32) = 32
epoll_pwait(3, [], 1024, 78, NULL, 8)   = 0
epoll_pwait(3, [], 1024, 0, NULL, 8)    = 0
write(17, "\0337\33[55;1H\33[55;2H\33[47;90m\342\240\247\33[m\0338", 32) = 32
epoll_pwait(3, [], 1024, 75, NULL, 8)   = 0
epoll_pwait(3, [], 1024, 0, NULL, 8)    = 0
write(17, "\0337\33[55;1H\33[55;2H\33[47;90m\342\240\207\33[m\0338", 32) = 32
epoll_pwait(3, [], 1024, 76, NULL, 8)   = 0
epoll_pwait(3, [], 1024, 0, NULL, 8)    = 0
write(17, "\0337\33[55;1H\33[55;2H\33[47;90m\342\240\217\33[m\0338", 32) = 32
epoll_pwait(3, [], 1024, 76, NULL, 8)   = 0
epoll_pwait(3, [], 1024, 0, NULL, 8)    = 0
write(17, "\0337\33[55;1H\33[55;2H\33[47;90m\342\240\213\33[m\0338", 32) = 32
epoll_pwait(3, [], 1024, 76, NULL, 8)   = 0
epoll_pwait(3, [], 1024, 0, NULL, 8)    = 0
write(17, "\0337\33[55;1H\33[55;2H\33[47;90m\342\240\231\33[m\0338", 32) = 32
epoll_pwait(3, [], 1024, 74, NULL, 8)   = 0
futex(0x7f9e564b6a04, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0x7f9e5a22cddc, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0x7f9e57cbfa04, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0x7f9e5a22cddc, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0x7f9e56cb9a04, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0x7f9e5a22cddc, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0x7f9e574bca04, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0x7f9e5a22cddc, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0x7f9e564b6a04, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0x7f9e5a22cddc, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0x7f9e57cbfa04, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0x7f9e5a22cddc, FUTEX_WAKE_PRIVATE, 1) = 1
getpid()                                = 11043
epoll_pwait(3, [], 1024, 0, NULL, 8)    = 0
write(17, "\0337\33[55;1H\33[55;2H\33[47;90m\342\240\271\33[m\0338", 32) = 32
epoll_pwait(3, [], 1024, 75, NULL, 8)   = 0
futex(0x7f9e56cb9a04, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0x7f9e5a22cddc, FUTEX_WAKE_PRIVATE, 1) = 1
epoll_pwait(3, [], 1024, 0, NULL, 8)    = 0
write(17, "\0337\33[55;1H\33[55;2H\33[47;90m\342\240\270\33[m\0338", 32) = 32
epoll_pwait(3, [], 1024, 75, NULL, 8)   = 0
mprotect(0x662d2804000, 503808, PROT_READ|PROT_WRITE) = 0
mprotect(0x662d2804000, 503808, PROT_READ|PROT_EXEC) = 0
epoll_pwait(3, [], 1024, 0, NULL, 8)    = 0
write(17, "\0337\33[55;1H\33[55;2H\33[47;90m\342\240\274\33[m\0338", 32) = 32
epoll_pwait(3, [], 1024, 77, NULL, 8)   = 0
epoll_pwait(3, [], 1024, 0, NULL, 8)    = 0
write(17, "\0337\33[55;1H\33[55;2H\33[47;90m\342\240\264\33[m\0338", 32) = 32
epoll_pwait(3, [], 1024, 75, NULL, 8)   = 0
futex(0x7f9e574bca04, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0x7f9e5a22cddc, FUTEX_WAKE_PRIVATE, 1) = 1
mprotect(0x662d2804000, 503808, PROT_READ|PROT_WRITE) = 0
mprotect(0x662d2804000, 503808, PROT_READ|PROT_EXEC) = 0
epoll_pwait(3, [], 1024, 0, NULL, 8)    = 0
write(17, "\0337\33[55;1H\33[55;2H\33[47;90m\342\240\246\33[m\0338", 32) = 32
epoll_pwait(3, [], 1024, 72, NULL, 8)   = 0
epoll_pwait(3, [], 1024, 0, NULL, 8)    = 0
write(17, "\0337\33[55;1H\33[55;2H\33[47;90m\342\240\247\33[m\0338", 32) = 32
epoll_pwait(3, [], 1024, 75, NULL, 8)   = 0
epoll_pwait(3, [], 1024, 0, NULL, 8)    = 0
write(17, "\0337\33[55;1H\33[55;2H\33[47;90m\342\240\207\33[m\0338", 32) = 32
epoll_pwait(3, [], 1024, 75, NULL, 8)   = 0
epoll_pwait(3, [], 1024, 0, NULL, 8)    = 0
write(17, "\0337\33[55;1H\33[55;2H\33[47;90m\342\240\217\33[m\0338", 32) = 32
epoll_pwait(3, [], 1024, 74, NULL, 8)   = 0
epoll_pwait(3, [], 1024, 0, NULL, 8)    = 0
write(17, "\0337\33[55;1H\33[55;2H\33[47;90m\342\240\213\33[m\0338", 32) = 32
epoll_pwait(3, [], 1024, 73, NULL, 8)   = 0
epoll_pwait(3, [], 1024, 0, NULL, 8)    = 0
write(17, "\0337\33[55;1H\33[55;2H\33[47;90m\342\240\231\33[m\0338", 32) = 32
epoll_pwait(3, [], 1024, 75, NULL, 8)   = 0
epoll_pwait(3, [], 1024, 0, NULL, 8)    = 0
write(17, "\0337\33[55;1H\33[55;2H\33[47;90m\342\240\271\33[m\0338", 32) = 32
epoll_pwait(3, [], 1024, 76, NULL, 8)   = 0
epoll_pwait(3, [], 1024, 0, NULL, 8)    = 0
write(17, "\0337\33[55;1H\33[55;2H\33[47;90m\342\240\270\33[m\0338", 32) = 32
epoll_pwait(3, [], 1024, 73, NULL, 8)   = 0
epoll_pwait(3, [], 1024, 0, NULL, 8)    = 0
write(17, "\0337\33[55;1H\33[55;2H\33[47;90m\342\240\274\33[m\0338", 32) = 32
epoll_pwait(3, [], 1024, 77, NULL, 8)   = 0
epoll_pwait(3, [], 1024, 0, NULL, 8)    = 0
write(17, "\0337\33[55;1H\33[55;2H\33[47;90m\342\240\264\33[m\0338", 32) = 32
epoll_pwait(3, [], 1024, 76, NULL, 8)   = 0
epoll_pwait(3, [], 1024, 0, NULL, 8)    = 0
write(17, "\0337\33[55;1H\33[55;2H\33[47;90m\342\240\246\33[m\0338", 32) = 32
epoll_pwait(3, [], 1024, 75, NULL, 8)   = 0
epoll_pwait(3, [], 1024, 0, NULL, 8)    = 0
write(17, "\0337\33[55;1H\33[55;2H\33[47;90m\342\240\247\33[m\0338", 32) = 32
epoll_pwait(3, [], 1024, 78, NULL, 8)   = 0
epoll_pwait(3, [], 1024, 0, NULL, 8)    = 0
write(17, "\0337\33[55;1H\33[55;2H\33[47;90m\342\240\207\33[m\0338", 32) = 32
epoll_pwait(3, [], 1024, 76, NULL, 8)   = 0
epoll_pwait(3, [], 1024, 0, NULL, 8)    = 0
write(17, "\0337\33[55;1H\33[55;2H\33[47;90m\342\240\217\33[m\0338", 32) = 32
epoll_pwait(3, [], 1024, 76, NULL, 8)   = 0
epoll_pwait(3, [], 1024, 0, NULL, 8)    = 0
write(17, "\0337\33[55;1H\33[55;2H\33[47;90m\342\240\213\33[m\0338", 32) = 32
epoll_pwait(3, [], 1024, 75, NULL, 8)   = 0
epoll_pwait(3, [], 1024, 0, NULL, 8)    = 0
write(17, "\0337\33[55;1H\33[55;2H\33[47;90m\342\240\231\33[m\0338", 32) = 32
epoll_pwait(3, [], 1024, 75, NULL, 8)   = 0
epoll_pwait(3, [], 1024, 0, NULL, 8)    = 0
write(17, "\0337\33[55;1H\33[55;2H\33[47;90m\342\240\271\33[m\0338", 32) = 32
epoll_pwait(3, [], 1024, 73, NULL, 8)   = 0
epoll_pwait(3, [], 1024, 0, NULL, 8)    = 0
write(17, "\0337\33[55;1H\33[55;2H\33[47;90m\342\240\270\33[m\0338", 32) = 32
epoll_pwait(3, [], 1024, 74, NULL, 8)   = 0
epoll_pwait(3, [], 1024, 0, NULL, 8)    = 0
write(17, "\0337\33[55;1H\33[55;2H\33[47;90m\342\240\274\33[m\0338", 32) = 32
epoll_pwait(3, [], 1024, 73, NULL, 8)   = 0
epoll_pwait(3, [], 1024, 0, NULL, 8)    = 0
write(17, "\0337\33[55;1H\33[55;2H\33[47;90m\342\240\264\33[m\0338", 32) = 32
epoll_pwait(3, [], 1024, 77, NULL, 8)   = 0
epoll_pwait(3, [], 1024, 0, NULL, 8)    = 0
write(17, "\0337\33[55;1H\33[55;2H\33[47;90m\342\240\246\33[m\0338", 32) = 32
epoll_pwait(3, [], 1024, 76, NULL, 8)   = 0
futex(0x7f9e564b6a04, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0x7f9e5a22cddc, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0x7f9e57cbfa04, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0x7f9e5a22cddc, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0x7f9e56cb9a04, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0x7f9e5a22cddc, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0x7f9e574bca04, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0x7f9e5a22cddc, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0x7f9e564b6a04, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0x7f9e5a22cddc, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0x7f9e57cbfa04, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0x7f9e5a22cddc, FUTEX_WAKE_PRIVATE, 1) = 1
getpid()                                = 11043
epoll_pwait(3, [], 1024, 0, NULL, 8)    = 0
write(17, "\0337\33[55;1H\33[55;2H\33[47;90m\342\240\247\33[m\0338", 32) = 32
epoll_pwait(3, [], 1024, 73, NULL, 8)   = 0
mmap(NULL, 290816, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f9e57d94000
futex(0x7f9e56cb9a04, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0x7f9e5a22cddc, FUTEX_WAKE_PRIVATE, 1) = 1
epoll_pwait(3, [], 1024, 0, NULL, 8)    = 0
write(17, "\0337\33[55;1H\33[55;2H\33[47;90m\342\240\207\33[m\0338", 32) = 32
epoll_pwait(3, [], 1024, 69, NULL, 8)   = 0
mprotect(0x662d2804000, 503808, PROT_READ|PROT_WRITE) = 0
mprotect(0x662d2804000, 503808, PROT_READ|PROT_EXEC) = 0
epoll_pwait(3, [], 1024, 0, NULL, 8)    = 0
write(17, "\0337\33[55;1H\33[55;2H\33[47;90m\342\240\217\33[m\0338", 32) = 32
epoll_pwait(3, [], 1024, 74, NULL, 8)   = 0
epoll_pwait(3, [], 1024, 0, NULL, 8)    = 0
write(17, "\0337\33[55;1H\33[55;2H\33[47;90m\342\240\213\33[m\0338", 32) = 32
epoll_pwait(3, [], 1024, 74, NULL, 8)   = 0
epoll_pwait(3, [], 1024, 0, NULL, 8)    = 0
write(17, "\0337\33[55;1H\33[55;2H\33[47;90m\342\240\231\33[m\0338", 32) = 32
epoll_pwait(3, [], 1024, 76, NULL, 8)   = 0
epoll_pwait(3, [], 1024, 0, NULL, 8)    = 0
write(17, "\0337\33[55;1H\33[55;2H\33[47;90m\342\240\271\33[m\0338", 32) = 32
epoll_pwait(3, [], 1024, 75, NULL, 8)   = 0
epoll_pwait(3, [], 1024, 0, NULL, 8)    = 0
write(17, "\0337\33[55;1H\33[55;2H\33[47;90m\342\240\270\33[m\0338", 32) = 32
epoll_pwait(3, [], 1024, 76, NULL, 8)   = 0
epoll_pwait(3, [], 1024, 0, NULL, 8)    = 0
write(17, "\0337\33[55;1H\33[55;2H\33[47;90m\342\240\274\33[m\0338", 32) = 32
epoll_pwait(3, [], 1024, 74, NULL, 8)   = 0
futex(0x7f9e574bca04, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0x7f9e5a22cddc, FUTEX_WAKE_PRIVATE, 1) = 1
epoll_pwait(3, [], 1024, 0, NULL, 8)    = 0
mprotect(0x662d2804000, 503808, PROT_READ|PROT_WRITE) = 0
mprotect(0x662d2804000, 503808, PROT_READ|PROT_EXEC) = 0
write(17, "\0337\33[55;1H\33[55;2H\33[47;90m\342\240\264\33[m\0338", 32) = 32
epoll_pwait(3, [], 1024, 74, NULL, 8)   = 0
epoll_pwait(3, [], 1024, 0, NULL, 8)    = 0
write(17, "\0337\33[55;1H\33[55;2H\33[47;90m\342\240\246\33[m\0338", 32) = 32
epoll_pwait(3, [], 1024, 76, NULL, 8)   = 0
epoll_pwait(3, [], 1024, 0, NULL, 8)    = 0
write(17, "\0337\33[55;1H\33[55;2H\33[47;90m\342\240\247\33[m\0338", 32) = 32
epoll_pwait(3, [], 1024, 76, NULL, 8)   = 0
epoll_pwait(3, [], 1024, 0, NULL, 8)    = 0
write(17, "\0337\33[55;1H\33[55;2H\33[47;90m\342\240\207\33[m\0338", 32) = 32
epoll_pwait(3, [], 1024, 77, NULL, 8)   = 0
epoll_pwait(3, [], 1024, 0, NULL, 8)    = 0
write(17, "\0337\33[55;1H\33[55;2H\33[47;90m\342\240\217\33[m\0338", 32) = 32
epoll_pwait(3, [], 1024, 77, NULL, 8)   = 0
futex(0x7f9e564b6a04, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0x7f9e5a22cddc, FUTEX_WAKE_PRIVATE, 1) = 1
mprotect(0x662d2804000, 503808, PROT_READ|PROT_WRITE) = 0
mprotect(0x662d2804000, 503808, PROT_READ|PROT_EXEC) = 0
epoll_pwait(3, [], 1024, 0, NULL, 8)    = 0
write(17, "\0337\33[55;1H\33[55;2H\33[47;90m\342\240\213\33[m\0338", 32) = 32
epoll_pwait(3, [], 1024, 75, NULL, 8)   = 0
epoll_pwait(3, [], 1024, 0, NULL, 8)    = 0
write(17, "\0337\33[55;1H\33[55;2H\33[47;90m\342\240\231\33[m\0338", 32) = 32
epoll_pwait(3, [], 1024, 74, NULL, 8)   = 0
epoll_pwait(3, [], 1024, 0, NULL, 8)    = 0
write(17, "\0337\33[55;1H\33[55;2H\33[47;90m\342\240\271\33[m\0338", 32) = 32
epoll_pwait(3, [], 1024, 75, NULL, 8)   = 0
futex(0x7f9e57cbfa04, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0x7f9e5a22cddc, FUTEX_WAKE_PRIVATE, 1) = 1
mprotect(0x662d2804000, 503808, PROT_READ|PROT_WRITE) = 0
mprotect(0x662d2804000, 503808, PROT_READ|PROT_EXEC) = 0
epoll_pwait(3, [], 1024, 0, NULL, 8)    = 0
write(17, "\0337\33[55;1H\33[55;2H\33[47;90m\342\240\270\33[m\0338", 32) = 32
epoll_pwait(3, [], 1024, 74, NULL, 8)   = 0
futex(0x7f9e56cb9a04, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0x7f9e5a22cddc, FUTEX_WAKE_PRIVATE, 1) = 1
mprotect(0x662d2804000, 503808, PROT_READ|PROT_WRITE) = 0
mprotect(0x662d2804000, 503808, PROT_READ|PROT_EXEC) = 0
epoll_pwait(3, [], 1024, 0, NULL, 8)    = 0
write(17, "\0337\33[55;1H\33[55;2H\33[47;90m\342\240\274\33[m\0338", 32) = 32
epoll_pwait(3, [], 1024, 73, NULL, 8)   = 0
futex(0x7f9e574bca04, FUTEX_WAKE_PRIVATE, 1) = 1
epoll_pwait(3, [], 1024, 0, NULL, 8)    = 0
write(17, "\0337\33[55;1H\33[55;2H\33[47;90m\342\240\264\33[m\0338", 32) = 32
epoll_pwait(3, [], 1024, 72, NULL, 8)   = 0
mprotect(0x662d2804000, 503808, PROT_READ|PROT_WRITE) = 0
mprotect(0x662d2804000, 503808, PROT_READ|PROT_EXEC) = 0
futex(0x7f9e564b6a04, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0x7f9e5a22cddc, FUTEX_WAKE_PRIVATE, 1) = 0
epoll_pwait(3, [], 1024, 0, NULL, 8)    = 0
write(17, "\0337\33[55;1H\33[55;2H\33[47;90m\342\240\246\33[m\0338", 32) = 32
epoll_pwait(3, [], 1024, 70, NULL, 8)   = 0
mprotect(0x662d2804000, 503808, PROT_READ|PROT_WRITE) = 0
mprotect(0x662d2804000, 503808, PROT_READ|PROT_EXEC) = 0
epoll_pwait(3, [], 1024, 0, NULL, 8)    = 0
write(17, "\0337\33[55;1H\33[55;2H\33[47;90m\342\240\247\33[m\0338", 32) = 32
epoll_pwait(3, [], 1024, 73, NULL, 8)   = 0
epoll_pwait(3, [], 1024, 0, NULL, 8)    = 0
write(17, "\0337\33[55;1H\33[55;2H\33[47;90m\342\240\207\33[m\0338", 32) = 32
epoll_pwait(3, [], 1024, 74, NULL, 8)   = 0
epoll_pwait(3, [], 1024, 0, NULL, 8)    = 0
write(17, "\0337\33[55;1H\33[55;2H\33[47;90m\342\240\217\33[m\0338", 32) = 32
epoll_pwait(3, [], 1024, 77, NULL, 8)   = 0
epoll_pwait(3, [], 1024, 0, NULL, 8)    = 0
write(17, "\0337\33[55;1H\33[55;2H\33[47;90m\342\240\213\33[m\0338", 32) = 32
epoll_pwait(3, [], 1024, 66, NULL, 8)   = 0
write(8, "\1\0\0\0\0\0\0\0", 8)         = 8
--- SIGSEGV {si_signo=SIGSEGV, si_code=SEGV_MAPERR, si_addr=NULL} ---
+++ killed by SIGSEGV (core dumped) +++

Can log terminal support display Chinese words ?

kubebox obviously is a great k8s tool for our small team.

But when I setup an environment to running kubebox,
I found in the logs terminal Chinese words all changed to ?????????.
The shell windows is OK.

would you please when you are free, task a demo test and debug where is the problem.

the demo test files list:

  1. Dockerfile
FROM docker.io/alpine:3.7

COPY test.log /
COPY run.sh / 
ENV LANG="C.UTF-8"
ENTRYPOINT ["/run.sh"]
  1. run.sh
#!/bin/sh
tail -f -n90 /test.log
  1. test.log
在Docker容器bash中输入中文

在Docker容器bash中输入中文

docker alpine版本服务中显示中文

docker alpine版本服务中显示中文

docker alpine版本服务中显示中文

解决docker容器不支持中文的问题

In browser, log terminal showing:

??Docker????bash??????????                                                                                                                                                                                                                         │
│                                                                                                                                                                                                                                                   │
│??Docker????bash??????????                                                                                                                                                                                                                         │
│                                                                                                                                                                                                                                                   │
│docker alpine??????????????????                                                                                                                                                                                                                    │
│                                                                                                                                                                                                                                                   │
│docker alpine??????????????????                                                                                                                                                                                                                    │
│                                                                                                                                                                                                                                                   │
│docker alpine??????????????????                                                                                                                                                                                                                    │
│                                                                                                                                                                                                                                                   │
│????docker????????????????????                                                                                                                                                                                                                     │

In API direct request show normal result - https://kubebox.xxxx.com/master/api/v1/namespaces/namespace-dev/pods/alpine-cn-5c8584bd96-6klvl/log?follow=true&tailLines=10000&timestamps=true&container=alpine-cn&sinceTime=2019-04-18T08%3A21%3A19.334100106Z:

2019-04-18T08:21:19.333943583Z 在Docker容器bash中输入中文
2019-04-18T08:21:19.333950662Z 
2019-04-18T08:21:19.333954261Z 在Docker容器bash中输入中文
2019-04-18T08:21:19.333958322Z 
2019-04-18T08:21:19.333961629Z docker alpine版本服务中显示中文
2019-04-18T08:21:19.333965169Z 
2019-04-18T08:21:19.333968374Z docker alpine版本服务中显示中文
2019-04-18T08:21:19.333971711Z 
2019-04-18T08:21:19.333974847Z docker alpine版本服务中显示中文
2019-04-18T08:21:19.333978286Z 
2019-04-18T08:21:19.333981377Z 解决docker容器不支持中文的问题

Kubebox should simply work the way kubectl works

Generally Kubebox should simply work the way kubectl works. I've copied binary to kubernetes master node and ran it from there and it's asking me for credentials while kubectl works fluently.
I believe even running kubectl under the hood won't hurt.

kubebox sees a terminating pod as running

Here is what I get using kubectl get pods

NAME                                        READY     STATUS        RESTARTS   AGE
my-app-debug-5fb97f97fc-pjfdg   1/1       Running       2          2d
my-app-debug-7bd446cb84-zjzvl   1/1       Terminating   0          3d

However kubebox sees it as Running :

my-app-debug-5fb97f97fc-pjfdg  Running  2d 15h
my-app-debug-7bd446cb84-zjzvl  Running  3d 4h

/bin/sh: 1: Syntax error: Missing when web-ssh into any pods

If I run kubebox in kubernetes as a service, when web-ssh into a pod, it gives an error:

/bin/sh: 1: Syntax error: Missing '))'
command terminated with non-zero exit code: Error executing in Docker Container: 2
Disconnected
Type Ctrl-C to close

I'm not pretty sure if it's caused by this commit:
b795966

Support Google Kubernetes Engine

Currently kubebox does not support the cmd-args / cmd-path fields used with auth-provider in order to generate a token. This is the scheme used in GKE.

It would be great to support this scheme as well.

Bug with exec auth and env

PR #54 added support for exec auth, but it doesn't seem to support environment correctly.

KubeConfig from aws is of form:
user:
exec:
env:
- name: AWS_PROFILE
value: saml

But child_process.exec is expecting env to be of form {AWS_PROFILE: saml}.

Can probably submit a PR this week if I get the time to sit down.

kubebox and AWS EKS

This might be related to: #7

I have not been able to login using kubebox when my terminal session is logged into AWS using the aws authenticator.

kubebox crashes on pending containers

Pressing enter on a pending pod will exit kubebox with the following stacktrace:

TypeError: Cannot read property 'slice' of undefined
    at updateStatsFromCAdvisor (/kubebox/client.js:3679:151)
    at ListTable.Dashboard.pods_table.on (/kubebox/client.js:3617:21)
    at ListTable.EventEmitter._emit (/kubebox/client.js:6029:20)
    at ListTable.EventEmitter.emit (/kubebox/client.js:6052:12)
    at ListTable.List.enterSelected (/kubebox/client.js:19641:8)
    at ListTable.<anonymous> (/kubebox/client.js:19174:14)
    at ListTable.EventEmitter._emit (/kubebox/client.js:6029:20)
    at ListTable.EventEmitter.emit (/kubebox/client.js:6052:12)
    at Program.<anonymous> (/kubebox/client.js:22728:15)
    at Program.emit (events.js:160:13)
pod default/kubebox terminated (Error)

Feature Request: `kubectl delete pod`

I just come to see this tool today and I have to say that, Damn, this is awesome. My thousand thanks and great for all of your efforts to building this.
And it would be great if it also have delete pod features like in vim ( dd )? Just my opinion.
Again many thanks guys. I love this.!!!

Feature Request: `kubectl describe pod`

Thanks for an incredibly useful utility. Kubebox is now part of my daily development toolkit.

One of the most useful commands is kubectl describe pod. This command answers questions such as:

  • What image is this pod running?
  • How many restarts has the pod had?
  • What are the pod's environment variables?
  • What volumes are mounted to the pod?
  • What events have occurred in the pod's history?

All these questions are answered with one kubectl describe pod, and are critical to investigating the state of a kubernetes environment.

In my opinion, adding a Pod or Info tab to the Resources pane would be the appropriate place to display this information. This is because kubectl describe pod output is metadata about the pod, just as Memory, CPU, and Network activity are metadata about the pod.

Currently this is the only task I need to step outside of Kubebox for. If Kubebox supported this natively all my kubernetes interactions would be supported from within the app.

Thanks!

Unable to scroll terminal when running in iTerm

When running kubebox in a container and displaying on iTerm on apple, it is not possible to scroll back in the terminal window (R-key).
iTerm doesn't pass mouse events to curses, so mouse actions scroll the local iTerm history buffer, not the terminal session. Therefore, any output longer than the height of the screen becomes inaccessible.

How to set the pods_table label to "Pods [selected namespace]" ?

1, When I select one pod from the poslist table, the logs windows show the real log content and change the title from "Logs" to "Logs [docker-name]".

2, But in the whole web page, I don't kown which namespace I have selected.
3, So I want to say, when I select some namespace from the namespace selecting windows.
the podlist table display all pods under the namespace, in the mean time,
I want the podlist table title change from "Pods" to "Pods [selected namespace]".

4, I have studied some code from the project , and found some code like this:

resources.setLabel(Resources {grey-fg}[${container_selected}]{/grey-fg} {red-fg}TERMINATING{/red-fg});
pod_log.setLabel(Logs {grey-fg}[${container_selected}]{/grey-fg} {red-fg}TERMINATING{/red-fg});

5, So where should I place some code like
pods_table.setLabel(Pods {grey-fg}[${current_namespace}]{/grey-fg});

5, So where should I place some code like
pods_table.setLabel(Pods {grey-fg}[${current_namespace}]{/grey-fg});

kubebox version 0.5.0 windows amd64 binary

It fails to run, see error output below:

λ kubebox-windows-v0.5.0.exe
C:\Apps\Bin\bundle.js:22988
  if (!this.program.isAlt) return;
                    ^

TypeError: Cannot read property 'isAlt' of undefined
    at Screen.leave (C:\Apps\Bin\bundle.js:22988:21)
    at Screen.destroy (C:\Apps\Bin\bundle.js:23090:8)
    at C:\Apps\Bin\bundle.js:22895:14
    at Array.forEach (<anonymous>)
    at process.on.Screen._exceptionHandler (C:\Apps\Bin\bundle.js:22894:30)
    at emitOne (events.js:116:13)
    at process.emit (events.js:211:7)
    at process._fatalException (bootstrap_node.js:391:26)

λ systeminfo
OS Name:                   Microsoft Windows 10 Enterprise
OS Version:                10.0.17763 N/A Build 17763
System Type:               x64-based PC

TypeError: Cannot read property 'certificatePath' of undefined

when I run kubebox in a kubernetes cluster without certificate,a error was raised:

[eval]:367
    if (this.user.certificatePath) {
                  ^

TypeError: Cannot read property 'certificatePath' of undefined
    at Context.getMasterApi ([eval]:367:19)
    at new Kubebox ([eval]:1218:55)
    at Object.1../lib/config/context ([eval]:31:1)
    at s ([eval]:1:254)
    at e ([eval]:1:425)
    at [eval]:1:443
    at Script.runInThisContext (vm.js:65:33)
    at Object.runInThisContext (vm.js:199:38)
    at Object.<anonymous> ([eval]-wrapper:6:22)
    at Module._compile (module.js:660:30)

`GLIBCXX_3.4.20' not found (required by kubebox)

Issue with running kubebox on CentOS 7 64 bits - `GLIBCXX_3.4.20' not found (required by kubebox)

$ kubebox
kubebox: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by kubebox)

$ ll /lib64/libstdc++.so.6
lrwxrwxrwx. 1 root root 19 Aug 22 17:30 /lib64/libstdc++.so.6 -> libstdc++.so.6.0.19

$ strings /lib64/libstdc++.so.6 | grep GLIBCXX
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_DEBUG_MESSAGE_LENGTH

$ cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)

Support Digital Ocean Kubernetes

DO kubernetes config uses an ExecCredential.
Any advice on how i could contribute here?

kube config

users:
- name: do-sfo2-async-do-admin
  user:
    exec:
      apiVersion: client.authentication.k8s.io/v1beta1
      args:
      - kubernetes
      - cluster
      - kubeconfig
      - exec-credential
      - --version=v1beta1
      - --context=default
      - {SOME GUID}
      command: doctl
      env: null

exec

basically the result of the exec here is TLS client auth certs.

$ doctl kubernetes cluster kubeconfig exec-credential --version=v1beta1 --context=default {THE GUID FROM ABOVE}

{
  "kind": "ExecCredential",
  "apiVersion": "client.authentication.k8s.io/v1beta1",
  "spec": {},
  "status": {
    "expirationTimestamp": "2019-07-28T17:43:57Z",
    "clientCertificateData": "-----BEGIN CERTIFICATE-----\n*****\n-----END CERTIFICATE-----\n",
    "clientKeyData": "-----BEGIN RSA PRIVATE KEY-----\n*****\n-----END RSA PRIVATE KEY-----\n"
  }
}

Search filter in namespace modal dialog

Hello!

Please add a filter to the namespace modal selection window.

Currently awfully inconvenient to choose the necessary namespace when there are more than 100...

I would be very grateful!


I was thinking of having a quick search filter in the namespaces modal. Would that work for you?

Originally posted by @astefanutti in #15 (comment)

403 Error when opening remote shell into container

Hello, thank you very much for this very useful tool!
When I try opening a remote shell into any of my pods I get a 403 error back. I am wondering if you know why that might be?

The error I see in kubebox is:

Error: Failed to get resource /api/v1/namespaces/<xxx>/pods/<xxx>/exec?stdout=1&stdin=1&stderr=1&tty=1&container=main&command=%2Fbin%2Fsh&command=-c&comma │
│nd=TERM%3Dxterm+%24%28+%28type+getent+%3E+%2Fdev%2Fnull+2%3E%261+%26%26+getent+passwd+root+%7C+cut+-d%3A+-f7+2%3E%2Fdev%2Fnull%29+%7C%7C+echo+%2Fbin%2Fsh%29, status code: 403

On the other hand I am able to open a shell into the main container using kubectl exec -it <xx> /bin/sh.

Thanks!

View and select context similar to kubectl config get-contexts / use-context

Hello

Great tool. The only thing I miss is to be able to switch contexts in a way similar to how namespaces are selected. In README.md it is mentioned that there is interactive switching of contexts but I haven't found out how to do this.

It's just that I'm tired of constantly entering "kubectl config use-context" when I have to switch between clusters. I planned to write myself a script written in "dialog" to present a list of contexts and select one of them but then I found out your tool. It's great but I still miss this function in it.

If possible please add it.

Kind regards
Tom

ENOENT Error with AWS EKS

I am trying to use kubebox with AWS EKS. I updated to 0.6.0 which supports the exec auth. I have been unsuccessful in connecting due to the following error:

spawn aws-iam-authenticator ENOENT

Pasting in a token doesn't seem to work either.

Any ideas? What am I missing?

Help dialog

It will be cool if there is some help dialog with commands and hotkeys by pressing F1 (for example).

Problem with scrolling logs on Windows 10

I don't know if it's intended but i can't scroll logs from selected pod
I see when there is new info added
but i can't scroll it up or down using these shortcuts
obraz

Im using release 0.3.2 on Windows 10, and i have info in Resources that "Resource usage metrics is unavailable"

OpenID Connect support (IBM Cloud)

Kubebox always wants me to enter login information, whereas it just should use the defined one.

To login into our IBM cloud environment, we need to export the KUBECONFIG environment variable pointing to a configuration which includes the following:

apiVersion: v1
clusters:
- cluster:
    certificate-authority: ...pem

The .pem file is in the same folder as the kubeconfig file. I'm guessing somehow it's not read and thus I cannot pass the login screen.

Should this work out of the box? kubectl works without any problems.

Resources usage metrics unavailable

Hi, i got this error when i try to have metrics.

The error returned from the API server with last version of kubernetes:

Error: Failed to get resource /api/v1/nodes/<node-name>:4194/proxy/api/v1.2/docker/<dockerid>, status code: 503

Everything else works.

Do you know why ?

Error when launching

When I try to run kubebox (on the Mac), I get the following error:

ReferenceError: os is not defined
    at new OpenIdConnect (/kubebox/client.js:186:7)
    at Client.set master_api [as master_api] (/kubebox/client.js:438:30)
    at new Kubebox (/kubebox/client.js:1705:27)
    at Object.1../lib/config/context (/kubebox/client.js:42:1)
    at o (/kubebox/client.js:1:327)
    at r (/kubebox/client.js:1:493)
    at Object.<anonymous> (/kubebox/client.js:1:522)
    at Module._compile (module.js:660:30)
    at Object.Module._extensions..js (module.js:671:10)
    at Module.load (module.js:573:32)

The same happens when I use the docker image.

Unable to view Mem/CPU/Net

I'm using 4.0 on MacOS and am unable to view resource usage. I'm met with "Resources usage metrics unavailable". There is nothing in the debug to let me know what might be going on. I am able to view resources on one of my clusters, but not any of the other ones.

Copy / paste and system clipboard integration improvements

  • Support copy to clipboard in Node:
  • Shortcut to copy, CTRL+C:
    • Currently bound to exiting the program on Node version
    • Should be changed to keep CTRL+C sending SIGINT in exec terminal
    • Or copy to clipboard if there is a text selection when pressing CTRL+C
    • Should be changed to CMD+C on Mac
  • Pasting doesn't work when text is selected:
    • Maybe we can listen for paste event and deselect text
  • Support copy / paste in log widget
    • Will be addressed in #17

Authentication failed because "/" endpoint returns 403

I can query my k8s cluster using my certiticates and key :

k cluster-info
Kubernetes master is running at https://......
Grafana is running at http://......
Heapster is running at https://.....
KubeDNS is running at https://..../proxy
Kubemonitor is running at http://.....

But kubebox complains and asks me for a username/password/token.
screen_shot_2018-10-17_at_2_45_55_pm

Any workaround ?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.