【K8s任務】在 Pod 中的容器之間共享進程命名空間


參考:https://kubernetes.io/zh/docs/tasks/configure-pod-container/share-process-namespace/

FEATURE STATE: Kubernetes v1.17 [stable]

此頁面展示如何為 pod 配置進程命名空間共享。 當啟用進程命名空間共享時,容器中的進程對該 pod 中的所有其他容器都是可見的。

您可以使用此功能來配置協作容器,比如日志處理 sidecar 容器,或者對那些不包含諸如 shell 等調試實用工具的鏡像進行故障排查。

配置 Pod

進程命名空間共享使用 v1.PodSpec 中的 ShareProcessNamespace 字段啟用。例如:

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  shareProcessNamespace: true
  containers:
  - name: nginx
    image: nginx
  - name: shell
    image: busybox
    securityContext:
      capabilities:
        add:
        - SYS_PTRACE
    stdin: true
    tty: true
    1.在集群中創建 nginx pod:

    kubectl apply -f https://k8s.io/examples/pods/share-process-namespace.yaml

    2.獲取容器 shell,執行 ps:

    kubectl attach -it nginx -c shell

    如果沒有看到命令提示符,請按 enter 回車鍵。

    / # ps ax
    PID   USER     TIME  COMMAND
        1 root      0:00 /pause
        8 root      0:00 nginx: master process nginx -g daemon off;
       14 101       0:00 nginx: worker process
       15 root      0:00 sh
       21 root      0:00 ps ax

您可以在其他容器中對進程發出信號。例如,發送 SIGHUP 到 nginx 以重啟工作進程。這需要 SYS_PTRACE 功能。

/ # kill -HUP 8
/ # ps ax
PID   USER     TIME  COMMAND
    1 root      0:00 /pause
    8 root      0:00 nginx: master process nginx -g daemon off;
   15 root      0:00 sh
   22 101       0:00 nginx: worker process
   23 root      0:00 ps ax

甚至可以使用 /proc/$pid/root 鏈接訪問另一個容器鏡像。

/ # head /proc/8/root/etc/nginx/nginx.conf

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;

理解進程命名空間共享

Pod 共享許多資源,因此它們共享進程命名空間是很有意義的。 不過,有些容器鏡像可能希望與其他容器隔離,因此了解這些差異很重要:

    1.容器進程不再具有 PID 1。 在沒有 PID 1 的情況下,一些容器鏡像拒絕啟動(例如,使用 systemd 的容器),或者拒絕執行 kill -HUP 1 之類的命令來通知容器進程。在具有共享進程命名空間的 pod 中,kill -HUP 1 將通知 pod 沙箱(在上面的例子中是 /pause)。

    2.進程對 pod 中的其他容器可見。 這包括 /proc 中可見的所有信息,例如作為參數或環境變量傳遞的密碼。這些僅受常規 Unix 權限的保護。

    3.容器文件系統通過 /proc/$pid/root 鏈接對 pod 中的其他容器可見。 這使調試更加容易,但也意味着文件系統安全性只受文件系統權限的保護。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM