GNU/Linux >> Linux Esercitazione >  >> Linux

Come funziona il comando oc debug in OpenShift

Se hai utilizzato versioni relativamente recenti di OpenShift, devi esserti imbattuto in oc debug comando (oppure puoi controllare questa pagina man). Una delle cose interessanti del nuovo OpenShift è che suggerisce di non usare direttamente SSH (puoi vederlo in sshd_config sui nodi perché hanno PermitRootLogin no fissarli). Quindi, se dovessi eseguire oc debug node/node_name , creerà un pod per te e ti rilascerà nella shell (TTY) di questo pod.

[ Potrebbe interessarti anche: 5 motivi per cui dovresti sviluppare una strategia di container Linux ]

Sebbene sia un baccello, è un tipo speciale di baccello. Una volta avviato il pod, puoi aprire una seconda finestra di terminale ed eseguire oc get pods e trova il pod corrispondente chiamato node-name-debug e usa oc get -o yaml podName per visualizzare il suo output YAML.

Osserva l'output:

apiVersion: v1
kind: Pod
metadata:
  name: ip-xx-x-xxx-xxxus-east-2computeinternal-debug   #1
  namespace: default #2
...
<snip>
....
spec:
containers:
  - command:
    - /bin/sh
    image: quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:57e87210a3f3a3ba4fc85dde180c76988a5f68445f705fd07855003986c75ab0
    name: container-00
    ...
    securityContext: #3
           privileged: true
           runAsUser: 0
    ...
    tty: true  #4
    volumeMounts: 
    - mountPath: /host  #5
      name: host
    - mountPath: /var/run/secrets/kubernetes.io/serviceaccount
        name: default-token-dnkrx
        readOnly: true
  ...
  hostNetwork: true  #6
...

  volumes:
  - hostPath:
      path: /   #7
      type: Directory
    name: host
  - name: default-token-dnkrx
    secret:
      defaultMode: 420
      secretName: default-token-dnkrx
status:  #8
…
  hostIP: 10.0.111.111
  phase: Running
  podIP: 10.0.111.111
  podIPs:
  - ip: 10.0.111.111

Ecco come appare lo YAML (ne ho tagliato alcune parti per brevità). Ho aggiunto #x numeri nello YAML. Ogni numero evidenzia un fatto specifico su questo pod di debug che è speciale rispetto ai normali pod dell'applicazione.

Riferimenti YAML

#1

name: ip-xx-x-xxx-xxxus-east-2computeinternal-debug   #1

Questo mostra che il pod ottiene il nome che viene formato usando il nome del nodo. Nel mio caso il nome del nodo era ip-x-x-x-x-.us-east-2.compute.internal , quindi oc debug allega semplicemente -debug alla fine e sostituisce i punti con dei trattini.

#2

 namespace: default #2

Potrebbe creare il pod in qualsiasi spazio dei nomi in cui ti trovi. In questo caso, lo spazio dei nomi è predefinito .

#3

securityContext: #3
           privileged: true
           runAsUser: 0

È qui che diventa interessante. Come sai, di solito non eseguirai i pod come pod privilegiato e come utente 0 (root). Tuttavia, poiché questo pod ha lo scopo di fornire un equivalente dell'accesso SSH al nodo come utente root, ha un tale securityContext impostare. Essere privilegiati aggiunge AllCapabilities (che fornisce un accesso altamente illimitato) a questo pod. Puoi vederli usando setpriv -d  (output sotto) all'interno della shell di debug. Ciò ti fa ricevere un accesso quasi illimitato al nodo tramite questo pod. Inutile dire che questo pod sarà probabilmente programmato sul nodo di cui stai eseguendo il debug.

sh-4.4# setpriv -d
uid: 0
euid: 0
gid: 0
egid: 0
Supplementary groups: [none]
no_new_privs: 0
Inheritable capabilities: chown,dac_override,dac_read_search,fowner,fsetid,kill,setgid,setuid,setpcap,linux_immutable,net_bind_service,net_broadcast,net_admin,net_raw,ipc_lock,ipc_owner,sys_module,sys_rawio,sys_chroot,sys_ptrace,sys_pacct,sys_admin,sys_boot,sys_nice,sys_resource,sys_time,sys_tty_config,mknod,lease,audit_write,audit_control,setfcap,mac_override,mac_admin,syslog,wake_alarm,block_suspend,audit_read
Ambient capabilities: chown,dac_override,dac_read_search,fowner,fsetid,kill,setgid,setuid,setpcap,linux_immutable,net_bind_service,net_broadcast,net_admin,net_raw,ipc_lock,ipc_owner,sys_module,sys_rawio,sys_chroot,sys_ptrace,sys_pacct,sys_admin,sys_boot,sys_nice,sys_resource,sys_time,sys_tty_config,mknod,lease,audit_write,audit_control,setfcap,mac_override,mac_admin,syslog,wake_alarm,block_suspend,audit_read
Capability bounding set: chown,dac_override,dac_read_search,fowner,fsetid,kill,setgid,setuid,setpcap,linux_immutable,net_bind_service,net_broadcast,net_admin,net_raw,ipc_lock,ipc_owner,sys_module,sys_rawio,sys_chroot,sys_ptrace,sys_pacct,sys_admin,sys_boot,sys_nice,sys_resource,sys_time,sys_tty_config,mknod,lease,audit_write,audit_control,setfcap,mac_override,mac_admin,syslog,wake_alarm,block_suspend,audit_read
Securebits: [none]
SELinux label: system_u:system_r:spc_t:s0

#4

 tty: true  #4

TTY è impostato su true , il che significa che ottieni una shell interattiva per il pod subito dopo la creazione del pod.

#5 , #7

 - mountPath: /host  #5
 path: /   #7

Qui diventa ancora più interessante. Come puoi vedere, stai montando il volume denominato host nel percorso /host . Se guardi #7 vedrai che il volume dell'host è impostato sul percorso / sull'host, che è la directory principale. Ciò garantisce l'accesso completo al filesystem host tramite questo pod. Tuttavia, quando inizialmente salti nel tty di questo pod, non sei nel /host directory. Sei nel filesystem del contenitore con la sua radice (/ ) file system. Per passare al filesystem host come root, puoi usare chroot /host , che ti darebbe accesso a tutti i programmi installati sull'host e sembrerebbe identico a come ti sentiresti altrimenti se dovessi accedere a questo nodo tramite SSH.

#6 , #8

 hostNetwork: true  #6
status:  #8
…
  hostIP: 10.0.111.111
  phase: Running
  podIP: 10.0.111.111
  podIPs:
  - ip: 10.0.111.111

Dal punto di vista della rete, questo pod utilizza un hostNetwork , che equivale a eseguire Docker o Podman con --net=host durante l'esecuzione di un container. In questo caso, viene utilizzato per far sembrare che i programmi all'interno del contenitore siano in esecuzione sull'host stesso dal punto di vista della rete. Consente al contenitore un accesso alla rete maggiore di quello che può ottenere normalmente. Di solito devi inoltrare le porte dalla macchina host a un container. Tuttavia, quando i container condividono la rete dell'host, qualsiasi attività di rete avviene direttamente sulla macchina host, proprio come accadrebbe se il programma fosse in esecuzione localmente sull'host anziché all'interno di un container. Con questo, stai ottenendo l'accesso alle reti host, che probabilmente sarebbero anche illimitate. È importante notare che il nodo host fornisce al contenitore l'accesso completo ai servizi di sistema locali come D-bus ed è quindi considerato non sicuro. Se guardi lo stato, puoi vedere l'hostIP , podIP e podIP i campi hanno un valore comune che corrisponde all'indirizzo IP originale del nodo. Ciò dimostra che stai effettivamente utilizzando un pod di rete host.

[ Ottieni questo ebook gratuito:Gestione dei cluster Kubernetes per i manichini. ]

Concludi

Questo articolo è una breve panoramica di come il oc debug il comando funzionerebbe per il debug di un nodo in un cluster OpenShift.


Linux
  1. Come usare il comando Linux grep

  2. Come usare il comando cronologia in Linux

  3. Come viene interpretato il jolly * come un comando?

  4. Come utilizzare il comando id in Linux

  5. Come utilizzare il comando "schermo" in Linux

Come usare il comando nmap

Come personalizzare il comando top di Linux

Come utilizzare il comando fd sul sistema Linux

Come utilizzare il comando wget in Linux?

Come usare il comando xargs in Linux?

Come utilizzare il comando RPM in Linux