kubernetes之Pod中的容器共享進程Namespace


簡介

此文講述如何配置Pod中的容器恭喜共享進程Namespace。當進程名稱空間共享被激活,在同一個Pod中,一個容器的進程可以在其他容器中看到。可以使用此功能來配置協作容器,例如日志處理程序sidecar容器,或對不包含調試實用程序(例如shell)的容器映像進行故障排除。在Kubernetes v1.17中已處於穩定狀態。

備注:此文檔參考官方文檔,並加以自己的理解。如有誤導性的內容,請批評指正。

配置Pod共享進程Namespace

使用shareProcessNamespace激活進程Namespace共享。例如:

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、在集群中創建nginxPod

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

創建Pod

# kubectl apply -f /root/k8s-example/pods/share-process-namespace.yaml

2、將 shell 容器附加到nginx容器上,運行ps命令

# kubectl attach -it nginx -c shell

輸出內容如下:

/ # ps ax
PID   USER     TIME  COMMAND
    1 root      0:00 /pause
    6 root      0:00 nginx: master process nginx -g daemon off;
   11 101       0:00 nginx: worker process
   12 root      0:00 sh
   18 root      0:00 ps ax

可以用信號通知其他容器中的進程。 例如,將SIGHUP發送到nginx以重新啟動worker進程。 這需要SYS_PTRACE功能。

/ # kill -HUP 6
/ # ps ax
PID   USER     TIME  COMMAND
    1 root      0:00 /pause
    6 root      0:00 nginx: master process nginx -g daemon off;
   12 root      0:00 sh
   19 101       0:00 nginx: worker process
   20 root      0:00 ps ax

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

/ # head  /proc/6/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;

理解進程Namepsace共享

Pod可以共享很多資源,例如共享進程名稱空間。不過,某些容器圖片可能會與其他容器隔離,因此了解這些差異很重要:

  • 容器的進程不再有PID 1一些容器在沒有 PID 1進程或運行諸如kill -HUP 1之類的命令來發出容器進程信號拒絕啟動(例如:,容器使用 systemd)在具有共享進程名稱空間的Pod中,kill -HUP 1將向Pod沙箱發出信號。 (在以上示例中為/ pause。)
  • 進程對Pod中的其他容器可見。 這包括/proc中所有可見的信息,例如作為參數或環境變量傳遞的密碼。 這些僅受常規Unix權限保護。
  • 容器文件系對Pod中其他容器通過/proc/$pid/root鏈接。這使調試更加容易,但是這也意味着文件系統秘密僅受文件系統許可權保護。


免責聲明!

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



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