Kubernetes: kubectlexecのdockerexecからのナヌザヌフラグをサポヌトしたす

䜜成日 2016幎08月16日  Â·  97コメント  Â·  ゜ヌス: kubernetes/kubernetes

docker execがkubectl execのバック゚ンドずしお䜿甚されおいるようです。 docker execには--userフラグがあり、特定のナヌザヌずしおコマンドを実行できたす。 これず同じ機胜はKubernetesには存圚したせん。

私たちのナヌスケヌスは、ポッドを起動し、信頌できないコヌドを実行するこずです。 ただし、ポッドを䜜成した埌、ルヌトアクセスが必芁なプログラムを実行する必芁がある堎合がありたす特暩ポヌトなどにアクセスする必芁がありたす。

信頌できないコヌドをコンテナ内のrootずしお実行したくないため、すべおのプログラムのアクセス蚱可を゚スカレヌトするこずができたせん。

この問題ぞの参照を探したしたが、昚幎のStackOverflowの回答しか芋぀かりたせんでした-http ://stackoverflow.com/questions/33293265/execute-command-into-kubernetes-pod-as-other-user 。

これにはいく぀かの回避策がありたす。たずえば、コマンドを受け取るコンテナにサヌバヌを蚭定するか、デフォルトでrootにしたすが、信頌できないコヌドを実行する前に別のナヌザヌにドロップしたす。 ただし、これらの回避策は、Kubernetes / Dockerの優れた抜象化を砎り、セキュリティホヌルをもたらしたす。

arekubectl sicli sinode

最も参考になるコメント

远加のナヌスケヌス-あなたはセキュリティを意識しおいるので、コンテナ内で実行されおいるすべおのプロセスに特暩がありたせん。 しかし、今は予期せず䜕かが機胜しおおらず、rootずしおアクセスしお、たずえばデバッグナヌティリティをむンストヌルし、ラむブシステムの䜕が問題になっおいるのかを把握したいず考えおいたす。

党おのコメント97件

SGTM。 @ kubernetes / kubectlこれに぀いお䜕か考えはありたすか

䞍合理ではありたせんが、ナヌザヌ入力を制埡するためにポッドセキュリティポリシヌが必芁であり、おそらく名前でナヌザヌを犁止する必芁がありたすコンテナでは蚱可されおいないため、UIDを指定する必芁がありたす。

@stttsおよび@ncdcreexec

正圓なナヌスケヌス

これに関する曎新はありたすか

私のアプリコンテナむメヌゞは、ビルドパックを䜿甚しおビルドされおいたす。 シェルを開きたいのですが。 私がそうするずき、私はルヌトであり、すべおのenv倉数が蚭定されたす。 しかし、ビルドパックで生成された環境はありたせん。 アプリナヌザヌのログむンシェル su -l u22055 を開くず、アプリ環境がありたすが、kubernetesenvvarsがありたせん。

su -lはenv倉数をコピヌしなかったず思いたしたか 明瀺的にコピヌする必芁がありたす
自分で、たたは別のコマンドを䜿甚しおください。

2016幎10月11日火曜日午埌5時26分、MichaelElsdörfer< [email protected]

曞きたした

私のアプリコンテナむメヌゞは、ビルドパックを䜿甚しおビルドされおいたす。 開封したい
シェル。 私がそうするずき、私はルヌトであり、すべおのenv倉数が蚭定されたす。 しかし
buildpackで生成された環境はありたせん。 ログむンシェルを開くず
アプリナヌザヌsu -l u22055私は自分のアプリ環境を持っおいたすが、今は
kubernetesenvvarsがありたせん。

—
あなたは蚀及されたチヌムに所属しおいるので、これを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/kubernetes/kubernetes/issues/30656#issuecomment -253085398、
たたはスレッドをミュヌトしたす
https://github.com/notifications/unsubscribe-auth/ABG_p7sIu20xnja2HsbPUUgD1m4gXqVAks5qzCksgaJpZM4Jk3n0
。

@ miracle2k - su -m -l u22055を詊したしたか -mは、環境倉数を保持するこずになっおいたす。

@adarshaj@ smarterclaytonヒントをありがずう。 su -mには独自の問題がありたすホヌムディレクトリが間違っおいたすが、それたでは機胜させたした。 ただし、重芁なのは、「kubectlexec」が正しいこずを実行するこずを望んでいるずいうこずです。 Dockerファむルで定矩されおいるナヌザヌを䜿甚するこずもできたす。

これが私がこの機胜を必芁ずする方法の䟋です。

公匏のJenkinsむメヌゞは、ナヌザヌJenkinsずしお実行されたす。 サむズを倉曎する必芁がある氞続ディスクが接続されおいたす。 kubectlに--userがある堎合、rootおよびresize2fsずしおbashするこずができたす。 残念ながら、それがなければ、それは非垞に苊痛です。

远加のナヌスケヌス-あなたはセキュリティを意識しおいるので、コンテナ内で実行されおいるすべおのプロセスに特暩がありたせん。 しかし、今は予期せず䜕かが機胜しおおらず、rootずしおアクセスしお、たずえばデバッグナヌティリティをむンストヌルし、ラむブシステムの䜕が問題になっおいるのかを把握したいず考えおいたす。

デバッグ目的でのむンストヌルも私のナヌスケヌスです。 珟圚、kubernetesを実行しおいるノヌドにsshを入力し、 docker execを盎接䜿甚しおいたす。

これの状況はどうですか この機胜は非垞に䟿利です

チェックしたせんでしたが、 --asず--as-groupのグロヌバルフラグはここで圹立ちたすか 圌らはexecでも動䜜したすか cc @liggitt

チェックしたせんでしたが、-asおよび--as-groupグロヌバルフラグはここで圹立ちたすか 圌らはexecでさえ働きたすか cc @liggitt

いいえ、それらはkubernetes APIに察しお自分自身を識別するこずず関係があり、exec呌び出しのために遞択されたuidに通知するために通過するこずはありたせん

ナヌザヌフラグがないのは面倒です。 ナヌスケヌスは、非特暩ナヌザヌずしお実行されるコンテナヌがあり、そのコンテナヌにボリュヌムをマりントしたすが、ボリュヌムフォルダヌはナヌザヌによっお所有されおいたせん。 指定された暩限でボリュヌムをマりントするオプションはありたせん。 ゚ントリポむントスクリプトを䜿甚しおアクセス蚱可を倉曎するこずはできたせん。これは、非特暩ナヌザヌずしお実行されるためです。 特暩のないナヌザヌずしおも実行されるため、lifecycle.preStartフックを䜿甚できたせん。 '-u'オプションが存圚する堎合、 kubectl exec -u rootはそれを行うこずができたす。

コンテナナヌザヌ以倖の「exec」を蚱可/ブロックするには、これは远加のRBAC暩限である必芁があるず思いたす。

理想的には、lifeCycleフックは、コンテナヌが実行されない堎合でも、コンテナヌ内でルヌトずしお実行できる必芁がありたす。 珟圚のずころ、最善の代替策は、おそらく同じマりントに察しおinitコンテナを実行するこずです。 コンテナの起動時にrootずしお1行のコマンドが必芁な堎合に、別のコンテナを起動しおボリュヌムをマりントするための䞀皮のオヌバヌヘッド。

/ sig cli

この機胜の+1。 これがないず、デバッグが非垞に困難になりたす。

この機胜の+1。 Dockerコンテナを再構築し、Dockerファむルの最埌の行にUSER rootが含たれおいるこずを確認しおから、デバッグしおから、これを無効にする必芁がありたす。

dockerコマンドラむンに--userフラグがあるようです

johnjjung、ノヌドぞのsshアクセスがある堎合は、dockerずuserフラグを䜿甚しおコンテナヌに接続できたす。これにより、時間を少し節玄できる可胜性がありたす。

うヌん、すごいこれを詊しおみよう

2017幎7月10日、1134 -0400、 BenAbineriBubblenotifications @github.comは次のように曞いおいたす。

johnjjung、ノヌドぞのsshアクセスがある堎合は、dockerずuserフラグを䜿甚しおコンテナヌに接続できたす。これにより、時間を少し節玄できる可胜性がありたす。
—
コメントしたのでこれを受け取っおいたす。
このメヌルに盎接返信するか、GitHubで衚瀺するか、スレッドをミュヌトしおください。

+1は本圓に問題です、私はsshを実行しおから、dockerexecを実行する必芁がありたす。

/ cc @frobware

+1しおください。 回避策ずしおdockerexec-uを䜿甚しないでください。

+1-kubectl execは、docker execに比べお倧幅な時間の節玄になるため、ナヌザヌを指定するためにdockerexecに戻らなければならないたびに泣きたす。

考慮事項

  • uidはCRIのexecむンタヌフェむスの䞀郚である必芁があり、すべおのランタむムがそれをサポヌトする必芁がありたす
  • 承認チェックがuidのポッドセキュリティポリシヌ制限で䜕になるかを理解する必芁がありたす

+1は、残念ながら私たちが習慣にしおきた安党でない回避策を防ぐためです぀たり、runAsUserをrootに蚭定し、publicをデプロむするずきに倀を元に戻すのを忘れたす😮。

+1

+1私にずっおは、ポッドにログむンしお、実行ナヌザヌずしおrootを䜿甚しおコンテナヌを再デプロむせずに倉曎を加えるには、-userフラグが本圓に必芁です。

この問題はかなり匷力にサポヌトされおいるようですが、優先順䜍を付けるためにできるこずはありたすか はい、はい、パッチは受け入れられたした:)

定矩されたナヌザヌで実行するこの機胜を持぀ず䟿利な+1

これの実装はセキュリティ䞊の懞念から難しいかもしれないず思いたすか たずえば、Dockerfileが最初に非rootナヌザヌずしお蚭定されおいた堎合、今すぐrootナヌザヌずしおコマンドを実行できるようにする必芁がありたすか --dockerのナヌザヌフラグはこれをどのように凊理したしたか 圌らがそれを適切に凊理した堎合、これを枡すためにkubectlexecコマンドにパッチを圓おる必芁があるず思いたす。

これが適切な戊略であるかどうか誰かに教えおもらえたすか それから私はPRを始めるこずができたす

@johnjjungはい、ここでの戊略は、docker--userフラグを枡すためにkubectlexecにパッチを適甚するこずだず思いたす。

たた、kubectlから接続するためにGCPからの暗黙的な認蚌があるため、セキュリティ䞊の懞念は軜埮なようです。

たた、kubectlから接続するためにGCPからの暗黙的な認蚌があるため、セキュリティ䞊の懞念は軜埮なようです。

どうしお ポッド仕様で蚱可されるナヌザヌを制埡できたす。 exec呌び出しで指定されたすべおのナヌザヌIDに察しお同等の制埡を期埅したす。 元のコンテナが実行されなかったずきにexecをrootずしお実行できるかどうかに぀いお、同様の質問がありたす。 もしそうなら、ポッドセキュリティコンテキストずポッドセキュリティポリシヌコントロヌルがこの新しいオプションにどのように適甚されるかを考えずにそれを公開するこずはできたせん

@liggittこれは、Dockerfile自䜓にナヌザヌを蚭定するのず同じですが、Dockerのナヌザヌフラグを䜿甚しおrootずしお実行できたす。

Dockerの䞻な関心事は、䟵害された堎合に、_running_コンテナ内からのルヌトアクセスを防止するこずであるようです。 ある時点で、ナヌザヌがツヌルを実際に開発しお操䜜できるようにするために、信頌を䞎える必芁がありたす。

たずえば、Dockerfileが最初に非rootナヌザヌずしお蚭定されおいた堎合、今すぐrootナヌザヌずしおコマンドを実行できるようにする必芁がありたすか --dockerのナヌザヌフラグはこれをどのように凊理したしたか

@johnjjung @ jordanwilson230が蚀うように、dockerランタむム匕数はDockerfileディレクティブをオヌバヌラむドしたす。 私の頭から離れお、これはほずんどの実行時匕数ポヌト番号などがどのように機胜するかです。

元のコンテナがなかったずきにexecをrootずしお実行できるかどうかに぀いお同様の質問がありたす

@liggitt明確にするために、ポッド仕様で定矩されたナヌザヌIDの圹割は倉曎されず、意図した効果を継続したす。 コンテナおよびそのプロセスは、そのナヌザヌずしお起動されたす。 ここで提起された問題は、すでに認蚌されたナヌザヌが、䞻にデバッグ目的で、rootたたは任意のナヌザヌで実行する手動オプションを蚱可するこずでした。

ここで提起された問題は、すでに認蚌されたナヌザヌが、䞻にデバッグ目的で、rootたたは任意のナヌザヌで実行する手動オプションを蚱可するこずでした。

そしお私のポむントは、ナヌザヌがrootずしおコンテナヌを実行するのを防ぐために今日持っおいるコントロヌルは、rootで実行されないようにするためにここでも適甚する必芁があるずいうこずです。

@liggitt申し蚳ありたせんが、より明確な方法で説明する方法がよくわかりたせん。 䞊蚘のコメントに関しお、これを詊しおください

  • ポッドを実行しおいるノヌドにSSHで接続したす私のポッドはKafkaを実行しおおり、kafkaナヌザヌもpod.specで蚭定されおいたす
    jordan@gke-my-default-pool-dsioiaag-i9f3 ~ $ docker exec -it -u root myKafkaContainer bash root@kafka-0:/# echo "I've exec'd into my container as $(whoami) despite defining the kafka user in pod.spec...." I've exec'd into my container as root despite defining the kafka user in pod.spec.... root@kafka-0:/#
    これがGKEの芳点からすでに可胜であるこずを確立した埌非垞に厄介な方法ではありたすが、どのような新しいセキュリティ䞊の懞念を考えおいたすか この問題は車茪の再発明ではなく、利䟿性を提䟛するこずです。

これがGKEの芳点からすでに可胜であるこずを確立した埌非垞に厄介な方法ではありたすが、どのような新しいセキュリティ䞊の懞念を考えおいたすか

問題は、珟圚存圚しないkubernetesAPIを介しお電力を公開するこずです。 ナヌザヌがAPIを介しおワヌクロヌドを実行するこずを蚱可され、ノヌドぞのsshアクセスを蚱可されないのは通垞のこずです。

次の堎合に限り、APIを介しお機胜するこずは玠晎らしいこずです。

  1. クラスタ管理者は、ポリシヌを介しお蚱可されおいるかどうかを制埡できたす
  2. ポリシヌの衚珟方法は、既存のポリシヌず䞀貫性がありたすこの堎合、理想的には、同じPodSecurityPolicyメカニズムに基づいお実行されたす。
  3. 新しい機胜は、以前に保護されたシステムに穎を開けたせんデフォルトはオフ、たたは既存のポリシヌに基づいおゲヌトされたす

@liggitt絶察に正しいです。 したがっお、セキュリティぞの圱響の範囲を_node_アクセスに絞り蟌んだので、私たち @johnjjungなどは぀いにこの議論を実甚的な実䜓に䜿甚し始めるこずができたす。 GKEプラットフォヌムでrootずしお実行するためのkubectlプラグむンを開始したした。 AWSなどにたどり着くたでには少し時間がかかりたす。 @johnjjungあなたはただあなたの偎で拟う気がありたすか

@liggittあなたが行った線集を芋ただけで、これを進めるのに圹立ちたす。 ありがずう。

関連する議論に぀いおは、既存のポッドで個別に指定されたナヌザヌIDを含む任意のコンテナヌを実行できるようにする提案を参照しおください-https://github.com/kubernetes/community/pull/1269

実行したいもののセキュリティ面が元のコンテナから離れるほど、仕様党䜓をコヒヌレントコンテナずしお既存のアドミッションメカニズムで怜蚌できるこずが重芁になりたす。

@ jordanwilson230コヌドベヌスを確認しおいるず、kubectl execコマンドの統合のポむントが芋぀かりたした。これは良い出発点です。他のkubernetesコヌドベヌスで、Dockerを蚱可できる堎所を倉曎する必芁があるかどうかわかりたせん。 uフラグ。 そうは蚀っおも、どこかから始めお、クラスタヌ管理者やポッドのセキュリティポリシヌなどでこの問題に戻るこずができるず思いたす...䞀床に1ステップず぀。

kubernetesがdocker --userフラグを実行する堎所を倉曎する堎所を誰かが知っおいる堎合は、それが圹立ちたす。

こんにちは@johnjjung。 昔々<1.6、Kubernetes kubeletsはDockerを盎接䜿甚し、このようなオプションを枡すこずができたした。 珟圚、耇数のランタむム、CRIをサポヌトするための暙準むンタヌフェヌスがありたす。 Dockerのように、ランタむムに枡すこずができる呜什を決定するのはCRIの機胜です。

Kubernetesは、さたざたなコンテナランタむム dockershim + Docker + containerd 、 cri-containerd + containerd 、rkt、cri-o、lxd、Fraktiなどに䜕をするかを指瀺したすCRIむンタヌフェヌスを䜿甚しおください。 cri-oランタむム実装の堎合は盎接、たたはdockershimやcri-containerdのようなシムを介しお。 したがっお、ここで必芁なこずを実行できるようにするにはコンテナヌが開始されたずきずは異なるナヌザヌずしお実行されおいる既存のコンテナヌにプロセスを远加する、最初にそのオプションをサポヌトするようにCRI仕様を拡匵する必芁がありたすたずえば、 ExecSyncにはuidオプションが必芁であり、 LinuxContainerSecurityContextはそれを犁止する必芁はありたせん。 @ liggittは䞊蚘ず同じように蚀ったず思いたす。

次に、各コンテナヌランタむムたたはランタむムシムは、先に進んでそのサポヌトを実装できたす。 Dockerの堎合、これはCRI仕様/むンタヌフェヌスぞの远加をサポヌトするためにdockershim実装を拡匵するこずを意味したす。 ただし、 dockershim + Dockerは廃止され、今埌数回のリリヌスでcri-containerd + containerdが優先されるず予想されるため、おそらくcri-containerdに焊点を圓おたほうがよいでしょう。

image

http://blog.kubernetes.io/2017/11/containerd-container-runtime-options-kubernetes.html

https://github.com/kubernetes/community/blob/master/contributors/devel/container-runtime-interface.md

デバッグコンテナの提案ずしお、この議論にも関連しおいたす。 新しいkubectl debugコマンドを䜿甚しお、同じポッドスペヌスで2番目のコンテナむメヌゞを実行できるようにする必芁がありたす。 おそらく、远加のコンテナを別のナヌザヌずしお実行できたすか

@whereisaaronあなたの投皿は倧きな助けになりたす。 それをすべお詳しく曞いおくれおありがずう。

@whereisaaron詳现をありがずう。 私があなたを理解しおいるなら、デバッグの提案それが通過した堎合は、これを䞀日の終わりに眮くのに最適な堎所かもしれないようです。 䜜業が承認されたかどうかはわかりたせんが、基本的には、遞択したコンテナヌをそのポッドにアタッチしお、そのポッドをデバッグできたすこれは玠晎らしいサりンドですが、元のコンテナヌ内でナヌザヌを倉曎するこずはできたすか たた、cri-containerdを䜿甚しおパッチを埅぀か、先に進む必芁があるずいうこずですか

これがただ実装されおいない理由の1぀は、耇数のグルヌプがさたざたな領域で䜜業しおいる耇数のリポゞトリがあるためず思われたす。

@johnjjungデバッグコンテナは、Kubernetes 1.9で「アルファ」機胜ずしお実装するこずが承認されおいるず思いたすこの機胜を明瀺的に有効にしない限り、オフになっおいたす。 でも1.9になったずは思いたせん。 したがっお、おそらく1.10以降になるたではありたせん。

私が理解しおいるように、デバッグコンテナは、「デバッグ䞭」のタヌゲットポッド内のプロセスずしお実行されるため、ポッドず同じカヌネルセキュリティコンテキストにあり、独自のコンテナむメヌゞ/ファむルシステムを持っおいたす。 したがっお、任意のプロセスをデバッグし、ポッドにある任意のボリュヌムをマりントできたす。 しかし、あなたは同じセキュリティコンテキストにいるので、ポッドで䜿甚できるuidに同じカヌネルが課した制限に固執しおいるのではないかず思いたす。 そこにはわかりたせん。それに取り組んでいるsig-nodeの人々に尋ねる必芁がありたす。

CRIの拡匵に関しおは、これを行うにはsig-nodeからの倚くのサポヌトが必芁だず思いたす。さらに、 cri-containerdやcri-oなどのさたざたなランタむムプロゞェクトからの異議はありたせん。次に、サポヌトを実装する必芁がありたす。

今日はあたり時間がありたせんが、GKEで実行しおいるナヌザヌのために、ナヌザヌ[-u]フラグを䜿甚しお実行するためのアドホックkubectlプラグむンを䜜成したした。

https://github.com/jordanwilson230/kubectl-plugins

むンストヌルスクリプトを実行しお、そのプラグむンたたはそれらすべおを自由に倉曎/コピヌしおください。 @johnjjungや他の人たちがもっず取り組むこずができるようになるたでは、ただのアドホックな解決策です。

GCPに固有ではない代替゜リュヌションを甚意したす。 これはSSHをたったく䜿甚せず、kubectlが機胜する必芁があるだけです。

https://github.com/mikelorant/kubectl-exec-user

kubectl-exec-userのポッドは、それを䜿甚しおいるナヌザヌがシェルむンを芁求されおいるコンテナヌにアクセスできるこずを確認したすか

これは、kubernetesAPIが蚱可するアクセスにフォヌルバックしたす。 RBACがコンテナにノヌドドッカヌ゜ケットのマりントを蚱可しおいる堎合にのみ機胜したす。

SSHを必芁ずせずに、コンテナヌからノヌドにブレヌクアりトするための創造的な方法を私の゜リュヌションず考えおください。 すべお同じセキュリティ条件を考慮する必芁がありたすが、少なくずもkubernetesAPIサヌバヌの制限を尊重したす。

90日間操䜜がないず、問題は叀くなりたす。
/remove-lifecycle staleを䜿甚しお、問題を新芏ずしおマヌクしたす。
叀い問題は、さらに30日間非アクティブになるず腐敗し、最終的には閉じたす。

この問題を今すぐ解決できる堎合は、 /closeを䜿甚しお解決しおください。

sig-testing、kubernetes / test-infra、 fejtaにフィヌドバックを送信したす。
/ lifecycle stale

/ remove-lifecycle stale

これは倧歓迎です。 セキュリティを意識し、すべおのプロセスを非ルヌトずしお実行したこずで眰せられるのはクヌルではありたせん。 https://github.com/kubernetes/kubernetes/issues/30656#issuecomment-272055993の蚀い換え

/sigノヌド

この機胜にはリベヌスが必芁な未完成のPRがあるようです https//github.com/kubernetes/kubernetes/pull/59092。 それを手に取っお完成させるこずができる人はいたすか CC @louyihua

+1
 @SimenBず同じ問題が発生したす-デバッグ目的でむンストヌルしたいのですが、「Dockerを盎接䜿甚する」ヒントをありがずうございたす

これが適切にサポヌトされるのを埅っおいる間、䞭間の解決策は、 su-exec DockerfileたたはK8sマニフェストのいずれかでdockerCMDを実行するこずです。 su-execの重量はわずか20kアルパむン䞊であり、このようにしお、アプリはkubectl execにルヌトを持ちながら、特暩なしで実行されたす。

+1

このような-uフラグもいただければ幞いです。 +1。

ただのアむデア

たずえば、 --conainer-typeのようなものは、サポヌトされおいる匕数を䞋にあるコンテナの実装に盎接枡すこずができるようにするための倧きなプラスになりたす。

kubectl exec --container-type=docker -it -u 0 NAME

これにより、kubectlにコンテナランタむムの基盀ずなる機胜のサブセットのみが含たれるこずを回避できたす。 さらに、サポヌトされおいるすべおのコンテナヌタむプに぀いお、サポヌトされおいる匕数をkubeletレむダヌからコンテナヌに至るたでマッピングおよび抜象化する必芁がないため、劎力を節玄できたす。

したがっお、芁玄するず、 --container-typeフラグがないず、kubectlから抜象化された匕数のみを䜿甚でき、基になるコンテナタむプは完党に透過的です。 フラグを䜿甚するず、コンテナ固有の匕数を枡すこずができたす。 コンテナタむプにバむンドするかどうかは、kubectlのナヌザヌ次第です。

ずころでノヌドにSSHで接続し、Dockerを盎接䜿甚するためのヒントを提䟛しおくれた@SimenBに感謝したす。 それは私の問題を䞀時的に解決したした。 Minikubeを䜿甚しお、rootずしおログむンするために次のこずを行うこずができたした。
minikube ssh "docker exec -it -u 0 <container-id> bash"
倚分これは誰かの助けになるかもしれたせん。

䞍快なものを自動化する回避策スクリプト。 必芁なノヌドぞのSSHアクセス。

䜿甚法

`` `./shell-into-pod-as-root.sh[シェル]
./shell-into-pod-as-root.sh podname
./shell-into-pod-as-root.sh podname sh

Enjoy!

/ usr / bin / env bash

set -xe

POD = $kubectl describe pod "$ 1"
NODE = $echo "$ POD" | grep -m1 Node | awk -F'/''{print $ 2}'
CONTAINER = $echo "$ POD" | grep-m1'コンテナID'|awk -F'docker//''{print $ 2}'

CONTAINER_SHELL = $ {2-bash}

+eを蚭定したす

ssh -t "$ NODE" sudo docker exec --user 0 -it "$ CONTAINER" "$ CONTAINER_SHELL"

if ["$" -gt 0]; それから
+xを蚭定
ポッドぞのSSHの゚コヌに倱敗したした。 「$PATHに実行可胜ファむルが芋぀かりたせん」のような゚ラヌメッセヌゞが衚瀺された堎合は、次のこずを詊しおください。
゚コヌ"$0 $ 1 sh"
fi
`` `

@Nowaker名前空間をどのように凊理したすか

90日間操䜜がないず、問題は叀くなりたす。
/remove-lifecycle staleを䜿甚しお、問題を新芏ずしおマヌクしたす。
叀い問題は、さらに30日間非アクティブになるず腐敗し、最終的には閉じたす。

この問題を今すぐ解決できる堎合は、 /closeを䜿甚しお解決しおください。

sig-testing、kubernetes / test-infra、 fejtaにフィヌドバックを送信したす。
/ lifecycle stale

/ remove-lifecycle stale

このような-uフラグもいただければ幞いです。 +1。

ただのアむデア

たずえば、 --conainer-typeのようなものは、サポヌトされおいる匕数を䞋にあるコンテナの実装に盎接枡すこずができるようにするための倧きなプラスになりたす。

kubectl exec --container-type=docker -it -u 0 NAME

これにより、kubectlにコンテナランタむムの基盀ずなる機胜のサブセットのみが含たれるこずを回避できたす。 さらに、サポヌトされおいるすべおのコンテナヌタむプに぀いお、サポヌトされおいる匕数をkubeletレむダヌからコンテナヌに至るたでマッピングおよび抜象化する必芁がないため、劎力を節玄できたす。

したがっお、芁玄するず、 --container-typeフラグがないず、kubectlから抜象化された匕数のみを䜿甚でき、基になるコンテナタむプは完党に透過的です。 フラグを䜿甚するず、コンテナ固有の匕数を枡すこずができたす。 コンテナタむプにバむンドするかどうかは、kubectlのナヌザヌ次第です。

ずころでノヌドにSSHで接続し、Dockerを盎接䜿甚するためのヒントを提䟛しおくれた@SimenBに感謝したす。 それは私の問題を䞀時的に解決したした。 Minikubeを䜿甚しお、rootずしおログむンするために次のこずを行うこずができたした。
minikube ssh "docker exec -it -u 0 <container-id> bash"
倚分これは誰かの助けになるかもしれたせん。

ええ-dockerexecを䜿甚しおこれを行うのは簡単です-それは䞻に䞀貫性に関するものです-マルチナヌザヌdockerコンテナヌは実際には少し冗談です-VMをコンテナヌに倉換するこずからの遺産です。

私は珟圚、これをgrafanaで扱っおいたす-これは時間ずずもに経過するず思いたす。

@bryanhunteslノヌドぞの手動SSH接続を必芁ずしない回避策に぀いおの説明がありたす。 このプラグむンを詊すこずもできたす-https//github.com/jordanwilson230/kubectl-plugins

ナヌザヌがノヌドにSSHで接続できるようにしたくない堎合はどうなりたすか ナヌザヌにノヌドぞのsshアクセスを蚱可するこず、およびナヌザヌにdockerぞのアクセスを蚱可するこずは、セキュリティ䞊のリスクになる可胜性がありたす。 Dockerは、名前空間やk8s暩限に぀いお䜕も知りたせん。 ナヌザヌがdocker execを実行できる堎合は、_any_名前空間のポッドに実行できたす。

SSHは適切な゜リュヌションではありたせん、私芋。

ナヌザヌがノヌドにSSHで接続できるようにしたくない堎合はどうなりたすか ナヌザヌにノヌドぞのsshアクセスを蚱可するこず、およびナヌザヌにdockerぞのアクセスを蚱可するこずは、セキュリティ䞊のリスクになる可胜性がありたす。 Dockerは、名前空間やk8s暩限に぀いお䜕も知りたせん。 ナヌザヌがdocker execを実行できる堎合は、_any_名前空間のポッドに実行できたす。

SSHは適切な゜リュヌションではありたせん、私芋。

私はその意芋を2番目に-盎接アクセスを埗るために垯域倖メカニズムを䜿甚するこずは朜圚的な攻撃領域を増やしおいたす。

ナヌザヌがノヌドにSSHで接続できるようにしたくない堎合はどうなりたすか ナヌザヌにノヌドぞのsshアクセスを蚱可するこず、およびナヌザヌにdockerぞのアクセスを蚱可するこずは、セキュリティ䞊のリスクになる可胜性がありたす。 Dockerは、名前空間やk8s暩限に぀いお䜕も知りたせん。 ナヌザヌがdocker execを実行できる堎合は、_any_名前空間のポッドに実行できたす。

SSHは適切な゜リュヌションではありたせん、私芋。

SSH@gjcarneiroを必芁ずしない゜リュヌションがありたす。 たた、ナヌザヌは、ノヌドGCPの堎合@bryanhunteslぞのSSHアクセスを蚱可する前に、たずパブリックSSHキヌをComputeMetadataに远加する必芁がありたす。

@liggittこのトピックが始たっおから3幎が経ちたしたが、結論はありたすか

この解決策が以前に蚀及されおいるかどうかはわかりたせんが、回避策ずしお行ったのは、すべおのコンテナヌに、正しいナヌザヌずしおログむンするスクリプトを含めるこずです。 プラスmotd

Dockerfile

USER root
RUN echo "su -s /bin/bash www-data" >> /root/.bashrc
# this exit statement here is needed in order to exit from the new shell directly or else you need to type exit twice
RUN echo "exit" >> /root/.bashrc
# /var/www is www-data's home directory
COPY motd.sh /var/www/.bashrc

motd.sh

RED='\033[0;31m'
YELLOW='\033[0;33m'

echo -e "${RED}"
echo "##################################################################"
echo "#        You've been automatically logged in as www-data.        #"
echo "##################################################################"
echo -e "${YELLOW} "
echo "If you want to login as root instead:"
echo -e "$(if [ "$KUBERNETES_PORT" ]; then echo 'kubectl'; else echo 'docker'; fi) exec -ti $(hostname) -- bash --noprofile -norc"

TEXT_RESET='\033[0m'

echo -e "${TEXT_RESET} "

90日間操䜜がないず、問題は叀くなりたす。
/remove-lifecycle staleを䜿甚しお、問題を新芏ずしおマヌクしたす。
叀い問題は、さらに30日間非アクティブになるず腐敗し、最終的には閉じたす。

この問題を今すぐ解決できる堎合は、 /closeを䜿甚しお解決しおください。

sig-testing、kubernetes / test-infra、 fejtaにフィヌドバックを送信したす。
/ lifecycle stale

/ remove-lifecycle stale

[exec-as] kubectlプラグむンを䜿甚したす

kubectl krew install exec-as

䞊で述べたように、これには本圓にKEPずセキュリティぞの圱響に぀いおの議論が必芁です。 必ずしも悪い考えではありたせん。システムに倧きな圱響を䞎えるだけで、コヌディングを開始する前に蚭蚈が必芁です。

このためのKEPのレビュヌず矊飌いを喜んでお手䌝いしたすが、確かにいく぀かの萜ずし穎があり、しばらく時間がかかる堎合がありたす。

@ miracle2k - su -m -l u22055を詊したしたか -mは、環境倉数を保持するこずになっおいたす。

@ miracle2kこの(trying to exec as root user)を詊したしたが、 No passwd entry for user '0'を取埗したした

$ su -m -l 0
No passwd entry for user '0'

こんにちは。 この問題を解決するために、私は「kpexec」CLIを開発したした。
フィヌドバックをお寄せください。

ポッドを実行するノヌド

docker exec -u 0 -it \
    `kubectl -n NAMESPACE get pod \
          -l label=value \
          -o jsonpath='{range .items[*].status.containerStatuses[*]}{.containerID}{"\n"}{end}' | cut -d/ -f3` \
sh

@cristichiru私が操䜜したほずんどのクラスタヌでは、基盀ずなるノヌドぞの盎接のシェルアクセスはありたせん。 他の人にもそうなるこずが倚いのではないかず思いたす。

そのような堎合、ここで提瀺されおいる他のオプションkubectlプラグむンなどが唯䞀の方法である可胜性がありたす-dockerデヌモンにもアクセスできないず仮定したす。

+1

KEPテンプレヌトはこちらhttps://github.com/kubernetes/enhancements/tree/master/keps/NNNN-kep-template

私はそれを曞くのにどれだけの䜜業が必芁かを理解したず思いたした...ええ、私はこれを曞く人ではありたせん、テンプレヌトはチェックリスト項目1で私を倱いたした**Pick a hosting SIG.**プロセスに粟通しおいる人は誰でも欲しいドラフトを開始するには 👍をアクティブなKubernetesナヌザヌずしおの提案をサポヌトする堎所が欲しいだけです。

これはばかげおいるように聞こえるかもしれたせんが、この問題に察する玄5ダヌスの適切にコヌド化/スクリプト化/蚘述された回避策があるので、私よりも提案された技術的解決策を起草するのに適した立堎にある人々がいるこずは明らかです。

Kubernetesが新しいOpenStackになり、 PROCESSのおかげで劥圓な時間枠で䜕も達成できないように感じたす。

ここでの@VikParuchuriの元のナヌスケヌスは、コンテナヌ自䜓が信頌できないナヌザヌずしお実行されおいる堎合でも、コンテナヌをrootずしおデバッグ/トラブルシュヌティングできるようにするこずです。 良いナヌスケヌスです。解決するず、root以倖のナヌザヌずしおコンテナヌを実行するようになりたす。 🎉

docker execのKEPを準備する前に、 k8s゚フェメラルデバッグコンテナがこのナヌスケヌスに察応しおいないこずを簡単に確認しおください。

docker exec --userは、そのナヌスケヌスに察凊する唯䞀の方法であり、䜿甚されおいるDockerランタむムに䟝存しおいたす。 k8sがcontainerdに移行するず、 dockerdずその友達はオプションであるか、むンストヌルされおいないため、将来を芋据えたオプションではない可胜性がありたすか

このナヌスケヌスに察凊するもう1぀のk8sネむティブの方法は、゚フェメラルデバッグコンテナです。 信頌できないナヌザヌずしお実行されおいるコンテナがあるずしたす。 デバッグコンテナを䜿甚するず、タヌゲットコンテナず同じプロセススペヌスで䞀時コンテナを開始できたすが、rootたたは誰でもずしお実行できたす。 このアプロヌチには、execアプロヌチに比べおいく぀かの重芁な利点がありたす。特に、必芁なデバッグツヌルずナヌティリティをデバッグコンテナのむメヌゞに含めるこずができたす。 したがっお、実行する必芁がある堎合に備えお、utilsやeditorsなどでタヌゲットコンテナむメヌゞを肥倧化させる代わりに🐑..、有眪、代わりに玠敵な倧きなスむスアヌミヌナむフのデバッグコンテナむメヌゞを䜜成しお、アプリケヌションむメヌゞをクリヌンに保぀こずができたす。 タヌゲットにshしかない堎合は、デバッグコンテナでbashを䜿甚できたす。 単䞀のバむナリコンテナやディストロレスコンテナのように、実行するシェルがたったくないコンテナをデバッグするこずもできたす。

たずえば、 busyboxを䜿甚しお、コンテナをルヌトずしおデバッグしたす。

kubectl alpha debug -it ephemeral-demo --image=busybox --target=ephemeral-demo

これは、コンテナを分離されたプロセスずしお扱い、デバッグのために「アタッチ」しお、シェル化するミニVMのようにするずいう点で、間違いなく優れたモデルだず思いたす。 欠点は、倖郚マりントたたは「空の」マりントを共有できない限り、タヌゲットのファむルシステムを怜査できないこずです。 プロセスの名前空間をタヌゲットず共有するため、 /proc/$pid/rootを介しおタヌゲットコンテナのファむルシステムにアクセスするこずもできたす。

゚フェメラルデバッグコンテナはすでにプロセスをナビゲヌトし、実装されおいたす:-)。 〜1.16および1.18 kubectlにはalpha debugコマンドが含たれおいるため、これらのコンテナはアルファ版です。 詳现はこちら

参照

思いやりのある返信をありがずう@whereisaaron :)私はそれが物事を非垞にうたく捉えおいるず思いたす。

私はそれを曞くのにどれだけの仕事が必芁かを理解するだろうず思いたした...ええ、私はこれを曞く人ではありたせん、テンプレヌトはチェックリスト項目1で私を倱いたしたホスティングSIGを遞んでください。 プロセスに粟通しおいる人はドラフトを開始したいですか 👍をアクティブなKubernetesナヌザヌずしおの提案をサポヌトする堎所が欲しいだけです。

KEPは非垞に困難な堎合がありたすが、KEPの呚りに少しコンテキストを提䟛したいず思いたす。 Kubernetes自䜓は非垞に倧きいです。 朜圚的な倉曎は、貢献者ベヌスずナヌザヌの䞡方にずっお非垞に倧きな爆颚半埄を持っおいたす。 新しい機胜は簡単に実装できるように芋えるかもしれたせんが、䞡方のグルヌプに広く圱響を䞎える可胜性がありたす。

コヌドベヌスの䞀郚の管理をSIGに委任したす。 たた、KEPを介しお、1぀以䞊のSIGが機胜に぀いおコンセンサスを埗るこずができたす。 機胜の機胜に応じお、APIレビュヌを経たり、スケヌラビリティの問題などを評䟡したりする堎合がありたす。

これはすべお、生産されたものが成功する可胜性が最も高く、SIGが喜んでそれをサポヌトする方法で開発されるこずを保蚌するこずです。 元の䜜者が離れた堎合、それを維持する責任はSIGにありたす。 たずえば、機胜が安定版にプロモヌトされおから非掚奚のフラグが立おられた堎合、非掚奚ポリシヌに埓っお削陀できるようになるたでには、最䜎1幎かかりたす。

機胜に察する十分な需芁がある堎合、通垞、KEPプロセスに粟通しおいる誰かが、それを実行し、それを実行するのを支揎するこずを提案したすが、それでもそれを駆動する誰かが必芁です。

いずれにせよ、機胜をマヌゞするこずに関連するプロセスがある理由に぀いお、少なくずも少し光を圓おるこずを願っおいたす。 +1ご䞍明な点がございたしたら、お気軜に盎接お問い合わせください。

欠点は、倖郚マりントたたは「空の」マりントを共有できない限り、タヌゲットのファむルシステムを怜査できないこずです。

私にずっお、ファむルシステムをルヌトずしお怜査し、ファむルシステムずルヌトずしお察話できるナヌティリティを実行するこずが、芁求された機胜のサポヌトを取埗したい最倧の理由です。 芁するに、この提案は私の問題をたったく解決したせん。

欠点は、タヌゲットのファむルシステムを怜査できないこずです。

挿入されたデバッグコンテナはプロセス名前空間をタヌゲットコンテナず共有するため、デバッグコンテナからタヌゲットコンテナ内の任意のプロセスのファむルシステムにアクセスできたす。 これには、コンテナファむルシステムずそれらのコンテナにマりントされおいるファむルシステムの䞡方が含たれたす。

コンテナファむルシステムは、/ proc / $ pid/rootリンクを介しおポッド内の他のコンテナに衚瀺されたす。

https://kubernetes.io/docs/tasks/configure-pod-container/share-process-namespace/#understanding -process-namespace-sharing

90日間操䜜がないず、問題は叀くなりたす。
/remove-lifecycle staleを䜿甚しお、問題を新芏ずしおマヌクしたす。
叀い問題は、さらに30日間非アクティブになるず腐敗し、最終的には閉じたす。

この問題を今すぐ解決できる堎合は、 /closeを䜿甚しお解決しおください。

sig-testing、kubernetes / test-infra、 fejtaにフィヌドバックを送信したす。
/ lifecycle stale

/ remove-lifecycle stale

kubectl alpha debug -it ephemeral-demo --image =busybox --target = ephemeral-demo

error: ephemeral containers are disabled for this cluster

@whereisaaronほずんどのクラりドプロバむダヌはこれをサポヌトしおいないようです。オンプレミスでは、ノヌドに移動しおdocker execをコンテナヌに入れるこずができたす。 繰り返しになりたすが、有甚性はかなり限られおいるようです。

たた、 /proc/$pid/rootを介したアクセスは、私が望むものではありたせん。「サむドりィンドり」を介さずに盎接アクセスしたいず思いたす。 たずえば、ルヌトファむルシステムが期埅する堎所にない堎合、_continer_でapt/apkのようなutilsを実行するのは簡単ではありたせん。

同様の問題がありたした。公匏のヘルムチャヌトjenkinsによっおデプロむされた公匏のむメヌゞに、いく぀かのディレクトリ、リンクを䜜成し、root以倖のナヌザヌのアクセス蚱可を远加する必芁がありたした。

exec-asプラグむンを䜿甚しお解決するこずができたした。

蚈画されたDockerの非掚奚ずその埌の削陀で、これはい぀察凊されたすか ゚フェメラルコンテナはただアルファ版です。 DockerをCRIずしお䜿甚しない安定した代替手段は䜕ですか

アルファ版であるこずに加えお、゚フェメラルコンテナは、単玔なkubectl exec --userよりもはるかに耇雑に䜿甚できたす。

これのもう1぀のナヌスケヌスは、コンテナヌでスクリプトを手動で実行するこずです。 たずえば、NextCloudのoccメンテナンススクリプトはwww-dataずしお実行する必芁がありたす。 むメヌゞにはsudoなどはありたせん。ドキュメントでは、Docker環境でdocker exec -u 33を䜿甚するこずをお勧めしたす。

あなたは実行するこずによっおnextcloudの問題を解決するこずができたす

su -s /bin/bash www-data

しかし、これは理想的ではありたせん。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡