fix(setup): 실험대를 새로 세워 setup 35편을 밟고 어긋난 명령과 결과를 고친다
기반 가이드 7단계로 실험대를 철거하고 다시 세운 뒤 virtualization setup 9편과 keycloak-session-store 26편을 순서대로 밟았다. 24편은 끝까지, 11편은 되는 데까지 밟았고 밟은 범위를 편마다 적었다. 명령이 못 도는 것을 고쳤다. - kubectl 을 `kc-lab-1` 에서 치라고 적었는데 그 기계에 kubeconfig 가 없다. 라벨 639개와 각 편의 「어디서 치는가」를 `[lab host]` 로 옮겼다 - `-o custom-columns=…[0]…` 이 zsh 에서 글로브로 읽혀 안 돈다. 28곳에 따옴표 - busybox `sed` 가 끝 개행을 안 붙여 A-3 의 측정이 언제나 0 이었다 - `--token-file ~/node-token` 뒤에 그 파일을 지우면 k3s agent 가 재부팅을 못 견딘다. `/etc/rancher/node-token` 으로 옮기는 처방을 재서 넣었다 - 게스트에 없는 도구를 전제로 한 명령 넷 — `conntrack`·`dig`·`strings`·`nginx -v` - `echo` 와 JWT 헤더가 `"이름" : [ 값 ]` 으로 찍는데 문서는 공백 없이 옮겨 적어 그 실측으로 만든 grep·sed 가 한 줄도 못 잡는다 - B-0 이 `directAccessGrantsEnabled` 와 계정 완성을 빠뜨려 B-3 이 못 돈다 - D-4·D-4a 가 `test-server` 와 `certbot-renew.*` 를 가리키는데 실제로는 `kc-lab-edge` 의 `certbot.service` 다 - `virsh setmaxmem --config` 를 `dominfo` 로 판정하면 틀린다. `--inactive` 로 - `LIBVIRT_DEFAULT_URI` 를 rc 에만 넣으면 `ssh host '명령'` 에서 안 먹는다 결과가 조건부인 것을 갈랐다. - readiness 는 즉시 안 뒤집힌다. A-1·A-2 의 60초 창을 적었다 - 03 의 층 ②③ `301` 은 04 이후의 값이고 그 단계에서는 `404` 다 - A-0 의 로그 필터를 요청 직후에 치면 정반대 결론이 나온다 - A-5 의 한 방향 차단은 잠깐 `1` 이었다 `2` 로 돌아온다 증거는 두 프로젝트의 `evidence/raw/` 에 99벌을 README 와 함께 남겼다. 비밀은 길이만 적었고 화면에 찍힌 토큰은 가렸다. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
ab59130196
commit
024362d096
+99
@@ -0,0 +1,99 @@
|
||||
### virsh list --all
|
||||
Id Name State
|
||||
-----------------------------
|
||||
9 kc-lab-edge running
|
||||
10 kc-lab-1 running
|
||||
12 kc-lab-2 running
|
||||
|
||||
|
||||
### virsh vol-list default
|
||||
Name Path
|
||||
----------------------------------------------------------------------
|
||||
base.qcow2 /var/lib/libvirt/images/base.qcow2
|
||||
kc-lab-1.qcow2 /var/lib/libvirt/images/kc-lab-1.qcow2
|
||||
kc-lab-2.qcow2 /var/lib/libvirt/images/kc-lab-2.qcow2
|
||||
kc-lab-edge.qcow2 /var/lib/libvirt/images/kc-lab-edge.qcow2
|
||||
seed-kc-lab-1.iso /var/lib/libvirt/images/seed-kc-lab-1.iso
|
||||
seed-kc-lab-2.iso /var/lib/libvirt/images/seed-kc-lab-2.iso
|
||||
seed-kc-lab-edge.iso /var/lib/libvirt/images/seed-kc-lab-edge.iso
|
||||
|
||||
|
||||
### virsh net-dumpxml default
|
||||
<network>
|
||||
<name>default</name>
|
||||
<uuid>a14c3b01-2c56-4181-8310-e6cba888e2a8</uuid>
|
||||
<forward mode='nat'>
|
||||
<nat>
|
||||
<port start='1024' end='65535'/>
|
||||
</nat>
|
||||
</forward>
|
||||
<bridge name='virbr0' stp='on' delay='0'/>
|
||||
<mac address='52:54:00:6c:a6:a8'/>
|
||||
<ip address='192.168.122.1' netmask='255.255.255.0'>
|
||||
<dhcp>
|
||||
<range start='192.168.122.2' end='192.168.122.254'/>
|
||||
<host mac='52:54:00:aa:bb:11' name='kc-lab-1' ip='192.168.122.11'/>
|
||||
<host mac='52:54:00:aa:bb:12' name='kc-lab-2' ip='192.168.122.12'/>
|
||||
<host mac='52:54:00:aa:bb:10' name='kc-lab-edge' ip='192.168.122.10'/>
|
||||
</dhcp>
|
||||
</ip>
|
||||
</network>
|
||||
|
||||
|
||||
### df -h /
|
||||
Filesystem Size Used Avail Use% Mounted on
|
||||
/dev/nvme0n1p3 226G 16G 199G 8% /
|
||||
|
||||
### free -m
|
||||
total used free shared buff/cache available
|
||||
Mem: 11648 10444 191 4 1345 1204
|
||||
Swap: 8191 959 7232
|
||||
|
||||
### virsh dominfo (셋)
|
||||
-- kc-lab-1
|
||||
Name: kc-lab-1
|
||||
State: running
|
||||
CPU(s): 2
|
||||
Max memory: 5242880 KiB
|
||||
Used memory: 5242880 KiB
|
||||
Persistent: yes
|
||||
Autostart: disable
|
||||
Autostart Once: disable
|
||||
-- kc-lab-2
|
||||
Name: kc-lab-2
|
||||
State: running
|
||||
CPU(s): 2
|
||||
Max memory: 4194304 KiB
|
||||
Used memory: 4194304 KiB
|
||||
Persistent: yes
|
||||
Autostart: disable
|
||||
Autostart Once: disable
|
||||
-- kc-lab-edge
|
||||
Name: kc-lab-edge
|
||||
State: running
|
||||
CPU(s): 1
|
||||
Max memory: 1048576 KiB
|
||||
Used memory: 1048576 KiB
|
||||
Persistent: yes
|
||||
Autostart: disable
|
||||
Autostart Once: disable
|
||||
|
||||
### virsh domblklist (셋)
|
||||
-- kc-lab-1
|
||||
Target Source
|
||||
-----------------------------------------------------
|
||||
vda /var/lib/libvirt/images/kc-lab-1.qcow2
|
||||
vdb /var/lib/libvirt/images/seed-kc-lab-1.iso
|
||||
|
||||
-- kc-lab-2
|
||||
Target Source
|
||||
-----------------------------------------------------
|
||||
vda /var/lib/libvirt/images/kc-lab-2.qcow2
|
||||
vdb /var/lib/libvirt/images/seed-kc-lab-2.iso
|
||||
|
||||
-- kc-lab-edge
|
||||
Target Source
|
||||
--------------------------------------------------------
|
||||
vda /var/lib/libvirt/images/kc-lab-edge.qcow2
|
||||
vdb /var/lib/libvirt/images/seed-kc-lab-edge.iso
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
Id Name State
|
||||
-----------------------------
|
||||
9 kc-lab-edge running
|
||||
10 kc-lab-1 running
|
||||
12 kc-lab-2 running
|
||||
|
||||
Name Path
|
||||
----------------------------------------------------------------------
|
||||
base.qcow2 /var/lib/libvirt/images/base.qcow2
|
||||
kc-lab-1.qcow2 /var/lib/libvirt/images/kc-lab-1.qcow2
|
||||
kc-lab-2.qcow2 /var/lib/libvirt/images/kc-lab-2.qcow2
|
||||
kc-lab-edge.qcow2 /var/lib/libvirt/images/kc-lab-edge.qcow2
|
||||
seed-kc-lab-1.iso /var/lib/libvirt/images/seed-kc-lab-1.iso
|
||||
seed-kc-lab-2.iso /var/lib/libvirt/images/seed-kc-lab-2.iso
|
||||
seed-kc-lab-edge.iso /var/lib/libvirt/images/seed-kc-lab-edge.iso
|
||||
|
||||
<dhcp>
|
||||
<range start='192.168.122.2' end='192.168.122.254'/>
|
||||
<host mac='52:54:00:aa:bb:11' name='kc-lab-1' ip='192.168.122.11'/>
|
||||
<host mac='52:54:00:aa:bb:12' name='kc-lab-2' ip='192.168.122.12'/>
|
||||
<host mac='52:54:00:aa:bb:10' name='kc-lab-edge' ip='192.168.122.10'/>
|
||||
</dhcp>
|
||||
</ip>
|
||||
</network>
|
||||
|
||||
Filesystem Size Used Avail Use% Mounted on
|
||||
/dev/nvme0n1p3 226G 16G 199G 8% /
|
||||
@@ -0,0 +1,18 @@
|
||||
Domain 'kc-lab-edge' destroyed
|
||||
|
||||
Domain 'kc-lab-edge' has been undefined
|
||||
Volume 'vda'(/var/lib/libvirt/images/kc-lab-edge.qcow2) removed.
|
||||
Volume 'vdb'(/var/lib/libvirt/images/seed-kc-lab-edge.iso) removed.
|
||||
|
||||
Domain 'kc-lab-2' destroyed
|
||||
|
||||
Domain 'kc-lab-2' has been undefined
|
||||
Volume 'vda'(/var/lib/libvirt/images/kc-lab-2.qcow2) removed.
|
||||
Volume 'vdb'(/var/lib/libvirt/images/seed-kc-lab-2.iso) removed.
|
||||
|
||||
Domain 'kc-lab-1' destroyed
|
||||
|
||||
Domain 'kc-lab-1' has been undefined
|
||||
Volume 'vda'(/var/lib/libvirt/images/kc-lab-1.qcow2) removed.
|
||||
Volume 'vdb'(/var/lib/libvirt/images/seed-kc-lab-1.iso) removed.
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
Updated network default persistent config and live state
|
||||
Updated network default persistent config and live state
|
||||
Updated network default persistent config and live state
|
||||
--- 확인 ---
|
||||
<range start='192.168.122.2' end='192.168.122.254'/>
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
Id Name State
|
||||
--------------------
|
||||
|
||||
Name Path
|
||||
--------------------------------------------------
|
||||
base.qcow2 /var/lib/libvirt/images/base.qcow2
|
||||
|
||||
<dhcp>
|
||||
<range start='192.168.122.2' end='192.168.122.254'/>
|
||||
</dhcp>
|
||||
</ip>
|
||||
</network>
|
||||
|
||||
Filesystem Size Used Avail Use% Mounted on
|
||||
/dev/nvme0n1p3 226G 7.9G 206G 4% /
|
||||
virbr0 DOWN 192.168.122.1/24
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
xorriso 1.5.8.pl02 : RockRidge filesystem manipulator, libburnia project.
|
||||
|
||||
xorriso : FAILURE : Cannot determine attributes of source file '/home/donghyeon/workspace/cloud/meta-kc-lab-1' : No such file or directory
|
||||
종료 코드: 5
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
xorriso 1.5.8.pl02 : RockRidge filesystem manipulator, libburnia project.
|
||||
|
||||
kc-lab-1 → 종료 0
|
||||
xorriso 1.5.8.pl02 : RockRidge filesystem manipulator, libburnia project.
|
||||
|
||||
kc-lab-2 → 종료 0
|
||||
xorriso 1.5.8.pl02 : RockRidge filesystem manipulator, libburnia project.
|
||||
|
||||
kc-lab-edge → 종료 0
|
||||
-rw-r--r-- 1 donghyeon donghyeon 378880 Sep 17 13:23 seed-kc-lab-1.iso
|
||||
-rw-r--r-- 1 donghyeon donghyeon 378880 Sep 17 13:23 seed-kc-lab-2.iso
|
||||
-rw-r--r-- 1 donghyeon donghyeon 378880 Sep 17 13:23 seed-kc-lab-edge.iso
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
Vol seed-kc-lab-1.iso created
|
||||
|
||||
|
||||
Vol seed-kc-lab-2.iso created
|
||||
|
||||
|
||||
Vol seed-kc-lab-edge.iso created
|
||||
|
||||
|
||||
--- 확인 ---
|
||||
Name Path
|
||||
----------------------------------------------------------------------
|
||||
base.qcow2 /var/lib/libvirt/images/base.qcow2
|
||||
seed-kc-lab-1.iso /var/lib/libvirt/images/seed-kc-lab-1.iso
|
||||
seed-kc-lab-2.iso /var/lib/libvirt/images/seed-kc-lab-2.iso
|
||||
seed-kc-lab-edge.iso /var/lib/libvirt/images/seed-kc-lab-edge.iso
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
Updated network default persistent config and live state
|
||||
Updated network default persistent config and live state
|
||||
Updated network default persistent config and live state
|
||||
--- 확인 ---
|
||||
<range start='192.168.122.2' end='192.168.122.254'/>
|
||||
<host mac='52:54:00:aa:bb:10' name='kc-lab-edge' ip='192.168.122.10'/>
|
||||
<host mac='52:54:00:aa:bb:11' name='kc-lab-1' ip='192.168.122.11'/>
|
||||
<host mac='52:54:00:aa:bb:12' name='kc-lab-2' ip='192.168.122.12'/>
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
|
||||
Starting install...
|
||||
|
||||
Allocating 'kc-lab-1.qcow2' | 20 GB 00:00
|
||||
|
||||
Creating domain... | 00:00
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
|
||||
Starting install...
|
||||
|
||||
Allocating 'kc-lab-2.qcow2' | 20 GB 00:00
|
||||
|
||||
Creating domain... | 00:00
|
||||
Domain creation completed.
|
||||
kc-lab-2 종료 0
|
||||
|
||||
Starting install...
|
||||
|
||||
Allocating 'kc-lab-edge.qcow2' | 10 GB 00:00
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
=== virsh list --all ===
|
||||
Id Name State
|
||||
-----------------------------
|
||||
13 kc-lab-1 running
|
||||
14 kc-lab-2 running
|
||||
15 kc-lab-edge running
|
||||
|
||||
|
||||
=== DHCP 리스 ===
|
||||
Expiry Time MAC address Protocol IP address Hostname Client ID or DUID
|
||||
--------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
2026-09-17 14:24:12 52:54:00:aa:bb:10 ipv4 192.168.122.10/24 kc-lab-edge ff:56:50:4d:98:00:02:00:00:ab:11:d7:90:6d:17:fc:bf:ab:64
|
||||
2026-09-17 14:24:06 52:54:00:aa:bb:11 ipv4 192.168.122.11/24 kc-lab-1 ff:56:50:4d:98:00:02:00:00:ab:11:96:13:63:32:a6:4c:7b:ed
|
||||
2026-09-17 14:24:11 52:54:00:aa:bb:12 ipv4 192.168.122.12/24 kc-lab-2 ff:56:50:4d:98:00:02:00:00:ab:11:ef:d1:ff:8b:ff:65:e4:56
|
||||
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
=== kc-lab-1 ===
|
||||
kc-lab-1
|
||||
NAME SIZE FSTYPE LABEL MOUNTPOINT
|
||||
vda 20G
|
||||
├─vda1 19.9G ext4 /
|
||||
├─vda14 3M
|
||||
└─vda15 124M vfat /boot/efi
|
||||
vdb 370K iso9660 CIDATA
|
||||
=== kc-lab-2 ===
|
||||
kc-lab-2
|
||||
NAME SIZE FSTYPE LABEL MOUNTPOINT
|
||||
vda 20G
|
||||
├─vda1 19.9G ext4 /
|
||||
├─vda14 3M
|
||||
└─vda15 124M vfat /boot/efi
|
||||
vdb 370K iso9660 CIDATA
|
||||
=== kc-lab-edge ===
|
||||
kc-lab-edge
|
||||
NAME SIZE FSTYPE LABEL MOUNTPOINT
|
||||
vda 10G
|
||||
├─vda1 9.9G ext4 /
|
||||
├─vda14 3M
|
||||
└─vda15 124M vfat /boot/efi
|
||||
vdb 370K iso9660 CIDATA
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
=== 게스트에서 sudo 가 되나 ===
|
||||
uid=0(root) gid=0(root) groups=0(root)
|
||||
|
||||
=== 실제로 쓴 kc-lab-1.yaml 을 게스트의 cloud-init schema 에 건다 ===
|
||||
Error:
|
||||
Cloud config schema errors: users.0: {'name': 'donghyeon', 'groups': ['sudo'], 'shell': '/bin/bash', 'sudo': ['ALL=(ALL) NOPASSWD:ALL'], 'lock_passwd': False, 'plain_text_passwd': '<REDACTED 5자>', 'ssh_authorized_keys': ['ssh-ed25519 <REDACTED> test-server -> kc-lab', 'ssh-ed25519 <REDACTED> donghyeon@donghyeon-960XGK']} is not valid under any of the given schemasCloud config schema deprecations:
|
||||
|
||||
종료=1
|
||||
@@ -0,0 +1,19 @@
|
||||
Id Name State
|
||||
-----------------------------
|
||||
13 kc-lab-1 running
|
||||
14 kc-lab-2 running
|
||||
15 kc-lab-edge running
|
||||
|
||||
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
|
||||
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
|
||||
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
|
||||
It is also possible that a host key has just been changed.
|
||||
The fingerprint for the ED25519 key sent by the remote host is
|
||||
SHA256:4crUKIfcfmBFDkk5ARCqZ0z/m1AIuSjZ8Ys6ZMoNxBI.
|
||||
Please contact your system administrator.
|
||||
Add correct host key in /home/donghyeon/.ssh/known_hosts to get rid of this message.
|
||||
Offending ED25519 key in /home/donghyeon/.ssh/known_hosts:1
|
||||
Host key for 192.168.122.11 has changed and you have requested strict checking.
|
||||
Host key verification failed.
|
||||
@@ -0,0 +1,13 @@
|
||||
=== 별칭으로는 되나 ===
|
||||
kc-lab-1
|
||||
PRETTY_NAME="Debian GNU/Linux 12 (bookworm)"
|
||||
|
||||
=== known_hosts 에 무엇이 있나 ===
|
||||
# Host 192.168.122.11 found: line 1
|
||||
192.168.122.11 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBG+/wya7fn6K845Mh717dDobbgUbpTqyK1hi2qLyMGm
|
||||
|
||||
=== config 에서 IP 직접 지정에 걸리는 규칙 ===
|
||||
Host kc-lab-*
|
||||
StrictHostKeyChecking no
|
||||
UserKnownHostsFile /dev/null
|
||||
LogLevel ERROR
|
||||
@@ -0,0 +1,4 @@
|
||||
옛 키 셋 제거
|
||||
Warning: Permanently added '192.168.122.11' (ED25519) to the list of known hosts.
|
||||
kc-lab-1
|
||||
PRETTY_NAME="Debian GNU/Linux 12 (bookworm)"
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
[INFO] Finding release for channel stable
|
||||
[INFO] Using v1.36.4+k3s1 as release
|
||||
[INFO] Downloading hash https://github.com/k3s-io/k3s/releases/download/v1.36.4%2Bk3s1/sha256sum-amd64.txt
|
||||
[INFO] Downloading binary https://github.com/k3s-io/k3s/releases/download/v1.36.4%2Bk3s1/k3s
|
||||
[INFO] Verifying binary download
|
||||
[INFO] Installing k3s to /usr/local/bin/k3s
|
||||
[INFO] Skipping installation of SELinux RPM
|
||||
[INFO] Creating /usr/local/bin/kubectl symlink to k3s
|
||||
[INFO] Creating /usr/local/bin/crictl symlink to k3s
|
||||
[INFO] Creating /usr/local/bin/ctr symlink to k3s
|
||||
[INFO] Creating killall script /usr/local/bin/k3s-killall.sh
|
||||
[INFO] Creating uninstall script /usr/local/bin/k3s-uninstall.sh
|
||||
[INFO] env: Creating environment file /etc/systemd/system/k3s.service.env
|
||||
[INFO] systemd: Creating service file /etc/systemd/system/k3s.service
|
||||
[INFO] systemd: Enabling k3s unit
|
||||
Created symlink /etc/systemd/system/multi-user.target.wants/k3s.service → /etc/systemd/system/k3s.service.
|
||||
[INFO] systemd: Starting k3s
|
||||
=== 종료 0 ===
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
active
|
||||
NAME STATUS ROLES AGE VERSION
|
||||
kc-lab-1 Ready control-plane 44s v1.36.4+k3s1
|
||||
@@ -0,0 +1,7 @@
|
||||
=== 고치기 전 server 줄 ===
|
||||
server: https://127.0.0.1:6443
|
||||
=== 고친 뒤 ===
|
||||
server: https://192.168.122.11:6443
|
||||
=== kubectl get nodes ===
|
||||
NAME STATUS ROLES AGE VERSION
|
||||
kc-lab-1 Ready control-plane 52s v1.36.4+k3s1
|
||||
@@ -0,0 +1,4 @@
|
||||
109 node-token
|
||||
scp OK
|
||||
lab host 사본 지움
|
||||
109 /home/donghyeon/node-token
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
[INFO] Finding release for channel stable
|
||||
[INFO] Using v1.36.4+k3s1 as release
|
||||
[INFO] Downloading hash https://github.com/k3s-io/k3s/releases/download/v1.36.4%2Bk3s1/sha256sum-amd64.txt
|
||||
[INFO] Downloading binary https://github.com/k3s-io/k3s/releases/download/v1.36.4%2Bk3s1/k3s
|
||||
[INFO] Verifying binary download
|
||||
[INFO] Installing k3s to /usr/local/bin/k3s
|
||||
[INFO] Skipping installation of SELinux RPM
|
||||
[INFO] Creating /usr/local/bin/kubectl symlink to k3s
|
||||
[INFO] Creating /usr/local/bin/crictl symlink to k3s
|
||||
[INFO] Creating /usr/local/bin/ctr symlink to k3s
|
||||
[INFO] Creating killall script /usr/local/bin/k3s-killall.sh
|
||||
[INFO] Creating uninstall script /usr/local/bin/k3s-agent-uninstall.sh
|
||||
[INFO] env: Creating environment file /etc/systemd/system/k3s-agent.service.env
|
||||
[INFO] systemd: Creating service file /etc/systemd/system/k3s-agent.service
|
||||
[INFO] systemd: Enabling k3s-agent unit
|
||||
Created symlink /etc/systemd/system/multi-user.target.wants/k3s-agent.service → /etc/systemd/system/k3s-agent.service.
|
||||
[INFO] systemd: Starting k3s-agent
|
||||
=== 종료 0 ===
|
||||
토큰파일 지움
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
=== kubectl get nodes -o wide ===
|
||||
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
|
||||
kc-lab-1 Ready control-plane 2m8s v1.36.4+k3s1 192.168.122.11 <none> Debian GNU/Linux 12 (bookworm) 6.1.0-53-cloud-amd64 (amd64) containerd://2.3.4-k3s1.36
|
||||
kc-lab-2 Ready <none> 52s v1.36.4+k3s1 192.168.122.12 <none> Debian GNU/Linux 12 (bookworm) 6.1.0-53-cloud-amd64 (amd64) containerd://2.3.4-k3s1.36
|
||||
|
||||
=== kube-system ===
|
||||
coredns-54996dc9b4-x8c24 Running
|
||||
helm-install-traefik-crd-v5m5f Completed
|
||||
helm-install-traefik-rjnbm Completed
|
||||
local-path-provisioner-77b9867795-j8qkb Running
|
||||
metrics-server-6dc596dfb8-4dkmg Running
|
||||
svclb-traefik-72a92206-5jpxg Running
|
||||
svclb-traefik-72a92206-lpswx Running
|
||||
traefik-59b7647586-t8fc7 Running
|
||||
|
||||
=== StorageClass ===
|
||||
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
|
||||
local-path (default) rancher.io/local-path Delete WaitForFirstConsumer false 2m3s
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
설치 종료 0
|
||||
● nginx.service - A high performance web server and a reverse proxy server
|
||||
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; preset: enabled)
|
||||
Active: active (running) since Thu 2026-09-17 04:27:39 UTC; 1s ago
|
||||
Docs: man:nginx(8)
|
||||
Process: 1041 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
|
||||
--- ls /etc/nginx/ ---
|
||||
conf.d
|
||||
fastcgi.conf
|
||||
fastcgi_params
|
||||
koi-utf
|
||||
koi-win
|
||||
mime.types
|
||||
modules-available
|
||||
modules-enabled
|
||||
nginx.conf
|
||||
proxy_params
|
||||
scgi_params
|
||||
sites-available
|
||||
sites-enabled
|
||||
snippets
|
||||
uwsgi_params
|
||||
win-utf
|
||||
--- sites-enabled ---
|
||||
total 0
|
||||
lrwxrwxrwx 1 root root 34 Sep 17 04:27 default -> /etc/nginx/sites-available/default
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
--- sites-enabled ---
|
||||
total 0
|
||||
lrwxrwxrwx 1 root root 39 Sep 17 04:27 keycloak-lab -> /etc/nginx/sites-available/keycloak-lab
|
||||
--- nginx -t ---
|
||||
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
|
||||
nginx: configuration file /etc/nginx/nginx.conf test is successful
|
||||
reload-OK
|
||||
--- 프로세스 트리 ---
|
||||
root 1065 1 0 04:27 ? 00:00:00 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
|
||||
www-data 1066 1065 0 04:27 ? 00:00:00 nginx: worker process
|
||||
donghye+ 1093 1092 0 04:27 ? 00:00:00 bash -c sudo rm /etc/nginx/sites-enabled/default sudo cp /tmp/keycloak-lab /etc/nginx/sites-available/keycloak-lab sudo ln -s /etc/nginx/sites-available/keycloak-lab /etc/nginx/sites-enabled/keycloak-lab echo "--- sites-enabled ---"; ls -l /etc/nginx/sites-enabled/ echo "--- nginx -t ---"; sudo nginx -t 2>&1 sudo systemctl reload nginx && echo reload-OK echo "--- 프로세스 트리 ---"; ps -ef | grep "[n]ginx" | head -4
|
||||
www-data 1106 1065 0 04:27 ? 00:00:00 nginx: worker process
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
=== 3-③ nginx -t (문서는 [warn] types_hash 줄이 늘 같이 나온다고 적었다) ===
|
||||
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
|
||||
nginx: configuration file /etc/nginx/nginx.conf test is successful
|
||||
=== nginx -v ===
|
||||
bash: line 5: nginx: command not found
|
||||
=== 3-② ls -l sites-enabled ===
|
||||
total 0
|
||||
lrwxrwxrwx 1 root root 39 Sep 17 04:27 keycloak-lab -> /etc/nginx/sites-available/keycloak-lab
|
||||
=== 3-④ systemctl status nginx | head -20 ===
|
||||
● nginx.service - A high performance web server and a reverse proxy server
|
||||
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; preset: enabled)
|
||||
Active: active (running) since Thu 2026-09-17 04:27:39 UTC; 1min 23s ago
|
||||
Docs: man:nginx(8)
|
||||
Process: 1041 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
|
||||
Process: 1042 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
|
||||
Process: 1105 ExecReload=/usr/sbin/nginx -g daemon on; master_process on; -s reload (code=exited, status=0/SUCCESS)
|
||||
Main PID: 1065 (nginx)
|
||||
Tasks: 2 (limit: 1141)
|
||||
Memory: 1.8M
|
||||
CPU: 12ms
|
||||
CGroup: /system.slice/nginx.service
|
||||
├─1065 "nginx: master process /usr/sbin/nginx -g daemon on; master_process on;"
|
||||
└─1106 "nginx: worker process"
|
||||
=== 확인 ① Traefik 직접 (기대 404) ===
|
||||
% Total % Received % Xferd Average Speed Time Time Time Current
|
||||
Dload Upload Total Spent Left Speed
|
||||
|
||||
0 0 0 0 0 0 0 0 0HTTP/1.1 404 Not Found
|
||||
Content-Type: text/plain; charset=utf-8
|
||||
X-Content-Type-Options: nosniff
|
||||
Date: Thu, 17 Sep 2026 04:29:02 GMT
|
||||
Content-Length: 19
|
||||
|
||||
=== 두 노드 비교 ===
|
||||
404
|
||||
404
|
||||
=== 확인 ② 엣지 nginx 직접 (기대 301) ===
|
||||
404
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
=== 엣지 응답 헤더 전체 (Server: 가 누구인가) ===
|
||||
HTTP/1.1 404 Not Found
|
||||
Server: nginx/1.22.1
|
||||
Date: Thu, 17 Sep 2026 04:29:13 GMT
|
||||
Content-Type: text/plain; charset=utf-8
|
||||
Content-Length: 19
|
||||
Connection: keep-alive
|
||||
X-Content-Type-Options: nosniff
|
||||
|
||||
|
||||
=== 엣지 응답 본문 ===
|
||||
404 page not found
|
||||
|
||||
=== 문서 전제: which nginx 가 미설치 판정에 쓰인다. 설치된 지금 무엇이 나오나 ===
|
||||
which nginx -> (exit 1)
|
||||
nginx -v -> bash: line 3: nginx: command not found
|
||||
sudo nginx -v-> nginx version: nginx/1.22.1
|
||||
PATH -> /usr/local/bin:/usr/bin:/bin:/usr/games
|
||||
dpkg 판 ->
|
||||
=== nginx -t 를 세 번 더 — [warn] 이 정말 안 나오나 ===
|
||||
0
|
||||
0
|
||||
0
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
=== 4번 치기 전 호스트 상태 ===
|
||||
--- tailscale0 있나 ---
|
||||
3: tailscale0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1280 qdisc fq_codel state UNKNOWN group default qlen 500
|
||||
inet 100.83.212.4/32 scope global tailscale0
|
||||
valid_lft forever preferred_lft forever
|
||||
--- 80/443 을 듣는 프로세스 ---
|
||||
sudo: a terminal is required to read the password; either use ssh's -t option or configure an askpass helper
|
||||
sudo: a password is required
|
||||
--- 기존 lab_edge 테이블 ---
|
||||
sudo: a terminal is required to read the password; either use ssh's -t option or configure an askpass helper
|
||||
sudo: a password is required
|
||||
--- 기존 파일 ---
|
||||
-rw-r--r-- 1 root root 384 Sep 11 11:00 /etc/nftables.d/lab-edge-dnat.nft
|
||||
-rw-r--r-- 1 root root 332 Sep 11 10:52 /etc/systemd/system/lab-edge-dnat.service
|
||||
--- 유닛 상태 ---
|
||||
active
|
||||
enabled
|
||||
+36
@@ -0,0 +1,36 @@
|
||||
=== /etc/nftables.d/lab-edge-dnat.nft (실물) ===
|
||||
#!/usr/sbin/nft -f
|
||||
table ip lab_edge
|
||||
delete table ip lab_edge
|
||||
|
||||
table ip lab_edge {
|
||||
chain prerouting {
|
||||
type nat hook prerouting priority dstnat; policy accept;
|
||||
iifname "tailscale0" tcp dport {80, 443} dnat to 192.168.122.10
|
||||
}
|
||||
|
||||
chain forward {
|
||||
type filter hook forward priority filter - 10; policy accept;
|
||||
ip daddr 192.168.122.10 tcp dport {80, 443} ct state new accept
|
||||
}
|
||||
}
|
||||
=== /etc/systemd/system/lab-edge-dnat.service (실물) ===
|
||||
[Unit]
|
||||
Description=Lab edge DNAT (tailnet :80/:443 -> kc-lab-edge)
|
||||
After=network-online.target libvirtd.service
|
||||
Wants=network-online.target
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
RemainAfterExit=yes
|
||||
ExecStart=/usr/sbin/nft -f /etc/nftables.d/lab-edge-dnat.nft
|
||||
ExecStop=/usr/sbin/nft delete table ip lab_edge
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
|
||||
=== 유닛 ===
|
||||
active
|
||||
enabled
|
||||
=== sudo 는 비밀번호를 요구한다 (4·5번을 그대로 칠 수 없다) ===
|
||||
sudo: a password is required
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
=== [워크스테이션] auth.hyeonworks.com 이 어디로 도나 ===
|
||||
100.83.212.4 auth.hyeonworks.com
|
||||
=== 확인 ③ 밖에서 도메인으로 (문서 기대: 301 https://auth.hyeonworks.com/) ===
|
||||
curl: (7) Failed to connect to auth.hyeonworks.com port 80 after 54 ms: Couldn't connect to server
|
||||
000
|
||||
=== 같은 것을 tailnet 주소로 직접 (DNS 를 건너뛴다) ===
|
||||
curl: (7) Failed to connect to 100.83.212.4 port 80 after 2 ms: Couldn't connect to server
|
||||
000
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
=== 04 확인 ① dig ===
|
||||
bash: line 3: dig: command not found
|
||||
(dig 이 없다: 127)
|
||||
=== 04 확인 ② nginx -v (문서가 그대로 적은 형태) ===
|
||||
bash: line 5: nginx: command not found
|
||||
=== 같은 것을 sudo 로 ===
|
||||
nginx version: nginx/1.22.1
|
||||
=== 04 1-① certbot 설치 ===
|
||||
Created symlink /etc/systemd/system/timers.target.wants/certbot.timer → /lib/systemd/system/certbot.timer.
|
||||
|
||||
Setting up python3-lxml:amd64 (4.9.2-1+b1) ...
|
||||
Setting up python3-certbot-dns-cloudflare (2.0.0-1) ...
|
||||
Processing triggers for man-db (2.11.2-2) ...
|
||||
Processing triggers for libc-bin (2.36-9+deb12u14) ...
|
||||
=== 04 1-② 문서가 적은 형태 그대로 (일반 사용자) ===
|
||||
* dns-cloudflare
|
||||
* standalone
|
||||
* webroot
|
||||
(exit 0)
|
||||
=== 같은 것을 sudo 로 ===
|
||||
* dns-cloudflare
|
||||
* standalone
|
||||
* webroot
|
||||
(exit 0)
|
||||
=== 일반 사용자로 쳤을 때 stderr 에 무엇이 나오나 ===
|
||||
|
||||
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
* dns-cloudflare
|
||||
Description: Obtain certificates using a DNS TXT record (if you are using
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
=== 처방 후보 A: getent (기본 설치) ===
|
||||
100.83.212.4 auth.hyeonworks.com
|
||||
(exit 0)
|
||||
=== 처방 후보 B: dnsutils 를 깔고 dig ===
|
||||
Setting up dnsutils (1:9.18.49-1~deb12u2) ...
|
||||
Processing triggers for man-db (2.11.2-2) ...
|
||||
100.83.212.4
|
||||
(exit 0)
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
=== 05 확인 ① 저장소 루트에서 매니페스트가 보이나 ===
|
||||
a1-block-jgroups-transport.yaml
|
||||
b7-oauth2-proxy.yaml
|
||||
bff-redis.yaml
|
||||
echo-network-policy.yaml
|
||||
echo.yaml
|
||||
keycloak-cluster.yaml
|
||||
observability.yaml
|
||||
traefik-forwarded-headers.yaml
|
||||
=== 05 확인 ② 앞 단계의 404 tls=0 이 그대로인가 ===
|
||||
000 tls=0
|
||||
=== kubectl 이 도나 ===
|
||||
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
|
||||
kc-lab-1 Ready control-plane 9m12s v1.36.4+k3s1 192.168.122.11 <none> Debian GNU/Linux 12 (bookworm) 6.1.0-53-cloud-amd64 (amd64) containerd://2.3.4-k3s1.36
|
||||
kc-lab-2 Ready <none> 7m56s v1.36.4+k3s1 192.168.122.12 <none> Debian GNU/Linux 12 (bookworm) 6.1.0-53-cloud-amd64 (amd64) containerd://2.3.4-k3s1.36
|
||||
@@ -0,0 +1,14 @@
|
||||
=== 05 1-② kubectl apply ===
|
||||
namespace/keycloak-lab created
|
||||
secret/keycloak-lab-secrets created
|
||||
persistentvolumeclaim/postgres-data created
|
||||
deployment.apps/postgres created
|
||||
service/postgres created
|
||||
statefulset.apps/keycloak created
|
||||
service/keycloak-headless created
|
||||
service/keycloak created
|
||||
ingress.networking.k8s.io/keycloak created
|
||||
=== 05 2-① rollout status (문서: partitioned roll out complete: 2 new pods...) ===
|
||||
Waiting for 2 pods to be ready...
|
||||
Waiting for 1 pods to be ready...
|
||||
partitioned roll out complete: 2 new pods have been updated...
|
||||
+53
@@ -0,0 +1,53 @@
|
||||
=== 05 판정 ①-① get all ===
|
||||
NAME READY STATUS RESTARTS AGE
|
||||
pod/keycloak-0 1/1 Running 0 68s
|
||||
pod/keycloak-1 1/1 Running 0 68s
|
||||
pod/postgres-7b474b88c8-s6vdh 1/1 Running 0 68s
|
||||
|
||||
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
|
||||
service/keycloak ClusterIP 10.43.173.152 <none> 8080/TCP 69s
|
||||
service/keycloak-headless ClusterIP None <none> 8080/TCP,9000/TCP 69s
|
||||
service/postgres ClusterIP 10.43.38.64 <none> 5432/TCP 69s
|
||||
|
||||
NAME READY UP-TO-DATE AVAILABLE AGE
|
||||
deployment.apps/postgres 1/1 1 1 69s
|
||||
|
||||
NAME DESIRED CURRENT READY AGE
|
||||
replicaset.apps/postgres-7b474b88c8 1 1 1 69s
|
||||
|
||||
NAME READY AGE
|
||||
statefulset.apps/keycloak 2/2 69s
|
||||
=== 05 판정 ①-② get secret,configmap,pvc,ingress ===
|
||||
NAME TYPE DATA AGE
|
||||
secret/keycloak-lab-secrets Opaque 2 69s
|
||||
|
||||
NAME DATA AGE
|
||||
configmap/kube-root-ca.crt 1 69s
|
||||
|
||||
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE
|
||||
persistentvolumeclaim/postgres-data Bound pvc-fe269834-3dd1-4b1f-82f6-a53413310a30 5Gi RWO local-path <unset> 69s
|
||||
|
||||
NAME CLASS HOSTS ADDRESS PORTS AGE
|
||||
ingress.networking.k8s.io/keycloak traefik auth.hyeonworks.com 192.168.122.11,192.168.122.12 80 69s
|
||||
=== 05 판정 ② postgres 사슬 ===
|
||||
NAME DESIRED CURRENT READY AGE
|
||||
replicaset.apps/postgres-7b474b88c8 1 1 1 69s
|
||||
|
||||
NAME READY STATUS RESTARTS AGE
|
||||
pod/postgres-7b474b88c8-s6vdh 1/1 Running 0 69s
|
||||
--- Deployment 는 라벨 없이 ---
|
||||
NAME READY UP-TO-DATE AVAILABLE AGE
|
||||
postgres 1/1 1 1 69s
|
||||
--- keycloak 쪽 ---
|
||||
NAME READY STATUS RESTARTS AGE
|
||||
pod/keycloak-0 1/1 Running 0 69s
|
||||
pod/keycloak-1 1/1 Running 0 69s
|
||||
=== 05 판정 ③ Secret 길이 (값은 안 찍는다) ===
|
||||
Data
|
||||
====
|
||||
KC_BOOTSTRAP_ADMIN_PASSWORD: 19 bytes
|
||||
POSTGRES_PASSWORD: 22 bytes
|
||||
--- ② 길이만 ---
|
||||
22
|
||||
--- ③ 파드 안에서 길이만 ---
|
||||
길이=19
|
||||
+39
@@ -0,0 +1,39 @@
|
||||
=== 판정 ③ 끝 — 환경변수가 어느 Secret 에서 왔나 ===
|
||||
KC_DB
|
||||
KC_DB_URL
|
||||
KC_DB_USERNAME
|
||||
KC_DB_PASSWORD keycloak-lab-secrets
|
||||
KC_HOSTNAME
|
||||
KC_HOSTNAME_STRICT
|
||||
KC_PROXY_HEADERS
|
||||
KC_HTTP_ENABLED
|
||||
KC_HEALTH_ENABLED
|
||||
KC_METRICS_ENABLED
|
||||
JAVA_OPTS_KC_HEAP
|
||||
KC_BOOTSTRAP_ADMIN_USERNAME
|
||||
KC_BOOTSTRAP_ADMIN_PASSWORD keycloak-lab-secrets
|
||||
=== 판정 ④ Endpoints ===
|
||||
Endpoints: 10.42.0.9:8080,10.42.1.3:8080
|
||||
--- EndpointSlice ---
|
||||
NAME ADDRESSTYPE PORTS ENDPOINTS AGE
|
||||
keycloak-lxk8h IPv4 8080 10.42.0.9,10.42.1.3 82s
|
||||
--- ready 까지 ---
|
||||
10.42.0.9 true
|
||||
10.42.1.3 true
|
||||
--- 문서가 쓰지 말라는 형태를 실제로 쳐 본다 ---
|
||||
Warning: v1 Endpoints is deprecated in v1.33+; use discovery.k8s.io/v1 EndpointSlice
|
||||
NAME ENDPOINTS AGE
|
||||
keycloak 10.42.0.9:8080,10.42.1.3:8080 82s
|
||||
keycloak-headless 10.42.0.9:8080,10.42.1.3:8080,10.42.0.9:9000 + 1 more... 82s
|
||||
=== 판정 ⑤ PVC ===
|
||||
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE
|
||||
postgres-data Bound pvc-fe269834-3dd1-4b1f-82f6-a53413310a30 5Gi RWO local-path <unset> 82s
|
||||
=== 판정 ⑥ 로그 ===
|
||||
2026-09-17 04:35:25,386 INFO [org.infinispan.CLUSTER] (executor-thread-1) ISPN000094: Received new cluster view for channel ISPN: [keycloak-1-3159(v=16.0.12)|1] (2) [keycloak-1-3159(v=16.0.12), keycloak-0-13057(v=16.0.12)]
|
||||
=== 판정 ⑥ 테이블 ===
|
||||
name | ip
|
||||
------------------+----------------
|
||||
keycloak-1-3159 | 10.42.0.9:7800
|
||||
keycloak-0-13057 | 10.42.1.3:7800
|
||||
(2 rows)
|
||||
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
=== 판정 ⑥ 지표 — Prometheus 가 아직 없을 때의 임시 파드 형태 ===
|
||||
K0=10.42.1.3
|
||||
vendor_cluster_size{cache_manager="keycloak",node="keycloak-0-13057"} 2.0
|
||||
=== 문서가 적은 대로 Keycloak 컨테이너 안에는 curl 이 없나 ===
|
||||
sh: line 1: curl: command not found
|
||||
command terminated with exit code 127
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
=== 판정 ⑦ 밖에서 (문서 기대 200) — 04 를 안 했으니 443 이 없다 ===
|
||||
000
|
||||
--- 같은 것을 읽는 형태로 ---
|
||||
curl: (7) Failed to connect to auth.hyeonworks.com:443 after 2 ms: Could not connect to server
|
||||
=== 04 를 건너뛴 상태에서 Ingress~파드까지는 이어졌나 (엣지에 80 으로, Host 를 실어) ===
|
||||
200
|
||||
--- Traefik 에 직접 ---
|
||||
200
|
||||
=== 판정 ⑧ 세션 표 (로그인 전) ===
|
||||
offline_flag | count
|
||||
--------------+-------
|
||||
(0 rows)
|
||||
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
=== 06 1-② apply + rollout ===
|
||||
namespace/observability created
|
||||
serviceaccount/prometheus created
|
||||
clusterrole.rbac.authorization.k8s.io/prometheus created
|
||||
clusterrolebinding.rbac.authorization.k8s.io/prometheus created
|
||||
configmap/prometheus-config created
|
||||
persistentvolumeclaim/prometheus-data created
|
||||
deployment.apps/prometheus created
|
||||
service/prometheus created
|
||||
daemonset.apps/node-exporter created
|
||||
service/node-exporter created
|
||||
deployment.apps/grafana created
|
||||
configmap/grafana-datasources created
|
||||
service/grafana created
|
||||
ingress.networking.k8s.io/grafana created
|
||||
Waiting for deployment "prometheus" rollout to finish: 0 of 1 updated replicas are available...
|
||||
deployment "prometheus" successfully rolled out
|
||||
=== 06 판정 ①-① get pods ===
|
||||
NAME READY STATUS RESTARTS AGE
|
||||
grafana-845b5678cf-bblgz 0/1 Running 0 30s
|
||||
node-exporter-82mmn 1/1 Running 0 30s
|
||||
node-exporter-g688j 1/1 Running 0 30s
|
||||
prometheus-6774f94f7c-pj8w9 1/1 Running 0 30s
|
||||
=== 06 판정 ①-② get pods -o wide ===
|
||||
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
|
||||
grafana-845b5678cf-bblgz 0/1 Running 0 30s 10.42.0.11 kc-lab-1 <none> <none>
|
||||
node-exporter-82mmn 1/1 Running 0 30s 192.168.122.12 kc-lab-2 <none> <none>
|
||||
node-exporter-g688j 1/1 Running 0 30s 192.168.122.11 kc-lab-1 <none> <none>
|
||||
prometheus-6774f94f7c-pj8w9 1/1 Running 0 30s 10.42.0.12 kc-lab-1 <none> <none>
|
||||
+50
@@ -0,0 +1,50 @@
|
||||
=== 06 판정 ①-① 다시 (grafana 가 Ready 가 됐나) ===
|
||||
NAME READY STATUS RESTARTS AGE
|
||||
grafana-845b5678cf-bblgz 1/1 Running 0 38s
|
||||
node-exporter-82mmn 1/1 Running 0 38s
|
||||
node-exporter-g688j 1/1 Running 0 38s
|
||||
prometheus-6774f94f7c-pj8w9 1/1 Running 0 38s
|
||||
=== 06 판정 ① 스크레이프 job 이름 ===
|
||||
"job":"keycloak"
|
||||
"job":"kubelet"
|
||||
"job":"node-exporter"
|
||||
"job":"prometheus"
|
||||
=== 06 판정 ② health 와 lastError ===
|
||||
"job":"keycloak"}
|
||||
"job":"keycloak"
|
||||
"lastError":""
|
||||
"health":"unknown"
|
||||
"job":"keycloak"}
|
||||
"job":"keycloak"
|
||||
"lastError":""
|
||||
"health":"unknown"
|
||||
"job":"kubelet"}
|
||||
"job":"kubelet"
|
||||
"lastError":""
|
||||
"health":"up"
|
||||
"job":"kubelet"}
|
||||
"job":"kubelet"
|
||||
"lastError":""
|
||||
"health":"up"
|
||||
"job":"node-exporter"}
|
||||
"job":"node-exporter"
|
||||
"lastError":""
|
||||
"health":"up"
|
||||
"job":"node-exporter"}
|
||||
"job":"node-exporter"
|
||||
"lastError":""
|
||||
"health":"up"
|
||||
"job":"prometheus"}
|
||||
"job":"prometheus"}
|
||||
"lastError":""
|
||||
"health":"up"
|
||||
"job":"keycloak"}}
|
||||
"job":"keycloak"}}
|
||||
=== 06 판정 ② 권한 ===
|
||||
Warning: resource 'nodes' is not namespace scoped
|
||||
|
||||
yes
|
||||
=== 06 판정 ③ vendor_cluster_size ===
|
||||
{"status":"success","data":{"resultType":"vector","result":[{"metric":{"__name__":"vendor_cluster_size","cache_manager":"keycloak","exported_node":"keycloak-1-3159","instance":"10.42.0.9:9000","job":"keycloak","node":"kc-lab-1","pod":"keycloak-1"},"value":[1789619921.770,"2"]}]}}
|
||||
=== 06 판정 ④ up ===
|
||||
{"status":"success","data":{"resultType":"vector","result":[{"metric":{"__name__":"up","instance":"192.168.122.12:9100","job":"node-exporter","node":"kc-lab-2"},"value":[1789619921.874,"1"]},{"metric":{"__name__":"up","beta_kubernetes_io_arch":"amd64","beta_kubernetes_io_instance_type":"k3s","beta_kubernetes_io_os":"linux","instance":"kc-lab-2","job":"kubelet","kubernetes_io_arch":"amd64","kubernetes_io_hostname":"kc-lab-2","kubernetes_io_os":"linux","node_kubernetes_io_instance_type":"k3s"},"value":[1789619921.874,"1"]},{"metric":{"__name__":"up","beta_kubernetes_io_arch":"amd64","beta_kubernetes_io_instance_type":"k3s","beta_kubernetes_io_os":"linux","instance":"kc-lab-1","job":"kubelet","kubernetes_io_arch":"amd64","kubernetes_io_hostname":"kc-lab-1","kubernetes_io_os":"linux","node_kubernetes_io_instance_type":"k3s","node_role_kubernetes_io_control_plane":"true"},"value":[1789619921.874,"1"]},{"metric":{"__name__":"up","instance":"192.168.122.11:9100","job":"node-exporter","node":"kc-lab-1"},"value":[1789619921.874,"1"]},{"metric":{"__name__":"up","instance":"localhost:9090","job":"prometheus"},"value":[1789619921.874,"1"]},{"metric":{"__name__":"up","instance":"10.42.0.9:9000","job":"keycloak","node":"kc-lab-1","pod":"keycloak-1"},"value":[1789619921.874,"1"]}]}}
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
=== 90초 뒤 다시 — 스크레이프가 한 바퀴 더 돈 뒤 ===
|
||||
--- targets 의 keycloak health ---
|
||||
"job":"keycloak"}
|
||||
"job":"keycloak"
|
||||
"health":"up"
|
||||
"job":"keycloak"}
|
||||
"job":"keycloak"
|
||||
"health":"up"
|
||||
--
|
||||
"job":"keycloak"}}
|
||||
"job":"keycloak"}}
|
||||
"job":"keycloak"}}
|
||||
"job":"keycloak"}}
|
||||
"job":"keycloak"}}
|
||||
--- vendor_cluster_size ---
|
||||
{"status":"success","data":{"resultType":"vector","result":[{"metric":{"__name__":"vendor_cluster_size","cache_manager":"keycloak","exported_node":"keycloak-1-3159","instance":"10.42.0.9:9000","job":"keycloak","node":"kc-lab-1","pod":"keycloak-1"},"value":[1789620021.097,"2"]},{"metric":{"__name__":"vendor_cluster_size","cache_manager":"keycloak","exported_node":"keycloak-0-13057","instance":"10.42.1.3:9000","job":"keycloak","node":"kc-lab-2","pod":"keycloak-0"},"value":[1789620021.097,"2"]}]}}
|
||||
--- up{job=keycloak} ---
|
||||
{"status":"success","data":{"resultType":"vector","result":[{"metric":{"__name__":"up","instance":"10.42.0.9:9000","job":"keycloak","node":"kc-lab-1","pod":"keycloak-1"},"value":[1789620021.182,"1"]},{"metric":{"__name__":"up","instance":"10.42.1.3:9000","job":"keycloak","node":"kc-lab-2","pod":"keycloak-0"},"value":[1789620021.182,"1"]}]}}
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
=== 07 1-① 상한을 올리고 현재 할당을 맞춘다 ===
|
||||
Max memory: 5242880 KiB
|
||||
Used memory: 5242880 KiB
|
||||
|
||||
setmaxmem OK
|
||||
|
||||
setmem OK
|
||||
=== ② 도메인이 보는 값과 게스트가 인식한 값 ===
|
||||
Max memory: 5242880 KiB
|
||||
Used memory: 5242880 KiB
|
||||
total used free shared buff/cache available
|
||||
Mem: 4929 2587 126 2 2507 2342
|
||||
=== 되돌린다 (원래 값으로) ===
|
||||
|
||||
|
||||
원복 OK
|
||||
Max memory: 5242880 KiB
|
||||
Used memory: 5242880 KiB
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
=== dominfo 는 무엇을 보여 주나 (도메인이 돌고 있을 때) ===
|
||||
Max memory: 5242880 KiB
|
||||
Used memory: 5242880 KiB
|
||||
=== 같은 순간의 설정값 (--inactive) ===
|
||||
<memory unit='KiB'>4194304</memory>
|
||||
<currentMemory unit='KiB'>4194304</currentMemory>
|
||||
=== 돌고 있는 값 ===
|
||||
<memory unit='KiB'>5242880</memory>
|
||||
<currentMemory unit='KiB'>5242880</currentMemory>
|
||||
=== 다시 5120M 으로 맞춰 둔다 (원래 상태) ===
|
||||
|
||||
|
||||
<memory unit='KiB'>5242880</memory>
|
||||
<currentMemory unit='KiB'>5242880</currentMemory>
|
||||
+40
@@ -0,0 +1,40 @@
|
||||
=== 00 확인 ① CPU 가 확장을 내놓나 ===
|
||||
vmx
|
||||
=== 확인 ② 커널이 잡고 있나 ===
|
||||
kvm_intel 524288 11
|
||||
kvm 1490944 6 kvm_intel
|
||||
irqbypass 16384 1 kvm
|
||||
=== 1. 저장소 ===
|
||||
cloud
|
||||
keycloak-pattern
|
||||
a1-block-jgroups-transport.yaml
|
||||
b7-oauth2-proxy.yaml
|
||||
bff-redis.yaml
|
||||
echo-network-policy.yaml
|
||||
=== 2. virsh 판 ===
|
||||
12.7.0
|
||||
=== 3. libvirt 소켓과 그룹 ===
|
||||
● libvirtd.socket - libvirt legacy monolithic daemon socket
|
||||
Loaded: loaded (/usr/lib/systemd/system/libvirtd.socket; enabled; preset: disabled)
|
||||
Active: active (running) since Thu 2026-09-03 19:00:35 KST; 1 week 6 days ago
|
||||
Invocation: e330532b350d4d79ad7f31f7c6512a6c
|
||||
libvirt
|
||||
libvirt:x:962:donghyeon
|
||||
=== 4. 연결 URI ===
|
||||
LIBVIRT_DEFAULT_URI=[(비어 있음)]
|
||||
/home/donghyeon/.zshrc:2:export LIBVIRT_DEFAULT_URI=qemu:///system
|
||||
/home/donghyeon/.bashrc:11:export LIBVIRT_DEFAULT_URI=qemu:///system
|
||||
qemu:///system
|
||||
|
||||
=== 5. 기본 네트워크 ===
|
||||
Name State Autostart Persistent
|
||||
--------------------------------------------
|
||||
default active yes yes
|
||||
|
||||
=== 확인 ① virsh 가 sudo 없이 통과하나 ===
|
||||
Id Name State
|
||||
-----------------------------
|
||||
13 kc-lab-1 running
|
||||
15 kc-lab-edge running
|
||||
16 kc-lab-2 running
|
||||
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
=== rc 파일이 비대화형 ssh 에서 읽히나 ===
|
||||
비대화형: LIBVIRT_DEFAULT_URI=[(비어 있음)]
|
||||
=== 그런데도 virsh 가 system 을 보는 까닭 ===
|
||||
-rw-r--r-- 1 root root 547 Sep 1 19:16 /etc/libvirt/libvirt.conf
|
||||
-rw-r--r-- 1 donghyeon donghyeon 31 Sep 9 13:42 /home/donghyeon/.config/libvirt/libvirt.conf
|
||||
/home/donghyeon/.config/libvirt/libvirt.conf:uri_default = "qemu:///system"
|
||||
/etc/libvirt/libvirt.conf:# (@uri_default also prevents probing of the hypervisor driver).
|
||||
/etc/libvirt/libvirt.conf:#uri_default = "qemu:///system"
|
||||
=== virsh 가 지금 무엇을 보나 ===
|
||||
qemu:///system
|
||||
|
||||
=== 대화형 셸에서는 rc 가 읽힌다 ===
|
||||
대화형: LIBVIRT_DEFAULT_URI=qemu:///system
|
||||
@@ -0,0 +1,51 @@
|
||||
2026-09-17 에 test-server 를 문서대로 철거하고 다시 세운 기록.
|
||||
|
||||
문서가 맞는지 실물로 확인하는 것이 목적이라, 명령을 고쳐 치지 않고 **문서에 적힌
|
||||
그대로** 쳤다. 그래서 실패한 출력도 그대로 들어 있다 — 06 이 그것이다.
|
||||
|
||||
| 파일 | 무엇 |
|
||||
|---|---|
|
||||
| 01 | 철거 전 호스트 상태 전부 |
|
||||
| 02 | 철거 문서의 「지우기 전에 먼저 본다」 |
|
||||
| 03 | 철거 1단계 — 게스트 셋 |
|
||||
| 04 | 철거 2단계 — DHCP 예약 셋 |
|
||||
| 05 | 철거 확인표 다섯 줄 |
|
||||
| 06 | **구축 5번을 문서 그대로 쳤다 → 실패.** meta 파일 이름에 `.yaml` 이 빠져 있다 |
|
||||
| 07 | 이름을 고치고 세 장을 구웠다. 문서에는 한 장 굽는 절만 있다 |
|
||||
| 08 | 시드 볼륨 셋 업로드 |
|
||||
| 09 | DHCP 예약 셋 |
|
||||
| 10~11 | `virt-install` 세 대 |
|
||||
| 12 | 부팅 뒤 리스 — 셋 다 예약 주소를 받았다 |
|
||||
| 13 | 게스트 SSH 와 `vdb` 가 `iso9660 CIDATA` 인 것 |
|
||||
| 14 | `cloud-init schema` 는 `sudo:` 리스트형을 거부하는데 런타임은 받는다 |
|
||||
| 15 | **k3s 사전 확인이 실패.** `REMOTE HOST IDENTIFICATION HAS CHANGED!` |
|
||||
| 16 | 별칭은 되고 IP 직접 지정은 막힌다 — `Host kc-lab-*` 가 IP 에 안 걸린다 |
|
||||
| 17 | 옛 키를 지우고 다시 |
|
||||
| 18~19 | k3s server 설치와 확인 |
|
||||
| 20 | kubeconfig 를 lab host 로 |
|
||||
| 21~22 | 토큰 전달과 agent 설치 |
|
||||
| 23 | 2노드 클러스터 확인 |
|
||||
|
||||
비밀은 옮기지 않았다. 14 에 평문 비밀번호와 공개키가 찍혀 나와 `<REDACTED>` 로
|
||||
가렸고, 가린 자리에 길이만 남겼다.
|
||||
25-edge-nginx-config.txt 03 1-④·2·3 — sites-enabled/default 를 지우고 keycloak-lab 을 써서 링크·nginx -t·reload 까지
|
||||
26-edge-nginx-verify.txt 03 3-②③④ 와 층 ①② — nginx -t 가 두 줄이다([warn] 없음), nginx -v 가 command not found, 층 ② 가 404
|
||||
27-edge-doc-mismatch.txt which nginx 가 깔린 상태에서도 빈손인 것 · PATH · sudo nginx -v · nginx -t 3회 warn 0
|
||||
28-host-state-before-dnat.txt 03 4번 치기 전 호스트 — tailscale0 있음, DNAT 파일과 유닛이 2026-09-11 자로 이미 있음, 호스트 sudo 는 비밀번호를 묻는다
|
||||
29-host-dnat-files.txt 호스트에 깔려 있는 .nft 와 유닛 원문 — forward 체인이 남아 있고 ExecStartPost 가 없다 (문서·저장소 원본과 다르다)
|
||||
30-layer3-from-workstation.txt 03 층 ③ 을 밖에서 — curl: (7) Failed to connect. 29 의 ExecStartPost 누락이 그대로 드러난 자리
|
||||
31-cert-doc-precheck.txt 04 확인 ①② 와 1번 — dig 이 게스트에 없다, nginx -v 가 sudo 없이는 안 된다, certbot plugins 세 줄은 문서대로
|
||||
32-cert-doc-dig-remedy.txt 처방 검증 — getent hosts 와 dnsutils 설치 뒤의 dig 이 같은 주소를 낸다
|
||||
33-keycloak-precheck.txt 05 확인 ①② — 매니페스트 목록, 000 tls=0 (연결이 안 돼도 tls=0 이 찍힌다), 2노드 Ready
|
||||
34-keycloak-apply.txt 05 1-②·2-① — apply 출력 9줄과 rollout status. Waiting for … 줄이 먼저 나온다
|
||||
35-keycloak-verify-1-3.txt 05 판정 ①~③ — get all·get secret,configmap,pvc,ingress·사슬·Secret 길이 19/22/19 (값은 안 찍었다)
|
||||
36-keycloak-verify-4-6.txt 05 판정 ④~⑥ — Endpoints 둘, PVC 가 postgres-data 하나, ISPN000094 에 (v=16.0.12), jgroups_ping 2행
|
||||
37-keycloak-cluster-size.txt 05 판정 ⑥ 지표 — 임시 파드가 읽은 vendor_cluster_size 2.0, Keycloak 안에 curl 이 없다(exit 127)
|
||||
38-keycloak-verify-7-8.txt 05 판정 ⑦⑧ — 밖에서는 000(04 미실시), Host 헤더를 실은 80 은 엣지·Traefik 둘 다 200, 세션 표 0행
|
||||
39-observability-apply.txt 06 1·2 — apply 출력, rollout, 파드 네 줄(38초에 grafana 가 0/1)
|
||||
40-observability-verify.txt 06 판정 ①~④ — job 네 개, health 가 unknown 인 keycloak 둘, can-i 의 경고 줄, 원소 하나뿐인 cluster_size
|
||||
41-observability-cluster-size-retry.txt 90초 뒤 다시 — health 가 up 이 되고 원소 둘 다 2. node/pod/exported_node 세 라벨이 다른 것을 말한다
|
||||
42-power-cycle-memory.txt 07 1번 — setmaxmem/setmem --config 뒤 dominfo 가 안 바뀐다. 게스트 free -m 도 옛 값
|
||||
43-dominfo-vs-config.txt 같은 순간의 dominfo(5242880) 와 dumpxml --inactive(4194304). 바꾼 것이 들어갔는지는 --inactive 가 답한다
|
||||
44-host-prep-checks.txt 00 의 확인 명령 전부 — vmx, kvm 모듈 셋, 저장소, virsh 12.7.0, libvirtd.socket, libvirt 그룹, default 네트워크, sudo 없는 virsh list
|
||||
45-libvirt-uri-mechanism.txt rc 파일은 비대화형 ssh 에서 안 읽힌다. 그런데도 되는 까닭은 ~/.config/libvirt/libvirt.conf 의 uri_default
|
||||
Reference in New Issue
Block a user