k8s-mgmt-pod/Dockerfile
Michael Trip f0e72c69a0
All checks were successful
Build k8s-mgmt-pod image / Build & Push (push) Successful in 2m1s
Add locales support and set UTF-8 environment variables in Dockerfile
2026-06-24 11:17:12 +02:00

115 lines
5.2 KiB
Docker

ARG NODE_IMAGE=node:22-trixie-slim
FROM ${NODE_IMAGE} AS webssh2-builder
ENV DEBIAN_FRONTEND=noninteractive
ARG WEBSSH2_VERSION=5.0.1
RUN apt-get update \
&& apt-get install -y --no-install-recommends ca-certificates curl \
&& rm -rf /var/lib/apt/lists/* \
&& mkdir -p /opt/webssh2 \
&& curl -fsSLo "/tmp/webssh2-${WEBSSH2_VERSION}.tar.gz" "https://github.com/billchurch/webssh2/releases/download/webssh2-server-v${WEBSSH2_VERSION}/webssh2-${WEBSSH2_VERSION}.tar.gz" \
&& curl -fsSLo "/tmp/webssh2-${WEBSSH2_VERSION}.tar.gz.sha256" "https://github.com/billchurch/webssh2/releases/download/webssh2-server-v${WEBSSH2_VERSION}/webssh2-${WEBSSH2_VERSION}.tar.gz.sha256" \
&& cd /tmp \
&& sha256sum -c "webssh2-${WEBSSH2_VERSION}.tar.gz.sha256" \
&& tar -xzf "/tmp/webssh2-${WEBSSH2_VERSION}.tar.gz" -C /opt/webssh2 \
&& cd /opt/webssh2 \
&& npm ci --omit=dev \
&& rm -f "/tmp/webssh2-${WEBSSH2_VERSION}.tar.gz" "/tmp/webssh2-${WEBSSH2_VERSION}.tar.gz.sha256" \
&& npm cache clean --force
FROM debian:trixie-slim
ARG LFK_VERSION=0.14.9
ARG KUBECTL_VERSION=1.31.0
ARG HELM_VERSION=3.16.2
ARG K9S_VERSION=0.40.10
ARG WEBSSH2_VERSION=5.0.1
ENV DEBIAN_FRONTEND=noninteractive \
WEB_SSH_PORT=3000 \
WEBSSH2_LISTEN_PORT=3001 \
WEBSSH2_SSH_HOST=127.0.0.1 \
WEBSSH2_SSH_PORT=2222 \
SSH_PORT=2222 \
WEBSSH2_HEADER_TEXT=k8s-mgmt-pod \
WEBSSH2_SSH_HOSTKEY_ENABLED=false
COPY --from=webssh2-builder /usr/local /usr/local
COPY --from=webssh2-builder /opt/webssh2 /opt/webssh2
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
bash-completion \
ca-certificates \
curl \
tar \
nginx-light \
netcat-openbsd \
openssh-client \
openssh-server \
openssl \
sudo \
tini \
locales \
&& echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen \
&& locale-gen \
&& rm -rf /var/lib/apt/lists/* \
&& mkdir -p /var/run/sshd /var/lib/k8s-mgmt-pod /etc/ssh/sshd_config.d \
&& useradd --create-home --shell /bin/bash admin \
&& useradd --create-home --shell /bin/bash user \
&& printf 'admin ALL=(ALL) NOPASSWD:ALL\n' > /etc/sudoers.d/90-admin-nopasswd \
&& chmod 0440 /etc/sudoers.d/90-admin-nopasswd \
&& curl -fsSLo "/tmp/lfk_${LFK_VERSION}_linux_amd64.deb" "https://github.com/janosmiko/lfk/releases/download/v${LFK_VERSION}/lfk_${LFK_VERSION}_linux_amd64.deb" \
&& curl -fsSLo /tmp/lfk.checksums "https://github.com/janosmiko/lfk/releases/download/v${LFK_VERSION}/checksums.txt" \
&& cd /tmp \
&& grep " lfk_${LFK_VERSION}_linux_amd64.deb$" /tmp/lfk.checksums | sha256sum -c - \
&& dpkg -i "/tmp/lfk_${LFK_VERSION}_linux_amd64.deb" \
&& rm -f "/tmp/lfk_${LFK_VERSION}_linux_amd64.deb" /tmp/lfk.checksums \
&& curl -fsSLo /usr/local/bin/kubectl "https://dl.k8s.io/release/v${KUBECTL_VERSION}/bin/linux/amd64/kubectl" \
&& curl -fsSLo /tmp/kubectl.sha256 "https://dl.k8s.io/release/v${KUBECTL_VERSION}/bin/linux/amd64/kubectl.sha256" \
&& echo "$(cat /tmp/kubectl.sha256) /usr/local/bin/kubectl" | sha256sum -c - \
&& chmod 0755 /usr/local/bin/kubectl \
&& curl -fsSLo "/tmp/helm-v${HELM_VERSION}-linux-amd64.tar.gz" "https://get.helm.sh/helm-v${HELM_VERSION}-linux-amd64.tar.gz" \
&& curl -fsSLo "/tmp/helm-v${HELM_VERSION}-linux-amd64.tar.gz.sha256sum" "https://get.helm.sh/helm-v${HELM_VERSION}-linux-amd64.tar.gz.sha256sum" \
&& echo "$(awk '{print $1}' /tmp/helm-v${HELM_VERSION}-linux-amd64.tar.gz.sha256sum) /tmp/helm-v${HELM_VERSION}-linux-amd64.tar.gz" | sha256sum -c - \
&& tar -xzf "/tmp/helm-v${HELM_VERSION}-linux-amd64.tar.gz" -C /tmp \
&& install -m 0755 /tmp/linux-amd64/helm /usr/local/bin/helm \
&& 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 \
&& mkdir -p /etc/bash_completion.d \
&& 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 \
&& rm -f /tmp/kubectl.sha256 \
&& rm -rf /tmp/linux-amd64 \
&& rm -f \
"/tmp/helm-v${HELM_VERSION}-linux-amd64.tar.gz" \
"/tmp/helm-v${HELM_VERSION}-linux-amd64.tar.gz.sha256sum" \
/tmp/k9s \
/tmp/README.md \
/tmp/LICENSE \
/tmp/k9s_Linux_amd64.tar.gz \
&& rm -f /etc/ssh/ssh_host_*
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
COPY docker/profile/20-k8s-tools-completion.sh /etc/profile.d/20-k8s-tools-completion.sh
COPY docker/motd /etc/motd
COPY entrypoint.sh /usr/local/bin/entrypoint.sh
RUN chmod 0755 /usr/local/bin/entrypoint.sh \
&& chmod 0644 /etc/profile.d/20-k8s-tools-completion.sh
ENV LANG=en_US.UTF-8
ENV LANGUAGE=en_US:en
ENV LC_ALL=en_US.UTF-8
EXPOSE 2222 3000
HEALTHCHECK --interval=30s --timeout=5s --start-period=15s --retries=3 \
CMD nc -z 127.0.0.1 "${SSH_PORT:-2222}" || exit 1
ENTRYPOINT ["/usr/bin/tini", "--", "/usr/local/bin/entrypoint.sh"]