Compare commits

..

14 commits

Author SHA1 Message Date
Renovate Bot
df87b21bf2 Update docker/setup-buildx-action action to v4
All checks were successful
Build k8s-mgmt-pod image / Build & Push (pull_request) Successful in 2m10s
2026-06-29 12:24:13 +00:00
df0eaf0a21 Add kubectx and kubens support to Dockerfile and bash completion scripts
All checks were successful
Build k8s-mgmt-pod image / Build & Push (push) Successful in 1m23s
2026-06-29 13:40:34 +02:00
d582311917 Update ASCII art in motd for improved branding and consistency
All checks were successful
Build k8s-mgmt-pod image / Build & Push (push) Successful in 1m59s
2026-06-29 10:54:20 +02:00
e4f9f06674 Fix formatting in the motd file for consistency 2026-06-29 10:51:20 +02:00
4f57393103 Merge pull request 'Update dependency int128/kubelogin to v1.36.2' (#13) from renovate/int128-kubelogin-1.x into main
All checks were successful
Build k8s-mgmt-pod image / Build & Push (push) Successful in 1m16s
Reviewed-on: #13
2026-06-29 08:23:43 +00:00
1b3fa2c228 Merge pull request 'Update dependency janosmiko/lfk to v0.14.18' (#12) from renovate/janosmiko-lfk-0.x into main
All checks were successful
Build k8s-mgmt-pod image / Build & Push (push) Successful in 2m13s
Reviewed-on: #12
2026-06-29 08:20:03 +00:00
998012fdff Add locale support and environment variables to Dockerfile
All checks were successful
Build k8s-mgmt-pod image / Build & Push (push) Successful in 1m49s
2026-06-29 09:42:12 +02:00
47fe90296e Create cache directory and set ownership/permissions for kubeconfig
All checks were successful
Build k8s-mgmt-pod image / Build & Push (push) Successful in 44s
2026-06-29 09:26:47 +02:00
Renovate Bot
fba15a73c0 Update dependency int128/kubelogin to v1.36.2
All checks were successful
Build k8s-mgmt-pod image / Build & Push (pull_request) Successful in 1m3s
2026-06-29 07:24:11 +00:00
Renovate Bot
62d68bea0c Update dependency janosmiko/lfk to v0.14.18
All checks were successful
Build k8s-mgmt-pod image / Build & Push (pull_request) Successful in 1m52s
2026-06-29 07:24:07 +00:00
b6f7d1e1b7 Update kubeconfig handling in entrypoint script for better clarity
All checks were successful
Build k8s-mgmt-pod image / Build & Push (push) Successful in 53s
2026-06-29 09:14:20 +02:00
68c6789ac4 Add OIDC login support and unzip utility to Dockerfile
All checks were successful
Build k8s-mgmt-pod image / Build & Push (push) Successful in 1m50s
2026-06-29 08:52:08 +02:00
0613ebca66 Add apt-get clean to Dockerfile to optimize image size
All checks were successful
Build k8s-mgmt-pod image / Build & Push (push) Successful in 1m10s
2026-06-24 15:00:17 +02:00
91e9afc355 Add apt-get clean to Dockerfile to reduce image size 2026-06-24 14:59:41 +02:00
5 changed files with 63 additions and 14 deletions

View file

@ -23,16 +23,23 @@ RUN apt-get update \
FROM debian:trixie-slim
# renovate: datasource=github-releases depName=janosmiko/lfk
ARG LFK_VERSION=0.14.15
ARG LFK_VERSION=0.14.18
# renovate: datasource=github-releases depName=kubernetes/kubernetes
ARG KUBECTL_VERSION=1.36.2
# renovate: datasource=github-releases depName=helm/helm
ARG HELM_VERSION=3.21.2
# renovate: datasource=github-releases depName=derailed/k9s
ARG K9S_VERSION=0.51.0
# renovate: datasource=github-releases depName=int128/kubelogin
ARG OIDC_LOGIN_VERSION=1.36.2
# renovate: datasource=github-tags depName=ahmetb/kubectx
ARG KUBECTX_VERSION=0.9.5
ENV DEBIAN_FRONTEND=noninteractive \
LANG=en_US.UTF-8 \
LANGUAGE=en_US:en \
LC_ALL=en_US.UTF-8 \
WEB_SSH_PORT=3000 \
WEBSSH2_LISTEN_PORT=3001 \
WEBSSH2_SSH_HOST=127.0.0.1 \
@ -49,7 +56,12 @@ RUN apt-get update \
bash-completion \
ca-certificates \
curl \
jq \
locales \
unzip \
tar \
vim \
yq \
nginx-light \
netcat-openbsd \
openssh-client \
@ -81,10 +93,23 @@ RUN apt-get update \
&& curl -fsSLo "/tmp/k9s_Linux_amd64.tar.gz" "https://github.com/derailed/k9s/releases/download/v${K9S_VERSION}/k9s_Linux_amd64.tar.gz" \
&& tar -xzf "/tmp/k9s_Linux_amd64.tar.gz" -C /tmp \
&& install -m 0755 /tmp/k9s /usr/local/bin/k9s \
&& curl -fsSLo "/tmp/kubelogin_linux_amd64.zip" "https://github.com/int128/kubelogin/releases/download/v${OIDC_LOGIN_VERSION}/kubelogin_linux_amd64.zip" \
&& curl -fsSLo "/tmp/kubelogin_linux_amd64.zip.sha256" "https://github.com/int128/kubelogin/releases/download/v${OIDC_LOGIN_VERSION}/kubelogin_linux_amd64.zip.sha256" \
&& sed 's#\*kubelogin_linux_amd64.zip$#*/tmp/kubelogin_linux_amd64.zip#' /tmp/kubelogin_linux_amd64.zip.sha256 | sha256sum -c - \
&& unzip -p /tmp/kubelogin_linux_amd64.zip kubelogin > /usr/local/bin/kubectl-oidc_login \
&& chmod 0755 /usr/local/bin/kubectl-oidc_login \
&& curl -fsSLo /usr/local/bin/kubectx "https://raw.githubusercontent.com/ahmetb/kubectx/v${KUBECTX_VERSION}/kubectx" \
&& curl -fsSLo /usr/local/bin/kubens "https://raw.githubusercontent.com/ahmetb/kubectx/v${KUBECTX_VERSION}/kubens" \
&& chmod 0755 /usr/local/bin/kubectx /usr/local/bin/kubens \
&& mkdir -p /etc/bash_completion.d \
&& curl -fsSLo /etc/bash_completion.d/kubectx "https://raw.githubusercontent.com/ahmetb/kubectx/v${KUBECTX_VERSION}/completion/kubectx.bash" \
&& curl -fsSLo /etc/bash_completion.d/kubens "https://raw.githubusercontent.com/ahmetb/kubectx/v${KUBECTX_VERSION}/completion/kubens.bash" \
&& kubectl completion bash > /etc/bash_completion.d/kubectl \
&& helm completion bash > /etc/bash_completion.d/helm \
&& chmod 0644 /etc/bash_completion.d/kubectl /etc/bash_completion.d/helm \
&& chmod 0644 /etc/bash_completion.d/kubectl /etc/bash_completion.d/helm /etc/bash_completion.d/kubectx /etc/bash_completion.d/kubens \
&& sed -i 's/^# *en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen \
&& locale-gen en_US.UTF-8 \
&& update-locale LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 \
&& rm -f /tmp/kubectl.sha256 \
&& rm -rf /tmp/linux-amd64 \
&& rm -f \
@ -93,8 +118,12 @@ RUN apt-get update \
/tmp/k9s \
/tmp/README.md \
/tmp/LICENSE \
/tmp/kubelogin_linux_amd64.zip \
/tmp/kubelogin_linux_amd64.zip.sha256 \
/tmp/k9s_Linux_amd64.tar.gz \
&& rm -f /etc/ssh/ssh_host_*
&& rm -f /etc/ssh/ssh_host_* \
&& apt-get clean
COPY docker/sshd/10-lfk-base.conf /etc/ssh/sshd_config.d/10-lfk-base.conf
COPY docker/nginx/webssh.conf /etc/nginx/conf.d/webssh.conf

View file

@ -6,7 +6,9 @@
- `kubectl` preinstalled from a pinned upstream binary release
- `helm` preinstalled from a pinned upstream binary release
- `k9s` preinstalled from a pinned GitHub release tarball
- `kubectl` and `helm` bash autocompletion enabled for both `admin` and `user`
- `kubectx` and `kubens` preinstalled from a pinned upstream release
- `jq`, `yq`, and `vim` preinstalled from Debian packages
- `kubectl`, `helm`, `kubectx`, and `kubens` bash autocompletion enabled for both `admin` and `user`
- local `openssh-server` on port `2222`
- a browser-based SSH client on port `3000`
- a custom ASCII-art MOTD on login
@ -71,6 +73,8 @@ The included [docker-compose.yaml](docker-compose.yaml) enables kubeconfig boots
That bootstrap is explicitly opt-in and defaults to off in the container itself, so it does not run in Kubernetes unless you deliberately enable it.
When both are available, the bootstrap kubeconfig is applied after the service-account kubeconfig and therefore takes precedence.
Start it with:
```bash

View file

@ -1,12 +1,12 @@
╔════════════════════════════════════════════════════════════════╗
║ ║
██╗ ███████╗██╗ ██╗ ██╗ ██╗ █████╗ ███████╗
██║ ██╔════╝██║ ██╔╝ ██║ ██╔╝██╔══██╗██╔════╝
██║ █████╗ █████╔╝ █████╔╝ ╚█████╔╝███████╗
██║ ██╔══╝ ██╔═██╗ ██╔═██╗ ██╔══██╗╚════██║
███████╗██║ ██║ ██╗ ██║ ██╗╚█████╔╝███████║
╚══════╝╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚════╝ ╚══════╝
_ __ ___ ____ __ __ ____ __ __ _____
| |/ / / _ \ / ___| | \/ | / ___|| \/ ||_ _|
| ' / | (_) |\___ \ | |\/| || | _ | |\/| | | |
| . \ \__, | ___) | | | | || |_| || | | | | |
|_|\_\ /_/ |____/ |_| |_| \____||_| |_| |_|
║ Kubernetes Management Pod - Jump Box ║
║ ║
╠════════════════════════════════════════════════════════════════╣
@ -15,7 +15,7 @@
║ - lfk : LFK kubernetes management ║
║ - k9s : interactive cluster navigation ║
║ - helm : chart install, upgrade, and rollback ║
║ - plus : kubectx, kubens, jq, yq, and more
║ - plus : kubectx, kubens, jq, yq, vim, and more ║
║ ║
╠════════════════════════════════════════════════════════════════╣
║ Quick start ║

View file

@ -13,6 +13,14 @@ if [ -n "${BASH_VERSION:-}" ]; then
if [ -r /etc/bash_completion.d/helm ]; then
. /etc/bash_completion.d/helm
fi
if [ -r /etc/bash_completion.d/kubectx ]; then
. /etc/bash_completion.d/kubectx
fi
if [ -r /etc/bash_completion.d/kubens ]; then
. /etc/bash_completion.d/kubens
fi
fi
alias k=kubectl

View file

@ -104,6 +104,9 @@ install_kubeconfig_for_user() {
local kube_config="${kube_dir}/config"
mkdir -p "${kube_dir}"
mkdir -p "${kube_dir}/cache"
chown -R "${username}:${username}" "${kube_dir}"
chmod 0700 "${kube_dir}"
install -m 0600 -o "${username}" -g "${username}" "${source_kubeconfig}" "${kube_config}"
}
@ -291,8 +294,13 @@ EOF
prepare_runtime() {
mkdir -p /var/run/sshd
ensure_host_keys
install_serviceaccount_kubeconfig
if [[ "${ENABLE_BOOTSTRAP_KUBECONFIG}" == "true" ]]; then
log "Kubeconfig mode: bootstrap-only (serviceaccount kubeconfig generation disabled)."
install_bootstrap_kubeconfig
else
log "Kubeconfig mode: in-cluster serviceaccount."
install_serviceaccount_kubeconfig
fi
persist_kubernetes_login_env
configure_user_auth admin ADMIN_SSH_PUBKEY ADMIN_PASSWORD
configure_user_auth user USER_SSH_PUBKEY USER_PASSWORD