GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana perintah oc debug bekerja di OpenShift

Jika Anda telah menggunakan versi OpenShift yang relatif baru, Anda pasti menemukan oc debug perintah (atau Anda dapat memeriksa halaman manual ini). Salah satu hal menarik tentang OpenShift baru adalah ia menyarankan untuk tidak menggunakan SSH secara langsung (Anda dapat melihatnya di sshd_config pada node karena mereka memiliki PermitRootLogin no ditetapkan pada mereka). Jadi jika Anda menjalankan oc debug node/node_name , itu akan membuat pod untuk Anda dan memasukkan Anda ke dalam cangkang (TTY) pod ini.

[ Anda mungkin juga menikmati: 5 alasan mengapa Anda harus mengembangkan strategi container Linux ]

Meskipun ini adalah pod, ini adalah jenis pod yang spesial. Setelah pod diluncurkan, Anda dapat membuka jendela terminal kedua dan menjalankan oc get pods dan temukan pod yang sesuai bernama node-name-debug dan gunakan oc get -o yaml podName untuk menampilkan keluaran YAML-nya.

Perhatikan outputnya:

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

Seperti inilah tampilan YAML (saya telah memotong beberapa bagian untuk singkatnya). Saya telah menambahkan #x nomor di YAML. Setiap nomor menyoroti fakta spesifik tentang pod debug ini yang istimewa dibandingkan dengan pod aplikasi biasa.

Referensi YAML

#1

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

Ini menunjukkan pod mendapatkan nama yang dibentuk menggunakan nama node. Dalam kasus saya, nama simpulnya adalah ip-x-x-x-x-.us-east-2.compute.internal , jadi oc debug cukup lampirkan -debug di akhir dan mengganti titik dengan tanda hubung.

#2

 namespace: default #2

Ini dapat membuat pod di namespace mana pun Anda berada. Dalam hal ini, namespace adalah default .

#3

securityContext: #3
           privileged: true
           runAsUser: 0

Di sinilah menjadi menarik. Seperti yang Anda ketahui, Anda biasanya tidak akan menjalankan pod sebagai pod yang diistimewakan dan sebagai pengguna 0 (root). Namun, karena pod ini dimaksudkan untuk memberi Anda akses SSH yang setara ke node sebagai pengguna root, pod ini memiliki securityContext seperti itu. mendirikan. Menjadi istimewa menambahkan AllCapabilities (memberikan akses yang sangat tidak terbatas) ke pod ini. Anda dapat melihatnya dengan menggunakan setpriv -d  (output di bawah)  dalam shell debug. Ini menyebabkan Anda menerima akses hampir tak terbatas ke node melalui pod ini. Tak perlu dikatakan bahwa pod ini kemungkinan akan dijadwalkan pada node yang Anda 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 disetel ke benar , yang berarti Anda mendapatkan shell interaktif untuk pod segera setelah pod dibuat.

#5 , #7

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

Di sini menjadi lebih menarik. Seperti yang Anda lihat, Anda memasang volume bernama host di jalur /host . Jika Anda melihat #7 Anda akan melihat bahwa volume host disetel ke jalur / pada host, yang merupakan direktori root. Ini memastikan bahwa Anda memiliki akses penuh ke sistem file host melalui pod ini. Namun, ketika Anda pertama kali melompat ke tty pod ini, Anda tidak berada di /host direktori. Anda berada di sistem file wadah dengan root-nya sendiri (/ ) berkas sistem. Untuk mengubah sistem file host sebagai root, Anda dapat menggunakan chroot /host , yang akan memberi Anda akses ke semua program yang diinstal pada host, dan akan terasa identik dengan apa yang Anda rasakan jika Anda menggunakan SSH ke node ini.

#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

Dari sudut pandang jaringan, pod ini menggunakan hostNetwork , yang setara dengan menjalankan Docker atau Podman dengan --net=host saat menjalankan wadah. Dalam hal ini, ini digunakan untuk membuat program di dalam wadah terlihat seperti berjalan di host itu sendiri dari perspektif jaringan. Ini memungkinkan wadah akses jaringan yang lebih besar daripada yang biasanya didapat. Anda biasanya harus meneruskan port dari mesin host ke dalam wadah. Namun, ketika container berbagi jaringan host, aktivitas jaringan apa pun terjadi langsung di mesin host—sama seperti jika program berjalan secara lokal di host, bukan di dalam container. Dengan ini, Anda mendapatkan akses ke jaringan host, yang mungkin juga tidak dibatasi. Penting untuk dicatat bahwa node host memberikan wadah akses penuh ke layanan sistem lokal seperti D-bus dan karena itu dianggap tidak aman. Jika Anda melihat statusnya, Anda dapat melihat hostIP , IPpod , dan podIP bidang memiliki nilai umum yang cocok dengan alamat IP asli node. Ini membuktikan bahwa Anda benar-benar menggunakan pod jaringan host.

[ Dapatkan ebook gratis ini:Mengelola kluster Kubernetes Anda untuk boneka. ]

Menutup

Artikel ini adalah ikhtisar singkat tentang cara oc debug perintah akan bekerja untuk debug node di cluster OpenShift.


Linux
  1. Cara menggunakan perintah grep Linux

  2. Cara menggunakan perintah history di Linux

  3. Bagaimana cara menggunakan perintah nama dasar?

  1. Bagaimana Cara Kerja Perintah Tee??

  2. Bagaimana Wildcard * Diinterpretasikan Sebagai Perintah?

  3. Cara Menggunakan Perintah id di Linux

  1. Cara Menggunakan Perintah sejarah Linux

  2. Cara Menggunakan Perintah baca Bash

  3. Cara menggunakan perintah "layar" di Linux