@@ -623,7 +623,7 @@ kubectl delete pod myapp myapp-debug
623
623
624
624
## ノード上のシェルによるデバッグ {#node-shell-session}
625
625
626
- いずれの方法でもうまくいかない場合は、Podが動作しているノードを探し出し、ホストの名前空間で動作する特権Podを作成します 。
626
+ いずれの方法でもうまくいかない場合は、Podが動作しているノードを探し出し、ホストの名前空間で動作するデバッグ用のPodを作成します 。
627
627
ノード上で` kubectl debug ` を使って対話型のシェルを作成するには、以下を実行します:
628
628
629
629
``` shell
@@ -639,11 +639,86 @@ root@ek8s:/#
639
639
ノードでデバッグセッションを作成する場合、以下の点に注意してください:
640
640
641
641
* ` kubectl debug ` はノードの名前に基づいて新しいPodの名前を自動的に生成します。
642
- * コンテナはホストのIPC、Network、PIDネームスペースで実行されます。
643
642
* ノードのルートファイルシステムは` /host ` にマウントされます。
643
+ * コンテナはホストのIPC、Network、PIDネームスペースで実行されますが、特権は付与されません。そのため、ホスト上のプロセス情報の参照や、` chroot /host ` の実行に失敗する場合があります。
644
+ * 特権が必要な場合は手動でPodを作成するか、` --profile=sysadmin ` を使用してください。
644
645
645
646
デバッグが終わったら、Podの後始末をするのを忘れないでください:
646
647
647
648
``` shell
648
649
kubectl delete pod node-debugger-mynode-pdx84
649
650
```
651
+
652
+ ## デバッグプロファイルの使用 {#debugging-profiles}
653
+
654
+ ` kubectl debug ` でノードやPodをデバッグする場合、デバッグ用のPod、エフェメラルコンテナ、またはコピーされたPodに` --profile ` フラグを使用してデバッグプロファイルを適用できます。
655
+ デバッグプロファイルを適用することで、[ securityContext] ( /ja/docs/tasks/configure-pod-container/security-context/ ) など特定のプロパティが設定され、さまざまなシナリオに適応できるようになります。
656
+
657
+ 使用可能なデバッグプロファイルは以下の通りです:
658
+
659
+ | Profile | Description |
660
+ | ------------ | --------------------------------------------------------------- |
661
+ | legacy | v1.22と互換性を保つプロパティのセット |
662
+ | general | 各デバッグシナリオに対応する汎用的なプロパティのセット |
663
+ | baseline | [ PodSecurityStandard baseline policy] ( /ja/docs/concepts/security/pod-security-standards/#ベースライン-デフォルト ) に準拠したプロパティのセット |
664
+ | restricted | [ PodSecurityStandard restricted policy] ( /ja/docs/concepts/security/pod-security-standards/#制限 ) に準拠したプロパティのセット |
665
+ | netadmin | ネットワーク管理者権限を含むプロパティのセット |
666
+ | sysadmin | システム管理者(root)権限を含むプロパティのセット |
667
+
668
+
669
+ {{< note >}}
670
+ もし` --profile ` を指定しない場合、デフォルトで` legacy ` プロファイルが使用されます。
671
+ ` legacy ` プロファイルは将来的に廃止される予定であるため、` general ` プロファイルなどの他のプロファイルを使用することを推奨します。
672
+ {{< /note >}}
673
+
674
+ 例えば、` myapp ` という名前のPodを作成し、デバッグを行います:
675
+
676
+ ``` shell
677
+ kubectl run myapp --image=busybox:1.28 --restart=Never -- sleep 1d
678
+ ```
679
+
680
+ エフェメラルコンテナを使用して、Podをデバッグします。
681
+ エフェメラルコンテナに特権が必要な場合は、` sysadmin ` プロファイルを使用できます:
682
+
683
+ ``` shell
684
+ kubectl debug -it myapp --image=busybox:1.28 --target=myapp --profile=sysadmin
685
+ ```
686
+
687
+ ```
688
+ Targeting container "myapp". If you don't see processes from this container it may be because the container runtime doesn't support this feature.
689
+ Defaulting debug container name to debugger-6kg4x.
690
+ If you don't see a command prompt, try pressing enter.
691
+ / #
692
+ ```
693
+
694
+ コンテナで次のコマンドを実行して、エフェメラルコンテナプロセスのケーパビリティを確認します:
695
+
696
+ ``` shell
697
+ / # grep Cap /proc/$$/status
698
+ ```
699
+
700
+ ```
701
+ ...
702
+ CapPrm: 000001ffffffffff
703
+ CapEff: 000001ffffffffff
704
+ ...
705
+ ```
706
+
707
+ この結果は、` sysadmin ` プロファイルを適用したことで、エフェメラルコンテナプロセスに特権が付与されていることを示しています。
708
+ 詳細は[ コンテナにケーパビリティを設定する] ( /ja/docs/tasks/configure-pod-container/security-context/#コンテナにケーパビリティを設定する ) を参照してください。
709
+
710
+ エフェメラルコンテナが特権コンテナであることは、次のコマンドからも確認できます:
711
+
712
+ ``` shell
713
+ kubectl get pod myapp -o jsonpath=' {.spec.ephemeralContainers[0].securityContext}'
714
+ ```
715
+
716
+ ```
717
+ {"privileged":true}
718
+ ```
719
+
720
+ 確認が終わったらPodを削除します:
721
+
722
+ ``` shell
723
+ kubectl delete pod myapp
724
+ ```
0 commit comments