Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add inject-shell plugin #4064

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open

Conversation

inerplat
Copy link

Add inject-shell Plugin

Description: kubectl-inject-shell is a tool for injecting a BusyBox environment into a running Kubernetes container, even if it lacks a shell. It sets up a privileged container on the same node as the target pod, allowing you to debug and access the container's filesystem. It supports specifying various options like namespace, image, and container for customized execution.

Features:

  • Injects BusyBox into running containers
  • Supports containers without shells (e.g., distroless images)
  • Creates a privileged container on the same node for debugging
  • Allows customization through options for namespace, image, and container

Usage:

kubectl inject-shell <pod-name> [options]

For detailed usage and additional information, please refer to the GitHub repository README.

@ahmetb
Copy link
Member

ahmetb commented Sep 12, 2024

🤖 Beep beep! I’m a robot speaking on behalf of @ahmetb. 🤖


Thanks for submitting your kubectl plugin to Krew!
One of the krew-index maintainers will review it soon. Note that the reviews for new plugin submissions may take a few days.

In the meanwhile, here are a few tips to make your plugin manifest better:

  • Make sure your plugin follows the best practices.
  • Eliminate redundant wording form shortDescription (it should be max 50 characters).
  • Try to word wrap your description to 80-character lines (no usage examples, please).

Thanks for your patience!
/kind new-plugin

@k8s-ci-robot
Copy link
Contributor

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by: inerplat
Once this PR has been reviewed and has the lgtm label, please assign ahmetb for approval. For more information see the Kubernetes Code Review Process.

The full list of commands accepted by this bot can be found here.

Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@k8s-ci-robot k8s-ci-robot added cncf-cla: yes Indicates the PR's author has signed the CNCF CLA. kind/new-plugin labels Sep 12, 2024
@k8s-ci-robot
Copy link
Contributor

Welcome @inerplat!

It looks like this is your first PR to kubernetes-sigs/krew-index 🎉. Please refer to our pull request process documentation to help your PR have a smooth ride to approval.

You will be prompted by a bot to use commands during the review process. Do not be afraid to follow the prompts! It is okay to experiment. Here is the bot commands documentation.

You can also check if kubernetes-sigs/krew-index has its own contribution guidelines.

You may want to refer to our testing guide if you run into trouble with your tests not passing.

If you are having difficulty getting your pull request seen, please follow the recommended escalation practices. Also, for tips and tricks in the contribution process you may want to read the Kubernetes contributor cheat sheet. We want to make sure your contribution gets all the attention it needs!

Thank you, and welcome to Kubernetes. 😃

@k8s-ci-robot k8s-ci-robot added the size/S Denotes a PR that changes 10-29 lines, ignoring generated files. label Sep 12, 2024
@ahmetb
Copy link
Member

ahmetb commented Oct 10, 2024

Hi, thanks for the submission. Can you please elaborate how is this different than these options:

If it can be achieved with one of these means, we probably should not accept this.

@inerplat
Copy link
Author

Hi, thanks for reviewing my PR. 🤗 @ahmetb

I believe the inject-shell plugin serves a different purpose compared to existing tools:

kubectl debug command

The built-in kubectl debug command includes a --share-processes flag, which allows sharing the process namespace with existing containers. However, it only supports sharing the process namespace and does not provide access to the container’s filesystem without a volume mount. Since volume mounts cannot be added to a running pod, kubectl debug cannot modify the existing filesystem.

In contrast, the inject-shell plugin is particularly useful for troubleshooting distroless or minimal containers that lack a shell. Instead of creating a new container, the inject-shell plugin injects BusyBox binaries and libraries directly into the existing container, allowing access to the container’s filesystem. This approach simplifies troubleshooting for containers without a shell or those with minimal setups.

pod-shell plugin

The pod-shell plugin, on the other hand, simply provides access to the pod's shell, but does not offer the advanced functionality of injecting binaries or libraries like the inject-shell plugin does.

Since these plugins address different use cases, I believe each has its own value depending on the situation.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
cncf-cla: yes Indicates the PR's author has signed the CNCF CLA. kind/new-plugin size/S Denotes a PR that changes 10-29 lines, ignoring generated files.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants