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.