1. 程式人生 > 其它 >【K8s任務】在 Pod 中的容器之間共享程序名稱空間

【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 中的其他容器可見。 這使除錯更加容易,但也意味著檔案系統安全性只受檔案系統許可權的保護。
作者:Varden 出處:http://www.cnblogs.com/varden/ 本文內容如有雷同,請聯絡作者! 本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連線,否則保留追究法律責任的權利。