<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[Devmes's Tech BLOG]]></title><description><![CDATA[Devmes's Tech BLOG]]></description><link>https://devmes.com/</link><image><url>https://devmes.com/favicon.png</url><title>Devmes&apos;s Tech BLOG</title><link>https://devmes.com/</link></image><generator>Ghost 5.2</generator><lastBuildDate>Sat, 04 Jul 2026 19:44:25 GMT</lastBuildDate><atom:link href="https://devmes.com/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Kubernetes 기반 CI/CD 구성 요소 정리]]></title><description><![CDATA[Git 저장소, Tekton, Argo CD, Argo Rollouts, Harbor, SonarQube, Trivy, OAuth2 Proxy를 오픈소스 기준으로 설명하고 Flux, Jenkins, Flagger, Kyverno, Sigstore 같은 대체/보완 흐름을 함께 정리했습니다.]]></description><link>https://devmes.com/kubernetes-cicd-trend-components/</link><guid isPermaLink="false">6a3b9ae781de1a000182fb8f</guid><category><![CDATA[CI/CD]]></category><category><![CDATA[DevOps]]></category><category><![CDATA[Kubernetes]]></category><category><![CDATA[GitOps]]></category><category><![CDATA[Platform Engineering]]></category><dc:creator><![CDATA[devmes]]></dc:creator><pubDate>Wed, 24 Jun 2026 08:52:55 GMT</pubDate><content:encoded><![CDATA[<p>Kubernetes &#xAE30;&#xBC18; CI/CD &#xD50C;&#xB7AB;&#xD3FC;&#xC740; &#xB2E8;&#xC21C;&#xD788; Jenkins &#xB300;&#xCCB4; &#xB3C4;&#xAD6C;&#xB97C; &#xBAA8;&#xC544; &#xB454; &#xAD6C;&#xC870;&#xAC00; &#xC544;&#xB2D9;&#xB2C8;&#xB2E4;. Git &#xC800;&#xC7A5;&#xC18C;, Tekton, Argo CD, Argo Rollouts, Harbor, SonarQube, Trivy, OAuth2 Proxy &#xAC19;&#xC740; &#xAD6C;&#xC131; &#xC694;&#xC18C;&#xAC00; &#xC5ED;&#xD560;&#xC744; &#xB098;&#xB204;&#xACE0;, &#xC774; &#xC870;&#xD569;&#xC740; Kubernetes-native pipeline, GitOps, supply-chain provenance, SBOM, progressive delivery, SSO &#xBCF4;&#xD638; &#xC6B4;&#xC601; &#xCF58;&#xC194;&#xACFC; &#xB9DE;&#xB2FF;&#xC544; &#xC788;&#xC2B5;&#xB2C8;&#xB2E4;.</p><p>&#xBAA9;&#xD45C;&#xB294; &#xB3C4;&#xAD6C; &#xC774;&#xB984;&#xC744; &#xB9CE;&#xC774; &#xB298;&#xC5B4;&#xB193;&#xB294; &#xAC83;&#xC774; &#xC544;&#xB2C8;&#xB77C;, &#xC774; &#xC870;&#xD569;&#xC774; &#xC65C; &#xC694;&#xC998; &#xD50C;&#xB7AB;&#xD3FC; &#xC5D4;&#xC9C0;&#xB2C8;&#xC5B4;&#xB9C1; &#xD750;&#xB984;&#xACFC; &#xB9DE;&#xB294;&#xC9C0; &#xBCF4;&#xB294; &#xAC83;&#xC785;&#xB2C8;&#xB2E4;. CI&#xB294; Tekton &#xCABD;&#xC73C;&#xB85C;, CD&#xB294; Argo CD&#xC640; Rollouts &#xCABD;&#xC73C;&#xB85C;, registry&#xB294; Harbor &#xAE30;&#xBC18; trust hub &#xCABD;&#xC73C;&#xB85C; &#xC5ED;&#xD560;&#xC774; &#xB098;&#xB258;&#xACE0; &#xC788;&#xC2B5;&#xB2C8;&#xB2E4;.</p><h2 id="1-kubernetes-%EA%B8%B0%EB%B0%98-cicd%EC%97%90%EC%84%9C-%EC%9E%90%EC%A3%BC-%EC%A1%B0%ED%95%A9%EB%90%98%EB%8A%94-%EA%B5%AC%EC%84%B1">1. Kubernetes &#xAE30;&#xBC18; CI/CD&#xC5D0;&#xC11C; &#xC790;&#xC8FC; &#xC870;&#xD569;&#xB418;&#xB294; &#xAD6C;&#xC131;</h2><!--kg-card-begin: html--><table>
 <thead><tr><th>&#xC601;&#xC5ED;</th><th>&#xCEF4;&#xD3EC;&#xB10C;&#xD2B8;</th><th>&#xD604;&#xC7AC; &#xC5ED;&#xD560;</th><th>&#xD2B8;&#xB80C;&#xB4DC; &#xBC29;&#xD5A5;</th></tr></thead>
 <tbody>
 <tr><td>&#xC18C;&#xC2A4;</td><td>Git forge</td><td>&#xC18C;&#xC2A4; &#xC800;&#xC7A5;&#xC18C;, &#xB9AC;&#xBDF0;, webhook/OIDC &#xC5F0;&#xB3D9;</td><td>Git source of truth, lightweight forge, SSO &#xC911;&#xC2EC; &#xC6B4;&#xC601;</td></tr>
 <tr><td>CI &#xC2E4;&#xD589;</td><td>Tekton Pipelines / Triggers / Catalog</td><td>Kubernetes &#xC704;&#xC5D0;&#xC11C; Task, Pipeline, PipelineRun &#xC2E4;&#xD589;</td><td>Kubernetes-native CI, &#xC7AC;&#xC0AC;&#xC6A9; &#xAC00;&#xB2A5;&#xD55C; pipeline catalog</td></tr>
 <tr><td>Pipeline &#xC7AC;&#xC0AC;&#xC6A9;</td><td>Tekton Resolvers</td><td>&#xC6D0;&#xACA9; Task/Pipeline &#xCC38;&#xC870; &#xAE30;&#xBC18;</td><td>ClusterTask &#xACE0;&#xC815;&#xC5D0;&#xC11C; Git/OCI &#xAE30;&#xBC18; remote resolution&#xC73C;&#xB85C; &#xC774;&#xB3D9;</td></tr>
 <tr><td>&#xC99D;&#xAC70;/&#xAC10;&#xC0AC;</td><td>Tekton Chains / Results</td><td>provenance, &#xC2E4;&#xD589; &#xACB0;&#xACFC; &#xC800;&#xC7A5; &#xAE30;&#xBC18;</td><td>SLSA, attestation, &#xC7A5;&#xAE30; &#xC2E4;&#xD589; &#xC774;&#xB825; &#xAC80;&#xC0C9;</td></tr>
 <tr><td>CD</td><td>Argo CD</td><td>GitOps controller</td><td>Git desired state, drift &#xAC10;&#xC9C0;, multi-cluster &#xBC30;&#xD3EC;</td></tr>
 <tr><td>&#xBC30;&#xD3EC; &#xC804;&#xB7B5;</td><td>Argo Rollouts</td><td>blue-green/canary &#xC9C0;&#xC6D0;</td><td>metric &#xAE30;&#xBC18; progressive delivery</td></tr>
 <tr><td>Registry</td><td>Harbor</td><td>&#xC0AC;&#xC124; &#xC774;&#xBBF8;&#xC9C0; registry, mirror, OIDC &#xC5F0;&#xB3D9;</td><td>SBOM, signature, vulnerability scan, immutable tag</td></tr>
 <tr><td>&#xD488;&#xC9C8;</td><td>SonarQube</td><td>&#xCF54;&#xB4DC; &#xD488;&#xC9C8; &#xAC8C;&#xC774;&#xD2B8;</td><td>new code &#xC911;&#xC2EC; quality gate, PR &#xBD84;&#xC11D;</td></tr>
 <tr><td>&#xBCF4;&#xC548; &#xAC80;&#xC0AC;</td><td>Trivy / Polaris / ZAP</td><td>&#xC774;&#xBBF8;&#xC9C0;, manifest, &#xC6F9; &#xBCF4;&#xC548; &#xC810;&#xAC80; task</td><td>shift-left security&#xC640; policy gate</td></tr>
 <tr><td>&#xC811;&#xADFC; &#xC81C;&#xC5B4;</td><td>OAuth2 Proxy + OIDC provider</td><td>Tekton, Prometheus &#xB4F1; UI &#xBCF4;&#xD638;</td><td>&#xD50C;&#xB7AB;&#xD3FC; &#xCF58;&#xC194;&#xC758; &#xC911;&#xC559; SSO &#xBCF4;&#xD638;</td></tr>
 <tr><td>Artifact</td><td>Artifact repository</td><td>artifact/dependency &#xC800;&#xC7A5;&#xC18C;</td><td>cache&#xC640; repository policy&#xC758; &#xC548;&#xC815;&#xD654; &#xCD95;</td></tr>
 </tbody>
 </table><!--kg-card-end: html--><h2 id="2-%EC%98%A4%ED%94%88%EC%86%8C%EC%8A%A4-%EA%B8%B0%EC%A4%80%EC%9C%BC%EB%A1%9C-%EB%B3%B4%EB%8A%94-%EA%B0%81-%EC%BB%B4%ED%8F%AC%EB%84%8C%ED%8A%B8">2. &#xC624;&#xD508;&#xC18C;&#xC2A4; &#xAE30;&#xC900;&#xC73C;&#xB85C; &#xBCF4;&#xB294; &#xAC01; &#xCEF4;&#xD3EC;&#xB10C;&#xD2B8;</h2><p>&#xC774; &#xC870;&#xD569;&#xC744; &#xBCFC; &#xB54C; &#xC911;&#xC694;&#xD55C; &#xAC83;&#xC740; &quot;&#xC774;&#xB984;&#xC774; &#xC720;&#xBA85;&#xD55C;&#xAC00;&quot;&#xBCF4;&#xB2E4; &quot;&#xC624;&#xD508;&#xC18C;&#xC2A4; &#xC0DD;&#xD0DC;&#xACC4;&#xC5D0;&#xC11C; &#xC5B4;&#xB5A4; &#xBB38;&#xC81C;&#xB97C; &#xB9E1;&#xACE0; &#xC788;&#xB294;&#xAC00;&quot;&#xC785;&#xB2C8;&#xB2E4;. &#xAC19;&#xC740; CI/CD&#xB77C;&#xB294; &#xB9D0; &#xC548;&#xC5D0;&#xC11C;&#xB3C4; Git forge, pipeline runtime, GitOps controller, registry, policy gate, &#xC811;&#xADFC; &#xC81C;&#xC5B4;&#xAC00; &#xB9E1;&#xB294; &#xACC4;&#xCE35;&#xC740; &#xC11C;&#xB85C; &#xB2E4;&#xB985;&#xB2C8;&#xB2E4;.</p><!--kg-card-begin: html--><table>
 <thead><tr><th>&#xCEF4;&#xD3EC;&#xB10C;&#xD2B8;</th><th>&#xC624;&#xD508;&#xC18C;&#xC2A4; &#xAE30;&#xC900; &#xC124;&#xBA85;</th><th>&#xBCFC; &#xB54C; &#xC8FC;&#xC758;&#xD560; &#xC810;</th></tr></thead>
 <tbody>
 <tr><td>Git forge</td><td>Gitea, Forgejo, GitLab CE&#xCC98;&#xB7FC; Git &#xC800;&#xC7A5;&#xC18C;, &#xB9AC;&#xBDF0;, issue, package, webhook&#xC744; &#xC81C;&#xACF5;&#xD558;&#xB294; &#xAC1C;&#xBC1C; &#xD611;&#xC5C5; &#xACC4;&#xCE35;&#xC785;&#xB2C8;&#xB2E4;.</td><td>CI &#xAE30;&#xB2A5;&#xAE4C;&#xC9C0; &#xAC19;&#xC774; &#xC4F8;&#xC9C0;, Git&#xB9CC; source of truth&#xB85C; &#xB458;&#xC9C0; &#xBA3C;&#xC800; &#xC815;&#xD574;&#xC57C; &#xD569;&#xB2C8;&#xB2E4;.</td></tr>
 <tr><td>Tekton</td><td>Kubernetes &#xC704;&#xC5D0;&#xC11C; Task, Pipeline, PipelineRun&#xC744; CRD&#xB85C; &#xC2E4;&#xD589;&#xD558;&#xB294; cloud-native CI/CD framework&#xC785;&#xB2C8;&#xB2E4;.</td><td>Kubernetes &#xC6B4;&#xC601; &#xC9C0;&#xC2DD;&#xC774; &#xC804;&#xC81C;&#xC785;&#xB2C8;&#xB2E4;. &#xB2E8;&#xC21C; VM runner&#xBCF4;&#xB2E4; &#xAC15;&#xB825;&#xD558;&#xC9C0;&#xB9CC; cluster &#xAD8C;&#xD55C;/RBAC &#xC124;&#xACC4;&#xAC00; &#xC911;&#xC694;&#xD569;&#xB2C8;&#xB2E4;.</td></tr>
 <tr><td>Tekton Chains / Results</td><td>Chains&#xB294; provenance&#xC640; attestation, Results&#xB294; PipelineRun/TaskRun &#xC774;&#xB825;&#xACFC; &#xB85C;&#xADF8;&#xB97C; &#xC7A5;&#xAE30; &#xC870;&#xD68C;&#xD558;&#xB294; &#xCD95;&#xC785;&#xB2C8;&#xB2E4;.</td><td>&#xCC98;&#xC74C;&#xBD80;&#xD130; &#xC644;&#xC131;&#xD615; &#xAC10;&#xC0AC; &#xC2DC;&#xC2A4;&#xD15C;&#xC73C;&#xB85C; &#xBCF4;&#xAE30;&#xBCF4;&#xB2E4; build evidence&#xB97C; &#xB0A8;&#xAE30;&#xB294; &#xAE30;&#xBC18;&#xC73C;&#xB85C; &#xC811;&#xADFC;&#xD558;&#xB294; &#xAC83;&#xC774; &#xC88B;&#xC2B5;&#xB2C8;&#xB2E4;.</td></tr>
 <tr><td>Argo CD</td><td>Git&#xC5D0; &#xC120;&#xC5B8;&#xB41C; desired state&#xC640; Kubernetes live state&#xB97C; &#xBE44;&#xAD50;&#xD558;&#xACE0; sync&#xD558;&#xB294; GitOps CD controller&#xC785;&#xB2C8;&#xB2E4;.</td><td>&#xBC30;&#xD3EC; &#xBC84;&#xD2BC; UI&#xAC00; &#xC544;&#xB2C8;&#xB77C; drift &#xAC10;&#xC9C0;&#xC640; reconciliation &#xBAA8;&#xB378;&#xB85C; &#xC774;&#xD574;&#xD574;&#xC57C; &#xD569;&#xB2C8;&#xB2E4;.</td></tr>
 <tr><td>Argo Rollouts</td><td>Deployment&#xB97C; &#xD655;&#xC7A5;&#xD574; blue-green, canary, metric &#xAE30;&#xBC18; analysis &#xAC19;&#xC740; progressive delivery&#xB97C; &#xC81C;&#xACF5;&#xD569;&#xB2C8;&#xB2E4;.</td><td>&#xAD00;&#xCC30; &#xC9C0;&#xD45C;&#xAC00; &#xC57D;&#xD558;&#xBA74; &#xC790;&#xB3D9; &#xC2B9;&#xACA9;/&#xC911;&#xB2E8; &#xD310;&#xB2E8;&#xB3C4; &#xC57D;&#xD574;&#xC9D1;&#xB2C8;&#xB2E4;. Prometheus &#xAC19;&#xC740; metric &#xACC4;&#xCE35;&#xACFC; &#xAC19;&#xC774; &#xBD10;&#xC57C; &#xD569;&#xB2C8;&#xB2E4;.</td></tr>
 <tr><td>Harbor</td><td>&#xCEE8;&#xD14C;&#xC774;&#xB108; &#xC774;&#xBBF8;&#xC9C0;&#xC640; OCI artifact&#xB97C; &#xC800;&#xC7A5;&#xD558;&#xACE0; scan, signing, RBAC, replication&#xC744; &#xC81C;&#xACF5;&#xD558;&#xB294; trusted registry&#xC785;&#xB2C8;&#xB2E4;.</td><td>&#xB2E8;&#xC21C; registry&#xB85C;&#xB9CC; &#xC4F0;&#xBA74; &#xC7A5;&#xC810;&#xC774; &#xC904;&#xC5B4;&#xB4ED;&#xB2C8;&#xB2E4;. digest, SBOM, signature, retention &#xC815;&#xCC45;&#xC744; &#xAC19;&#xC774; &#xC124;&#xACC4;&#xD574;&#xC57C; &#xD569;&#xB2C8;&#xB2E4;.</td></tr>
 <tr><td>SonarQube</td><td>Community Build &#xAE30;&#xC900;&#xC73C;&#xB85C; &#xCF54;&#xB4DC; &#xD488;&#xC9C8;/&#xBCF4;&#xC548; &#xC774;&#xC288;&#xB97C; PR&#xACFC; pipeline gate&#xC5D0; &#xC5F0;&#xACB0;&#xD558;&#xB294; &#xC815;&#xC801; &#xBD84;&#xC11D; &#xACC4;&#xCE35;&#xC785;&#xB2C8;&#xB2E4;.</td><td>&#xC624;&#xD508;&#xCF54;&#xC5B4; &#xC131;&#xACA9;&#xC774; &#xC788;&#xC73C;&#xBBC0;&#xB85C; &#xD544;&#xC694;&#xD55C; &#xC5B8;&#xC5B4;, branch/PR &#xAE30;&#xB2A5;, governance &#xAE30;&#xB2A5;&#xC774; &#xBB34;&#xB8CC; &#xBC94;&#xC704;&#xC5D0; &#xB4E4;&#xC5B4;&#xC624;&#xB294;&#xC9C0; &#xD655;&#xC778;&#xD574;&#xC57C; &#xD569;&#xB2C8;&#xB2E4;.</td></tr>
 <tr><td>Trivy</td><td>&#xC774;&#xBBF8;&#xC9C0; &#xCDE8;&#xC57D;&#xC810;&#xBFD0; &#xC544;&#xB2C8;&#xB77C; filesystem, Git repository, IaC, SBOM, Kubernetes&#xAE4C;&#xC9C0; &#xBCF4;&#xB294; &#xC624;&#xD508;&#xC18C;&#xC2A4; scanner&#xC785;&#xB2C8;&#xB2E4;.</td><td>&#xAC80;&#xCD9C; &#xACB0;&#xACFC;&#xB97C; &#xADF8;&#xB300;&#xB85C; &#xCC28;&#xB2E8;&#xD558;&#xBA74; &#xC6B4;&#xC601;&#xC774; &#xB9C9;&#xD790; &#xC218; &#xC788;&#xC2B5;&#xB2C8;&#xB2E4;. severity, exploitability, exception &#xB9CC;&#xB8CC; &#xAE30;&#xC900;&#xC774; &#xD544;&#xC694;&#xD569;&#xB2C8;&#xB2E4;.</td></tr>
 <tr><td>Polaris / Kyverno / OPA Gatekeeper</td><td>Kubernetes manifest&#xC640; admission policy&#xB97C; &#xAC80;&#xC0AC;&#xD558;&#xB294; policy-as-code &#xACC4;&#xCE35;&#xC785;&#xB2C8;&#xB2E4;.</td><td>CI&#xC5D0;&#xC11C; &#xC0AC;&#xC804; &#xAC80;&#xC0AC;&#xD558;&#xACE0;, cluster admission&#xC5D0;&#xC11C; &#xCD5C;&#xC885; &#xBC29;&#xC5B4;&#xD558;&#xB294; &#xC2DD;&#xC73C;&#xB85C; &#xB450; &#xB2E8;&#xACC4; &#xC6B4;&#xC601;&#xC774; &#xC88B;&#xC2B5;&#xB2C8;&#xB2E4;.</td></tr>
 <tr><td>OAuth2 Proxy + OIDC</td><td>OIDC&#xB97C; &#xC9C1;&#xC811; &#xC9C0;&#xC6D0;&#xD558;&#xC9C0; &#xC54A;&#xB294; &#xC6B4;&#xC601; UI &#xC55E;&#xC5D0; &#xC778;&#xC99D; &#xD504;&#xB85D;&#xC2DC;&#xB97C; &#xB450;&#xB294; &#xD328;&#xD134;&#xC785;&#xB2C8;&#xB2E4;.</td><td>trusted proxy, forwarded header, cookie domain, group claim &#xACBD;&#xACC4;&#xB97C; &#xC798;&#xBABB; &#xC7A1;&#xC73C;&#xBA74; &#xBCF4;&#xD638;&#xBA74;&#xC774; &#xC57D;&#xD574;&#xC9D1;&#xB2C8;&#xB2E4;.</td></tr>
 </tbody>
 </table><!--kg-card-end: html--><h2 id="3-%EB%8C%80%EC%B2%B4%EC%99%80-%EB%B3%B4%EC%99%84-%ED%8A%B8%EB%A0%8C%EB%93%9C%EB%8F%84-%EA%B0%99%EC%9D%B4-%EB%B4%90%EC%95%BC-%ED%95%A9%EB%8B%88%EB%8B%A4">3. &#xB300;&#xCCB4;&#xC640; &#xBCF4;&#xC644; &#xD2B8;&#xB80C;&#xB4DC;&#xB3C4; &#xAC19;&#xC774; &#xBD10;&#xC57C; &#xD569;&#xB2C8;&#xB2E4;</h2><p>&#xB300;&#xCCB4;&#xC7AC;&#xB294; &quot;&#xBB34;&#xC5C7;&#xC774; &#xB354; &#xC88B;&#xB2E4;&quot;&#xBCF4;&#xB2E4; &#xC6B4;&#xC601; &#xBAA8;&#xB378;&#xC758; &#xCC28;&#xC774;&#xB85C; &#xBCF4;&#xB294; &#xD3B8;&#xC774; &#xB0AB;&#xC2B5;&#xB2C8;&#xB2E4;. Kubernetes-native&#xB85C; &#xAC08;&#xC218;&#xB85D; &#xC120;&#xC5B8;&#xD615; &#xB9AC;&#xC18C;&#xC2A4;, controller, GitOps, policy-as-code &#xCABD;&#xC774; &#xAC15;&#xD574;&#xC9C0;&#xACE0;, forge-integrated CI&#xB85C; &#xAC08;&#xC218;&#xB85D; &#xAC1C;&#xBC1C;&#xC790; &#xACBD;&#xD5D8;&#xACFC; &#xCD08;&#xAE30; &#xB3C4;&#xC785; &#xC18D;&#xB3C4;&#xAC00; &#xAC15;&#xD574;&#xC9D1;&#xB2C8;&#xB2E4;.</p><!--kg-card-begin: html--><table>
 <thead><tr><th>&#xC601;&#xC5ED;</th><th>&#xC8FC;&#xC694; &#xC120;&#xD0DD;&#xC9C0;</th><th>&#xD2B8;&#xB80C;&#xB4DC; &#xD310;&#xB2E8;</th></tr></thead>
 <tbody>
 <tr><td>Git forge</td><td>Gitea, Forgejo, GitLab CE, &#xAD00;&#xB9AC;&#xD615; Git &#xC11C;&#xBE44;&#xC2A4;</td><td>&#xAC00;&#xBCBC;&#xC6B4; self-hosted forge&#xC640; actions-compatible workflow&#xAC00; &#xB298;&#xACE0; &#xC788;&#xC2B5;&#xB2C8;&#xB2E4;. &#xB2E4;&#xB9CC; &#xC870;&#xC9C1;&#xD615; &#xAD8C;&#xD55C;/&#xAC10;&#xC0AC;/&#xD1B5;&#xD569;&#xC774; &#xC911;&#xC694;&#xD558;&#xBA74; GitLab &#xACC4;&#xC5F4;&#xC774; &#xC5EC;&#xC804;&#xD788; &#xAC15;&#xD569;&#xB2C8;&#xB2E4;.</td></tr>
 <tr><td>CI runtime</td><td>Tekton, Jenkins, GitLab CI, GitHub Actions-compatible runner</td><td>Jenkins&#xB294; &#xD50C;&#xB7EC;&#xADF8;&#xC778; &#xC0DD;&#xD0DC;&#xACC4;&#xAC00; &#xAC15;&#xD558;&#xACE0;, Tekton&#xC740; Kubernetes-native &#xD45C;&#xC900;&#xD654;&#xC5D0; &#xAC15;&#xD569;&#xB2C8;&#xB2E4;. GitLab/GitHub &#xACC4;&#xC5F4;&#xC740; &#xC800;&#xC7A5;&#xC18C;&#xC640; CI UX&#xAC00; &#xBD99;&#xC5B4; &#xC788;&#xC5B4; &#xBE60;&#xB985;&#xB2C8;&#xB2E4;.</td></tr>
 <tr><td>GitOps CD</td><td>Argo CD, Flux</td><td>Argo CD&#xB294; UI&#xC640; &#xC571; &#xB2E8;&#xC704; &#xAC00;&#xC2DC;&#xC131;&#xC774; &#xAC15;&#xD558;&#xACE0;, Flux&#xB294; composable controller&#xC640; &#xC790;&#xB3D9; &#xC5C5;&#xB370;&#xC774;&#xD2B8; &#xD750;&#xB984;&#xC774; &#xAC15;&#xD569;&#xB2C8;&#xB2E4;. &#xB458; &#xB2E4; pull-based GitOps &#xD750;&#xB984;&#xC744; &#xB300;&#xD45C;&#xD569;&#xB2C8;&#xB2E4;.</td></tr>
 <tr><td>Progressive delivery</td><td>Argo Rollouts, Flagger, ingress/service mesh canary</td><td>Argo &#xC0DD;&#xD0DC;&#xACC4;&#xB97C; &#xC4F0;&#xBA74; Rollouts&#xAC00; &#xC790;&#xC5F0;&#xC2A4;&#xB7FD;&#xACE0;, Flux/service mesh &#xC911;&#xC2EC;&#xC774;&#xBA74; Flagger&#xB3C4; &#xC88B;&#xC740; &#xC120;&#xD0DD;&#xC785;&#xB2C8;&#xB2E4;. &#xD575;&#xC2EC;&#xC740; &#xB3C4;&#xAD6C;&#xBCF4;&#xB2E4; metric &#xAE30;&#xBC18; &#xC790;&#xB3D9; &#xC911;&#xB2E8; &#xAE30;&#xC900;&#xC785;&#xB2C8;&#xB2E4;.</td></tr>
 <tr><td>Registry / trust</td><td>Harbor, CNCF Distribution, Quay, GitLab registry, cloud registry</td><td>registry&#xB294; &#xC774;&#xBBF8;&#xC9C0; &#xC800;&#xC7A5;&#xC18C;&#xC5D0;&#xC11C; OCI artifact hub&#xB85C; &#xD655;&#xC7A5; &#xC911;&#xC785;&#xB2C8;&#xB2E4;. SBOM, signature, attestation&#xC744; artifact&#xC640; &#xD568;&#xAED8; &#xB2E4;&#xB8E8;&#xB294; &#xBC29;&#xD5A5;&#xC774; &#xC911;&#xC694;&#xD569;&#xB2C8;&#xB2E4;.</td></tr>
 <tr><td>Supply chain</td><td>Tekton Chains, Sigstore Cosign, SLSA provenance, in-toto attestation</td><td>&#xBE4C;&#xB4DC; &#xC131;&#xACF5; &#xC5EC;&#xBD80;&#xBCF4;&#xB2E4; &quot;&#xB204;&#xAC00;, &#xC5B4;&#xB514;&#xC11C;, &#xC5B4;&#xB5A4; &#xC785;&#xB825;&#xC73C;&#xB85C; &#xB9CC;&#xB4E4;&#xC5C8;&#xB294;&#xAC00;&quot;&#xB97C; &#xAC80;&#xC99D;&#xD558;&#xB294; &#xD750;&#xB984;&#xC774; &#xCEE4;&#xC9C0;&#xACE0; &#xC788;&#xC2B5;&#xB2C8;&#xB2E4;.</td></tr>
 <tr><td>Security / policy</td><td>Trivy, Syft/Grype, Semgrep, CodeQL, Kyverno, OPA Gatekeeper</td><td>&#xD55C; scanner&#xB85C; &#xB05D;&#xB0B4;&#xAE30;&#xBCF4;&#xB2E4; SBOM &#xC0DD;&#xC131;, vulnerability scan, IaC scan, admission policy&#xB97C; &#xBD84;&#xB9AC;&#xD574; &#xC870;&#xD569;&#xD558;&#xB294; &#xCD94;&#xC138;&#xC785;&#xB2C8;&#xB2E4;.</td></tr>
 <tr><td>Access control</td><td>OAuth2 Proxy, ingress auth, service mesh auth, &#xC911;&#xC559; IdP</td><td>&#xB3C4;&#xAD6C;&#xBCC4; &#xACC4;&#xC815;&#xBCF4;&#xB2E4; OIDC/RBAC/&#xADF8;&#xB8F9; claim &#xC911;&#xC2EC;&#xC73C;&#xB85C; &#xBB36;&#xB294; &#xBC29;&#xD5A5;&#xC774; &#xC88B;&#xC2B5;&#xB2C8;&#xB2E4;. &#xC6B4;&#xC601; UI&#xB294; &#xCD5C;&#xC18C;&#xD55C; &#xAC19;&#xC740; &#xC778;&#xC99D; &#xACBD;&#xACC4; &#xC548;&#xC5D0; &#xB123;&#xC5B4;&#xC57C; &#xD569;&#xB2C8;&#xB2E4;.</td></tr>
 </tbody>
 </table><!--kg-card-end: html--><h2 id="4-%EA%B0%80%EC%9E%A5-%ED%8A%B8%EB%A0%8C%EB%93%9C%EC%84%B1%EC%9D%B4-%ED%81%B0-%EC%B6%95%EC%9D%80-tekton-gitops%EC%9E%85%EB%8B%88%EB%8B%A4">4. &#xAC00;&#xC7A5; &#xD2B8;&#xB80C;&#xB4DC;&#xC131;&#xC774; &#xD070; &#xCD95;&#xC740; Tekton + GitOps&#xC785;&#xB2C8;&#xB2E4;</h2><p>&#xC774; &#xC870;&#xD569;&#xC758; &#xD575;&#xC2EC;&#xC740; Tekton&#xC744; CI &#xC2E4;&#xD589;&#xBA74;&#xC73C;&#xB85C; &#xB450;&#xACE0; Argo CD&#xB97C; CD/GitOps &#xBA74;&#xC73C;&#xB85C; &#xB454; &#xC810;&#xC785;&#xB2C8;&#xB2E4;. Tekton&#xC740; Pipeline&#xACFC; Task&#xB97C; Kubernetes CRD&#xB85C; &#xB2E4;&#xB8E8;&#xAE30; &#xB54C;&#xBB38;&#xC5D0; pipeline &#xC2E4;&#xD589; &#xC790;&#xCCB4;&#xAC00; &#xD074;&#xB7EC;&#xC2A4;&#xD130; &#xB9AC;&#xC18C;&#xC2A4;&#xAC00; &#xB429;&#xB2C8;&#xB2E4;. Argo CD&#xB294; Git &#xC800;&#xC7A5;&#xC18C;&#xC758; desired state&#xC640; &#xD074;&#xB7EC;&#xC2A4;&#xD130; live state&#xB97C; &#xBE44;&#xAD50;&#xD558;&#xACE0;, drift&#xB97C; &#xBCF4;&#xC5EC;&#xC8FC;&#xBA70;, sync&#xB97C; &#xD1B5;&#xD574; &#xC0C1;&#xD0DC;&#xB97C; &#xB9DE;&#xCDA5;&#xB2C8;&#xB2E4;.</p><p>&#xC774; &#xAD6C;&#xC870;&#xAC00; &#xC911;&#xC694;&#xD55C; &#xC774;&#xC720;&#xB294; CI/CD&#xAC00; &#xB354; &#xC774;&#xC0C1; &#xBCC4;&#xB3C4; &#xC11C;&#xBC84; &#xD558;&#xB098;&#xC5D0;&#xC11C; shell script&#xB97C; &#xB3CC;&#xB9AC;&#xB294; &#xBC29;&#xC2DD;&#xC73C;&#xB85C;&#xB9CC; &#xB0A8;&#xC9C0; &#xC54A;&#xB294;&#xB2E4;&#xB294; &#xC810;&#xC785;&#xB2C8;&#xB2E4;. PipelineRun, TaskRun, Application, Rollout &#xAC19;&#xC740; &#xB9AC;&#xC18C;&#xC2A4;&#xAC00; &#xBAA8;&#xB450; Kubernetes API&#xB85C; &#xAD00;&#xCC30;&#xB418;&#xACE0;, &#xAD8C;&#xD55C;/RBAC/namespace/storage/logging &#xC815;&#xCC45;&#xC744; &#xAC19;&#xC740; &#xC6B4;&#xC601; &#xBAA8;&#xB378; &#xC548;&#xC5D0;&#xC11C; &#xB2E4;&#xB8F0; &#xC218; &#xC788;&#xC2B5;&#xB2C8;&#xB2E4;.</p><pre><code class="language-text">Git commit
 -&gt; Tekton PipelineRun
 -&gt; build / test / scan / image push
 -&gt; Harbor image digest
 -&gt; GitOps manifest update
 -&gt; Argo CD sync
 -&gt; Kubernetes rollout
 -&gt; route or health endpoint verification</code></pre><h2 id="5-tekton-resolvers%EB%8A%94-pipeline-catalog-%EC%9A%B4%EC%98%81%EC%9D%98-%EB%8B%A4%EC%9D%8C-%EB%8B%A8%EA%B3%84%EC%9E%85%EB%8B%88%EB%8B%A4">5. Tekton Resolvers&#xB294; pipeline catalog &#xC6B4;&#xC601;&#xC758; &#xB2E4;&#xC74C; &#xB2E8;&#xACC4;&#xC785;&#xB2C8;&#xB2E4;</h2><p>Tekton &#xAE30;&#xBC18; pipeline&#xC744; &#xC6B4;&#xC601;&#xD558;&#xB2E4; &#xBCF4;&#xBA74; Maven, Gradle, npm, pnpm, Kaniko, ArgoCD sync, SonarQube scanner, Trivy, Polaris, ZAP &#xAC19;&#xC740; task/pipeline &#xC790;&#xC0B0;&#xC774; &#xB298;&#xC5B4;&#xB0A9;&#xB2C8;&#xB2E4;. &#xC5EC;&#xAE30;&#xC11C; &#xCD5C;&#xC2E0; &#xBC29;&#xD5A5;&#xC740; &#xBAA8;&#xB4E0; Task&#xB97C; &#xD074;&#xB7EC;&#xC2A4;&#xD130; &#xC548;&#xC5D0; &#xBCF5;&#xC0AC;&#xD574; &#xB450;&#xB294; &#xBC29;&#xC2DD;&#xBCF4;&#xB2E4;, Git &#xB610;&#xB294; OCI registry&#xC5D0; &#xB454; &#xD45C;&#xC900; Task&#xB97C; resolver&#xB85C; &#xCC38;&#xC870;&#xD558;&#xB294; &#xCABD;&#xC785;&#xB2C8;&#xB2E4;.</p><p>Tekton &#xACF5;&#xC2DD; &#xBB38;&#xC11C;&#xB3C4; Remote Resolution&#xC744; &#xD1B5;&#xD574; &#xD074;&#xB7EC;&#xC2A4;&#xD130; &#xBC16; &#xC6D0;&#xACA9; &#xC18C;&#xC2A4;&#xC758; Task&#xC640; Pipeline&#xC744; &#xAC00;&#xC838;&#xC62C; &#xC218; &#xC788;&#xB2E4;&#xACE0; &#xC124;&#xBA85;&#xD569;&#xB2C8;&#xB2E4;. &#xC774;&#xB7F0; &#xD658;&#xACBD;&#xC5D0;&#xC11C;&#xB294; &#xACF5;&#xD1B5; &#xBCF4;&#xC548; &#xC2A4;&#xCE94;, &#xC774;&#xBBF8;&#xC9C0; &#xBE4C;&#xB4DC;, ArgoCD sync, ingress &#xAC80;&#xC99D; &#xAC19;&#xC740; task&#xB97C; &#xACF5;&#xC6A9; Git repo&#xB098; OCI artifact&#xB85C; &#xAD00;&#xB9AC;&#xD558;&#xBA74;, &#xC560;&#xD50C;&#xB9AC;&#xCF00;&#xC774;&#xC158;&#xBCC4; pipeline&#xC740; &#xACF5;&#xD1B5; task version&#xB9CC; &#xACE0;&#xC815;&#xD574;&#xC11C; &#xCC38;&#xC870;&#xD560; &#xC218; &#xC788;&#xC2B5;&#xB2C8;&#xB2E4;.</p><pre><code class="language-yaml">apiVersion: tekton.dev/v1
kind: PipelineRun
metadata:
 generateName: app-release-
spec:
 pipelineRef:
 resolver: git
 params:
 - name: url
 value: https://git.example.com/platform/pipeline-catalog.git
 - name: revision
 value: main
 - name: pathInRepo
 value: pipelines/build-scan-gitops.yaml</code></pre><h2 id="6-tekton-chains%EC%99%80-results%EB%8A%94-%EC%A6%9D%EA%B1%B0-%EC%A4%91%EC%8B%AC-cicd%EB%A1%9C-%EA%B0%80%EB%8A%94-%EA%B8%B8%EC%9E%85%EB%8B%88%EB%8B%A4">6. Tekton Chains&#xC640; Results&#xB294; &#xC99D;&#xAC70; &#xC911;&#xC2EC; CI/CD&#xB85C; &#xAC00;&#xB294; &#xAE38;&#xC785;&#xB2C8;&#xB2E4;</h2><p>&#xC55E;&#xC73C;&#xB85C; CI/CD&#xC5D0;&#xC11C; &#xC911;&#xC694;&#xD55C; &#xAC83;&#xC740; &quot;&#xBE4C;&#xB4DC;&#xAC00; &#xC131;&#xACF5;&#xD588;&#xB2E4;&quot;&#xAC00; &#xC544;&#xB2C8;&#xB77C; &quot;&#xBB34;&#xC2A8; &#xC18C;&#xC2A4;, &#xC5B4;&#xB5A4; &#xC758;&#xC874;&#xC131;, &#xC5B4;&#xB5A4; runner, &#xC5B4;&#xB5A4; task, &#xC5B4;&#xB5A4; &#xC774;&#xBBF8;&#xC9C0; digest&#xB85C; &#xB9CC;&#xB4E4;&#xC5B4;&#xC84C;&#xB294;&#xAC00;&quot;&#xC785;&#xB2C8;&#xB2E4;. Tekton Chains&#xB294; TaskRun/PipelineRun &#xC2E4;&#xD589;&#xC744; &#xAD00;&#xCC30;&#xD574; provenance&#xC640; attestation&#xC744; &#xB9CC;&#xB4E4;&#xACE0;, &#xC11C;&#xBA85;&#xD55C; &#xB4A4; &#xC800;&#xC7A5;&#xD558;&#xB294; &#xBC29;&#xD5A5;&#xC758; &#xCEF4;&#xD3EC;&#xB10C;&#xD2B8;&#xC785;&#xB2C8;&#xB2E4;. SLSA provenance&#xB294; &#xC0B0;&#xCD9C;&#xBB3C;&#xC774; &#xC5B4;&#xB5A4; &#xACFC;&#xC815;&#xC73C;&#xB85C; &#xB9CC;&#xB4E4;&#xC5B4;&#xC84C;&#xB294;&#xC9C0; &#xC124;&#xBA85;&#xD558;&#xB294; &#xD45C;&#xC900; &#xBA54;&#xD0C0;&#xB370;&#xC774;&#xD130;&#xC785;&#xB2C8;&#xB2E4;.</p><p>Tekton Results&#xB294; &#xC2E4;&#xD589; &#xC774;&#xB825;&#xACFC; &#xB85C;&#xADF8;&#xB97C; Pipeline controller &#xC218;&#xBA85;&#xACFC; &#xBD84;&#xB9AC;&#xD574; &#xC7A5;&#xAE30; &#xBCF4;&#xAD00;&#xD558;&#xACE0; &#xAC80;&#xC0C9;&#xD558;&#xB294; &#xCD95;&#xC785;&#xB2C8;&#xB2E4;. &#xC774; &#xB458;&#xC744; &#xAC15;&#xD654;&#xD558;&#xBA74; &#xC7A5;&#xC560; &#xBD84;&#xC11D;, &#xB9B4;&#xB9AC;&#xC2A4; &#xAC10;&#xC0AC;, &#xC774;&#xBBF8;&#xC9C0; &#xCD9C;&#xCC98; &#xAC80;&#xC99D;&#xC774; &quot;&#xC0AC;&#xB78C;&#xC774; &#xAE30;&#xC5B5;&#xC73C;&#xB85C; &#xCD94;&#xC801;&#xD558;&#xB294; &#xC0C1;&#xD0DC;&quot;&#xC5D0;&#xC11C; &quot;query &#xAC00;&#xB2A5;&#xD55C; &#xC2E4;&#xD589; &#xC99D;&#xAC70;&quot;&#xB85C; &#xC774;&#xB3D9;&#xD569;&#xB2C8;&#xB2E4;.</p><pre><code class="language-text">PipelineRun evidence model
- source repository and revision
- Pipeline / Task version
- input artifacts and dependencies
- output image digest
- vulnerability and quality gate result
- Argo CD application revision
- rollout and health check result</code></pre><h2 id="7-harbor%EB%8A%94-%EC%9D%B4%EB%AF%B8%EC%A7%80-%EC%A0%80%EC%9E%A5%EC%86%8C%EC%97%90%EC%84%9C-artifact-trust-hub%EB%A1%9C-%EC%9D%B4%EB%8F%99-%EC%A4%91%EC%9E%85%EB%8B%88%EB%8B%A4">7. Harbor&#xB294; &#xC774;&#xBBF8;&#xC9C0; &#xC800;&#xC7A5;&#xC18C;&#xC5D0;&#xC11C; artifact trust hub&#xB85C; &#xC774;&#xB3D9; &#xC911;&#xC785;&#xB2C8;&#xB2E4;</h2><p>Harbor&#xB294; private registry&#xC640; mirror &#xC5ED;&#xD560;&#xC744; &#xD569;&#xB2C8;&#xB2E4;. &#xCD5C;&#xC2E0; &#xD750;&#xB984;&#xC5D0;&#xC11C;&#xB294; &#xC5EC;&#xAE30;&#xC11C; &#xD55C; &#xB2E8;&#xACC4; &#xB354; &#xB098;&#xC544;&#xAC00; &#xC774;&#xBBF8;&#xC9C0;, SBOM, signature, vulnerability scan &#xACB0;&#xACFC;&#xB97C; &#xD568;&#xAED8; &#xAD00;&#xB9AC;&#xD558;&#xB294; artifact trust hub&#xAC00; &#xB429;&#xB2C8;&#xB2E4;. Harbor &#xACF5;&#xC2DD; &#xBB38;&#xC11C;&#xC5D0;&#xB294; SBOM &#xC0DD;&#xC131;/&#xBCF5;&#xC81C;, Cosign &#xB610;&#xB294; Notation &#xAE30;&#xBC18; artifact signing, vulnerability scan, tag immutability, robot account &#xAC19;&#xC740; &#xAE30;&#xB2A5;&#xC774; &#xBD84;&#xB9AC;&#xB418;&#xC5B4; &#xC788;&#xC2B5;&#xB2C8;&#xB2E4;.</p><p>&#xC608;&#xB97C; &#xB4E4;&#xC5B4; release &#xC774;&#xBBF8;&#xC9C0;&#xB294; tag&#xBCF4;&#xB2E4; digest &#xAE30;&#xC900;&#xC73C;&#xB85C; &#xBC30;&#xD3EC;&#xD558;&#xACE0;, &#xC774;&#xBBF8;&#xC9C0;&#xC640; &#xD568;&#xAED8; SBOM&#xACFC; signature&#xB97C; &#xBD99;&#xC774;&#xB294; &#xC2DD;&#xC73C;&#xB85C; &#xC6B4;&#xC601;&#xD560; &#xC218; &#xC788;&#xC2B5;&#xB2C8;&#xB2E4;. &#xADF8;&#xB7EC;&#xBA74; &#xB2E8;&#xC21C;&#xD788; &quot;&#xC774;&#xBBF8;&#xC9C0;&#xAC00; registry&#xC5D0; &#xC788;&#xB2E4;&quot;&#xAC00; &#xC544;&#xB2C8;&#xB77C; &quot;&#xC774; &#xC774;&#xBBF8;&#xC9C0;&#xB294; &#xC5B4;&#xB5A4; pipeline&#xC5D0;&#xC11C; &#xB9CC;&#xB4E4;&#xC5C8;&#xACE0;, &#xC5B4;&#xB5A4; &#xCDE8;&#xC57D;&#xC810; &#xC0C1;&#xD0DC;&#xC600;&#xACE0;, &#xC5B4;&#xB5A4; &#xC815;&#xCC45;&#xC73C;&#xB85C; &#xBC30;&#xD3EC; &#xD5C8;&#xC6A9;&#xB410;&#xB294;&#xC9C0;&quot;&#xB97C; &#xC124;&#xBA85;&#xD560; &#xC218; &#xC788;&#xC2B5;&#xB2C8;&#xB2E4;.</p><pre><code class="language-text">Recommended Harbor policy direction
- immutable release tags
- digest-based deployment
- robot account per pipeline scope
- scan on push and scheduled rescan
- SBOM attached to image artifact
- signature attached to image artifact
- temporary allowlist with expiry only</code></pre><h2 id="8-argo-rollouts%EB%8A%94-%EB%B0%B0%ED%8F%AC-%EC%99%84%EB%A3%8C%EB%A5%BC-%EC%A0%90%EC%A7%84%EC%A0%81-%EA%B2%80%EC%A6%9D%EC%9C%BC%EB%A1%9C-%EB%B0%94%EA%BF%89%EB%8B%88%EB%8B%A4">8. Argo Rollouts&#xB294; &quot;&#xBC30;&#xD3EC; &#xC644;&#xB8CC;&quot;&#xB97C; &quot;&#xC810;&#xC9C4;&#xC801; &#xAC80;&#xC99D;&quot;&#xC73C;&#xB85C; &#xBC14;&#xAFC9;&#xB2C8;&#xB2E4;</h2><p>Kubernetes Deployment&#xC758; rolling update&#xB294; &#xAE30;&#xBCF8; &#xC548;&#xC804;&#xC7A5;&#xCE58;&#xB85C; &#xCDA9;&#xBD84;&#xD55C; &#xACBD;&#xC6B0;&#xAC00; &#xB9CE;&#xC9C0;&#xB9CC;, &#xC810;&#xC9C4;&#xC801; &#xD2B8;&#xB798;&#xD53D; &#xC804;&#xD658;&#xACFC; metric &#xAE30;&#xBC18; &#xC790;&#xB3D9; &#xD310;&#xB2E8;&#xC5D0;&#xB294; &#xD55C;&#xACC4;&#xAC00; &#xC788;&#xC2B5;&#xB2C8;&#xB2E4;. Argo Rollouts&#xB294; blue-green, canary, canary analysis, progressive delivery&#xB97C; Kubernetes CRD&#xB85C; &#xC81C;&#xACF5;&#xD558;&#xACE0;, &#xBC30;&#xD3EC; &#xACFC;&#xC815;&#xC744; &#xB354; &#xC791;&#xAC8C; &#xB098;&#xB220; &#xAC80;&#xC99D;&#xD560; &#xC218; &#xC788;&#xAC8C; &#xD569;&#xB2C8;&#xB2E4;.</p><p>&#xD2B8;&#xB80C;&#xB4DC; &#xAD00;&#xC810;&#xC5D0;&#xC11C; Rollouts&#xC758; &#xD575;&#xC2EC;&#xC740; &#xBC30;&#xD3EC;&#xAC00; &#xD55C; &#xBC88;&#xC5D0; &#xB05D;&#xB098;&#xB294; &#xC774;&#xBCA4;&#xD2B8;&#xAC00; &#xC544;&#xB2C8;&#xB77C;, &#xC791;&#xC740; &#xD2B8;&#xB798;&#xD53D; &#xB2E8;&#xC704;&#xB85C; &#xAC80;&#xC99D;&#xD558;&#xACE0; &#xBB38;&#xC81C;&#xAC00; &#xC788;&#xC73C;&#xBA74; &#xC790;&#xB3D9; &#xC911;&#xB2E8;&#xD558;&#xAC70;&#xB098; rollback&#xD558;&#xB294; &#xACFC;&#xC815;&#xC774;&#xB77C;&#xB294; &#xC810;&#xC785;&#xB2C8;&#xB2E4;. Prometheus, Grafana, Kiali &#xAC19;&#xC740; &#xAD00;&#xCC30; &#xACC4;&#xCE35;&#xACFC; &#xC5F0;&#xACB0;&#xD558;&#xBA74; &#xBC30;&#xD3EC; &#xD488;&#xC9C8;&#xC744; &#xC0AC;&#xB78C;&#xC774; &#xB208;&#xC73C;&#xB85C;&#xB9CC; &#xD310;&#xB2E8;&#xD558;&#xC9C0; &#xC54A;&#xC544;&#xB3C4; &#xB429;&#xB2C8;&#xB2E4;.</p><h2 id="9-sonarqube%EC%99%80-trivy%EB%8A%94-%EB%82%98%EC%A4%91%EC%97%90-%EA%B2%80%EC%82%AC%EA%B0%80-%EC%95%84%EB%8B%88%EB%9D%BC-pipeline-gate%EC%9E%85%EB%8B%88%EB%8B%A4">9. SonarQube&#xC640; Trivy&#xB294; &quot;&#xB098;&#xC911;&#xC5D0; &#xAC80;&#xC0AC;&quot;&#xAC00; &#xC544;&#xB2C8;&#xB77C; pipeline gate&#xC785;&#xB2C8;&#xB2E4;</h2><p>SonarQube&#xB294; &#xC804;&#xCCB4; legacy code&#xB97C; &#xD55C; &#xBC88;&#xC5D0; &#xB2E4; &#xACE0;&#xCE58;&#xC790;&#xB294; &#xB3C4;&#xAD6C;&#xB85C; &#xC4F0;&#xBA74; &#xAE08;&#xBC29; &#xBCD1;&#xBAA9;&#xC774; &#xB429;&#xB2C8;&#xB2E4;. &#xACF5;&#xC2DD; &#xBB38;&#xC11C;&#xC758; Clean as You Code &#xBC29;&#xD5A5;&#xCC98;&#xB7FC; &#xC0C8; &#xCF54;&#xB4DC; &#xAE30;&#xC900; quality gate&#xB97C; &#xC6B0;&#xC120; &#xC801;&#xC6A9;&#xD574;&#xC57C; &#xD569;&#xB2C8;&#xB2E4;. PR &#xB610;&#xB294; main merge &#xC2DC;&#xC810;&#xC5D0; new code&#xC758; bug, vulnerability, security hotspot, duplication, coverage &#xAE30;&#xC900;&#xC744; fail-fast gate&#xB85C; &#xB450;&#xB294; &#xAC83;&#xC774; &#xD604;&#xC2E4;&#xC801;&#xC785;&#xB2C8;&#xB2E4;.</p><p>Trivy&#xB294; &#xC774;&#xBBF8;&#xC9C0; &#xCDE8;&#xC57D;&#xC810;&#xB9CC; &#xBCF4;&#xB294; &#xB3C4;&#xAD6C;&#xAC00; &#xC544;&#xB2C8;&#xB77C; SBOM, filesystem, Git repository, Kubernetes&#xAE4C;&#xC9C0; &#xD3ED;&#xB113;&#xAC8C; &#xC2A4;&#xCE94;&#xD560; &#xC218; &#xC788;&#xB294; scanner&#xC785;&#xB2C8;&#xB2E4;. Trivy/Polaris/ZAP task&#xB97C; pipeline catalog&#xC5D0; &#xB123;&#xC73C;&#xBA74; &#xBCF4;&#xC548; &#xAC80;&#xC0AC;&#xB97C; &#xBCC4;&#xB3C4; &#xD504;&#xB85C;&#xC81D;&#xD2B8;&#xAC00; &#xC544;&#xB2C8;&#xB77C; delivery flow &#xC548;&#xC5D0;&#xC11C; &#xC2E4;&#xD589;&#xD560; &#xC218; &#xC788;&#xC2B5;&#xB2C8;&#xB2E4;.</p><pre><code class="language-text">Pipeline gate order
1. source structure check
2. unit or smoke test
3. SonarQube new-code quality gate
4. image build with fixed tag and digest capture
5. Trivy vulnerability / SBOM scan
6. Polaris or policy check for Kubernetes manifests
7. Argo CD sync
8. rollout and route health verification</code></pre><h2 id="10-oauth2-proxy%EC%99%80-oidc%EB%8A%94-%EC%9A%B4%EC%98%81-ui-%EB%B3%B4%ED%98%B8%EC%9D%98-%ED%98%84%EC%8B%A4%EC%A0%81%EC%9D%B8-%EC%B6%95%EC%9E%85%EB%8B%88%EB%8B%A4">10. OAuth2 Proxy&#xC640; OIDC&#xB294; &#xC6B4;&#xC601; UI &#xBCF4;&#xD638;&#xC758; &#xD604;&#xC2E4;&#xC801;&#xC778; &#xCD95;&#xC785;&#xB2C8;&#xB2E4;</h2><p>Tekton Dashboard, Prometheus, Alertmanager &#xAC19;&#xC740; &#xC6B4;&#xC601; UI&#xB97C; OAuth2 Proxy&#xC640; OIDC provider&#xB85C; &#xBCF4;&#xD638;&#xD558;&#xB294; &#xBC29;&#xD5A5;&#xC740; &#xD604;&#xC2E4;&#xC801;&#xC785;&#xB2C8;&#xB2E4;. &#xB2E4;&#xB9CC; reverse proxy &#xAD6C;&#xC131;&#xC5D0;&#xC11C;&#xB294; trusted proxy IP&#xC640; forwarded header &#xC2E0;&#xB8B0; &#xACBD;&#xACC4;&#xB97C; &#xC815;&#xD655;&#xD788; &#xC7A1;&#xC544;&#xC57C; &#xD569;&#xB2C8;&#xB2E4;. OAuth2 Proxy &#xACF5;&#xC2DD; &#xBB38;&#xC11C;&#xB3C4; reverse proxy &#xC0AC;&#xC6A9; &#xC2DC; trusted proxy IP &#xC124;&#xC815;&#xC744; &#xC8FC;&#xC758;&#xD558;&#xB77C;&#xACE0; &#xACBD;&#xACE0;&#xD569;&#xB2C8;&#xB2E4;.</p><p>&#xC6B4;&#xC601; &#xD2B8;&#xB80C;&#xB4DC;&#xB294; &#xBAA8;&#xB4E0; &#xB3C4;&#xAD6C;&#xAC00; &#xAC01;&#xC790; &#xACC4;&#xC815;&#xC744; &#xB4E4;&#xACE0; &#xC788;&#xB294; &#xAD6C;&#xC870;&#xC5D0;&#xC11C;, &#xC911;&#xC559; IdP &#xC911;&#xC2EC;&#xC73C;&#xB85C; &#xB85C;&#xADF8;&#xC778;&#xACFC; &#xADF8;&#xB8F9;/RBAC&#xB97C; &#xB9DE;&#xCD94;&#xB294; &#xAD6C;&#xC870;&#xB85C; &#xC774;&#xB3D9;&#xD569;&#xB2C8;&#xB2E4;. &#xCD5C;&#xC18C;&#xD55C; CI/CD UI &#xD45C;&#xBA74;&#xC740; &#xAC19;&#xC740; SSO &#xACBD;&#xACC4; &#xC548;&#xC73C;&#xB85C; &#xBB36;&#xB294; &#xAC83;&#xC774; &#xC88B;&#xC2B5;&#xB2C8;&#xB2E4;.</p><h2 id="11-%EA%B8%B0%EB%B0%98-%EC%BB%B4%ED%8F%AC%EB%84%8C%ED%8A%B8%EC%99%80-%ED%8A%B8%EB%A0%8C%EB%93%9C-%EC%BB%B4%ED%8F%AC%EB%84%8C%ED%8A%B8%EB%A5%BC-%EA%B5%AC%EB%B6%84%ED%95%B4%EC%95%BC-%ED%95%A9%EB%8B%88%EB%8B%A4">11. &#xAE30;&#xBC18; &#xCEF4;&#xD3EC;&#xB10C;&#xD2B8;&#xC640; &#xD2B8;&#xB80C;&#xB4DC; &#xCEF4;&#xD3EC;&#xB10C;&#xD2B8;&#xB97C; &#xAD6C;&#xBD84;&#xD574;&#xC57C; &#xD569;&#xB2C8;&#xB2E4;</h2><p>&#xBAA8;&#xB4E0; &#xAD6C;&#xC131;&#xC694;&#xC18C;&#xAC00; &quot;&#xD2B8;&#xB80C;&#xB4DC; &#xCEF4;&#xD3EC;&#xB10C;&#xD2B8;&quot;&#xB294; &#xC544;&#xB2D9;&#xB2C8;&#xB2E4;. Git forge, artifact repository, ingress controller, load balancer, storage, DNS&#xB294; &#xD2B8;&#xB80C;&#xB4DC;&#xB77C;&#xAE30;&#xBCF4;&#xB2E4; &#xD50C;&#xB7AB;&#xD3FC;&#xC744; &#xAD74;&#xB7EC;&#xAC00;&#xAC8C; &#xD558;&#xB294; &#xAE30;&#xBC18;&#xC785;&#xB2C8;&#xB2E4;. &#xBC18;&#xB300;&#xB85C; Tekton Chains/Results, Resolvers, Argo CD, Argo Rollouts, Harbor SBOM/signing, SonarQube new-code gate, Trivy SBOM/Kubernetes scanning, OAuth2 Proxy SSO&#xB294; &#xC55E;&#xC73C;&#xB85C; &#xC6B4;&#xC601; &#xC131;&#xC219;&#xB3C4;&#xB97C; &#xC62C;&#xB9AC;&#xB294; &#xBC29;&#xD5A5;&#xC131;&#xACFC; &#xC9C1;&#xC811; &#xC5F0;&#xACB0;&#xB429;&#xB2C8;&#xB2E4;.</p><!--kg-card-begin: html--><table>
 <thead><tr><th>&#xBD84;&#xB958;</th><th>&#xCEF4;&#xD3EC;&#xB10C;&#xD2B8;</th><th>&#xC6B4;&#xC601; &#xD310;&#xB2E8;</th></tr></thead>
 <tbody>
 <tr><td>&#xAC15;&#xD654; &#xC6B0;&#xC120;</td><td>Tekton Chains, Results, Resolvers</td><td>&#xC99D;&#xAC70;, &#xC7AC;&#xC0AC;&#xC6A9;, provenance&#xAC00; &#xBD80;&#xC871;&#xD558;&#xBA74; &#xC6B4;&#xC601; &#xD655;&#xC7A5;&#xC774; &#xB9C9;&#xD799;&#xB2C8;&#xB2E4;.</td></tr>
 <tr><td>&#xAC15;&#xD654; &#xC6B0;&#xC120;</td><td>Argo CD, Argo Rollouts</td><td>GitOps&#xC640; progressive delivery&#xB294; &#xBC30;&#xD3EC; &#xC548;&#xC815;&#xC131;&#xC758; &#xC911;&#xC2EC;&#xC785;&#xB2C8;&#xB2E4;.</td></tr>
 <tr><td>&#xAC15;&#xD654; &#xC6B0;&#xC120;</td><td>Harbor SBOM/signing/scanning</td><td>registry&#xB97C; &#xC2E0;&#xB8B0; &#xD5C8;&#xBE0C;&#xB85C; &#xB9CC;&#xB4E4;&#xC5B4;&#xC57C; &#xD569;&#xB2C8;&#xB2E4;.</td></tr>
 <tr><td>&#xC815;&#xCC45;&#xD654; &#xD544;&#xC694;</td><td>SonarQube, Trivy, Polaris, ZAP</td><td>&#xACB0;&#xACFC;&#xB97C; &#xC313;&#xB294; &#xAC83;&#xBCF4;&#xB2E4; fail-fast gate &#xAE30;&#xC900;&#xC774; &#xC911;&#xC694;&#xD569;&#xB2C8;&#xB2E4;.</td></tr>
 <tr><td>&#xAE30;&#xBC18; &#xC548;&#xC815;&#xD654;</td><td>Git forge, artifact repository, ingress, OAuth2 Proxy</td><td>&#xACE0;&#xAC00;&#xC6A9;&#xC131;, &#xBC31;&#xC5C5;, OIDC/RBAC, TLS, DNS &#xC815;&#xD569;&#xC131;&#xC774; &#xC6B0;&#xC120;&#xC785;&#xB2C8;&#xB2E4;.</td></tr>
 </tbody>
 </table><!--kg-card-end: html--><h2 id="12-%EC%B6%94%EC%B2%9C%ED%95%98%EB%8A%94-%EC%9D%B4%EB%8F%99-%EC%88%9C%EC%84%9C">12. &#xCD94;&#xCC9C;&#xD558;&#xB294; &#xC774;&#xB3D9; &#xC21C;&#xC11C;</h2><ol><li><strong>&#xC774;&#xBBF8;&#xC9C0; &#xD0DC;&#xADF8; &#xAE30;&#xC900; &#xC815;&#xB9AC;</strong>: &#xAC1C;&#xBC1C;, &#xAC80;&#xC99D;, &#xC6B4;&#xC601; &#xBC30;&#xD3EC;&#xC5D0;&#xC11C; tag&#xC640; digest&#xB97C; &#xC5B4;&#xB5A4; &#xAE30;&#xC900;&#xC73C;&#xB85C; &#xC4F8;&#xC9C0; &#xBA3C;&#xC800; &#xC815;&#xD569;&#xB2C8;&#xB2E4;.</li><li><strong>Pipeline catalog&#xB97C; resolver &#xAE30;&#xC900;&#xC73C;&#xB85C; &#xC815;&#xB9AC;</strong>: &#xACF5;&#xD1B5; Task/Pipeline&#xC744; Git repo &#xB610;&#xB294; OCI artifact &#xAE30;&#xC900;&#xC73C;&#xB85C; version pinning&#xD569;&#xB2C8;&#xB2E4;.</li><li><strong>Results&#xB97C; &#xAE30;&#xBCF8; &#xC99D;&#xAC70; &#xC800;&#xC7A5;&#xC18C;&#xB85C; &#xB460;</strong>: PipelineRun &#xC131;&#xACF5;/&#xC2E4;&#xD328;, &#xB85C;&#xADF8;, artifact digest, &#xBC30;&#xD3EC; &#xACB0;&#xACFC;&#xB97C; &#xC7A5;&#xAE30; &#xC870;&#xD68C; &#xAC00;&#xB2A5;&#xD558;&#xAC8C; &#xB461;&#xB2C8;&#xB2E4;.</li><li><strong>Chains + Harbor signature/SBOM &#xC5F0;&#xACB0;</strong>: build provenance, image digest, SBOM, signature&#xB97C; &#xB9B4;&#xB9AC;&#xC2A4; &#xC99D;&#xAC70;&#xB85C; &#xBB36;&#xC2B5;&#xB2C8;&#xB2E4;.</li><li><strong>GitOps sync&#xC640; Rollouts&#xB97C; &#xD45C;&#xC900; CD&#xB85C; &#xB460;</strong>: kubectl apply &#xC911;&#xC2EC; &#xBC30;&#xD3EC;&#xB294; smoke&#xB098; &#xAE34;&#xAE09; lane&#xC73C;&#xB85C; &#xC881;&#xD788;&#xACE0;, &#xC6B4;&#xC601; &#xBC30;&#xD3EC;&#xB294; Argo CD&#xC640; Rollouts&#xB85C; &#xBCF4;&#xB0C5;&#xB2C8;&#xB2E4;.</li><li><strong>&#xD488;&#xC9C8;/&#xBCF4;&#xC548; gate&#xB97C; fail-fast&#xB85C; &#xB9CC;&#xB4E6;</strong>: SonarQube new-code gate, Trivy/SBOM scan, Polaris manifest check&#xB97C; &#xD1B5;&#xACFC; &#xAE30;&#xC900;&#xC73C;&#xB85C; &#xB461;&#xB2C8;&#xB2E4;.</li><li><strong>SSO&#xC640; credential &#xC8FC;&#xC785; &#xACBD;&#xACC4; &#xC815;&#xB9AC;</strong>: UI &#xD45C;&#xBA74;&#xC740; OIDC/RBAC&#xB85C; &#xBB36;&#xACE0;, pipeline credential&#xC740; Secret manager&#xB098; Kubernetes Secret&#xC744; &#xD1B5;&#xD574; &#xC8FC;&#xC785;&#xD569;&#xB2C8;&#xB2E4;.</li></ol><h2 id="%EC%A0%95%EB%A6%AC">&#xC815;&#xB9AC;</h2><p>Kubernetes &#xAE30;&#xBC18; CI/CD&#xC5D0;&#xC11C; &#xC911;&#xC694;&#xD55C; &#xAD6C;&#xC131; &#xC694;&#xC18C;&#xB294; &quot;&#xC0C8; &#xB3C4;&#xAD6C;&#xB97C; &#xB354; &#xC124;&#xCE58;&#xD558;&#xB294; &#xAC83;&quot;&#xBCF4;&#xB2E4; &quot;&#xAC01; &#xB3C4;&#xAD6C;&#xC758; &#xC6B4;&#xC601; &#xC5ED;&#xD560;&#xC744; &#xBA85;&#xD655;&#xD788; &#xB098;&#xB204;&#xB294; &#xAC83;&quot;&#xC5D0; &#xAC00;&#xAE5D;&#xC2B5;&#xB2C8;&#xB2E4;. Tekton&#xC740; Kubernetes-native CI &#xC2E4;&#xD589;&#xBA74;, Argo CD&#xB294; GitOps desired state, Argo Rollouts&#xB294; progressive delivery, Harbor&#xB294; SBOM/signature/vulnerability &#xC911;&#xC2EC; trust hub, SonarQube&#xC640; Trivy&#xB294; quality/security gate, OAuth2 Proxy&#xC640; OIDC&#xB294; &#xC6B4;&#xC601; UI &#xBCF4;&#xD638;&#xBA74;&#xC73C;&#xB85C; &#xBCF4;&#xBA74; &#xB429;&#xB2C8;&#xB2E4;.</p><p>&#xB530;&#xB77C;&#xC11C; &#xB2E4;&#xC74C; &#xAC1C;&#xC120; &#xBC29;&#xD5A5;&#xC740; &#xB2E8;&#xC21C; &#xAE30;&#xB2A5; &#xCD94;&#xAC00;&#xAC00; &#xC544;&#xB2C8;&#xB77C; &#xC99D;&#xAC70; &#xC911;&#xC2EC; &#xBC30;&#xD3EC;&#xC785;&#xB2C8;&#xB2E4;. &#xC5B4;&#xB5A4; commit&#xC774; &#xC5B4;&#xB5A4; PipelineRun&#xC73C;&#xB85C; &#xC5B4;&#xB5A4; digest&#xB97C; &#xB9CC;&#xB4E4;&#xC5C8;&#xACE0;, &#xC5B4;&#xB5A4; SBOM&#xACFC; scan &#xACB0;&#xACFC;&#xB97C; &#xD1B5;&#xACFC;&#xD588;&#xC73C;&#xBA70;, &#xC5B4;&#xB5A4; Argo CD revision&#xC73C;&#xB85C; &#xC5B4;&#xB5A4; health check&#xB97C; &#xD655;&#xC778;&#xD588;&#xB294;&#xC9C0; &#xB0A8;&#xAE30;&#xB294; &#xAD6C;&#xC870;&#xAC00; Kubernetes &#xAE30;&#xBC18; CI/CD&#xC758; &#xB2E4;&#xC74C; &#xB2E8;&#xACC4;&#xC785;&#xB2C8;&#xB2E4;.</p><h2 id="%EA%B3%B5%EC%8B%9D-%EB%AC%B8%EC%84%9C-%EB%A7%81%ED%81%AC">&#xACF5;&#xC2DD; &#xBB38;&#xC11C; &#xB9C1;&#xD06C;</h2><ul><li><a href="https://docs.gitea.com/" rel="noopener">Gitea documentation</a></li><li><a href="https://forgejo.org/compare/" rel="noopener">Forgejo and forge comparison</a></li><li><a href="https://tekton.dev/" rel="noopener">Tekton overview</a></li><li><a href="https://tekton.dev/docs/chains/slsa-provenance/" rel="noopener">Tekton Chains SLSA provenance</a></li><li><a href="https://tekton.dev/docs/results/api/" rel="noopener">Tekton Results API</a></li><li><a href="https://tekton.dev/docs/pipelines/resolution/" rel="noopener">Tekton Pipeline Remote Resolution</a></li><li><a href="https://www.jenkins.io/doc/" rel="noopener">Jenkins documentation</a></li><li><a href="https://argo-cd.readthedocs.io/en/stable/" rel="noopener">Argo CD GitOps overview</a></li><li><a href="https://fluxcd.io/flux/" rel="noopener">Flux documentation</a></li><li><a href="https://argo-rollouts.readthedocs.io/en/stable/" rel="noopener">Argo Rollouts progressive delivery</a></li><li><a href="https://fluxcd.io/flagger/" rel="noopener">Flagger progressive delivery</a></li><li><a href="https://goharbor.io/" rel="noopener">Harbor overview</a></li><li><a href="https://goharbor.io/docs/2.11.0/administration/sbom-integration/" rel="noopener">Harbor SBOM integration</a></li><li><a href="https://goharbor.io/docs/2.13.0/working-with-projects/working-with-images/sign-images/" rel="noopener">Harbor artifact signing</a></li><li><a href="https://docs.sigstore.dev/cosign/signing/overview/" rel="noopener">Sigstore Cosign keyless signing</a></li><li><a href="https://www.sonarsource.com/open-source-editions/sonarqube-community-edition/" rel="noopener">SonarQube Community Build</a></li><li><a href="https://docs.sonarsource.com/sonarqube-server/9.8/user-guide/clean-as-you-code" rel="noopener">SonarQube Clean as You Code</a></li><li><a href="https://trivy.dev/docs/latest/target/sbom/" rel="noopener">Trivy SBOM scanning</a></li><li><a href="https://anchore.com/opensource/" rel="noopener">Anchore Syft and Grype</a></li><li><a href="https://docs.semgrep.dev/" rel="noopener">Semgrep documentation</a></li><li><a href="https://codeql.github.com/docs/" rel="noopener">CodeQL documentation</a></li><li><a href="https://kyverno.io/docs/introduction/" rel="noopener">Kyverno introduction</a></li><li><a href="https://open-policy-agent.github.io/gatekeeper/website/docs/" rel="noopener">OPA Gatekeeper introduction</a></li><li><a href="https://oauth2-proxy.github.io/oauth2-proxy/configuration/overview/" rel="noopener">OAuth2 Proxy reverse proxy configuration</a></li></ul>]]></content:encoded></item><item><title><![CDATA[공인 인터넷풀부터 VM NIC까지 트래픽 추적 디버깅]]></title><description><![CDATA[광역 공인 인터넷풀, 엣지 라우팅, 내부 L3/방화벽, Virtual Router/NAT, 하이퍼바이저 브리지와 VM NIC까지 같은 흐름으로 따라가며 패킷이 어디서 사라지는지 좁히는 운영 절차입니다.]]></description><link>https://devmes.com/internet-pool-internal-virtual-traffic-debugging/</link><guid isPermaLink="false">6a3b63e681de1a000182fb7f</guid><category><![CDATA[Cloud Operations]]></category><category><![CDATA[Network]]></category><category><![CDATA[Packet Trace]]></category><category><![CDATA[Internet Edge]]></category><category><![CDATA[Routing]]></category><category><![CDATA[Virtualization]]></category><category><![CDATA[Troubleshooting]]></category><dc:creator><![CDATA[devmes]]></dc:creator><pubDate>Wed, 24 Jun 2026 04:58:14 GMT</pubDate><content:encoded><![CDATA[<p>&#xD074;&#xB77C;&#xC6B0;&#xB4DC; &#xB124;&#xD2B8;&#xC6CC;&#xD06C; &#xC7A5;&#xC560;&#xC5D0;&#xC11C; &#x201C;&#xACF5;&#xC778; IP&#xB294; &#xC5F4;&#xB824; &#xC788;&#xB2E4;&#x201D;, &#x201C;&#xBC29;&#xD654;&#xBCBD; &#xC815;&#xCC45;&#xB3C4; &#xC788;&#xB2E4;&#x201D;, &#x201C;VM&#xB3C4; &#xCF1C;&#xC838; &#xC788;&#xB2E4;&#x201D;&#xB294; &#xB9D0;&#xC740; &#xCDA9;&#xBD84;&#xD55C; &#xD310;&#xC815;&#xC774; &#xC544;&#xB2D9;&#xB2C8;&#xB2E4;. &#xAD11;&#xC5ED; &#xACF5;&#xC778; &#xC778;&#xD130;&#xB137;&#xD480;&#xC5D0;&#xC11C; &#xC2DC;&#xC791;&#xD55C; &#xD328;&#xD0B7;&#xC774; &#xC5E3;&#xC9C0;, &#xB0B4;&#xBD80; L3, NAT/Virtual Router, &#xD558;&#xC774;&#xD37C;&#xBC14;&#xC774;&#xC800; &#xAC00;&#xC0C1; &#xC2A4;&#xC704;&#xCE58;, VM NIC &#xC911; &#xC5B4;&#xB514;&#xAE4C;&#xC9C0; &#xB3C4;&#xCC29;&#xD588;&#xB294;&#xC9C0; &#xAC19;&#xC740; &#xC2DC;&#xAC04;&#xB300;&#xC758; &#xC99D;&#xAC70;&#xB85C; &#xB04A;&#xC5B4; &#xBD10;&#xC57C; &#xD569;&#xB2C8;&#xB2E4;.</p><p>&#xACF5;&#xC778; &#xC778;&#xD130;&#xB137;&#xD480;&#xC5D0;&#xC11C; Virtual Router&#xC640; VM NIC&#xAE4C;&#xC9C0; &#xD2B8;&#xB798;&#xD53D;&#xC774; &#xC5B4;&#xB514;&#xC5D0;&#xC11C; &#xBA48;&#xCD94;&#xB294;&#xC9C0; &#xD655;&#xC778;&#xD558;&#xB294; &#xC808;&#xCC28;&#xC785;&#xB2C8;&#xB2E4;. &#xBA85;&#xB839;&#xC740; &#xC2B9;&#xC778;&#xB41C; &#xC7A5;&#xC560; &#xB300;&#xC751; &#xB300;&#xC0C1;&#xC5D0;&#xC11C;&#xB9CC; &#xC2E4;&#xD589;&#xD569;&#xB2C8;&#xB2E4;. &#xBA85;&#xB839;&#xC740; &#xBCF8;&#xC778;&#xC5D0;&#xAC8C; &#xAD8C;&#xD55C;&#xC774; &#xC788;&#xB294; &#xC2DC;&#xC2A4;&#xD15C;&#xACFC; &#xC2B9;&#xC778;&#xB41C; &#xC7A5;&#xC560; &#xB300;&#xC751; &#xBC94;&#xC704; &#xC548;&#xC5D0;&#xC11C;&#xB9CC; &#xC2E4;&#xD589;&#xD574;&#xC57C; &#xD569;&#xB2C8;&#xB2E4;.</p><h2 id="1-%EC%A0%84%EC%B2%B4-%EA%B2%BD%EB%A1%9C%EB%A5%BC-%ED%95%9C-%EC%A4%84%EB%A1%9C-%EA%B3%A0%EC%A0%95%ED%95%9C%EB%8B%A4">1. &#xC804;&#xCCB4; &#xACBD;&#xB85C;&#xB97C; &#xD55C; &#xC904;&#xB85C; &#xACE0;&#xC815;&#xD55C;&#xB2E4;</h2><p>&#xCC98;&#xC74C;&#xBD80;&#xD130; &#xC7A5;&#xBE44;&#xBCC4; &#xB2F4;&#xB2F9;&#xC790;&#xC5D0;&#xAC8C; &#xD769;&#xC5B4;&#xC838; &#xBB3C;&#xC73C;&#xBA74; &#xC2DC;&#xAC04;&#xC774; &#xC624;&#xB798; &#xAC78;&#xB9BD;&#xB2C8;&#xB2E4;. &#xBA3C;&#xC800; &#xD328;&#xD0B7;&#xC774; &#xC9C0;&#xB098;&#xC57C; &#xD558;&#xB294; &#xACBD;&#xB85C;&#xB97C; &#xD55C; &#xC904;&#xB85C; &#xC801;&#xACE0;, &#xAC01; &#xAD6C;&#xAC04;&#xB9C8;&#xB2E4; &#x201C;&#xBD24;&#xB2E4;/&#xBABB; &#xBD24;&#xB2E4;&#x201D;&#xB97C; &#xCC44;&#xC6B0;&#xB294; &#xBC29;&#xC2DD;&#xC73C;&#xB85C; &#xC881;&#xD600;&#xC57C; &#xD569;&#xB2C8;&#xB2E4;.</p><pre><code class="language-text">Internet client
  -&gt; ISP / external routing
  -&gt; edge router / upstream firewall
  -&gt; public internet pool / VIP / floating IP
  -&gt; internal L3 gateway or firewall
  -&gt; Virtual Router / NAT gateway external interface
  -&gt; DNAT / SNAT / policy route / conntrack
  -&gt; Virtual Router / NAT gateway internal interface
  -&gt; hypervisor bridge / OVS / tap-vif
  -&gt; VM NIC
  -&gt; OS firewall / service socket</code></pre><p>&#xC774; &#xACBD;&#xB85C;&#xB97C; &#xC368; &#xB193;&#xC73C;&#xBA74; &#x201C;&#xACF5;&#xC778;&#xD480; &#xBB38;&#xC81C;&#xC778;&#xC9C0;&#x201D;, &#x201C;&#xB0B4;&#xBD80; &#xBC29;&#xD654;&#xBCBD; &#xBB38;&#xC81C;&#xC778;&#xC9C0;&#x201D;, &#x201C;&#xAC00;&#xC0C1;&#xD654; &#xAD6C;&#xAC04; &#xBB38;&#xC81C;&#xC778;&#xC9C0;&#x201D;&#xB97C; &#xAC10;&#xC73C;&#xB85C; &#xB9D0;&#xD558;&#xC9C0; &#xC54A;&#xAC8C; &#xB429;&#xB2C8;&#xB2E4;. &#xAC19;&#xC740; 5-tuple&#xC744; &#xAC01; &#xC9C0;&#xC810;&#xC5D0;&#xC11C; &#xD655;&#xC778;&#xD558;&#xB294; &#xAC83;&#xC774; &#xD575;&#xC2EC;&#xC785;&#xB2C8;&#xB2E4;.</p><h2 id="2-%EC%B6%94%EC%A0%81-%ED%8A%9C%ED%94%8C%EA%B3%BC-%EA%B4%80%EC%B8%A1-%EC%A7%80%EC%A0%90%EC%9D%84-%EB%A8%BC%EC%A0%80-%EC%A0%95%ED%95%9C%EB%8B%A4">2. &#xCD94;&#xC801; &#xD29C;&#xD50C;&#xACFC; &#xAD00;&#xCE21; &#xC9C0;&#xC810;&#xC744; &#xBA3C;&#xC800; &#xC815;&#xD55C;&#xB2E4;</h2><p>&#xC7A5;&#xC560; &#xC124;&#xBA85;&#xC744; &#x201C;&#xC811;&#xC18D; &#xC548; &#xB428;&#x201D;&#xC73C;&#xB85C; &#xB450;&#xBA74; &#xCEA1;&#xCC98; &#xACB0;&#xACFC;&#xB97C; &#xC11C;&#xB85C; &#xBE44;&#xAD50;&#xD560; &#xC218; &#xC5C6;&#xC2B5;&#xB2C8;&#xB2E4;. &#xCD9C;&#xBC1C;&#xC9C0;, &#xBAA9;&#xC801; &#xACF5;&#xC778; IP, &#xD3EC;&#xD2B8;, DNAT &#xD6C4; &#xC0AC;&#xC124; IP, &#xAC00;&#xC0C1; NIC&#xC758; MAC, &#xD558;&#xC774;&#xD37C;&#xBC14;&#xC774;&#xC800; &#xBE0C;&#xB9AC;&#xC9C0;&#xB97C; &#xBA3C;&#xC800; &#xACE0;&#xC815;&#xD569;&#xB2C8;&#xB2E4;.</p><pre><code class="language-text">client            : 198.51.100.50
public pool       : 203.0.113.0/24
public IP         : 203.0.113.10
protocol/port     : tcp/443
internal transit  : 172.16.10.0/24
nat external      : eth2
nat internal      : eth0
vm private IP     : 10.10.0.25
vm mac            : 52:54:00:aa:bb:cc
hypervisor bridge : br-int / qbr / vif
service           : 10.10.0.25:443</code></pre><p>&#xD2B9;&#xC815; &#xCD9C;&#xBC1C;&#xC9C0;&#xB9CC; &#xC2E4;&#xD328;&#xD558;&#xB294;&#xC9C0;, &#xC804;&#xCCB4; &#xCD9C;&#xBC1C;&#xC9C0;&#xAC00; &#xC2E4;&#xD328;&#xD558;&#xB294;&#xC9C0;, &#xAC19;&#xC740; &#xACF5;&#xC778; &#xD480;&#xC758; &#xB2E4;&#xB978; IP&#xB294; &#xC815;&#xC0C1;&#xC778;&#xC9C0;&#xB3C4; &#xAC19;&#xC774; &#xC801;&#xC2B5;&#xB2C8;&#xB2E4;. &#xC774; &#xC138; &#xAC00;&#xC9C0;&#xAC00; &#xC5C6;&#xC73C;&#xBA74; &#xB77C;&#xC6B0;&#xD305;, &#xBC29;&#xD654;&#xBCBD;, NAT, VM &#xC11C;&#xBE44;&#xC2A4; &#xC911; &#xC5B4;&#xB514;&#xB97C; &#xBA3C;&#xC800; &#xBD10;&#xC57C; &#xD558;&#xB294;&#xC9C0; &#xD754;&#xB4E4;&#xB9BD;&#xB2C8;&#xB2E4;.</p><h2 id="3-%EA%B3%B5%EC%9D%B8-%EC%9D%B8%ED%84%B0%EB%84%B7%ED%92%80%EA%B3%BC-%EC%97%A3%EC%A7%80%EC%97%90%EC%84%9C-%EB%A8%BC%EC%A0%80-%EB%B3%B8%EB%8B%A4">3. &#xACF5;&#xC778; &#xC778;&#xD130;&#xB137;&#xD480;&#xACFC; &#xC5E3;&#xC9C0;&#xC5D0;&#xC11C; &#xBA3C;&#xC800; &#xBCF8;&#xB2E4;</h2><p>&#xACF5;&#xC778; IP&#xAC00; &#xD074;&#xB77C;&#xC6B0;&#xB4DC; &#xD3EC;&#xD138;&#xC5D0; &#xD560;&#xB2F9;&#xB418;&#xC5B4; &#xC788;&#xC5B4;&#xB3C4; &#xC678;&#xBD80; &#xACBD;&#xB85C;&#xC5D0;&#xC11C; &#xADF8; prefix&#xAC00; &#xC81C;&#xB300;&#xB85C; &#xAD11;&#xACE0;&#xB418;&#xACE0;, &#xC5E3;&#xC9C0; &#xC7A5;&#xBE44;&#xAC00; &#xD574;&#xB2F9; IP&#xB97C; &#xC54C;&#xACE0;, &#xC0C1;&#xB2E8; &#xBC29;&#xD654;&#xBCBD; &#xC138;&#xC158;&#xC774; &#xB9CC;&#xB4E4;&#xC5B4;&#xC9C0;&#xB294;&#xC9C0;&#xB294; &#xBCC4;&#xB3C4; &#xBB38;&#xC81C;&#xC785;&#xB2C8;&#xB2E4;. &#xBA3C;&#xC800; &#xACF5;&#xC778;&#xD480;&#xACFC; &#xC5E3;&#xC9C0;&#xC5D0;&#xC11C; &#xD328;&#xD0B7; &#xC9C4;&#xC785; &#xC5EC;&#xBD80;&#xB97C; &#xD655;&#xC778;&#xD569;&#xB2C8;&#xB2E4;.</p><pre><code class="language-bash">CLIENT=198.51.100.50
PUBLIC_IP=203.0.113.10
PUBLIC_POOL=203.0.113.0/24
PORT=443

# &#xC678;&#xBD80; &#xD14C;&#xC2A4;&#xD2B8; &#xC9C0;&#xC810;&#xC5D0;&#xC11C; &#xC99D;&#xC0C1;&#xC744; &#xBA3C;&#xC800; &#xACE0;&#xC815;&#xD55C;&#xB2E4;.
traceroute -n -T -p &quot;${PORT}&quot; &quot;${PUBLIC_IP}&quot;
mtr -n -T -P &quot;${PORT}&quot; &quot;${PUBLIC_IP}&quot;
nc -vz -w 3 &quot;${PUBLIC_IP}&quot; &quot;${PORT}&quot;

# Linux edge &#xB610;&#xB294; route reflector&#xC5D0;&#xC11C; &#xBCF4;&#xB294; &#xAE30;&#xBCF8; &#xD655;&#xC778; &#xC608;&#xC2DC;.
ip route get &quot;${PUBLIC_IP}&quot;
ip route show table all | grep -E &quot;203\.0\.113|default&quot;
ip neigh show | grep &quot;${PUBLIC_IP}&quot; || true

# &#xB124;&#xD2B8;&#xC6CC;&#xD06C; &#xC7A5;&#xBE44; CLI&#xB294; &#xC7A5;&#xBE44;&#xBCC4; &#xBB38;&#xBC95;&#xC774; &#xB2E4;&#xB974;&#xBBC0;&#xB85C; &#xAC19;&#xC740; &#xD56D;&#xBAA9;&#xC744; &#xD655;&#xC778;&#xD55C;&#xB2E4;.
show ip route 203.0.113.10
show ip bgp 203.0.113.0/24
show arp | include 203.0.113.10
show firewall session source 198.51.100.50 destination 203.0.113.10 destination-port 443</code></pre><p>&#xC5EC;&#xAE30;&#xC11C; &#xC911;&#xC694;&#xD55C; &#xAC83;&#xC740; &#x201C;&#xB77C;&#xC6B0;&#xD2B8;&#xAC00; &#xC788;&#xB2E4;&#x201D; &#xD558;&#xB098;&#xB85C; &#xB05D;&#xB0B4;&#xC9C0; &#xC54A;&#xB294; &#xAC83;&#xC785;&#xB2C8;&#xB2E4;. prefix &#xAD11;&#xACE0;, next-hop, ARP/ND, &#xBC29;&#xD654;&#xBCBD; &#xC138;&#xC158;, deny counter, return route&#xB97C; &#xAC19;&#xC774; &#xBD10;&#xC57C; &#xD569;&#xB2C8;&#xB2E4;. &#xD2B9;&#xD788; outbound return route&#xAC00; &#xB2E4;&#xB978; &#xC7A5;&#xBE44;&#xB85C; &#xBE60;&#xC9C0;&#xBA74; &#xC678;&#xBD80;&#xC5D0;&#xC11C;&#xB294; timeout&#xC73C;&#xB85C;&#xB9CC; &#xBCF4;&#xC785;&#xB2C8;&#xB2E4;.</p><h2 id="4-%EC%97%A3%EC%A7%80-outsideinside%EB%8A%94-%EB%8F%99%EC%8B%9C%EC%97%90-%EC%BA%A1%EC%B2%98%ED%95%9C%EB%8B%A4">4. &#xC5E3;&#xC9C0; outside/inside&#xB294; &#xB3D9;&#xC2DC;&#xC5D0; &#xCEA1;&#xCC98;&#xD55C;&#xB2E4;</h2><p>&#xC5E3;&#xC9C0; outside&#xC5D0;&#xC11C; SYN&#xC774; &#xBCF4;&#xC774;&#xB294;&#xB370; inside&#xB85C; &#xC548; &#xB118;&#xC5B4;&#xAC00;&#xBA74; &#xC5E3;&#xC9C0; &#xBC29;&#xD654;&#xBCBD;, VIP/FIP, NAT, &#xC815;&#xCC45; &#xB77C;&#xC6B0;&#xD305; &#xBB38;&#xC81C;&#xC785;&#xB2C8;&#xB2E4;. outside&#xC5D0;&#xC11C;&#xB3C4; &#xC548; &#xBCF4;&#xC774;&#xBA74; &#xD074;&#xB77C;&#xC774;&#xC5B8;&#xD2B8;, ISP, upstream route &#xCABD;&#xC785;&#xB2C8;&#xB2E4;. &#xB450; &#xC9C0;&#xC810;&#xC744; &#xAC19;&#xC740; &#xC2DC;&#xAC01;&#xC5D0; &#xC7A1;&#xC544;&#xC57C; &#xB9D0;&#xC774; &#xAC08;&#xB9AC;&#xC9C0; &#xC54A;&#xC2B5;&#xB2C8;&#xB2E4;.</p><pre><code class="language-bash">CLIENT=198.51.100.50
PUBLIC_IP=203.0.113.10
PORT=443
STAMP=$(date +%Y%m%d_%H%M%S)

timeout 90 tcpdump -nn -s0 -B 8192 -i edge-outside \
  &quot;host ${CLIENT} and host ${PUBLIC_IP} and tcp port ${PORT}&quot; \
  -w /var/tmp/edge-outside-${STAMP}.pcap &amp;

timeout 90 tcpdump -nn -s0 -B 8192 -i edge-inside \
  &quot;host ${CLIENT} and host ${PUBLIC_IP} and tcp port ${PORT}&quot; \
  -w /var/tmp/edge-inside-${STAMP}.pcap &amp;

wait

tcpdump -nn -r /var/tmp/edge-outside-${STAMP}.pcap | head -n 40
tcpdump -nn -r /var/tmp/edge-inside-${STAMP}.pcap | head -n 40</code></pre><p>&#xCEA1;&#xCC98;&#xB294; &#xD654;&#xBA74; &#xBA87; &#xC904;&#xBCF4;&#xB2E4; pcap&#xC73C;&#xB85C; &#xB0A8;&#xAE30;&#xB294; &#xD3B8;&#xC774; &#xB0AB;&#xC2B5;&#xB2C8;&#xB2E4;. &#xC7A5;&#xC560;&#xAC00; &#xB05D;&#xB09C; &#xB4A4;&#xC5D0;&#xB3C4; SYN, SYN-ACK, RST, ICMP fragmentation needed, TTL &#xBCC0;&#xD654;&#xB97C; &#xB2E4;&#xC2DC; &#xBCFC; &#xC218; &#xC788;&#xAE30; &#xB54C;&#xBB38;&#xC785;&#xB2C8;&#xB2E4;.</p><h2 id="5-%EB%82%B4%EB%B6%80-l3%EB%B0%A9%ED%99%94%EB%B2%BD-%EA%B5%AC%EA%B0%84%EC%9D%80-%EC%A0%95%EC%B1%85-%EB%9D%BC%EC%9A%B0%ED%8C%85%EA%B3%BC-%EC%97%AD%EB%B0%A9%ED%96%A5%EC%9D%84-%EB%B3%B8%EB%8B%A4">5. &#xB0B4;&#xBD80; L3/&#xBC29;&#xD654;&#xBCBD; &#xAD6C;&#xAC04;&#xC740; &#xC815;&#xCC45; &#xB77C;&#xC6B0;&#xD305;&#xACFC; &#xC5ED;&#xBC29;&#xD5A5;&#xC744; &#xBCF8;&#xB2E4;</h2><p>&#xC5E3;&#xC9C0; &#xC548;&#xCABD;&#xAE4C;&#xC9C0; &#xB4E4;&#xC5B4;&#xC628; &#xD328;&#xD0B7;&#xC774; NAT/Virtual Router&#xB85C; &#xAC00;&#xC9C0; &#xC54A;&#xC73C;&#xBA74; &#xB0B4;&#xBD80; &#xAD6C;&#xAC04;&#xC785;&#xB2C8;&#xB2E4;. &#xC774;&#xB54C;&#xB294; &#xBAA9;&#xC801;&#xC9C0;&#xB85C; &#xAC00;&#xB294; forward route&#xB9CC; &#xBCF4;&#xC9C0; &#xB9D0;&#xACE0;, &#xCD9C;&#xBC1C;&#xC9C0;&#xB85C; &#xB3CC;&#xC544;&#xAC00;&#xB294; return path&#xC640; policy routing&#xC744; &#xAC19;&#xC774; &#xBD10;&#xC57C; &#xD569;&#xB2C8;&#xB2E4;.</p><pre><code class="language-bash">PUBLIC_IP=203.0.113.10
PRIVATE_IP=10.10.0.25
TRANSIT_SRC=172.16.10.10
PORT=443

ip route get &quot;${PRIVATE_IP}&quot; from &quot;${TRANSIT_SRC}&quot;
ip rule show
ip route show table all | grep -E &quot;203\.0\.113|172\.16\.10|10\.10\.0&quot;

nft list ruleset | grep -E &quot;203\.0\.113|172\.16\.10|10\.10\.0|dport ${PORT}&quot; || true
iptables-save -t nat | grep -E &quot;203\.0\.113|10\.10\.0|dport ${PORT}&quot; || true
iptables-save -t filter | grep -E &quot;203\.0\.113|10\.10\.0|dport ${PORT}|DROP|REJECT&quot; || true

conntrack -L -p tcp 2&gt;/dev/null | grep -E &quot;203\.0\.113\.10|10\.10\.0\.25|dport=${PORT}|sport=${PORT}&quot; | head -n 80</code></pre><p>&#xBE44;&#xB300;&#xCE6D; &#xACBD;&#xB85C;&#xB294; &#xD754;&#xD55C; &#xD568;&#xC815;&#xC785;&#xB2C8;&#xB2E4;. &#xB4E4;&#xC5B4;&#xC624;&#xB294; &#xAE38;&#xC740; A &#xBC29;&#xD654;&#xBCBD;&#xC778;&#xB370; &#xB098;&#xAC00;&#xB294; &#xAE38;&#xC740; B &#xB77C;&#xC6B0;&#xD130;&#xB77C;&#xBA74; conntrack &#xAE30;&#xBC18; &#xC7A5;&#xBE44;&#xB294; &#xC138;&#xC158;&#xC744; &#xBABB; &#xB9DE;&#xCD94;&#xACE0; drop&#xD560; &#xC218; &#xC788;&#xC2B5;&#xB2C8;&#xB2E4;. &#xB0B4;&#xBD80; ACL counter&#xAC00; &#xC99D;&#xAC00;&#xD558;&#xB294;&#xC9C0;, default route&#xBCF4;&#xB2E4; &#xB354; &#xAD6C;&#xCCB4;&#xC801;&#xC778; route&#xAC00; &#xC788;&#xB294;&#xC9C0;&#xB3C4; &#xAC19;&#xC774; &#xBD05;&#xB2C8;&#xB2E4;.</p><h2 id="6-natvirtual-router%EC%97%90%EC%84%9C%EB%8A%94-nat-%EC%A0%84%ED%9B%84%EB%A5%BC-%EB%B6%84%EB%A6%AC%ED%95%9C%EB%8B%A4">6. NAT/Virtual Router&#xC5D0;&#xC11C;&#xB294; NAT &#xC804;&#xD6C4;&#xB97C; &#xBD84;&#xB9AC;&#xD55C;&#xB2E4;</h2><p>Virtual Router&#xB098; NAT gateway&#xC5D0;&#xC11C;&#xB294; external interface&#xC758; &#xACF5;&#xC778; IP &#xD750;&#xB984;&#xACFC; internal interface&#xC758; &#xC0AC;&#xC124; IP &#xD750;&#xB984;&#xC774; &#xAC19;&#xC740; &#xC694;&#xCCAD;&#xC778;&#xC9C0; &#xC5F0;&#xACB0;&#xD574;&#xC57C; &#xD569;&#xB2C8;&#xB2E4;. external&#xC5D0;&#xB9CC; &#xC788;&#xACE0; internal&#xC5D0; &#xC5C6;&#xC73C;&#xBA74; NAT, filter, interface mapping, conntrack &#xBB38;&#xC81C;&#xB85C; &#xC881;&#xD600;&#xC9D1;&#xB2C8;&#xB2E4;.</p><pre><code class="language-bash">CLIENT=198.51.100.50
PUBLIC_IP=203.0.113.10
PRIVATE_IP=10.10.0.25
PORT=443
STAMP=$(date +%Y%m%d_%H%M%S)

ip -br addr
ip route

timeout 90 tcpdump -nn -s0 -B 8192 -i eth2 \
  &quot;host ${CLIENT} and host ${PUBLIC_IP} and tcp port ${PORT}&quot; \
  -w /root/nat-ext-${STAMP}.pcap &amp;

timeout 90 tcpdump -nn -s0 -B 8192 -i eth0 \
  &quot;host ${CLIENT} and host ${PRIVATE_IP} and tcp port ${PORT}&quot; \
  -w /root/nat-int-${STAMP}.pcap &amp;

wait

tcpdump -nn -r /root/nat-ext-${STAMP}.pcap | head -n 40
tcpdump -nn -r /root/nat-int-${STAMP}.pcap | head -n 40</code></pre><p>&#xB3D9;&#xC2DC;&#xC5D0; rule&#xACFC; counter&#xB3C4; &#xBD05;&#xB2C8;&#xB2E4;. rule &#xC874;&#xC7AC; &#xC5EC;&#xBD80;&#xB9CC; &#xBCF4;&#xBA74; &#xC548; &#xB429;&#xB2C8;&#xB2E4;. &#xD14C;&#xC2A4;&#xD2B8; &#xC804;&#xD6C4;&#xB85C; packet/byte counter&#xAC00; &#xC99D;&#xAC00;&#xD574;&#xC57C; &#xC2E4;&#xC81C; &#xD2B8;&#xB798;&#xD53D;&#xC774; &#xADF8; rule&#xC744; &#xD0C4; &#xAC83;&#xC785;&#xB2C8;&#xB2E4;.</p><pre><code class="language-bash">PUBLIC_IP=203.0.113.10
PRIVATE_IP=10.10.0.25
PORT=443

iptables-save -t nat | grep -E &quot;${PUBLIC_IP}|${PRIVATE_IP}|dport ${PORT}|--dport ${PORT}&quot;
iptables-save -t filter | grep -E &quot;${PUBLIC_IP}|${PRIVATE_IP}|dport ${PORT}|--dport ${PORT}|DROP|REJECT&quot;

iptables -t nat -L PREROUTING -nv --line-numbers | grep -E &quot;${PUBLIC_IP}|${PORT}&quot;
iptables -L -nv --line-numbers | grep -E &quot;${PRIVATE_IP}|${PORT}|DROP|REJECT&quot;

cat /proc/sys/net/netfilter/nf_conntrack_count 2&gt;/dev/null
cat /proc/sys/net/netfilter/nf_conntrack_max 2&gt;/dev/null
conntrack -S 2&gt;/dev/null || true
conntrack -L -p tcp 2&gt;/dev/null | grep -E &quot;${PUBLIC_IP}|${PRIVATE_IP}|dport=${PORT}|sport=${PORT}&quot; | head -n 80</code></pre><p>&#xC6B4;&#xC601; &#xC911;&#xC5D0;&#xB294; &#xC624;&#xB798;&#xB41C; interface &#xC815;&#xBCF4;&#xB098; stale NAT rule&#xB3C4; &#xD655;&#xC778;&#xD574;&#xC57C; &#xD569;&#xB2C8;&#xB2E4;. &#xACF5;&#xC778; subnet&#xC740; &#xD604;&#xC7AC; eth2&#xC5D0; &#xC788;&#xB294;&#xB370; DNAT rule&#xC774; &#xACFC;&#xAC70; eth3 &#xAE30;&#xC900;&#xC73C;&#xB85C; &#xB9CC;&#xB4E4;&#xC5B4;&#xC838; &#xC788;&#xC73C;&#xBA74; rule&#xC740; &#xC788;&#xC5B4;&#xB3C4; &#xD328;&#xD0B7;&#xC774; &#xC548; &#xB9DE;&#xC2B5;&#xB2C8;&#xB2E4;. conntrack table&#xC774; &#xAC00;&#xB4DD; &#xCC2C; &#xC0C1;&#xD669;&#xB3C4; &#xD3EC;&#xD2B8;&#xD3EC;&#xC6CC;&#xB529; &#xC7A5;&#xC560;&#xCC98;&#xB7FC; &#xBCF4;&#xC77C; &#xC218; &#xC788;&#xC2B5;&#xB2C8;&#xB2E4;.</p><h2 id="7-%ED%95%98%EC%9D%B4%ED%8D%BC%EB%B0%94%EC%9D%B4%EC%A0%80-%EA%B0%80%EC%83%81%EA%B5%AC%EA%B0%84%EC%9D%80-bridge-ovs-tapvif%EA%B9%8C%EC%A7%80-%EB%B3%B8%EB%8B%A4">7. &#xD558;&#xC774;&#xD37C;&#xBC14;&#xC774;&#xC800; &#xAC00;&#xC0C1;&#xAD6C;&#xAC04;&#xC740; bridge, OVS, tap/vif&#xAE4C;&#xC9C0; &#xBCF8;&#xB2E4;</h2><p>NAT internal&#xC5D0;&#xC11C; VM &#xC0AC;&#xC124; IP&#xB85C; &#xB098;&#xAC04; &#xD328;&#xD0B7;&#xC774; &#xD558;&#xC774;&#xD37C;&#xBC14;&#xC774;&#xC800; &#xBE0C;&#xB9AC;&#xC9C0;&#xC5D0;&#xC11C; &#xBCF4;&#xC774;&#xB294;&#xB370; VM NIC&#xC5D0;&#xC11C; &#xC548; &#xBCF4;&#xC774;&#xBA74; &#xAC00;&#xC0C1; &#xC2A4;&#xC704;&#xCE58; &#xAD6C;&#xAC04;&#xC785;&#xB2C8;&#xB2E4;. KVM&#xC774;&#xBA74; tap/qbr/br-int, OVS&#xBA74; port&#xC640; flow, Xen &#xACC4;&#xC5F4;&#xC774;&#xBA74; vif &#xC0C1;&#xD0DC;&#xC640; host &#xB85C;&#xADF8;&#xB97C; &#xBD05;&#xB2C8;&#xB2E4;.</p><pre><code class="language-bash">PRIVATE_IP=10.10.0.25
VM_MAC=52:54:00:aa:bb:cc
PORT=443

ip -br link
bridge link show
bridge fdb show | grep -i &quot;${VM_MAC}&quot; || true

ovs-vsctl show
ovs-ofctl dump-flows br-int | grep -Ei &quot;10\.10\.0\.25|52:54:00:aa:bb:cc|nw_dst|nw_src&quot; || true

timeout 60 tcpdump -nn -s0 -B 8192 -i br-int \
  &quot;host ${PRIVATE_IP} and tcp port ${PORT}&quot; \
  -w /var/tmp/hv-br-int-${PRIVATE_IP}.pcap

# tap/vif/qbr &#xC774;&#xB984;&#xC744; &#xCC3E;&#xC740; &#xB4A4; VM &#xD3EC;&#xD2B8; &#xC9C1;&#xC804;&#xC5D0;&#xC11C;&#xB3C4; &#xD55C; &#xBC88; &#xB354; &#xBCF8;&#xB2E4;.
timeout 60 tcpdump -nn -s0 -B 8192 -i &lt;tap-or-vif-interface&gt; \
  &quot;host ${PRIVATE_IP} and tcp port ${PORT}&quot; \
  -w /var/tmp/hv-vif-${PRIVATE_IP}.pcap</code></pre><p>&#xC5EC;&#xAE30;&#xC11C;&#xB294; VM IP&#xB9CC;&#xC73C;&#xB85C; &#xBD80;&#xC871;&#xD560; &#xC218; &#xC788;&#xC2B5;&#xB2C8;&#xB2E4;. VM MAC, tap/vif &#xC774;&#xB984;, security group chain, OVS flow, bridge FDB&#xB97C; &#xBB36;&#xC5B4; &#xBD10;&#xC57C; &#x201C;&#xBE0C;&#xB9AC;&#xC9C0;&#xAE4C;&#xC9C0; &#xC654;&#xB294;&#xB370; VM &#xD3EC;&#xD2B8;&#xB85C; &#xBABB; &#xAC14;&#xB2E4;&#x201D;&#xB97C; &#xC99D;&#xBA85;&#xD560; &#xC218; &#xC788;&#xC2B5;&#xB2C8;&#xB2E4;.</p><h2 id="8-vm-nic%EA%B9%8C%EC%A7%80-%EB%93%A4%EC%96%B4%EC%98%A4%EB%A9%B4-os%EC%99%80-%EC%84%9C%EB%B9%84%EC%8A%A4-%EB%AC%B8%EC%A0%9C%EB%A1%9C-%EC%A0%84%ED%99%98%ED%95%9C%EB%8B%A4">8. VM NIC&#xAE4C;&#xC9C0; &#xB4E4;&#xC5B4;&#xC624;&#xBA74; OS&#xC640; &#xC11C;&#xBE44;&#xC2A4; &#xBB38;&#xC81C;&#xB85C; &#xC804;&#xD658;&#xD55C;&#xB2E4;</h2><p>VM&#xC758; eth0&#xC5D0;&#xC11C; SYN&#xC774; &#xBCF4;&#xC774;&#xACE0; VM&#xC774; RST&#xB97C; &#xBCF4;&#xB0B4;&#xBA74; &#xB124;&#xD2B8;&#xC6CC;&#xD06C; &#xACBD;&#xB85C;&#xB294; VM&#xAE4C;&#xC9C0; &#xB3C4;&#xB2EC;&#xD55C; &#xAC83;&#xC785;&#xB2C8;&#xB2E4;. &#xADF8; &#xB2E4;&#xC74C;&#xC740; OS firewall, listen socket, &#xC11C;&#xBE44;&#xC2A4; &#xBC14;&#xC778;&#xB529;, &#xC560;&#xD50C;&#xB9AC;&#xCF00;&#xC774;&#xC158; &#xB85C;&#xADF8;&#xC785;&#xB2C8;&#xB2E4;.</p><pre><code class="language-bash">CLIENT=198.51.100.50
PRIVATE_IP=10.10.0.25
PORT=443

ip -br addr
ip route
ss -lntp | grep &quot;:${PORT}\b&quot; || true

nft list ruleset | grep -E &quot;dport ${PORT}|${CLIENT}|${PRIVATE_IP}|drop|reject&quot; || true
iptables -S | grep -E &quot;dport ${PORT}|${CLIENT}|${PRIVATE_IP}|DROP|REJECT&quot; || true

timeout 60 tcpdump -nn -s0 -B 8192 -i eth0 \
  &quot;host ${CLIENT} and tcp port ${PORT}&quot; \
  -w /tmp/vm-eth0-${PORT}.pcap

curl -vk &quot;https://127.0.0.1:${PORT}/&quot; --connect-timeout 3
curl -vk &quot;https://${PRIVATE_IP}:${PORT}/&quot; --connect-timeout 3</code></pre><p>VM &#xC548;&#xC5D0;&#xC11C; tcpdump&#xAC00; &#xBCF4;&#xC774;&#xB294;&#xB370; &#xC11C;&#xBE44;&#xC2A4;&#xAC00; &#xC751;&#xB2F5;&#xD558;&#xC9C0; &#xC54A;&#xC73C;&#xBA74; &#xD3EC;&#xD138;&#xC758; &#xACF5;&#xC778; IP &#xC124;&#xC815;&#xC774;&#xB098; &#xC0C1;&#xB2E8; &#xB77C;&#xC6B0;&#xD305;&#xC744; &#xACC4;&#xC18D; &#xBCFC; &#xC774;&#xC720;&#xAC00; &#xC904;&#xC5B4;&#xB4ED;&#xB2C8;&#xB2E4;. &#xBC18;&#xB300;&#xB85C; VM &#xC548;&#xC5D0;&#xC11C;&#xB294; &#xC544;&#xBB34;&#xAC83;&#xB3C4; &#xC548; &#xBCF4;&#xC774;&#xB294;&#xB370; &#xD558;&#xC774;&#xD37C;&#xBC14;&#xC774;&#xC800; &#xBE0C;&#xB9AC;&#xC9C0;&#xC5D0;&#xB294; &#xBCF4;&#xC774;&#xBA74; &#xAC00;&#xC0C1; NIC &#xC804; &#xB2E8;&#xACC4;&#xB85C; &#xB3CC;&#xC544;&#xAC11;&#xB2C8;&#xB2E4;.</p><h2 id="9-%EA%B4%80%EC%B8%A1-%EA%B2%B0%EA%B3%BC%EB%A1%9C-%EA%B5%AC%EA%B0%84%EC%9D%84-%EB%B0%94%EB%A1%9C-%ED%8C%90%EC%A0%95%ED%95%9C%EB%8B%A4">9. &#xAD00;&#xCE21; &#xACB0;&#xACFC;&#xB85C; &#xAD6C;&#xAC04;&#xC744; &#xBC14;&#xB85C; &#xD310;&#xC815;&#xD55C;&#xB2E4;</h2><p>&#xC544;&#xB798; &#xD45C;&#xCC98;&#xB7FC; &#xAD00;&#xCE21; &#xACB0;&#xACFC;&#xB97C; &#xAD6C;&#xAC04; &#xD310;&#xC815;&#xC73C;&#xB85C; &#xBC14;&#xAFD4;&#xC57C; &#xB2E4;&#xC74C; &#xC561;&#xC158;&#xC774; &#xBE68;&#xB77C;&#xC9D1;&#xB2C8;&#xB2E4;. &#xC911;&#xC694;&#xD55C; &#xAC83;&#xC740; &#xD55C; &#xC9C0;&#xC810;&#xC758; &#xB85C;&#xADF8;&#xAC00; &#xC544;&#xB2C8;&#xB77C;, &#xAC19;&#xC740; &#xC2DC;&#xAC04;&#xB300;&#xC758; &#xC5EC;&#xB7EC; &#xC9C0;&#xC810; &#xCEA1;&#xCC98;&#xAC00; &#xC11C;&#xB85C; &#xC774;&#xC5B4;&#xC9C0;&#xB294;&#xC9C0;&#xC785;&#xB2C8;&#xB2E4;.</p><!--kg-card-begin: html--><table>
  <thead>
    <tr><th>&#xAD00;&#xCE21; &#xACB0;&#xACFC;</th><th>&#xC6B0;&#xC120; &#xC758;&#xC2EC; &#xAD6C;&#xAC04;</th><th>&#xB2E4;&#xC74C; &#xD655;&#xC778;</th></tr>
  </thead>
  <tbody>
    <tr><td>edge outside&#xC5D0;&#xC11C; SYN&#xC774; &#xC548; &#xBCF4;&#xC784;</td><td>client, ISP, upstream route</td><td>&#xCD9C;&#xBC1C;&#xC9C0; NAT, &#xC678;&#xBD80; &#xB77C;&#xC6B0;&#xD305;, prefix &#xAD11;&#xACE0;, &#xC0C1;&#xB2E8; ACL</td></tr>
    <tr><td>edge outside&#xC5D0;&#xB294; &#xBCF4;&#xC774;&#xACE0; edge inside&#xC5D0;&#xB294; &#xC548; &#xBCF4;&#xC784;</td><td>edge firewall/NAT/policy</td><td>&#xC138;&#xC158; &#xD14C;&#xC774;&#xBE14;, deny counter, VIP/FIP &#xB9E4;&#xD551;</td></tr>
    <tr><td>internal transit&#xC5D0;&#xB294; &#xBCF4;&#xC774;&#xACE0; NAT external&#xC5D0;&#xB294; &#xC548; &#xBCF4;&#xC784;</td><td>&#xB0B4;&#xBD80; L3/&#xBC29;&#xD654;&#xBCBD;</td><td>&#xC815;&#xCC45; &#xB77C;&#xC6B0;&#xD305;, return route, zone policy</td></tr>
    <tr><td>NAT external&#xC5D0;&#xB294; &#xBCF4;&#xC774;&#xACE0; NAT internal&#xC5D0;&#xB294; &#xC548; &#xBCF4;&#xC784;</td><td>NAT/filter/conntrack</td><td>DNAT rule, interface binding, counter, conntrack &#xC0C1;&#xD0DC;</td></tr>
    <tr><td>&#xD558;&#xC774;&#xD37C;&#xBC14;&#xC774;&#xC800; &#xBE0C;&#xB9AC;&#xC9C0;&#xC5D0;&#xB294; &#xBCF4;&#xC774;&#xACE0; VM NIC&#xC5D0;&#xB294; &#xC548; &#xBCF4;&#xC784;</td><td>tap/vif/bridge/security group</td><td>OVS flow, bridge FDB, port state, host firewall</td></tr>
    <tr><td>VM NIC&#xAE4C;&#xC9C0; &#xB4E4;&#xC5B4;&#xC624;&#xACE0; VM&#xC774; RST &#xC751;&#xB2F5;</td><td>VM OS &#xB610;&#xB294; &#xC11C;&#xBE44;&#xC2A4;</td><td>listen socket, OS firewall, application log</td></tr>
    <tr><td>SYN/SYN-ACK&#xB294; &#xBCF4;&#xC774;&#xB294;&#xB370; client timeout</td><td>return path, asymmetry, MTU</td><td>&#xC5ED;&#xBC29;&#xD5A5; &#xCEA1;&#xCC98;, policy route, MSS/fragment, ICMP &#xCC28;&#xB2E8;</td></tr>
  </tbody>
</table><!--kg-card-end: html--><h2 id="10-syn%EC%9D%80-%EB%B3%B4%EC%9D%B4%EB%8A%94%EB%8D%B0-%EB%81%8A%EA%B8%B0%EB%A9%B4-mtu%EC%99%80-fragment%EB%A5%BC-%EB%B3%B8%EB%8B%A4">10. SYN&#xC740; &#xBCF4;&#xC774;&#xB294;&#xB370; &#xB04A;&#xAE30;&#xBA74; MTU&#xC640; fragment&#xB97C; &#xBCF8;&#xB2E4;</h2><p>&#xD130;&#xB110;, VXLAN, Geneve, GRE, IPSec, &#xBC29;&#xD654;&#xBCBD; &#xC7A5;&#xBE44;&#xAC00; &#xC11E;&#xC778; &#xAD6C;&#xAC04;&#xC5D0;&#xC11C;&#xB294; handshake &#xC77C;&#xBD80;&#xB9CC; &#xBCF4;&#xC774;&#xACE0; payload&#xC5D0;&#xC11C; &#xBA48;&#xCD94;&#xB294; &#xC7A5;&#xC560;&#xAC00; &#xB098;&#xC635;&#xB2C8;&#xB2E4;. &#xC774;&#xB54C;&#xB294; MTU, MSS clamp, ICMP fragmentation needed &#xCC28;&#xB2E8; &#xC5EC;&#xBD80;&#xB97C; &#xAC19;&#xC774; &#xBD05;&#xB2C8;&#xB2E4;.</p><pre><code class="language-bash">PUBLIC_IP=203.0.113.10
PRIVATE_IP=10.10.0.25

ping -M do -s 1472 &quot;${PUBLIC_IP}&quot;
tracepath -n &quot;${PUBLIC_IP}&quot;

tcpdump -nn -s0 -i any \
  &quot;icmp or (host ${PUBLIC_IP} and (tcp[tcpflags] &amp; (tcp-syn|tcp-rst) != 0))&quot;

# &#xD130;&#xB110;/VXLAN/&#xC624;&#xBC84;&#xB808;&#xC774; &#xAD6C;&#xAC04;&#xC774;&#xBA74; VM MSS clamp &#xB610;&#xB294; path MTU blackhole &#xC5EC;&#xBD80;&#xB97C; &#xAC19;&#xC774; &#xBCF8;&#xB2E4;.
ip link show | grep -E &quot;mtu|vxlan|geneve|gre|tun&quot;</code></pre><p>MTU &#xBB38;&#xC81C;&#xB294; &#x201C;&#xAC00;&#xB054; &#xB428;&#x201D;, &#x201C;&#xC791;&#xC740; &#xC751;&#xB2F5;&#xC740; &#xB428;&#x201D;, &#x201C;TLS handshake&#xC5D0;&#xC11C; &#xBA48;&#xCDA4;&#x201D;&#xCC98;&#xB7FC; &#xBCF4;&#xC77C; &#xC218; &#xC788;&#xC2B5;&#xB2C8;&#xB2E4;. &#xB2E8;&#xC21C; &#xD3EC;&#xD2B8; &#xC624;&#xD508; &#xD655;&#xC778;&#xC73C;&#xB85C;&#xB294; &#xB193;&#xCE58;&#xAE30; &#xC27D;&#xC2B5;&#xB2C8;&#xB2E4;.</p><h2 id="11-%EC%9E%A5%EC%95%A0-%EB%B3%B4%EA%B3%A0%EB%8A%94-%EA%B5%AC%EA%B0%84%EA%B3%BC-%EA%B7%BC%EA%B1%B0%EB%A1%9C-%EB%81%9D%EB%82%B8%EB%8B%A4">11. &#xC7A5;&#xC560; &#xBCF4;&#xACE0;&#xB294; &#xAD6C;&#xAC04;&#xACFC; &#xADFC;&#xAC70;&#xB85C; &#xB05D;&#xB0B8;&#xB2E4;</h2><p>&#xBCF4;&#xACE0;&#xC11C;&#xB294; &#xAE38;&#xAC8C; &#xC4F0;&#xB294; &#xAC83;&#xBCF4;&#xB2E4;, &#xC5B4;&#xB290; &#xAD6C;&#xAC04;&#xAE4C;&#xC9C0; &#xBD24;&#xACE0; &#xC5B4;&#xB514;&#xC11C; &#xB04A;&#xACBC;&#xB294;&#xC9C0;&#xB97C; &#xBA85;&#xD655;&#xD788; &#xB0A8;&#xAE30;&#xB294; &#xAC83;&#xC774; &#xC911;&#xC694;&#xD569;&#xB2C8;&#xB2E4;. &#xC544;&#xB798; &#xD615;&#xC2DD;&#xC774;&#xBA74; &#xB124;&#xD2B8;&#xC6CC;&#xD06C;, &#xBC29;&#xD654;&#xBCBD;, &#xAC00;&#xC0C1;&#xD654;, OS &#xB2F4;&#xB2F9;&#xC790;&#xAC00; &#xAC19;&#xC740; &#xC99D;&#xAC70;&#xB97C; &#xAE30;&#xC900;&#xC73C;&#xB85C; &#xC6C0;&#xC9C1;&#xC77C; &#xC218; &#xC788;&#xC2B5;&#xB2C8;&#xB2E4;.</p><pre><code class="language-text">&#xC99D;&#xC0C1;
  - 198.51.100.50 -&gt; 203.0.113.10:443 &#xC811;&#xC18D; &#xC2E4;&#xD328;
  - &#xAC19;&#xC740; &#xACF5;&#xC778; &#xD480;&#xC758; &#xB2E4;&#xB978; IP &#xB610;&#xB294; &#xB2E4;&#xB978; &#xCD9C;&#xBC1C;&#xC9C0;&#xB294; &#xC815;&#xC0C1; &#xC5EC;&#xBD80;:

&#xACE0;&#xC815;&#xD55C; &#xACBD;&#xB85C;
  - public pool / public IP:
  - edge outside / inside:
  - internal transit:
  - NAT external / internal:
  - hypervisor bridge / VM port:
  - VM NIC / service:

&#xB3D9;&#xC2DC; &#xCEA1;&#xCC98; &#xD310;&#xC815;
  - edge outside:
  - edge inside:
  - internal L3:
  - NAT external:
  - NAT internal:
  - hypervisor bridge:
  - VM NIC:

rule/counter/session
  - route or policy route:
  - firewall/ACL counter:
  - DNAT/SNAT rule and counter:
  - conntrack state:
  - OVS/bridge port state:
  - VM listen/firewall:

&#xACB0;&#xB860;
  - &#xB04A;&#xAE30;&#xB294; &#xAD6C;&#xAC04;:
  - &#xADFC;&#xAC70;:
  - &#xC784;&#xC2DC; &#xC870;&#xCE58;:
  - &#xC601;&#xAD6C; &#xC870;&#xCE58;:
  - &#xC7AC;&#xD604; &#xD14C;&#xC2A4;&#xD2B8; &#xACB0;&#xACFC;:</code></pre><h2 id="%EC%A0%95%EB%A6%AC">&#xC815;&#xB9AC;</h2><p>&#xACF5;&#xC778; &#xC778;&#xD130;&#xB137;&#xD480;&#xBD80;&#xD130; &#xB0B4;&#xBD80; &#xAD6C;&#xAC04;, &#xAC00;&#xC0C1;&#xAD6C;&#xAC04;&#xAE4C;&#xC9C0; &#xC774;&#xC5B4;&#xC9C0;&#xB294; &#xC7A5;&#xC560;&#xB294; &#xD3EC;&#xD138; &#xD654;&#xBA74;&#xC774;&#xB098; &#xB2E8;&#xC77C; &#xC7A5;&#xBE44; &#xB85C;&#xADF8;&#xB9CC;&#xC73C;&#xB85C; &#xB05D;&#xB0B4;&#xBA74; &#xACC4;&#xC18D; &#xB418;&#xB3CC;&#xC544;&#xC635;&#xB2C8;&#xB2E4;. &#xBA3C;&#xC800; 5-tuple&#xACFC; &#xC804;&#xCCB4; &#xACBD;&#xB85C;&#xB97C; &#xACE0;&#xC815;&#xD558;&#xACE0;, &#xC5E3;&#xC9C0; outside/inside, &#xB0B4;&#xBD80; L3, NAT external/internal, &#xD558;&#xC774;&#xD37C;&#xBC14;&#xC774;&#xC800; &#xBE0C;&#xB9AC;&#xC9C0;, VM NIC&#xB97C; &#xAC19;&#xC740; &#xC2DC;&#xAC01;&#xC5D0; &#xD655;&#xC778;&#xD569;&#xB2C8;&#xB2E4;. &#xD328;&#xD0B7;&#xC774; &#xC548; &#xBCF4;&#xC774;&#xB294; &#xCCAB; &#xC9C0;&#xC810;&#xC774; &#xC6B0;&#xC120; &#xC870;&#xCE58; &#xAD6C;&#xAC04;&#xC774;&#xACE0;, &#xD328;&#xD0B7;&#xC774; &#xBCF4;&#xC774;&#xB294;&#xB370; &#xC751;&#xB2F5;&#xC774; &#xD2C0;&#xC5B4;&#xC9C4; &#xC9C0;&#xC810;&#xC774; &#xB2E4;&#xC74C; &#xBD84;&#xC11D; &#xAD6C;&#xAC04;&#xC785;&#xB2C8;&#xB2E4;.</p>]]></content:encoded></item><item><title><![CDATA[CloudStack Virtual Router에서 트래픽이 어디서 막히는지 추적하는 방법]]></title><description><![CDATA[CloudStack Virtual Router 트래픽 경로를 계층별로 추적하는 절차입니다. tcpdump, iptables, conntrack, ips.json을 함께 보면서 Public IP, VR, DNAT, VM 중 어디서 막히는지 좁히는 절차입니다.]]></description><link>https://devmes.com/cloudstack-virtual-router-traffic-path-troubleshooting/</link><guid isPermaLink="false">6a3b618481de1a000182fb73</guid><category><![CDATA[Cloud Operations]]></category><category><![CDATA[CloudStack]]></category><category><![CDATA[Network]]></category><category><![CDATA[Virtual Router]]></category><category><![CDATA[Packet Trace]]></category><category><![CDATA[Troubleshooting]]></category><dc:creator><![CDATA[devmes]]></dc:creator><pubDate>Wed, 24 Jun 2026 04:48:04 GMT</pubDate><content:encoded><![CDATA[<p>CloudStack &#xC6B4;&#xC601; &#xC911;&#xC5D0;&#xB294;, &#x201C;&#xACE0;&#xAC1D;&#xC740; &#xBC29;&#xD654;&#xBCBD;&#xC5D0;&#xC11C; &#xD1B5;&#xACFC;&#xD588;&#xB2E4;&#xACE0; &#xD558;&#xACE0;, &#xD3EC;&#xD138;&#xC5D0;&#xC11C;&#xB294; &#xD3EC;&#xD2B8;&#xD3EC;&#xC6CC;&#xB529;&#xC774; &#xC5F4;&#xB824; &#xC788;&#xACE0;, &#xADF8;&#xB7F0;&#xB370; &#xD2B9;&#xC815; &#xCD9C;&#xBC1C;&#xC9C0;&#xC5D0;&#xC11C;&#xB9CC; &#xC811;&#xC18D;&#xC774; &#xC548; &#xB41C;&#xB2E4;&#x201D;&#xB294; &#xC720;&#xD615;&#xC774; &#xBC18;&#xBCF5;&#xD574;&#xC11C; &#xB098;&#xC635;&#xB2C8;&#xB2E4;. &#xC774;&#xB7F0; &#xC7A5;&#xC560;&#xB294; &#xB9D0;&#xB85C;&#xB9CC; &#xD655;&#xC778;&#xD558;&#xBA74; &#xACC4;&#xC18D; &#xACF5;&#xBC29;&#xC774; &#xB429;&#xB2C8;&#xB2E4;. &#xC5B4;&#xB290; &#xC9C0;&#xC810;&#xC5D0;&#xC11C; &#xD328;&#xD0B7;&#xC774; &#xC0AC;&#xB77C;&#xC9C0;&#xB294;&#xC9C0; &#xAC19;&#xC740; &#xC2DC;&#xAC01;&#xC5D0; &#xCC0D;&#xC5B4;&#xC57C; &#xD569;&#xB2C8;&#xB2E4;.</p><p>&#xC544;&#xB798; &#xC808;&#xCC28;&#xB294; CloudStack Virtual Router &#xACBD;&#xB85C;&#xB97C; &#xC881;&#xD788;&#xB294; &#xC2E4;&#xBB34; &#xC810;&#xAC80; &#xD750;&#xB984;&#xC785;&#xB2C8;&#xB2E4;. &#xAD6C;&#xC870;&#xB294; CloudStack &#xACC4;&#xC5F4; Virtual Router&#xB97C; &#xAE30;&#xC900;&#xC73C;&#xB85C; &#xC7A1;&#xC558;&#xC9C0;&#xB9CC;, NAT gateway&#xB098; &#xBC29;&#xD654;&#xBCBD; VM&#xC744; &#xC4F0;&#xB294; &#xD658;&#xACBD;&#xC5D0;&#xC11C;&#xB3C4; &#xAC19;&#xC740; &#xBC29;&#xC2DD;&#xC73C;&#xB85C; &#xC751;&#xC6A9;&#xD560; &#xC218; &#xC788;&#xC2B5;&#xB2C8;&#xB2E4;.</p><h2 id="1-%EB%A8%BC%EC%A0%80-5-tuple%EA%B3%BC-%EA%B2%BD%EB%A1%9C%EB%A5%BC-%EA%B3%A0%EC%A0%95%ED%95%9C%EB%8B%A4">1. &#xBA3C;&#xC800; 5-tuple&#xACFC; &#xACBD;&#xB85C;&#xB97C; &#xACE0;&#xC815;&#xD55C;&#xB2E4;</h2><p>&#xD2B8;&#xB798;&#xD53D; &#xCD94;&#xC801;&#xC740; &#x201C;&#xC811;&#xC18D;&#xC774; &#xC548; &#xB41C;&#xB2E4;&#x201D;&#xB85C; &#xC2DC;&#xC791;&#xD558;&#xBA74; &#xC548; &#xB429;&#xB2C8;&#xB2E4;. &#xCD9C;&#xBC1C;&#xC9C0;, &#xBAA9;&#xC801;&#xC9C0; &#xACF5;&#xC778; IP, &#xBAA9;&#xC801;&#xC9C0; &#xD3EC;&#xD2B8;, DNAT &#xD6C4; VM &#xC0AC;&#xC124; IP, VM &#xD3EC;&#xD2B8;, VR&#xC758; &#xC678;&#xBD80;/&#xB0B4;&#xBD80; &#xC778;&#xD130;&#xD398;&#xC774;&#xC2A4;&#xB97C; &#xBA3C;&#xC800; &#xACE0;&#xC815;&#xD569;&#xB2C8;&#xB2E4;.</p><pre><code class="language-text">&#xCD9C;&#xBC1C;&#xC9C0; : 198.51.100.50
&#xBAA9;&#xC801; &#xACF5;&#xC778;IP : 203.0.113.10
&#xBAA9;&#xC801; &#xD3EC;&#xD2B8; : tcp/3389
VM &#xC0AC;&#xC124;IP : 10.10.0.25
VM &#xD3EC;&#xD2B8; : tcp/3389
VR external : eth2
VR internal : eth0
VR &#xC0C1;&#xD0DC; : MASTER
&#xC99D;&#xC0C1; : &#xD2B9;&#xC815; &#xCD9C;&#xBC1C;&#xC9C0;&#xC5D0;&#xC11C;&#xB9CC; timeout &#xB610;&#xB294; RST, &#xB2E4;&#xB978; &#xCD9C;&#xBC1C;&#xC9C0;&#xB294; &#xC815;&#xC0C1;</code></pre><p>&#xC6B4;&#xC601; &#xC911;&#xC5D0;&#xB294; &#xC5EC;&#xAE30;&#xC5D0; &#xD14C;&#xC2A4;&#xD2B8; &#xC2DC;&#xAC04;, &#xD14C;&#xC2A4;&#xD2B8;&#xD55C; &#xCD9C;&#xBC1C;&#xC9C0;, &#xC131;&#xACF5;&#xD55C; &#xCD9C;&#xBC1C;&#xC9C0;, &#xC2E4;&#xD328;&#xD55C; &#xCD9C;&#xBC1C;&#xC9C0;&#xB97C; &#xAC19;&#xC774; &#xC801;&#xC2B5;&#xB2C8;&#xB2E4;. &#xD2B9;&#xC815; &#xCD9C;&#xBC1C;&#xC9C0;&#xB9CC; &#xC2E4;&#xD328;&#xD558;&#xB294;&#xC9C0;, &#xBAA8;&#xB4E0; &#xCD9C;&#xBC1C;&#xC9C0;&#xAC00; &#xC2E4;&#xD328;&#xD558;&#xB294;&#xC9C0;&#xC5D0; &#xB530;&#xB77C; &#xC758;&#xC2EC; &#xC9C0;&#xC810;&#xC774; &#xC644;&#xC804;&#xD788; &#xB2EC;&#xB77C;&#xC9D1;&#xB2C8;&#xB2E4;.</p><pre><code class="language-bash"># CloudStack/VR &#xACC4;&#xCE35;&#xC5D0;&#xC11C; &#xBA3C;&#xC800; &#xD655;&#xC778;&#xD560; &#xAC12;
cloudmonkey list publicipaddresses ipaddress=203.0.113.10
cloudmonkey list portforwardingrules ipaddressid=&lt;public-ip-id&gt;
cloudmonkey list virtualmachines id=&lt;vm-id&gt;

# VR &#xC548;&#xC5D0;&#xC11C; &#xD604;&#xC7AC; &#xC778;&#xD130;&#xD398;&#xC774;&#xC2A4;&#xC640; &#xB77C;&#xC6B0;&#xD305; &#xD655;&#xC778;
ip -br addr
ip route
cat /proc/net/nf_conntrack 2&gt;/dev/null | head || true
conntrack -S 2&gt;/dev/null || true</code></pre><h2 id="2-tcpdump%EB%8A%94-vr-%EC%96%91%EC%AA%BD-%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4%EC%97%90-%EB%8F%99%EC%8B%9C%EC%97%90-%EA%B1%B4%EB%8B%A4">2. tcpdump&#xB294; VR &#xC591;&#xCABD; &#xC778;&#xD130;&#xD398;&#xC774;&#xC2A4;&#xC5D0; &#xB3D9;&#xC2DC;&#xC5D0; &#xAC74;&#xB2E4;</h2><p>VR external&#xC5D0;&#xC11C;&#xB9CC; &#xBCF4;&#xBA74; &#x201C;&#xB4E4;&#xC5B4;&#xC654;&#xB2E4;&#x201D;&#xAE4C;&#xC9C0;&#xB9CC; &#xC54C; &#xC218; &#xC788;&#xACE0;, internal&#xC5D0;&#xC11C;&#xB9CC; &#xBCF4;&#xBA74; &#x201C;VM&#xC5D0; &#xC804;&#xB2EC;&#xB410;&#xB2E4;&#x201D;&#xB9CC; &#xC54C; &#xC218; &#xC788;&#xC2B5;&#xB2C8;&#xB2E4;. &#xB458;&#xC744; &#xAC19;&#xC740; &#xC2DC;&#xAC04;&#xB300;&#xC5D0; &#xAC19;&#xC774; &#xC7A1;&#xC544;&#xC57C; NAT &#xC804;&#xD6C4;&#xAC00; &#xC774;&#xC5B4;&#xC9D1;&#xB2C8;&#xB2E4;.</p><pre><code class="language-bash">CLIENT=198.51.100.50
PUBLIC_IP=203.0.113.10
PRIVATE_IP=10.10.0.25
PORT=3389
STAMP=$(date +%Y%m%d_%H%M%S)

# VR external interface: &#xACE0;&#xAC1D;/&#xC778;&#xD130;&#xB137; &#xCABD;&#xC5D0;&#xC11C; &#xD328;&#xD0B7;&#xC774; &#xB4E4;&#xC5B4;&#xC624;&#xB294;&#xC9C0; &#xD655;&#xC778;
timeout 60 tcpdump -nn -s0 -B 8192 -i eth2 &quot;host ${CLIENT} and host ${PUBLIC_IP} and tcp port ${PORT}&quot; -w /root/vr-ext-${STAMP}.pcap &amp;

# VR internal interface: DNAT &#xC774;&#xD6C4; VM &#xC0AC;&#xC124; IP&#xB85C; &#xB118;&#xC5B4;&#xAC00;&#xB294;&#xC9C0; &#xD655;&#xC778;
timeout 60 tcpdump -nn -s0 -B 8192 -i eth0 &quot;host ${CLIENT} and host ${PRIVATE_IP} and tcp port ${PORT}&quot; -w /root/vr-int-${STAMP}.pcap &amp;

wait

tcpdump -nn -r /root/vr-ext-${STAMP}.pcap | head -n 40
tcpdump -nn -r /root/vr-int-${STAMP}.pcap | head -n 40</code></pre><p>&#xD30C;&#xC77C;&#xB85C; &#xC800;&#xC7A5;&#xD558;&#xB294; &#xC774;&#xC720;&#xB294; &#xB2E8;&#xC21C;&#xD569;&#xB2C8;&#xB2E4;. &#xC7A5;&#xC560; &#xBCF4;&#xACE0;&#xB098; &#xBCA4;&#xB354; &#xBD84;&#xC11D;&#xC5D0;&#xC11C;&#xB294; &#xD654;&#xBA74;&#xC5D0; &#xBCF4;&#xC774;&#xB294; &#xBA87; &#xC904;&#xBCF4;&#xB2E4; &#xC800;&#xC7A5;&#xD55C; pcap&#xC774; &#xD6E8;&#xC52C; &#xAC15;&#xD55C; &#xC99D;&#xAC70;&#xC785;&#xB2C8;&#xB2E4;. &#xC9E7;&#xAC8C; &#xC7A1;&#xB354;&#xB77C;&#xB3C4; <code>-nn</code>, <code>-s0</code>, <code>-B</code>, <code>-w</code>&#xB97C; &#xBD99;&#xC5EC; &#xC7AC;&#xBD84;&#xC11D; &#xAC00;&#xB2A5;&#xD558;&#xAC8C; &#xB0A8;&#xAE41;&#xB2C8;&#xB2E4;.</p><h2 id="3-%ED%8C%A8%ED%82%B7-%EB%AA%A8%EC%96%91%EC%9C%BC%EB%A1%9C-%EA%B5%AC%EA%B0%84%EC%9D%84-%ED%8C%90%EC%A0%95%ED%95%9C%EB%8B%A4">3. &#xD328;&#xD0B7; &#xBAA8;&#xC591;&#xC73C;&#xB85C; &#xAD6C;&#xAC04;&#xC744; &#xD310;&#xC815;&#xD55C;&#xB2E4;</h2><p>&#xAC19;&#xC740; &#xD3EC;&#xD2B8;&#xB77C;&#xB3C4; SYN, SYN-ACK, ACK, RST, FIN&#xC774; &#xC5B4;&#xB514;&#xC11C; &#xBCF4;&#xC774;&#xB294;&#xC9C0;&#xC5D0; &#xB530;&#xB77C; &#xC6D0;&#xC778;&#xC774; &#xB2EC;&#xB77C;&#xC9D1;&#xB2C8;&#xB2E4;. &#xD2B9;&#xD788; RST&#xAC00; VR&#xC5D0;&#xC11C; &#xB9CC;&#xB4E4;&#xC5B4;&#xC9C4; &#xAC83;&#xCC98;&#xB7FC; &#xBCF4;&#xC774;&#xB294;&#xC9C0;, DNAT &#xD6C4; VM&#xC5D0;&#xC11C; &#xB3CC;&#xC544;&#xC628; &#xAC83;&#xC778;&#xC9C0; &#xAD6C;&#xBD84;&#xD574;&#xC57C; &#xD569;&#xB2C8;&#xB2E4;.</p><pre><code class="language-text">external&#xC5D0;&#xC11C; SYN &#xBCF4;&#xC784;, internal&#xC5D0;&#xC11C; SYN &#xC548; &#xBCF4;&#xC784;
 -&gt; VR &#xB0B4;&#xBD80;&#xC758; firewall, DNAT, interface mapping, policy route, conntrack &#xBB38;&#xC81C;&#xB97C; &#xC6B0;&#xC120; &#xBCF8;&#xB2E4;.

external&#xACFC; internal &#xBAA8;&#xB450; SYN &#xBCF4;&#xC784;, VM&#xC774; RST &#xC751;&#xB2F5;
 -&gt; &#xB124;&#xD2B8;&#xC6CC;&#xD06C; &#xACBD;&#xB85C;&#xB294; VM&#xAE4C;&#xC9C0; &#xB3C4;&#xB2EC;&#xD588;&#xB2E4;. VM OS &#xBC29;&#xD654;&#xBCBD;, &#xC11C;&#xBE44;&#xC2A4; listen, &#xC560;&#xD50C;&#xB9AC;&#xCF00;&#xC774;&#xC158; &#xC0C1;&#xD0DC;&#xB97C; &#xBCF8;&#xB2E4;.

external&#xACFC; internal &#xBAA8;&#xB450; SYN/SYN-ACK/ACK &#xBCF4;&#xC784;, &#xC774;&#xD6C4; payload &#xB610;&#xB294; FIN/RST&#xC5D0;&#xC11C; &#xB04A;&#xAE40;
 -&gt; L4 &#xC5F0;&#xACB0;&#xC740; &#xB9CC;&#xB4E4;&#xC5B4;&#xC84C;&#xB2E4;. &#xC11C;&#xBE44;&#xC2A4; &#xD504;&#xB85C;&#xD1A0;&#xCF5C;, &#xC560;&#xD50C;&#xB9AC;&#xCF00;&#xC774;&#xC158;, &#xC138;&#xC158; idle timeout, &#xC911;&#xAC04; &#xBCF4;&#xC548;&#xC7A5;&#xBE44;&#xB97C; &#xBCF8;&#xB2E4;.

external&#xC5D0;&#xC11C; &#xB300;&#xC0C1; &#xCD9C;&#xBC1C;&#xC9C0; &#xD328;&#xD0B7;&#xC774; &#xC544;&#xC608; &#xC548; &#xBCF4;&#xC784;
 -&gt; VR &#xC774;&#xC804; &#xAD6C;&#xAC04;&#xC774;&#xB2E4;. &#xC0C1;&#xB2E8; &#xBC29;&#xD654;&#xBCBD;, IPS/WAF, &#xB77C;&#xC6B0;&#xD305;, &#xACE0;&#xAC1D; &#xCE21; NAT, &#xD68C;&#xC120; &#xAD6C;&#xAC04;&#xC744; &#xBCF8;&#xB2E4;.

&#xD2B9;&#xC815; &#xCD9C;&#xBC1C;&#xC9C0;&#xB9CC; &#xC2E4;&#xD328;&#xD558;&#xACE0; &#xB2E4;&#xB978; &#xCD9C;&#xBC1C;&#xC9C0;&#xB294; &#xC815;&#xC0C1;
 -&gt; &#xC804;&#xCCB4; NAT/&#xD3EC;&#xD2B8;&#xD3EC;&#xC6CC;&#xB529; &#xC7A5;&#xC560;&#xBCF4;&#xB2E4; &#xCD9C;&#xBC1C;&#xC9C0; &#xAE30;&#xBC18; &#xCC28;&#xB2E8;, &#xBE44;&#xB300;&#xCE6D; &#xACBD;&#xB85C;, conntrack stale entry&#xB97C; &#xBA3C;&#xC800; &#xC758;&#xC2EC;&#xD55C;&#xB2E4;.</code></pre><p>&#xC678;&#xBD80; &#xC778;&#xD130;&#xD398;&#xC774;&#xC2A4;&#xC640; &#xB0B4;&#xBD80; &#xC778;&#xD130;&#xD398;&#xC774;&#xC2A4; &#xC591;&#xCABD;&#xC5D0;&#xC11C; &#xAC19;&#xC740; SYN&#xACFC; RST&#xAC00; &#xBCF4;&#xC774;&#xBA74; &#xB2E4;&#xC74C; &#xC9C0;&#xC810;&#xC744; &#xD655;&#xC778;&#xD569;&#xB2C8;&#xB2E4;. &#xADF8; &#xACBD;&#xC6B0; &#x201C;VR&#xC774; &#xB9C9;&#xC558;&#xB2E4;&#x201D;&#xAC00; &#xC544;&#xB2C8;&#xB77C; &#xD328;&#xD0B7;&#xC774; VM&#xAE4C;&#xC9C0; &#xB4E4;&#xC5B4;&#xAC14;&#xACE0; VM &#xB610;&#xB294; VM &#xB0B4;&#xBD80; &#xC11C;&#xBE44;&#xC2A4;&#xAC00; RST&#xB97C; &#xB3CC;&#xB824;&#xC900; &#xAC83;&#xC73C;&#xB85C; &#xBD10;&#xC57C; &#xD569;&#xB2C8;&#xB2E4;.</p><h2 id="4-iptables%EB%8A%94-%EC%A1%B4%EC%9E%AC-%EC%97%AC%EB%B6%80%EB%B3%B4%EB%8B%A4-counter%EB%A5%BC-%EB%B3%B8%EB%8B%A4">4. iptables&#xB294; &#xC874;&#xC7AC; &#xC5EC;&#xBD80;&#xBCF4;&#xB2E4; counter&#xB97C; &#xBCF8;&#xB2E4;</h2><p>&#xD3EC;&#xD2B8;&#xD3EC;&#xC6CC;&#xB529; rule&#xC774; &#xC788;&#xB2E4;&#xB294; &#xC0AC;&#xC2E4;&#xB9CC;&#xC73C;&#xB85C;&#xB294; &#xBD80;&#xC871;&#xD569;&#xB2C8;&#xB2E4;. &#xC2E4;&#xC81C; &#xD14C;&#xC2A4;&#xD2B8; &#xC21C;&#xAC04;&#xC5D0; &#xD574;&#xB2F9; rule&#xC758; packet/byte counter&#xAC00; &#xC99D;&#xAC00;&#xD558;&#xB294;&#xC9C0; &#xBD10;&#xC57C; &#xD569;&#xB2C8;&#xB2E4;. counter&#xAC00; &#xC624;&#xB974;&#xC9C0; &#xC54A;&#xC73C;&#xBA74; &#xD328;&#xD0B7;&#xC774; &#xADF8; rule&#xC744; &#xC548; &#xD0C0;&#xB294; &#xAC81;&#xB2C8;&#xB2E4;.</p><pre><code class="language-bash">PUBLIC_IP=203.0.113.10
PRIVATE_IP=10.10.0.25
PORT=3389

iptables-save -t nat | grep -E &quot;${PUBLIC_IP}|${PRIVATE_IP}|dport ${PORT}&quot;
iptables-save -t filter | grep -E &quot;${PUBLIC_IP}|${PRIVATE_IP}|dport ${PORT}|FIREWALL&quot;

iptables -t nat -L PREROUTING -nv --line-numbers | grep -E &quot;${PUBLIC_IP}|${PORT}&quot;
iptables -L -nv --line-numbers | grep -E &quot;${PRIVATE_IP}|${PORT}&quot;

# &#xD14C;&#xC2A4;&#xD2B8; &#xC804;&#xD6C4;&#xB85C; packet/byte counter&#xAC00; &#xC99D;&#xAC00;&#xD558;&#xB294;&#xC9C0; &#xBE44;&#xAD50;&#xD55C;&#xB2E4;.
iptables -t nat -L PREROUTING -nv --line-numbers &gt; /root/nat-before.txt
sleep 10
iptables -t nat -L PREROUTING -nv --line-numbers &gt; /root/nat-after.txt
diff -u /root/nat-before.txt /root/nat-after.txt | sed -n &apos;1,120p&apos;</code></pre><p>CloudStack VR&#xC5D0;&#xC11C;&#xB294; DNAT, MARK, CONNMARK, filter accept chain&#xC774; &#xAC19;&#xC774; &#xC6C0;&#xC9C1;&#xC785;&#xB2C8;&#xB2E4;. &#xACF5;&#xC778; IP &#xAE30;&#xC900; chain&#xC740; &#xC788;&#xB294;&#xB370; DNAT rule&#xC758; <code>-i</code>&#xAC00; &#xD604;&#xC7AC; active public interface&#xC640; &#xB2E4;&#xB974;&#xBA74;, rule&#xC774; &#xC874;&#xC7AC;&#xD574;&#xB3C4; &#xD2B8;&#xB798;&#xD53D;&#xC774; &#xC548; &#xD0C8; &#xC218; &#xC788;&#xC2B5;&#xB2C8;&#xB2E4;.</p><h2 id="5-conntrack%EC%9D%80-%E2%80%9C%EC%84%B8%EC%85%98%EC%9D%B4-%EB%A7%8C%EB%93%A4%EC%96%B4%EC%A1%8C%EB%8A%94%EC%A7%80%E2%80%9D%EB%A5%BC-%EB%B3%B4%EC%97%AC%EC%A4%80%EB%8B%A4">5. conntrack&#xC740; &#x201C;&#xC138;&#xC158;&#xC774; &#xB9CC;&#xB4E4;&#xC5B4;&#xC84C;&#xB294;&#xC9C0;&#x201D;&#xB97C; &#xBCF4;&#xC5EC;&#xC900;&#xB2E4;</h2><p>&#xC815;&#xC0C1;&#xC801;&#xC73C;&#xB85C; 3-way handshake&#xAC00; &#xB9CC;&#xB4E4;&#xC5B4;&#xC9C0;&#xBA74; conntrack&#xC5D0;&#xB294; &#xC6D0;&#xB798; &#xBC29;&#xD5A5;&#xACFC; reply &#xBC29;&#xD5A5;&#xC774; &#xAC19;&#xC774; &#xB0A8;&#xC2B5;&#xB2C8;&#xB2E4;. <code>[ASSURED]</code>&#xAC00; &#xBD99;&#xC740; entry&#xAC00; &#xC788;&#xC73C;&#xBA74; &#xC801;&#xC5B4;&#xB3C4; L4 &#xC138;&#xC158;&#xC740; &#xC591;&#xBC29;&#xD5A5;&#xC73C;&#xB85C; &#xBCF8; &#xC801;&#xC774; &#xC788;&#xB2E4;&#xB294; &#xB73B;&#xC785;&#xB2C8;&#xB2E4;.</p><pre><code class="language-bash">CLIENT=198.51.100.50
PUBLIC_IP=203.0.113.10
PRIVATE_IP=10.10.0.25
PORT=3389

conntrack -L -p tcp 2&gt;/dev/null | grep -E &quot;${CLIENT}|${PUBLIC_IP}|${PRIVATE_IP}|dport=${PORT}|sport=${PORT}&quot; | head -n 80

cat /proc/sys/net/netfilter/nf_conntrack_count 2&gt;/dev/null
cat /proc/sys/net/netfilter/nf_conntrack_max 2&gt;/dev/null
conntrack -S 2&gt;/dev/null</code></pre><p>&#xD2B9;&#xC815; &#xCD9C;&#xBC1C;&#xC9C0;&#xB294; &#xC2E4;&#xD328;&#xD558;&#xACE0; &#xB2E4;&#xB978; &#xCD9C;&#xBC1C;&#xC9C0;&#xB294; &#xC815;&#xC0C1;&#xC778;&#xB370;, &#xC815;&#xC0C1; &#xCD9C;&#xBC1C;&#xC9C0;&#xC758; conntrack&#xB9CC; &#xBCF4;&#xC778;&#xB2E4;&#xBA74; NAT rule &#xC804;&#xCCB4;&#xBCF4;&#xB2E4;&#xB294; &#xCD9C;&#xBC1C;&#xC9C0; &#xAE30;&#xBC18; &#xCC28;&#xB2E8;&#xC774;&#xB098; upstream &#xACBD;&#xB85C;&#xB97C; &#xC758;&#xC2EC;&#xD569;&#xB2C8;&#xB2E4;. &#xBC18;&#xB300;&#xB85C; conntrack table &#xC0AC;&#xC6A9;&#xB960;&#xC774; &#xB192;&#xACE0; VR packet drop &#xACBD;&#xBCF4;&#xAC00; &#xAC19;&#xC774; &#xC788;&#xC73C;&#xBA74; conntrack &#xACE0;&#xAC08;&#xC774;&#xB098; &#xACFC;&#xB2E4; &#xD2B8;&#xB798;&#xD53D;&#xC744; &#xBA3C;&#xC800; &#xBD10;&#xC57C; &#xD569;&#xB2C8;&#xB2E4;.</p><h2 id="6-ipsjson%EA%B3%BC-active-interface-%EB%B6%88%EC%9D%BC%EC%B9%98%EB%A5%BC-%ED%99%95%EC%9D%B8%ED%95%9C%EB%8B%A4">6. ips.json&#xACFC; active interface &#xBD88;&#xC77C;&#xCE58;&#xB97C; &#xD655;&#xC778;&#xD55C;&#xB2E4;</h2><p>&#xC6B4;&#xC601; &#xC8FC;&#xC758;&#xC0AC;&#xD56D;&#xC5D0;&#xC11C; &#xAF64; &#xC911;&#xC694;&#xD55C; &#xCF00;&#xC774;&#xC2A4;&#xAC00; &#xC788;&#xC5C8;&#xC2B5;&#xB2C8;&#xB2E4;. VR&#xC758; public subnet&#xC740; &#xD604;&#xC7AC; active interface&#xC5D0; &#xBD99;&#xC5B4; &#xC788;&#xB294;&#xB370;, <code>/etc/cloudstack/ips.json</code>&#xC5D0; &#xACFC;&#xAC70; non-active interface &#xC815;&#xBCF4;&#xAC00; &#xB0A8;&#xC544; &#xC788;&#xACE0;, rule &#xC0DD;&#xC131; &#xB85C;&#xC9C1;&#xC774; &#xADF8;&#xCABD;&#xC744; &#xBA3C;&#xC800; &#xC77D;&#xC5B4; &#xC798;&#xBABB;&#xB41C; interface&#xB85C; DNAT/MARK rule&#xC744; &#xB9CC;&#xB4E0; &#xACBD;&#xC6B0;&#xC785;&#xB2C8;&#xB2E4;.</p><pre><code class="language-bash">PUBLIC_IP=203.0.113.10

ip -br addr
iptables-save -t nat | grep &quot;${PUBLIC_IP}&quot;

# ips.json &#xC548;&#xC5D0;&#xC11C; &#xAC19;&#xC740; public subnet&#xC774; active/add:true &#xC778;&#xD130;&#xD398;&#xC774;&#xC2A4;&#xC5D0; &#xB0A8;&#xC544; &#xC788;&#xB294;&#xC9C0; &#xD655;&#xC778;&#xD55C;&#xB2E4;.
jq &apos;.[]? // empty&apos; /etc/cloudstack/ips.json &gt;/dev/null 2&gt;&amp;1 &amp;&amp; jq --arg ip &quot;${PUBLIC_IP}&quot; &apos;
 to_entries[]
 | {device: .key, values: .value}
 | .values[]
 | select((.public_ip // .cidr // &quot;&quot;) | tostring | contains($ip))
 | {device, add: (.ADD // .add), cidr, network, public_ip, source_nat}
&apos; /etc/cloudstack/ips.json

# jq&#xAC00; &#xC5C6;&#xC73C;&#xBA74; &#xCD5C;&#xC18C;&#xD55C; public IP&#xC640; &#xC8FC;&#xBCC0; &#xB77C;&#xC778;&#xC744; &#xBCF8;&#xB2E4;.
grep -n -C 6 &quot;${PUBLIC_IP}&quot; /etc/cloudstack/ips.json</code></pre><pre><code class="language-text">&#xC815;&#xC0C1;&#xC774;&#xC5B4;&#xC57C; &#xD558;&#xB294; &#xBAA8;&#xC591;
 - public subnet&#xC740; eth2&#xC5D0; &#xC788;&#xACE0; eth2 &#xD56D;&#xBAA9;&#xC774; add:true
 - DNAT/MARK/CONNMARK rule&#xB3C4; -i eth2 &#xAE30;&#xC900;&#xC73C;&#xB85C; &#xC0DD;&#xC131;

&#xBB38;&#xC81C;&#xC600;&#xB358; &#xBAA8;&#xC591;
 - public subnet&#xC740; eth2&#xC5D0;&#xC11C; &#xC4F0;&#xB294;&#xB370; ips.json&#xC758; &#xACFC;&#xAC70; eth3 &#xD56D;&#xBAA9;&#xB3C4; &#xAC19;&#xC740; subnet&#xC73C;&#xB85C; &#xB0A8;&#xC544; &#xC788;&#xC74C;
 - &#xACFC;&#xAC70; eth3 &#xD56D;&#xBAA9;&#xC740; add:false&#xC778;&#xB370; rule &#xC0DD;&#xC131; &#xB85C;&#xC9C1;&#xC774; &#xBA3C;&#xC800; &#xC77D;&#xC74C;
 - DNAT/MARK rule&#xC774; non-active interface &#xAE30;&#xC900;&#xC73C;&#xB85C; &#xC0DD;&#xC131;
 - external tcpdump&#xC640; iptables counter&#xAC00; &#xB9DE;&#xC9C0; &#xC54A;&#xAC70;&#xB098; &#xD2B9;&#xC815; &#xD3EC;&#xD2B8;&#xD3EC;&#xC6CC;&#xB529;&#xB9CC; &#xC2E4;&#xD328;

&#xD310;&#xC815;
 - &#xD604;&#xC7AC; ip a&#xC758; active interface&#xC640; iptables-save&#xC758; -i interface&#xAC00; &#xB2E4;&#xB974;&#xBA74; VR &#xC7AC;&#xC0DD;&#xC131;/&#xC808;&#xCCB4; &#xB610;&#xB294; &#xBC84;&#xC804; &#xD328;&#xCE58; &#xC5EC;&#xBD80;&#xB97C; &#xBCF8;&#xB2E4;.</code></pre><h2 id="7-vr-%EC%83%81%ED%83%9C%EC%99%80-%EA%B3%BC%EB%8B%A4-%ED%8A%B8%EB%9E%98%ED%94%BD%EC%9D%80-%EA%B0%99%EC%9D%B4-%EB%B3%B8%EB%8B%A4">7. VR &#xC0C1;&#xD0DC;&#xC640; &#xACFC;&#xB2E4; &#xD2B8;&#xB798;&#xD53D;&#xC740; &#xAC19;&#xC774; &#xBCF8;&#xB2E4;</h2><p>VR redundant state, keepalived &#xC0C1;&#xD0DC;, eth fault, conntrack &#xC0AC;&#xC6A9;&#xB7C9;, cnode &#xC131;&#xB2A5;&#xC744; &#xAC19;&#xC774; &#xBD10;&#xC57C; &#xD569;&#xB2C8;&#xB2E4;. &#xD2B9;&#xD788; &#xB300;&#xB7C9; &#xD2B8;&#xB798;&#xD53D;&#xC774; &#xC720;&#xC785; &#xC911;&#xC77C; &#xB54C;&#xB294; VR &#xC7AC;&#xAE30;&#xB3D9;&#xC774;&#xB098; &#xC808;&#xCCB4;&#xB97C; &#xBA3C;&#xC800; &#xD558;&#xBA74; &#xB354; &#xD070; &#xC7A5;&#xC560;&#xB85C; &#xBC88;&#xC9C8; &#xC218; &#xC788;&#xC2B5;&#xB2C8;&#xB2E4;. &#xD2B8;&#xB798;&#xD53D;&#xC774; &#xC790;&#xC5F0; &#xD574;&#xC18C;&#xB410;&#xAC70;&#xB098; &#xC0C1;&#xB2E8;&#xC5D0;&#xC11C; &#xCC28;&#xB2E8;&#xB410;&#xB294;&#xC9C0; &#xD655;&#xC778;&#xD55C; &#xB4A4; &#xC870;&#xCE58;&#xD574;&#xC57C; &#xD569;&#xB2C8;&#xB2E4;.</p><pre><code class="language-bash">grep -i &apos;Entering .* STATE&apos; /var/log/messages | tail -n 40
systemctl status keepalived --no-pager 2&gt;/dev/null || true
ip addr show | grep -E &apos;state|inet &apos;

cat /proc/sys/net/netfilter/nf_conntrack_count 2&gt;/dev/null
cat /proc/sys/net/netfilter/nf_conntrack_max 2&gt;/dev/null
dmesg -T | grep -Ei &apos;vif|rx stalled|disabled state|conntrack|martian|drop&apos; | tail -n 80</code></pre><p>&#xC6B4;&#xC601; &#xC8FC;&#xC758;&#xC0AC;&#xD56D;&#xC5D0;&#xB3C4; conntrack &#xACFC;&#xB2E4;, packet drop, VR eth daemon, redundant state &#xACBD;&#xBCF4;&#xAC00; &#xAC19;&#xC740; &#xBB36;&#xC74C;&#xC73C;&#xB85C; &#xB4F1;&#xC7A5;&#xD569;&#xB2C8;&#xB2E4;. &#xC774; &#xACBD;&#xBCF4;&#xB4E4;&#xC740; &#x201C;NAT rule&#xC774; &#xD2C0;&#xB838;&#xB2E4;&#x201D;&#xC640; &#xB2E4;&#xB978; &#xACC4;&#xCE35;&#xC785;&#xB2C8;&#xB2E4;. &#xD3EC;&#xD2B8;&#xD3EC;&#xC6CC;&#xB529; &#xC7A5;&#xC560;&#xCC98;&#xB7FC; &#xBCF4;&#xC5EC;&#xB3C4; &#xC2E4;&#xC81C;&#xB85C;&#xB294; VR&#xC774; &#xACFC;&#xB2E4; &#xC138;&#xC158;&#xC744; &#xCC98;&#xB9AC;&#xD558;&#xB290;&#xB77C; &#xC9C0;&#xC5F0;&#xB418;&#xAC70;&#xB098; drop&#xD558;&#xB294; &#xC0C1;&#xD669;&#xC77C; &#xC218; &#xC788;&#xC2B5;&#xB2C8;&#xB2E4;.</p><h2 id="8-zone-%EA%B0%84-cip-%ED%86%B5%EC%8B%A0%EC%9D%80-%EA%B2%8C%EC%8A%A4%ED%8A%B8-%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4%EA%B9%8C%EC%A7%80-%EB%B3%B8%EB%8B%A4">8. zone &#xAC04; CIP &#xD1B5;&#xC2E0;&#xC740; &#xAC8C;&#xC2A4;&#xD2B8; &#xC778;&#xD130;&#xD398;&#xC774;&#xC2A4;&#xAE4C;&#xC9C0; &#xBCF8;&#xB2E4;</h2><p>&#xACF5;&#xC778; IP &#xD3EC;&#xD2B8;&#xD3EC;&#xC6CC;&#xB529;&#xC774; &#xC544;&#xB2C8;&#xB77C; &#xC0AC;&#xC124;&#xB9DD;/CIP &#xAC04; &#xD1B5;&#xC2E0; &#xBD88;&#xAC00;&#xB77C;&#xBA74; VR NAT&#xBCF4;&#xB2E4; VM &#xB0B4;&#xBD80; &#xC778;&#xD130;&#xD398;&#xC774;&#xC2A4;, host VIF, hypervisor &#xB85C;&#xADF8;&#xB97C; &#xAC19;&#xC774; &#xBD10;&#xC57C; &#xD569;&#xB2C8;&#xB2E4;. &#xBA54;&#xBAA8; &#xC911;&#xC5D0;&#xB294; &#xD2B9;&#xC815; &#xC2DC;&#xAC04;&#xB300; &#xC774;&#xD6C4; VM&#xC758; &#xC778;&#xD130;&#xD398;&#xC774;&#xC2A4; down/up&#xC73C;&#xB85C; &#xD1B5;&#xC2E0;&#xC774; &#xD68C;&#xBCF5;&#xB41C; &#xCF00;&#xC774;&#xC2A4;&#xB3C4; &#xC788;&#xC5C8;&#xC2B5;&#xB2C8;&#xB2E4;. &#xC774;&#xB54C;&#xB294; &#xACE0;&#xAC1D; OS &#xC774;&#xBCA4;&#xD2B8;, <code>sosreport</code>, host&#xC758; VIF &#xB85C;&#xADF8;&#xB97C; &#xD568;&#xAED8; &#xBB36;&#xC5B4;&#xC57C; &#xC6D0;&#xC778; &#xBD84;&#xC11D;&#xC774; &#xB429;&#xB2C8;&#xB2E4;.</p><ul><li>VM &#xC548;&#xC5D0;&#xC11C; <code>ip addr</code>, <code>ip route</code>, <code>ss -lntp</code>, OS firewall &#xC0C1;&#xD0DC; &#xD655;&#xC778;</li><li>hypervisor/cnode&#xC5D0;&#xC11C; VIF disabled, guest rx stalled, link state &#xBCC0;&#xACBD; &#xB85C;&#xADF8; &#xD655;&#xC778;</li><li>VM &#xB0B4;&#xBD80; tcpdump&#xC640; host/VR tcpdump&#xB97C; &#xAC19;&#xC740; &#xC2DC;&#xAC01;&#xC5D0; &#xBE44;&#xAD50;</li><li>&#xC778;&#xD130;&#xD398;&#xC774;&#xC2A4; down/up&#xC73C;&#xB85C; &#xD68C;&#xBCF5;&#xB410;&#xB2E4;&#xBA74; &#xD68C;&#xBCF5; &#xC2DC;&#xAC04; &#xC804;&#xD6C4; &#xB85C;&#xADF8;&#xB97C; &#xB530;&#xB85C; &#xBCF4;&#xC874;</li></ul><h2 id="9-%EC%9E%A5%EC%95%A0-%EB%B3%B4%EA%B3%A0%EB%8A%94-%EA%B5%AC%EA%B0%84-%ED%8C%90%EC%A0%95%EC%9C%BC%EB%A1%9C-%EB%81%9D%EB%82%B4%EC%95%BC-%ED%95%9C%EB%8B%A4">9. &#xC7A5;&#xC560; &#xBCF4;&#xACE0;&#xB294; &#xAD6C;&#xAC04; &#xD310;&#xC815;&#xC73C;&#xB85C; &#xB05D;&#xB0B4;&#xC57C; &#xD55C;&#xB2E4;</h2><p>&#xC88B;&#xC740; &#xBCF4;&#xACE0;&#xB294; &#x201C;&#xD655;&#xC778;&#xD588;&#xC2B5;&#xB2C8;&#xB2E4;&#x201D;&#xAC00; &#xC544;&#xB2C8;&#xB77C; &#x201C;&#xC5EC;&#xAE30;&#xAE4C;&#xC9C0;&#xB294; &#xD1B5;&#xACFC;&#xD588;&#xACE0; &#xC5EC;&#xAE30;&#xC11C; &#xB04A;&#xACBC;&#xB2E4;&#x201D;&#xB85C; &#xB05D;&#xB0A9;&#xB2C8;&#xB2E4;. &#xC544;&#xB798; &#xD615;&#xC2DD;&#xC774;&#xBA74; &#xACE0;&#xAC1D;, &#xBCF4;&#xC548;&#xC7A5;&#xBE44; &#xB2F4;&#xB2F9;, &#xD50C;&#xB7AB;&#xD3FC; &#xB2F4;&#xB2F9;&#xC774; &#xAC19;&#xC740; &#xC99D;&#xAC70;&#xB97C; &#xBCF4;&#xACE0; &#xB2E4;&#xC74C; &#xC561;&#xC158;&#xC744; &#xC815;&#xD560; &#xC218; &#xC788;&#xC2B5;&#xB2C8;&#xB2E4;.</p><pre><code class="language-text">&#xC7A5;&#xC560; &#xC99D;&#xC0C1;
 - 198.51.100.50 -&gt; 203.0.113.10:3389 &#xC811;&#xC18D; &#xC2E4;&#xD328;
 - &#xB2E4;&#xB978; &#xCD9C;&#xBC1C;&#xC9C0;&#xC5D0;&#xC11C;&#xB294; &#xC815;&#xC0C1; &#xB610;&#xB294; &#xC77C;&#xBD80; &#xD3EC;&#xD2B8;&#xB9CC; &#xC815;&#xC0C1;

&#xB3D9;&#xC2DC; &#xCEA1;&#xCC98; &#xACB0;&#xACFC;
 - VR external: SYN &#xAD00;&#xCE21; &#xC5EC;&#xBD80;
 - VR internal: DNAT &#xD6C4; 10.10.0.25:3389 &#xC804;&#xB2EC; &#xC5EC;&#xBD80;
 - VM &#xC751;&#xB2F5;: SYN-ACK / RST / &#xBB34;&#xC751;&#xB2F5;

NAT/FILTER &#xD655;&#xC778;
 - DNAT rule &#xC874;&#xC7AC; &#xC5EC;&#xBD80;
 - filter accept/drop rule &#xC874;&#xC7AC; &#xC5EC;&#xBD80;
 - &#xD14C;&#xC2A4;&#xD2B8; &#xC804;&#xD6C4; counter &#xC99D;&#xAC00; &#xC5EC;&#xBD80;
 - rule interface&#xC640; active interface &#xC77C;&#xCE58; &#xC5EC;&#xBD80;

conntrack &#xD655;&#xC778;
 - ESTABLISHED / SYN_SENT / TIME_WAIT / ASSURED &#xC0C1;&#xD0DC;
 - mark/zone &#xAC12;
 - nf_conntrack_count &#xB300;&#xBE44; max &#xC0AC;&#xC6A9;&#xB960;

&#xD310;&#xC815;
 - VR &#xC774;&#xC804; &#xAD6C;&#xAC04; / VR NAT-filter &#xAD6C;&#xAC04; / VM OS &#xAD6C;&#xAC04; / &#xC560;&#xD50C;&#xB9AC;&#xCF00;&#xC774;&#xC158; &#xAD6C;&#xAC04; &#xC911; &#xC5B4;&#xB514;&#xC778;&#xC9C0;
 - &#xC784;&#xC2DC; &#xC870;&#xCE58;&#xC640; &#xC601;&#xAD6C; &#xC870;&#xCE58;
 - &#xC7AC;&#xD604; &#xD14C;&#xC2A4;&#xD2B8; &#xACB0;&#xACFC;</code></pre><h2 id="%EC%A0%95%EB%A6%AC">&#xC815;&#xB9AC;</h2><p>CloudStack Virtual Router &#xB124;&#xD2B8;&#xC6CC;&#xD06C; &#xC7A5;&#xC560;&#xB294; &#xD3EC;&#xD138; &#xC124;&#xC815;&#xB9CC; &#xBCF4;&#xACE0; &#xD310;&#xB2E8;&#xD558;&#xBA74; &#xB2A6;&#xC2B5;&#xB2C8;&#xB2E4;. &#xBA3C;&#xC800; 5-tuple&#xC744; &#xACE0;&#xC815;&#xD558;&#xACE0;, VR external/internal&#xC5D0;&#xC11C; &#xB3D9;&#xC2DC;&#xC5D0; tcpdump&#xB97C; &#xC7A1;&#xACE0;, iptables counter&#xC640; conntrack&#xC744; &#xAC19;&#xC740; &#xC2DC;&#xAC04;&#xB300;&#xC5D0; &#xB300;&#xC870;&#xD569;&#xB2C8;&#xB2E4;. &#xD328;&#xD0B7;&#xC774; VR&#xC5D0; &#xC548; &#xB4E4;&#xC5B4;&#xC624;&#xBA74; &#xC0C1;&#xB2E8; &#xAD6C;&#xAC04;, external&#xC5D0;&#xB294; &#xC788;&#xB294;&#xB370; internal&#xB85C; &#xC548; &#xAC00;&#xBA74; VR NAT/filter/interface mapping, VM&#xAE4C;&#xC9C0; &#xAC14;&#xB294;&#xB370; RST&#xAC00; &#xC624;&#xBA74; VM OS&#xB098; &#xC11C;&#xBE44;&#xC2A4;, &#xC138;&#xC158;&#xC740; &#xC0DD;&#xAE30;&#xB294;&#xB370; &#xC9C0;&#xC5F0;&#xB418;&#xBA74; &#xC560;&#xD50C;&#xB9AC;&#xCF00;&#xC774;&#xC158; &#xB610;&#xB294; &#xACFC;&#xB2E4; &#xD2B8;&#xB798;&#xD53D;/conntrack &#xAD6C;&#xAC04;&#xC73C;&#xB85C; &#xC881;&#xD788;&#xBA74; &#xB429;&#xB2C8;&#xB2E4;.</p>]]></content:encoded></item><item><title><![CDATA[콘솔 출력이 어느 TTY로 가는지 커널 디버깅 명령으로 추적하기]]></title><description><![CDATA[Linux 콘솔 출력이 tty0, tty1, ttyS0, pts/N 중 어디로 흘러가는지 /proc/consoles, /sys/class/tty, tracefs, ftrace, dynamic_debug로 추적하는 운영 절차입니다.]]></description><link>https://devmes.com/trace-console-output-to-tty-kernel-debugging/</link><guid isPermaLink="false">6a3b5eed81de1a000182fb65</guid><category><![CDATA[Linux]]></category><category><![CDATA[Kernel]]></category><category><![CDATA[TTY]]></category><category><![CDATA[Debugging]]></category><category><![CDATA[Troubleshooting]]></category><dc:creator><![CDATA[devmes]]></dc:creator><pubDate>Wed, 24 Jun 2026 04:37:01 GMT</pubDate><content:encoded><![CDATA[<p>&#xCF58;&#xC194;&#xC5D0; &#xAE00;&#xC790;&#xAC00; &#xCC0D;&#xD614;&#xB2E4;&#xB294; &#xB9D0;&#xC740; &#xC0DD;&#xAC01;&#xBCF4;&#xB2E4; &#xBC94;&#xC704;&#xAC00; &#xB113;&#xC2B5;&#xB2C8;&#xB2E4;. SSH &#xD130;&#xBBF8;&#xB110;&#xC758; <code>pts/0</code>&#xB85C; &#xAC04; &#xCD9C;&#xB825;&#xC77C; &#xC218;&#xB3C4; &#xC788;&#xACE0;, &#xBB3C;&#xB9AC; &#xD654;&#xBA74;&#xC758; <code>tty1</code>&#xB85C; &#xAC04; &#xCD9C;&#xB825;&#xC77C; &#xC218;&#xB3C4; &#xC788;&#xACE0;, &#xCEE4;&#xB110; <code>printk</code>&#xAC00; <code>ttyS0</code> &#xAC19;&#xC740; serial console&#xB85C; &#xBFCC;&#xB9B0; &#xBA54;&#xC2DC;&#xC9C0;&#xC77C; &#xC218;&#xB3C4; &#xC788;&#xC2B5;&#xB2C8;&#xB2E4;. &#xADF8;&#xB798;&#xC11C; &#xCF58;&#xC194; &#xCD9C;&#xB825; &#xBB38;&#xC81C;&#xB97C; &#xBCFC; &#xB54C;&#xB294; &#xBA3C;&#xC800; &quot;&#xC774; &#xCD9C;&#xB825;&#xC774; &#xC0AC;&#xC6A9;&#xC790; &#xD504;&#xB85C;&#xC138;&#xC2A4;&#xC758; stdout/stderr&#xC778;&#xC9C0;, &#xCEE4;&#xB110; printk&#xC778;&#xC9C0;, getty/login&#xC774; &#xBD99;&#xC740; TTY&#xC778;&#xC9C0;&quot;&#xB97C; &#xB098;&#xB220;&#xC57C; &#xD569;&#xB2C8;&#xB2E4;.</p><h2 id="1-%EB%A8%BC%EC%A0%80-%EC%9A%A9%EC%96%B4%EB%A5%BC-%EB%81%8A%EC%96%B4%EC%95%BC-%ED%95%9C%EB%8B%A4">1. &#xBA3C;&#xC800; &#xC6A9;&#xC5B4;&#xB97C; &#xB04A;&#xC5B4;&#xC57C; &#xD55C;&#xB2E4;</h2><!--kg-card-begin: html--><table>
    <thead><tr><th>&#xC774;&#xB984;</th><th>&#xC758;&#xBBF8;</th><th>&#xD655;&#xC778; &#xD3EC;&#xC778;&#xD2B8;</th></tr></thead>
    <tbody>
      <tr><td><code>/dev/tty</code></td><td>&#xD604;&#xC7AC; &#xD504;&#xB85C;&#xC138;&#xC2A4;&#xC758; controlling terminal</td><td>SSH&#xBA74; &#xBCF4;&#xD1B5; <code>/dev/pts/N</code>, &#xB85C;&#xCEEC; &#xCF58;&#xC194;&#xC774;&#xBA74; <code>/dev/ttyN</code></td></tr>
      <tr><td><code>/dev/console</code></td><td>&#xCEE4;&#xB110;&#xACFC; init&#xC774; &#xBCF4;&#xB294; &#xC2DC;&#xC2A4;&#xD15C; &#xCF58;&#xC194; &#xC7A5;&#xCE58;</td><td><code>console=</code>, <code>/proc/consoles</code> &#xAE30;&#xC900;&#xC73C;&#xB85C; &#xD655;&#xC778;</td></tr>
      <tr><td><code>tty0</code></td><td>&#xD604;&#xC7AC; active virtual console&#xC744; &#xAC00;&#xB9AC;&#xD0A4;&#xB294; &#xBCC4;&#xCE6D;</td><td><code>/sys/class/tty/tty0/active</code>, <code>fgconsole</code></td></tr>
      <tr><td><code>tty1</code>~<code>ttyN</code></td><td>Linux virtual terminal</td><td><code>getty@tty1.service</code>, <code>ps -t tty1</code></td></tr>
      <tr><td><code>ttyS0</code>, <code>ttyAMA0</code></td><td>serial console &#xACC4;&#xC5F4;</td><td><code>serial-getty@...</code>, hypervisor serial console</td></tr>
      <tr><td><code>pts/N</code></td><td>SSH, terminal emulator, tmux &#xAC19;&#xC740; pseudo terminal</td><td><code>who</code>, <code>w</code>, <code>ps -t pts/N</code></td></tr>
    </tbody>
  </table><!--kg-card-end: html--><h2 id="2-%EC%A7%80%EA%B8%88-%EB%B3%B4%EA%B3%A0-%EC%9E%88%EB%8A%94-%ED%99%94%EB%A9%B4%EC%9D%B4-%EC%96%B4%EB%8A%90-tty%EC%9D%B8%EC%A7%80-%ED%99%95%EC%9D%B8%ED%95%9C%EB%8B%A4">2. &#xC9C0;&#xAE08; &#xBCF4;&#xACE0; &#xC788;&#xB294; &#xD654;&#xBA74;&#xC774; &#xC5B4;&#xB290; TTY&#xC778;&#xC9C0; &#xD655;&#xC778;&#xD55C;&#xB2E4;</h2><p>&#xC0AC;&#xC6A9;&#xC790; &#xD504;&#xB85C;&#xC138;&#xC2A4; &#xCD9C;&#xB825;&#xC740; &#xCEE4;&#xB110; &#xCF58;&#xC194;&#xACFC; &#xB2E4;&#xB985;&#xB2C8;&#xB2E4;. &#xBA3C;&#xC800; &#xB0B4; shell&#xC758; stdin/stdout/stderr&#xAC00; &#xC5B4;&#xB290; &#xC7A5;&#xCE58;&#xC5D0; &#xBD99;&#xC5B4; &#xC788;&#xB294;&#xC9C0; &#xD655;&#xC778;&#xD569;&#xB2C8;&#xB2E4;.</p><pre><code class="language-bash">tty

readlink -f /proc/$$/fd/0
readlink -f /proc/$$/fd/1
readlink -f /proc/$$/fd/2

ps -o pid,ppid,tty,stat,comm,args -p $$
ps -t &quot;$(tty | sed &apos;s#^/dev/##&apos;)&quot; -o pid,ppid,tty,stat,comm,args

w
who
loginctl list-sessions
loginctl session-status &quot;$XDG_SESSION_ID&quot; 2&gt;/dev/null || true</code></pre><p><code>tty</code>&#xAC00; <code>/dev/pts/0</code>&#xC774;&#xBA74; &#xC9C0;&#xAE08; &#xBCF4;&#xB294; &#xD654;&#xBA74;&#xC740; SSH&#xB098; terminal emulator&#xC758; pseudo terminal&#xC785;&#xB2C8;&#xB2E4;. &#xC774; &#xACBD;&#xC6B0; <code>echo hello</code>&#xB294; kernel console&#xB85C; &#xAC00;&#xB294; &#xAC83;&#xC774; &#xC544;&#xB2C8;&#xB77C; &#xD604;&#xC7AC; shell&#xC758; controlling terminal&#xB85C; &#xAC11;&#xB2C8;&#xB2E4;. &#xBC18;&#xB300;&#xB85C; &#xBB3C;&#xB9AC; &#xCF58;&#xC194;&#xC5D0;&#xC11C; &#xB85C;&#xADF8;&#xC778;&#xD588;&#xB2E4;&#xBA74; <code>/dev/tty1</code>&#xCC98;&#xB7FC; &#xBCF4;&#xC77C; &#xC218; &#xC788;&#xC2B5;&#xB2C8;&#xB2E4;.</p><h2 id="3-%EC%BB%A4%EB%84%90-%EC%BD%98%EC%86%94-%ED%9B%84%EB%B3%B4%EB%A5%BC-%ED%99%95%EC%9D%B8%ED%95%9C%EB%8B%A4">3. &#xCEE4;&#xB110; &#xCF58;&#xC194; &#xD6C4;&#xBCF4;&#xB97C; &#xD655;&#xC778;&#xD55C;&#xB2E4;</h2><p>&#xCEE4;&#xB110; &#xBA54;&#xC2DC;&#xC9C0;, &#xBD80;&#xD305; &#xB85C;&#xADF8;, panic &#xB85C;&#xADF8;, <code>/dev/kmsg</code>&#xB85C; &#xB4E4;&#xC5B4;&#xAC04; &#xCD9C;&#xB825;&#xC740; <code>console=</code> &#xC124;&#xC815;&#xACFC; &#xB4F1;&#xB85D;&#xB41C; console driver&#xB97C; &#xAE30;&#xC900;&#xC73C;&#xB85C; &#xD750;&#xB985;&#xB2C8;&#xB2E4;. &#xC774; &#xBD80;&#xBD84;&#xC740; <code>/proc/cmdline</code>&#xACFC; <code>/proc/consoles</code>&#xB97C; &#xAC19;&#xC774; &#xBD10;&#xC57C; &#xD569;&#xB2C8;&#xB2E4;.</p><pre><code class="language-bash">cat /proc/cmdline | tr &apos; &apos; &apos;\n&apos; | grep &apos;^console=&apos; || true
cat /proc/consoles

cat /sys/class/tty/tty0/active 2&gt;/dev/null || true
fgconsole 2&gt;/dev/null || true

systemctl status getty@tty1.service --no-pager
systemctl status serial-getty@ttyS0.service --no-pager 2&gt;/dev/null || true
journalctl -u getty@tty1.service -b --no-pager | tail -n 80
journalctl -u serial-getty@ttyS0.service -b --no-pager 2&gt;/dev/null | tail -n 80</code></pre><p><code>console=tty0 console=ttyS0,115200</code>&#xCC98;&#xB7FC; &#xC5EC;&#xB7EC; &#xAC1C;&#xAC00; &#xC788;&#xC73C;&#xBA74; &#xCEE4;&#xB110; &#xCD9C;&#xB825;&#xC740; &#xC5EC;&#xB7EC; console driver&#xB85C; &#xBCF5;&#xC81C;&#xB420; &#xC218; &#xC788;&#xC2B5;&#xB2C8;&#xB2E4;. &#xC5B4;&#xB5A4; &#xC7A5;&#xCE58;&#xAC00; &#xC2E4;&#xC81C;&#xB85C; &#xB4F1;&#xB85D;&#xB410;&#xB294;&#xC9C0;&#xB294; &#xCD94;&#xCE21;&#xD558;&#xC9C0; &#xB9D0;&#xACE0; <code>/proc/consoles</code>&#xB85C; &#xD655;&#xC778;&#xD569;&#xB2C8;&#xB2E4;. VM &#xD658;&#xACBD;&#xC5D0;&#xC11C;&#xB294; hypervisor &#xCF58;&#xC194;&#xC774; <code>ttyS0</code>&#xC5D0; &#xBD99;&#xC5B4; &#xC788;&#xB294; &#xACBD;&#xC6B0;&#xAC00; &#xB9CE;&#xACE0;, bare metal&#xC5D0;&#xC11C;&#xB294; <code>tty0</code>&#xB098; BMC serial redirection&#xC774; &#xAC19;&#xC774; &#xBCF4;&#xC77C; &#xC218; &#xC788;&#xC2B5;&#xB2C8;&#xB2E4;.</p><h2 id="4-marker%EB%A5%BC-%EB%A7%8C%EB%93%A4%EC%96%B4-%EA%B2%BD%EB%A1%9C%EB%A5%BC-%EB%B6%84%EB%A6%AC%ED%95%9C%EB%8B%A4">4. marker&#xB97C; &#xB9CC;&#xB4E4;&#xC5B4; &#xACBD;&#xB85C;&#xB97C; &#xBD84;&#xB9AC;&#xD55C;&#xB2E4;</h2><p>&#xCD94;&#xC801;&#xD560; &#xB54C;&#xB294; &#xD3C9;&#xC18C; &#xB85C;&#xADF8;&#xB97C; &#xADF8;&#xB300;&#xB85C; &#xBCF4;&#xBA74; &#xC11E;&#xC785;&#xB2C8;&#xB2E4;. &#xC9E7;&#xC740; marker&#xB97C; &#xB9CC;&#xB4E4;&#xC5B4; &#xC0AC;&#xC6A9;&#xC790; TTY &#xCD9C;&#xB825;&#xACFC; &#xCEE4;&#xB110; printk &#xCD9C;&#xB825;&#xC744; &#xB530;&#xB85C; &#xBC1C;&#xC0DD;&#xC2DC;&#xD0B5;&#xB2C8;&#xB2E4;.</p><pre><code class="language-bash"># &#xC0AC;&#xC6A9;&#xC790; &#xD504;&#xB85C;&#xC138;&#xC2A4;&#xAC00; &#xC790;&#xAE30; controlling terminal&#xB85C; &#xC4F0;&#xB294; &#xACBD;&#xB85C;
printf &apos;userspace-tty-marker pid=%s tty=%s\n&apos; &quot;$$&quot; &quot;$(tty)&quot; &gt; /dev/tty

# &#xCEE4;&#xB110; printk &#xACBD;&#xB85C;&#xB97C; &#xAC15;&#xC81C;&#xB85C; &#xB9CC;&#xB4E4; &#xB54C;. root &#xD544;&#xC694;.
sudo sh -c &apos;echo &quot;kernel-console-marker from /dev/kmsg&quot; &gt; /dev/kmsg&apos;

# printk&#xAC00; &#xC2E4;&#xC81C;&#xB85C; &#xB4E4;&#xC5B4;&#xC654;&#xB294;&#xC9C0; &#xD655;&#xC778;
dmesg -T | tail -n 40
journalctl -k -b --no-pager | tail -n 40</code></pre><p>&#xC5EC;&#xAE30;&#xC11C; <code>/dev/tty</code>&#xB85C; &#xBCF4;&#xB0B8; marker&#xB294; &#xD604;&#xC7AC; &#xC138;&#xC158;&#xC758; TTY &#xACBD;&#xB85C;&#xB97C; &#xD0D1;&#xB2C8;&#xB2E4;. <code>/dev/kmsg</code>&#xB85C; &#xBCF4;&#xB0B8; marker&#xB294; printk &#xACBD;&#xB85C;&#xB97C; &#xD0C0;&#xACE0; &#xB4F1;&#xB85D;&#xB41C; console driver&#xB85C; &#xC804;&#xB2EC;&#xB429;&#xB2C8;&#xB2E4;. &#xB450; &#xD750;&#xB984;&#xC744; &#xAD6C;&#xBD84;&#xD558;&#xC9C0; &#xC54A;&#xC73C;&#xBA74; &quot;&#xCF58;&#xC194;&#xC5D0; &#xCC0D;&#xD614;&#xB2E4;&quot;&#xB294; &#xC0AC;&#xC2E4;&#xB9CC; &#xB0A8;&#xACE0; &#xC5B4;&#xB514;&#xC11C; &#xC5B4;&#xB514;&#xB85C; &#xAC14;&#xB294;&#xC9C0; &#xD310;&#xB2E8;&#xD558;&#xAE30; &#xC5B4;&#xB835;&#xC2B5;&#xB2C8;&#xB2E4;.</p><h2 id="5-tracefs%EC%97%90%EC%84%9C-%EC%9D%B4-%EC%BB%A4%EB%84%90%EC%9D%B4-%EC%A0%9C%EA%B3%B5%ED%95%98%EB%8A%94-%EC%A7%80%EC%A0%90%EC%9D%84-%EB%A8%BC%EC%A0%80-%EB%B3%B8%EB%8B%A4">5. tracefs&#xC5D0;&#xC11C; &#xC774; &#xCEE4;&#xB110;&#xC774; &#xC81C;&#xACF5;&#xD558;&#xB294; &#xC9C0;&#xC810;&#xC744; &#xBA3C;&#xC800; &#xBCF8;&#xB2E4;</h2><p>&#xCEE4;&#xB110; &#xBC84;&#xC804;&#xACFC; &#xC124;&#xC815;&#xC5D0; &#xB530;&#xB77C; &#xD568;&#xC218; &#xC774;&#xB984;&#xACFC; tracepoint&#xAC00; &#xC870;&#xAE08;&#xC529; &#xB2E4;&#xB985;&#xB2C8;&#xB2E4;. &#xBC14;&#xB85C; enable&#xD558;&#xC9C0; &#xB9D0;&#xACE0; &#xC774; &#xC11C;&#xBC84;&#xC5D0; &#xC788;&#xB294; &#xC9C0;&#xC810;&#xBD80;&#xD130; &#xD655;&#xC778;&#xD569;&#xB2C8;&#xB2E4;.</p><pre><code class="language-bash">sudo mount -t tracefs nodev /sys/kernel/tracing 2&gt;/dev/null || true
cd /sys/kernel/tracing

sudo sh -c &apos;
echo 0 &gt; tracing_on
echo nop &gt; current_tracer
: &gt; trace
&apos;

# &#xC774; &#xC11C;&#xBC84; &#xCEE4;&#xB110;&#xC5D0; &#xC2E4;&#xC81C;&#xB85C; &#xC788;&#xB294; TTY/console &#xD568;&#xC218;&#xC640; tracepoint&#xBD80;&#xD130; &#xD655;&#xC778;&#xD55C;&#xB2E4;.
sudo grep -E &apos;^(tty_write|n_tty_write|do_tty_write|vt_console_print|serial.*console.*write|uart_console_write|call_console_drivers|console_unlock)$&apos; available_filter_functions | sort -u
sudo find events -maxdepth 2 -type d | grep -E &apos;/(tty|console|printk)(/|$)|/(tty_|console|printk_)&apos; | sort</code></pre><p>&#xC6B4;&#xC601; &#xC11C;&#xBC84;&#xC5D0;&#xC11C; &#xC548;&#xC804;&#xD558;&#xAC8C; &#xBCF4;&#xB824;&#xBA74; tracepoint&#xAC00; &#xC788;&#xC73C;&#xBA74; tracepoint&#xB97C; &#xBA3C;&#xC800; &#xC4F0;&#xACE0;, &#xC5C6;&#xAC70;&#xB098; &#xBD80;&#xC871;&#xD560; &#xB54C; ftrace function filter&#xB85C; &#xB0B4;&#xB824;&#xAC00;&#xB294; &#xC21C;&#xC11C;&#xAC00; &#xC88B;&#xC2B5;&#xB2C8;&#xB2E4;. function graph&#xB97C; &#xBB34;&#xD131;&#xB300;&#xACE0; &#xC804;&#xCCB4; &#xCF1C;&#xBA74; &#xB85C;&#xADF8;&#xAC00; &#xB108;&#xBB34; &#xCEE4;&#xC9D1;&#xB2C8;&#xB2E4;.</p><h2 id="6-tracepoint%EB%A1%9C-tty-write%EC%99%80-console-%EC%B6%9C%EB%A0%A5%EC%9D%84-%EB%B3%B8%EB%8B%A4">6. tracepoint&#xB85C; TTY write&#xC640; console &#xCD9C;&#xB825;&#xC744; &#xBCF8;&#xB2E4;</h2><p>tracepoint&#xAC00; &#xC788;&#xC73C;&#xBA74; &#xAC00;&#xC7A5; &#xAE54;&#xB054;&#xD569;&#xB2C8;&#xB2E4;. &#xC774;&#xBCA4;&#xD2B8; &#xC774;&#xB984;&#xC740; &#xCEE4;&#xB110;&#xBCC4;&#xB85C; &#xB2E4;&#xB97C; &#xC218; &#xC788;&#xC73C;&#xB2C8; &#xC874;&#xC7AC;&#xD558;&#xB294; &#xAC83;&#xB9CC; enable&#xD558;&#xB3C4;&#xB85D; &#xC791;&#xC131;&#xD569;&#xB2C8;&#xB2E4;.</p><pre><code class="language-bash">sudo sh -c &apos;
cd /sys/kernel/tracing
echo 0 &gt; tracing_on
: &gt; trace

for event in   events/tty/tty_write   events/tty/tty_open   events/tty/tty_close   events/console/console   events/printk/console
do
  [ -e &quot;${event}/enable&quot; ] &amp;&amp; echo 1 &gt; &quot;${event}/enable&quot;
done

echo 1 &gt; tracing_on
&apos;

printf &apos;tracepoint-tty-marker pid=%s tty=%s\n&apos; &quot;$$&quot; &quot;$(tty)&quot; &gt; /dev/tty
sudo sh -c &apos;echo &quot;tracepoint-kmsg-marker&quot; &gt; /dev/kmsg&apos;

sudo sh -c &apos;
cd /sys/kernel/tracing
echo 0 &gt; tracing_on
tail -n 200 trace

for event in   events/tty/tty_write   events/tty/tty_open   events/tty/tty_close   events/console/console   events/printk/console
do
  [ -e &quot;${event}/enable&quot; ] &amp;&amp; echo 0 &gt; &quot;${event}/enable&quot;
done
&apos;</code></pre><p>&#xCD9C;&#xB825;&#xC5D0;&#xC11C; <code>tty_write</code> &#xACC4;&#xC5F4;&#xC774; &#xBCF4;&#xC774;&#xBA74; &#xC0AC;&#xC6A9;&#xC790; &#xD504;&#xB85C;&#xC138;&#xC2A4;&#xAC00; TTY device&#xC5D0; write&#xD55C; &#xACBD;&#xB85C;&#xC785;&#xB2C8;&#xB2E4;. <code>console</code> &#xB610;&#xB294; <code>printk</code> &#xACC4;&#xC5F4;&#xC774; &#xBCF4;&#xC774;&#xBA74; printk&#xAC00; console driver&#xB85C; flush&#xB418;&#xB294; &#xACBD;&#xB85C;&#xC785;&#xB2C8;&#xB2E4;. &#xB458;&#xC774; &#xAC19;&#xC774; &#xBCF4;&#xC778;&#xB2E4;&#xACE0; &#xAC19;&#xC740; &#xCD9C;&#xB825;&#xC774;&#xB77C;&#xB294; &#xB73B;&#xC740; &#xC544;&#xB2D9;&#xB2C8;&#xB2E4;. marker &#xBB38;&#xC790;&#xC5F4;&#xACFC; PID, command &#xC774;&#xB984;&#xC744; &#xAC19;&#xC774; &#xBD10;&#xC57C; &#xD569;&#xB2C8;&#xB2E4;.</p><h2 id="7-ftrace%EB%A1%9C-%ED%95%A8%EC%88%98-%ED%98%B8%EC%B6%9C-%EA%B2%BD%EB%A1%9C%EB%A5%BC-%EC%A2%81%ED%9E%8C%EB%8B%A4">7. ftrace&#xB85C; &#xD568;&#xC218; &#xD638;&#xCD9C; &#xACBD;&#xB85C;&#xB97C; &#xC881;&#xD78C;&#xB2E4;</h2><p>tracepoint&#xB9CC;&#xC73C;&#xB85C; &#xBD80;&#xC871;&#xD558;&#xBA74; ftrace&#xC758; function tracer&#xB97C; &#xC501;&#xB2C8;&#xB2E4;. &#xD575;&#xC2EC;&#xC740; &#xC804;&#xCCB4; &#xCEE4;&#xB110; &#xD568;&#xC218;&#xB97C; &#xCF1C;&#xC9C0; &#xC54A;&#xACE0; TTY/console &#xAD00;&#xB828; &#xD568;&#xC218;&#xB9CC; filter&#xC5D0; &#xB123;&#xB294; &#xAC83;&#xC785;&#xB2C8;&#xB2E4;.</p><pre><code class="language-bash">sudo sh -c &apos;
cd /sys/kernel/tracing
echo 0 &gt; tracing_on
echo nop &gt; current_tracer
: &gt; set_ftrace_filter
: &gt; set_ftrace_pid
: &gt; trace

for func in   tty_write   n_tty_write   do_tty_write   vt_console_print   uart_console_write   call_console_drivers   console_unlock
do
  grep -qx &quot;${func}&quot; available_filter_functions &amp;&amp; echo &quot;${func}&quot; &gt;&gt; set_ftrace_filter
done

echo function &gt; current_tracer
echo 1 &gt; tracing_on
&apos;

printf &apos;ftrace-tty-marker pid=%s tty=%s\n&apos; &quot;$$&quot; &quot;$(tty)&quot; &gt; /dev/tty
sudo sh -c &apos;echo &quot;ftrace-kmsg-marker&quot; &gt; /dev/kmsg&apos;

sudo sh -c &apos;
cd /sys/kernel/tracing
echo 0 &gt; tracing_on
cat trace | tail -n 200
echo nop &gt; current_tracer
: &gt; set_ftrace_filter
&apos;</code></pre><p><code>tty_write</code>, <code>n_tty_write</code> &#xCABD;&#xC740; &#xC0AC;&#xC6A9;&#xC790; &#xD504;&#xB85C;&#xC138;&#xC2A4;&#xAC00; TTY&#xC5D0; &#xC4F0;&#xB294; &#xD750;&#xB984;&#xC744; &#xBCF4;&#xC5EC;&#xC90D;&#xB2C8;&#xB2E4;. <code>call_console_drivers</code>, <code>console_unlock</code>, <code>vt_console_print</code>, serial console write &#xACC4;&#xC5F4;&#xC740; printk&#xAC00; &#xC2E4;&#xC81C; console driver&#xB85C; &#xB098;&#xAC00;&#xB294; &#xCABD;&#xC744; &#xBCFC; &#xB54C; &#xC758;&#xBBF8;&#xAC00; &#xC788;&#xC2B5;&#xB2C8;&#xB2E4;. &#xD568;&#xC218;&#xAC00; &#xC548; &#xBCF4;&#xC774;&#xBA74; &#xADF8; &#xCEE4;&#xB110;&#xC5D0;&#xC11C; inline&#xB410;&#xAC70;&#xB098; &#xC774;&#xB984;&#xC774; &#xB2E4;&#xB974;&#xAC70;&#xB098; trace &#xB300;&#xC0C1; &#xC2EC;&#xBCFC;&#xC774; &#xC544;&#xB2D0; &#xC218; &#xC788;&#xC2B5;&#xB2C8;&#xB2E4;.</p><h2 id="8-%ED%8A%B9%EC%A0%95-pid%EC%9D%98-tty-write%EB%A7%8C-%EB%B3%B4%EA%B3%A0-%EC%8B%B6%EC%9D%84-%EB%95%8C">8. &#xD2B9;&#xC815; PID&#xC758; TTY write&#xB9CC; &#xBCF4;&#xACE0; &#xC2F6;&#xC744; &#xB54C;</h2><p>&#xD604;&#xC7AC; shell&#xC774;&#xB098; &#xD2B9;&#xC815; &#xD504;&#xB85C;&#xC138;&#xC2A4;&#xAC00; <code>/dev/tty</code>&#xC5D0; &#xC4F0;&#xB294; &#xACBD;&#xB85C;&#xB9CC; &#xC881;&#xD600; &#xBCF4;&#xB824;&#xBA74; <code>set_ftrace_pid</code>&#xB97C; &#xAC19;&#xC774; &#xC501;&#xB2C8;&#xB2E4;.</p><pre><code class="language-bash"># &#xD604;&#xC7AC; shell&#xC774; /dev/tty&#xC5D0; &#xC4F0;&#xB294; &#xC0AC;&#xC6A9;&#xC790; &#xD504;&#xB85C;&#xC138;&#xC2A4; &#xACBD;&#xB85C;&#xB9CC; &#xC881;&#xD600; &#xBCFC; &#xB54C;.
WRITER_PID=$$

sudo sh -c &quot;
cd /sys/kernel/tracing
echo 0 &gt; tracing_on
echo nop &gt; current_tracer
: &gt; trace
: &gt; set_ftrace_filter
echo tty_write &gt;&gt; set_ftrace_filter
grep -qx n_tty_write available_filter_functions &amp;&amp; echo n_tty_write &gt;&gt; set_ftrace_filter
echo ${WRITER_PID} &gt; set_ftrace_pid
echo function &gt; current_tracer
echo 1 &gt; tracing_on
&quot;

printf &apos;pid-filter-marker pid=%s tty=%s\n&apos; &quot;$$&quot; &quot;$(tty)&quot; &gt; /dev/tty

sudo sh -c &apos;
cd /sys/kernel/tracing
echo 0 &gt; tracing_on
cat trace
echo nop &gt; current_tracer
: &gt; set_ftrace_pid
: &gt; set_ftrace_filter
&apos;</code></pre><p>PID filter&#xB294; &#xC0AC;&#xC6A9;&#xC790; &#xD504;&#xB85C;&#xC138;&#xC2A4;&#xAC00; system call&#xC744; &#xD0C0;&#xACE0; TTY&#xC5D0; &#xC4F0;&#xB294; &#xD750;&#xB984;&#xC5D0;&#xB294; &#xC720;&#xC6A9;&#xD569;&#xB2C8;&#xB2E4;. &#xD558;&#xC9C0;&#xB9CC; printk flush&#xB294; &#xB2E4;&#xB978; kernel context&#xC5D0;&#xC11C; &#xBC1C;&#xC0DD;&#xD560; &#xC218; &#xC788;&#xC73C;&#xBBC0;&#xB85C; <code>/dev/kmsg</code> marker&#xAE4C;&#xC9C0; &#xAC19;&#xC740; PID&#xB85C;&#xB9CC; &#xBCF4;&#xB824;&#xACE0; &#xD558;&#xBA74; &#xB193;&#xCE60; &#xC218; &#xC788;&#xC2B5;&#xB2C8;&#xB2E4;.</p><h2 id="9-dynamicdebug%EB%8A%94-%EB%93%9C%EB%9D%BC%EC%9D%B4%EB%B2%84-%EB%82%B4%EB%B6%80-%EB%A1%9C%EA%B7%B8%EA%B0%80-%ED%95%84%EC%9A%94%ED%95%A0-%EB%95%8C%EB%A7%8C-%EC%BC%A0%EB%8B%A4">9. dynamic_debug&#xB294; &#xB4DC;&#xB77C;&#xC774;&#xBC84; &#xB0B4;&#xBD80; &#xB85C;&#xADF8;&#xAC00; &#xD544;&#xC694;&#xD560; &#xB54C;&#xB9CC; &#xCF20;&#xB2E4;</h2><p>ftrace&#xAC00; &#xD638;&#xCD9C; &#xC5EC;&#xBD80;&#xB97C; &#xBCF4;&#xC5EC;&#xC900;&#xB2E4;&#xBA74; dynamic debug&#xB294; &#xCEE4;&#xB110; &#xC18C;&#xC2A4;&#xC758; <code>pr_debug</code> &#xC9C0;&#xC810;&#xC774; &#xC0B4;&#xC544; &#xC788;&#xC744; &#xB54C; &#xB0B4;&#xBD80; &#xB85C;&#xADF8;&#xB97C; &#xB298;&#xB824; &#xC90D;&#xB2C8;&#xB2E4;. &#xC6B4;&#xC601; &#xC7A5;&#xBE44;&#xC5D0;&#xC11C;&#xB294; &#xBC18;&#xB4DC;&#xC2DC; &#xD30C;&#xC77C; &#xB2E8;&#xC704;&#xB85C; &#xC881;&#xAC8C; &#xCF1C;&#xACE0; &#xB05D;&#xB098;&#xBA74; &#xB055;&#xB2C8;&#xB2E4;.</p><pre><code class="language-bash">sudo mount -t debugfs nodev /sys/kernel/debug 2&gt;/dev/null || true

sudo grep -Ei &apos;drivers/tty/(tty_io|n_tty|vt|serial)&apos;   /sys/kernel/debug/dynamic_debug/control | head -n 80

# &#xCEE4;&#xB110;&#xC5D0; pr_debug &#xC9C0;&#xC810;&#xC774; &#xC788;&#xACE0; CONFIG_DYNAMIC_DEBUG&#xAC00; &#xCF1C;&#xC838; &#xC788;&#xC744; &#xB54C;&#xB9CC; &#xCD9C;&#xB825;&#xC774; &#xB298;&#xC5B4;&#xB09C;&#xB2E4;.
sudo sh -c &apos;echo &quot;file drivers/tty/tty_io.c +p&quot; &gt; /sys/kernel/debug/dynamic_debug/control&apos;
sudo sh -c &apos;echo &quot;file drivers/tty/n_tty.c +p&quot; &gt; /sys/kernel/debug/dynamic_debug/control&apos;

dmesg -wT

# &#xB2E4;&#xB978; &#xD130;&#xBBF8;&#xB110;&#xC5D0;&#xC11C; marker&#xB97C; &#xB9CC;&#xB4E0; &#xB4A4;, &#xB05D;&#xB098;&#xBA74; &#xBC18;&#xB4DC;&#xC2DC; &#xB048;&#xB2E4;.
sudo sh -c &apos;echo &quot;file drivers/tty/tty_io.c -p&quot; &gt; /sys/kernel/debug/dynamic_debug/control&apos;
sudo sh -c &apos;echo &quot;file drivers/tty/n_tty.c -p&quot; &gt; /sys/kernel/debug/dynamic_debug/control&apos;</code></pre><p><code>dynamic_debug/control</code>&#xC5D0; &#xD56D;&#xBAA9;&#xC774; &#xC5C6;&#xAC70;&#xB098; <code>CONFIG_DYNAMIC_DEBUG</code>&#xAC00; &#xAEBC;&#xC9C4; &#xCEE4;&#xB110;&#xC774;&#xBA74; &#xC774; &#xBC29;&#xC2DD;&#xC740; &#xC4F8; &#xC218; &#xC5C6;&#xC2B5;&#xB2C8;&#xB2E4;. &#xC774;&#xB54C;&#xB294; tracefs/ftrace&#xB098; bpftrace&#xB85C; &#xBCF4;&#xB294; &#xD3B8;&#xC774; &#xB0AB;&#xC2B5;&#xB2C8;&#xB2E4;.</p><h2 id="10-bpftrace%EB%A1%9C-%EB%B9%A0%EB%A5%B4%EA%B2%8C-pid%EC%99%80-comm%EB%A7%8C-%EC%B0%8D%EA%B8%B0">10. bpftrace&#xB85C; &#xBE60;&#xB974;&#xAC8C; PID&#xC640; comm&#xB9CC; &#xCC0D;&#xAE30;</h2><p>&#xC11C;&#xBC84;&#xC5D0; bpftrace&#xAC00; &#xC788;&#xACE0; kprobe &#xC811;&#xADFC;&#xC774; &#xAC00;&#xB2A5;&#xD558;&#xBA74;, &#xC9E7;&#xAC8C; &#xB204;&#xAC00; <code>tty_write</code>&#xB97C; &#xD0C0;&#xB294;&#xC9C0;&#xB9CC; &#xBCFC; &#xC218; &#xC788;&#xC2B5;&#xB2C8;&#xB2E4;.</p><pre><code class="language-bash"># &#xD568;&#xC218;&#xAC00; &#xCEE4;&#xB110; &#xC2EC;&#xBCFC;&#xB85C; &#xB178;&#xCD9C;&#xB418;&#xB294;&#xC9C0; &#xBA3C;&#xC800; &#xD655;&#xC778;&#xD55C;&#xB2E4;.
sudo bpftrace -l &apos;kprobe:tty_write&apos;
sudo bpftrace -l &apos;kprobe:n_tty_write&apos;

# &#xB2E8;&#xC21C;&#xD788; &#xC5B4;&#xB5A4; &#xD504;&#xB85C;&#xC138;&#xC2A4;&#xAC00; tty_write &#xACBD;&#xB85C;&#xB97C; &#xD0C0;&#xB294;&#xC9C0; &#xBCFC; &#xB54C;.
sudo bpftrace -e &apos;kprobe:tty_write { printf(&quot;pid=%d comm=%s\n&quot;, pid, comm); }&apos;

# &#xBCC4;&#xB3C4; &#xD130;&#xBBF8;&#xB110;&#xC5D0;&#xC11C;:
printf &apos;bpftrace-tty-marker pid=%s tty=%s\n&apos; &quot;$$&quot; &quot;$(tty)&quot; &gt; /dev/tty</code></pre><p>&#xC774; &#xBC29;&#xC2DD;&#xC740; &#xBE60;&#xB974;&#xC9C0;&#xB9CC; &#xC6B4;&#xC601; &#xCEE4;&#xB110; &#xBCF4;&#xC548; &#xC124;&#xC815;, lockdown, BPF &#xAD8C;&#xD55C;, &#xC2EC;&#xBCFC; &#xB178;&#xCD9C; &#xC0C1;&#xD0DC;&#xC5D0; &#xC601;&#xD5A5;&#xC744; &#xBC1B;&#xC2B5;&#xB2C8;&#xB2E4;. &#xC548; &#xB418;&#xBA74; tracefs&#xB85C; &#xB3CC;&#xC544;&#xAC00;&#xBA74; &#xB429;&#xB2C8;&#xB2E4;.</p><h2 id="11-%ED%9D%94%ED%95%9C-%ED%8C%90%EC%A0%95-%EA%B8%B0%EC%A4%80">11. &#xD754;&#xD55C; &#xD310;&#xC815; &#xAE30;&#xC900;</h2><ul><li>SSH &#xD654;&#xBA74;&#xC5D0;&#xB9CC; &#xBCF4;&#xC774;&#xBA74; &#xB300;&#xBD80;&#xBD84; <code>pts/N</code> &#xACBD;&#xB85C;&#xC785;&#xB2C8;&#xB2E4;. <code>/dev/console</code> &#xBB38;&#xC81C;&#xAC00; &#xC544;&#xB2D9;&#xB2C8;&#xB2E4;.</li><li>VM &#xCF58;&#xC194;&#xC5D0;&#xB294; &#xBCF4;&#xC774;&#xB294;&#xB370; SSH&#xC5D0;&#xB294; &#xC548; &#xBCF4;&#xC774;&#xBA74; <code>console=ttyS0</code>, <code>tty0</code>, getty, hypervisor console mapping&#xC744; &#xBD05;&#xB2C8;&#xB2E4;.</li><li>&#xBD80;&#xD305; &#xCD08;&#xAE30; &#xBA54;&#xC2DC;&#xC9C0;&#xB9CC; &#xBCF4;&#xC774;&#xACE0; &#xB85C;&#xADF8;&#xC778; &#xD504;&#xB86C;&#xD504;&#xD2B8;&#xAC00; &#xC5C6;&#xC73C;&#xBA74; kernel console&#xC740; &#xC0B4;&#xC544; &#xC788;&#xC9C0;&#xB9CC; <code>getty</code>&#xAC00; &#xC548; &#xB5A0; &#xC788;&#xAC70;&#xB098; target &#xC804;&#xD658;&#xC774; &#xB9C9;&#xD78C; &#xC0C1;&#xD0DC;&#xC77C; &#xC218; &#xC788;&#xC2B5;&#xB2C8;&#xB2E4;.</li><li>systemd service &#xB85C;&#xADF8;&#xB294; &#xAE30;&#xBCF8;&#xC801;&#xC73C;&#xB85C; journal&#xB85C; &#xAC11;&#xB2C8;&#xB2E4;. TTY&#xC5D0; &#xC9C1;&#xC811; &#xC4F0;&#xB824;&#xBA74; unit&#xC758; <code>StandardOutput=tty</code>, <code>TTYPath=</code> &#xAC19;&#xC740; &#xC124;&#xC815;&#xC744; &#xB530;&#xB85C; &#xBD10;&#xC57C; &#xD569;&#xB2C8;&#xB2E4;.</li><li>panic, oops, printk&#xB294; &#xD504;&#xB85C;&#xC138;&#xC2A4; stdout&#xC774; &#xC544;&#xB2D9;&#xB2C8;&#xB2E4;. <code>dmesg</code>, <code>journalctl -k</code>, console driver &#xACBD;&#xB85C;&#xB85C; &#xBD10;&#xC57C; &#xD569;&#xB2C8;&#xB2E4;.</li></ul><h2 id="12-%EB%81%9D%EB%82%98%EB%A9%B4-%EB%B0%98%EB%93%9C%EC%8B%9C-%EC%9B%90%EB%B3%B5%ED%95%9C%EB%8B%A4">12. &#xB05D;&#xB098;&#xBA74; &#xBC18;&#xB4DC;&#xC2DC; &#xC6D0;&#xBCF5;&#xD55C;&#xB2E4;</h2><p>trace&#xC640; dynamic debug&#xB294; &#xC7A0;&#xAE50; &#xCF1C;&#xB294; &#xB3C4;&#xAD6C;&#xC785;&#xB2C8;&#xB2E4;. &#xD2B9;&#xD788; function tracer&#xB098; dynamic debug&#xB97C; &#xCF1C; &#xB454; &#xCC44; &#xC6B4;&#xC601; &#xC11C;&#xBC84;&#xB97C; &#xBC29;&#xCE58;&#xD558;&#xBA74; &#xB85C;&#xADF8;&#xC640; &#xC624;&#xBC84;&#xD5E4;&#xB4DC;&#xAC00; &#xCEE4;&#xC9C8; &#xC218; &#xC788;&#xC2B5;&#xB2C8;&#xB2E4;.</p><pre><code class="language-bash">sudo sh -c &apos;
cd /sys/kernel/tracing
echo 0 &gt; tracing_on
echo nop &gt; current_tracer
: &gt; set_ftrace_filter
: &gt; set_ftrace_pid
: &gt; trace
find events -name enable -exec sh -c &quot;echo 0 &gt; \&quot;$1\&quot;&quot; sh {} \;
&apos;

sudo sh -c &apos;echo &quot;file drivers/tty/tty_io.c -p&quot; &gt; /sys/kernel/debug/dynamic_debug/control&apos; 2&gt;/dev/null || true
sudo sh -c &apos;echo &quot;file drivers/tty/n_tty.c -p&quot; &gt; /sys/kernel/debug/dynamic_debug/control&apos; 2&gt;/dev/null || true</code></pre><h2 id="%EC%A0%95%EB%A6%AC">&#xC815;&#xB9AC;</h2><p>&#xCF58;&#xC194; &#xCD9C;&#xB825; &#xCD94;&#xC801;&#xC740; <code>tty</code> &#xD558;&#xB098;&#xB9CC; &#xBCF4;&#xACE0; &#xB05D;&#xB0B4;&#xBA74; &#xC548; &#xB429;&#xB2C8;&#xB2E4;. &#xBA3C;&#xC800; &#xD604;&#xC7AC; &#xD504;&#xB85C;&#xC138;&#xC2A4;&#xC758; fd&#xAC00; <code>pts/N</code>&#xC778;&#xC9C0; <code>ttyN</code>&#xC778;&#xC9C0; &#xD655;&#xC778;&#xD558;&#xACE0;, &#xCEE4;&#xB110; console &#xD6C4;&#xBCF4;&#xB294; <code>/proc/cmdline</code>&#xACFC; <code>/proc/consoles</code>&#xB85C; &#xD655;&#xC778;&#xD569;&#xB2C8;&#xB2E4;. &#xADF8; &#xB2E4;&#xC74C; marker&#xB97C; &#xB098;&#xB220; &#xB9CC;&#xB4E0; &#xB4A4; tracepoint, ftrace, dynamic_debug &#xC21C;&#xC11C;&#xB85C; &#xC881;&#xD788;&#xBA74; &quot;&#xC774; &#xCD9C;&#xB825;&#xC774; &#xC5B4;&#xB290; TTY&#xB97C; &#xD0C0;&#xACE0; &#xC5B4;&#xB514;&#xAE4C;&#xC9C0; &#xAC14;&#xB294;&#xC9C0;&quot;&#xB97C; &#xC7AC;&#xD604; &#xAC00;&#xB2A5;&#xD55C; &#xC808;&#xCC28;&#xB85C; &#xC124;&#xBA85;&#xD560; &#xC218; &#xC788;&#xC2B5;&#xB2C8;&#xB2E4;.</p>]]></content:encoded></item><item><title><![CDATA[OVN-Kubernetes EgressIP가 보조 NIC로 나가지 않을 때 보는 라우팅 기준]]></title><description><![CDATA[RHOCP/OVN-Kubernetes에서 EgressIP는 잡혔지만 실제 송신이 기본망으로 나가는 상황을 source policy routing과 tcpdump로 확인하는 절차입니다.]]></description><link>https://devmes.com/ovn-kubernetes-secondary-nic-egressip-policy-routing/</link><guid isPermaLink="false">6a3b5b5281de1a000182fb5a</guid><category><![CDATA[OpenShift]]></category><category><![CDATA[OCP]]></category><category><![CDATA[Network]]></category><category><![CDATA[EgressIP]]></category><category><![CDATA[Troubleshooting]]></category><dc:creator><![CDATA[devmes]]></dc:creator><pubDate>Wed, 24 Jun 2026 04:21:38 GMT</pubDate><content:encoded><![CDATA[<p>OVN-Kubernetes EgressIP&#xB97C; &#xBCF4;&#xC870; NIC &#xB300;&#xC5ED;&#xC73C;&#xB85C; &#xC4F0;&#xB824;&#xBA74; &quot;EgressIP&#xAC00; &#xC0DD;&#xC131;&#xB410;&#xB2E4;&quot;&#xC640; &quot;&#xD328;&#xD0B7;&#xC774; &#xADF8; NIC&#xB85C; &#xB098;&#xAC04;&#xB2E4;&quot;&#xB97C; &#xAD6C;&#xBD84;&#xD574;&#xC57C; &#xD569;&#xB2C8;&#xB2E4;. EgressIP &#xB9AC;&#xC18C;&#xC2A4;&#xAC00; &#xC815;&#xC0C1;&#xC774;&#xC5B4;&#xB3C4; source &#xAE30;&#xBC18; &#xB77C;&#xC6B0;&#xD305;&#xC774; &#xC5C6;&#xC73C;&#xBA74; &#xD328;&#xD0B7;&#xC774; &#xAE30;&#xC874; default route&#xB85C; &#xB098;&#xAC08; &#xC218; &#xC788;&#xC2B5;&#xB2C8;&#xB2E4;.</p><h2 id="1-nic%EC%99%80-route%EB%A5%BC-%EB%A8%BC%EC%A0%80-%ED%99%95%EC%9D%B8%ED%95%9C%EB%8B%A4">1. NIC&#xC640; route&#xB97C; &#xBA3C;&#xC800; &#xD655;&#xC778;&#xD55C;&#xB2E4;</h2><pre><code class="language-bash">ip addr show br-ex
ip addr show bond-egress
ip route</code></pre><h2 id="2-egressip-%EB%8C%80%EC%83%81-%EB%85%B8%EB%93%9C%EC%99%80-namespace%EB%A5%BC-%EB%9D%BC%EB%B2%A8%EB%A1%9C-%EB%AC%B6%EB%8A%94%EB%8B%A4">2. EgressIP &#xB300;&#xC0C1; &#xB178;&#xB4DC;&#xC640; namespace&#xB97C; &#xB77C;&#xBCA8;&#xB85C; &#xBB36;&#xB294;&#xB2E4;</h2><pre><code class="language-bash">oc label node &lt;worker-node&gt; k8s.ovn.org/egress-assignable=
oc get nodes --show-labels | grep egress-assignable

oc label ns &lt;namespace&gt; egress=secondary
oc get ns --show-labels | grep egress=secondary</code></pre><h2 id="3-egressip%EB%8A%94-32-vip%EB%A1%9C-%EB%B3%B4%EC%9D%B4%EB%8A%94-%EA%B2%83%EC%9D%B4-%EC%A0%95%EC%83%81%EC%9D%B4%EB%8B%A4">3. EgressIP&#xB294; /32 VIP&#xB85C; &#xBCF4;&#xC774;&#xB294; &#xAC83;&#xC774; &#xC815;&#xC0C1;&#xC774;&#xB2E4;</h2><pre><code class="language-yaml">apiVersion: k8s.ovn.org/v1
kind: EgressIP
metadata:
  name: egress-secondary
spec:
  egressIPs:
    - 10.108.0.50
  namespaceSelector:
    matchLabels:
      egress: secondary</code></pre><pre><code class="language-bash">oc apply -f egress-secondary.yaml
oc get egressip -o wide
ip addr show br-ex | grep 10.108.0.50</code></pre><h2 id="4-source-policy-routing%EC%9C%BC%EB%A1%9C-%EC%86%A1%EC%8B%A0-nic%EB%A5%BC-%EA%B3%A0%EC%A0%95%ED%95%9C%EB%8B%A4">4. source policy routing&#xC73C;&#xB85C; &#xC1A1;&#xC2E0; NIC&#xB97C; &#xACE0;&#xC815;&#xD55C;&#xB2E4;</h2><pre><code class="language-bash">echo &quot;108 egress108&quot; &gt;&gt; /etc/iproute2/rt_tables
ip rule del from 10.108.0.50/32 table egress108 2&gt;/dev/null || true
ip route flush table egress108 2&gt;/dev/null || true
ip rule add from 10.108.0.50/32 table egress108 priority 1080
ip route add 10.108.0.0/24 dev bond-egress src 10.108.0.50 table egress108
ip route add default via 10.108.0.1 dev bond-egress table egress108
ip route get 8.8.8.8 from 10.108.0.50</code></pre><h2 id="5-tcpdump%EC%99%80-pod-%ED%85%8C%EC%8A%A4%ED%8A%B8%EB%A1%9C-%EC%A6%9D%EB%AA%85%ED%95%9C%EB%8B%A4">5. tcpdump&#xC640; Pod &#xD14C;&#xC2A4;&#xD2B8;&#xB85C; &#xC99D;&#xBA85;&#xD55C;&#xB2E4;</h2><pre><code class="language-bash">tcpdump -ni bond-egress host 8.8.8.8
tcpdump -ni bond-egress arp
conntrack -L | grep 10.108.0.50

oc run egress-test \
  --image=registry.access.redhat.com/ubi9/ubi \
  -n &lt;namespace&gt; \
  -it --rm -- bash

curl -s https://ifconfig.me</code></pre><h2 id="%EC%A0%95%EB%A6%AC">&#xC815;&#xB9AC;</h2><p>OVN-Kubernetes EgressIP &#xC7A5;&#xC560;&#xB294; &#xB9AC;&#xC18C;&#xC2A4; &#xC0DD;&#xC131; &#xC5EC;&#xBD80;&#xB9CC; &#xBCF4;&#xBA74; &#xC548; &#xB429;&#xB2C8;&#xB2E4;. &#xB178;&#xB4DC; &#xB77C;&#xBCA8;, namespaceSelector, /32 VIP &#xD45C;&#xC2DC;, source policy routing, &#xBCF4;&#xC870; NIC tcpdump, Pod &#xC678;&#xBD80; IP &#xD655;&#xC778;&#xC744; &#xD55C; &#xC904;&#xB85C; &#xC5F0;&#xACB0;&#xD574;&#xC57C; &#xD569;&#xB2C8;&#xB2E4;.</p>]]></content:encoded></item><item><title><![CDATA[OpenShift SCC를 운영자가 읽는 법: anyuid, hostPath, hostNetwork, privileged]]></title><description><![CDATA[OpenShift SCC 컬럼 의미와 anyuid, hostaccess, hostmount-anyuid, hostnetwork, privileged 계열의 운영 위험도를 정리했습니다.]]></description><link>https://devmes.com/openshift-scc-anyuid-hostpath-privileged-guide/</link><guid isPermaLink="false">6a3b5b5281de1a000182fb4d</guid><category><![CDATA[OpenShift]]></category><category><![CDATA[OCP]]></category><category><![CDATA[SCC]]></category><category><![CDATA[Security]]></category><category><![CDATA[Security Context]]></category><dc:creator><![CDATA[devmes]]></dc:creator><pubDate>Wed, 24 Jun 2026 04:21:38 GMT</pubDate><content:encoded><![CDATA[<p>OpenShift&#xC5D0;&#xC11C; Pod&#xAC00; &#xC548; &#xB730; &#xB54C; <code>anyuid</code>&#xB098; <code>privileged</code>&#xB97C; &#xBD99;&#xC774;&#xBA74; &#xB2F9;&#xC7A5;&#xC740; &#xD574;&#xACB0;&#xB418;&#xB294; &#xAC83;&#xCC98;&#xB7FC; &#xBCF4;&#xC785;&#xB2C8;&#xB2E4;. &#xD558;&#xC9C0;&#xB9CC; SCC&#xB294; Pod&#xAC00; &#xB178;&#xB4DC;&#xC640; &#xCEE4;&#xB110; &#xC790;&#xC6D0;&#xC5D0; &#xC5B4;&#xB514;&#xAE4C;&#xC9C0; &#xC811;&#xADFC;&#xD560; &#xC218; &#xC788;&#xB294;&#xC9C0;&#xB97C; &#xC815;&#xD558;&#xB294; &#xBCF4;&#xC548; &#xACBD;&#xACC4;&#xC785;&#xB2C8;&#xB2E4;.</p><h2 id="1-scc-%EC%BB%AC%EB%9F%BC%EC%9D%84-%EC%9D%BD%EB%8A%94-%EA%B8%B0%EC%A4%80">1. SCC &#xCEEC;&#xB7FC;&#xC744; &#xC77D;&#xB294; &#xAE30;&#xC900;</h2><p><code>PRIV=true</code>, <code>hostPath</code>, <code>RunAsAny</code>, <code>VOLUMES=*</code>&#xAC00; &#xAC19;&#xC774; &#xBCF4;&#xC774;&#xBA74; &#xC77C;&#xBC18; &#xC560;&#xD50C;&#xB9AC;&#xCF00;&#xC774;&#xC158;&#xC5D0; &#xC904; &#xAD8C;&#xD55C;&#xC774; &#xC544;&#xB2D9;&#xB2C8;&#xB2E4;.</p><pre><code class="language-bash">oc get scc
oc describe scc restricted-v2
oc describe scc anyuid
oc describe scc privileged</code></pre><h2 id="2-anyuid%EB%8A%94-root-%EC%8B%A4%ED%96%89-%ED%97%88%EC%9A%A9%EC%9D%B4%EB%8B%A4">2. anyuid&#xB294; root &#xC2E4;&#xD589; &#xD5C8;&#xC6A9;&#xC774;&#xB2E4;</h2><p><code>anyuid</code>&#xB294; privileged &#xCEE8;&#xD14C;&#xC774;&#xB108;&#xB97C; &#xD5C8;&#xC6A9;&#xD558;&#xB294; &#xC815;&#xCC45;&#xC740; &#xC544;&#xB2C8;&#xC9C0;&#xB9CC; &#xCEE8;&#xD14C;&#xC774;&#xB108; UID&#xB97C; &#xC790;&#xC720;&#xB86D;&#xAC8C; &#xB461;&#xB2C8;&#xB2E4;. &#xC7A5;&#xAE30;&#xC801;&#xC73C;&#xB85C;&#xB294; &#xC774;&#xBBF8;&#xC9C0;&#xAC00; &#xC784;&#xC758; UID&#xC5D0;&#xC11C;&#xB3C4; &#xB3D9;&#xC791;&#xD558;&#xB3C4;&#xB85D; &#xACE0;&#xCE58;&#xB294; &#xAC83;&#xC774; &#xB9DE;&#xC2B5;&#xB2C8;&#xB2E4;.</p><pre><code class="language-bash">oc adm policy add-scc-to-user anyuid -z &lt;serviceaccount&gt; -n &lt;namespace&gt;
oc get pod &lt;pod&gt; -n &lt;namespace&gt; -o jsonpath=&apos;{.spec.serviceAccountName}{&quot;\n&quot;}&apos;
oc describe pod &lt;pod&gt; -n &lt;namespace&gt; | egrep -i &quot;scc|uid|forbidden|security&quot;</code></pre><h2 id="3-hostpath%EB%8A%94-%EB%85%B8%EB%93%9C-%ED%8C%8C%EC%9D%BC%EC%8B%9C%EC%8A%A4%ED%85%9C-%EC%A0%91%EA%B7%BC%EC%9D%B4%EB%8B%A4">3. hostPath&#xB294; &#xB178;&#xB4DC; &#xD30C;&#xC77C;&#xC2DC;&#xC2A4;&#xD15C; &#xC811;&#xADFC;&#xC774;&#xB2E4;</h2><pre><code class="language-bash">oc get pod &lt;pod&gt; -n &lt;namespace&gt; -o yaml | grep -n &quot;hostPath&quot; -A5
oc describe scc hostaccess
oc describe scc hostmount-anyuid</code></pre><h2 id="4-hostnetwork%EB%8A%94-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EA%B2%A9%EB%A6%AC-%EC%99%84%ED%99%94%EB%8B%A4">4. hostNetwork&#xB294; &#xB124;&#xD2B8;&#xC6CC;&#xD06C; &#xACA9;&#xB9AC; &#xC644;&#xD654;&#xB2E4;</h2><pre><code class="language-bash">oc get pod &lt;pod&gt; -n &lt;namespace&gt; -o jsonpath=&apos;{.spec.hostNetwork}{&quot;\n&quot;}&apos;
oc describe scc hostnetwork
oc describe scc hostnetwork-v2</code></pre><h2 id="5-privileged%EC%99%80-capsysadmin%EC%9D%80-%EC%B5%9C%ED%9B%84%EC%9D%98-%EC%84%A0%ED%83%9D%EC%9D%B4%EB%8B%A4">5. privileged&#xC640; CAP_SYS_ADMIN&#xC740; &#xCD5C;&#xD6C4;&#xC758; &#xC120;&#xD0DD;&#xC774;&#xB2E4;</h2><pre><code class="language-bash">oc adm policy who-can use scc privileged
oc adm policy who-can use scc anyuid
oc get rolebinding,clusterrolebinding -A | grep -i scc</code></pre><h2 id="%EC%A0%95%EB%A6%AC">&#xC815;&#xB9AC;</h2><p>SCC &#xBB38;&#xC81C;&#xB97C; &#xB9CC;&#xB0AC;&#xC744; &#xB54C; &#xBAA9;&#xD45C;&#xB294; Pod&#xB97C; &#xB744;&#xC6B0;&#xB294; &#xAC83;&#xC774; &#xC544;&#xB2C8;&#xB77C; &#xD544;&#xC694;&#xD55C; &#xCD5C;&#xC18C; &#xAD8C;&#xD55C;&#xC73C;&#xB85C; &#xB744;&#xC6B0;&#xB294; &#xAC83;&#xC785;&#xB2C8;&#xB2E4;. service account &#xB2E8;&#xC704;&#xB85C; &#xC81C;&#xD55C;&#xD558;&#xACE0;, &#xC784;&#xC2DC; &#xAD8C;&#xD55C;&#xC740; &#xC81C;&#xAC70; &#xACC4;&#xD68D;&#xAE4C;&#xC9C0; &#xB0A8;&#xACA8;&#xC57C; &#xD569;&#xB2C8;&#xB2E4;.</p>]]></content:encoded></item><item><title><![CDATA[OpenShift GitOps: ArgoCD 권한과 Application 등록을 운영 기준으로 정리]]></title><description><![CDATA[OpenShift GitOps Operator에서 ArgoCD RBAC, 그룹 권한, Repository 연결, Application YAML 등록을 운영 흐름으로 정리했습니다.]]></description><link>https://devmes.com/openshift-gitops-argocd-rbac-application-runbook/</link><guid isPermaLink="false">6a3b5b5181de1a000182fb42</guid><category><![CDATA[OpenShift]]></category><category><![CDATA[OCP]]></category><category><![CDATA[GitOps]]></category><category><![CDATA[DevOps]]></category><category><![CDATA[Kubernetes]]></category><dc:creator><![CDATA[devmes]]></dc:creator><pubDate>Wed, 24 Jun 2026 04:21:37 GMT</pubDate><content:encoded><![CDATA[<p>OpenShift GitOps&#xB294; ArgoCD&#xB97C; &#xC124;&#xCE58;&#xD558;&#xB294; &#xAC83;&#xC73C;&#xB85C; &#xB05D;&#xB098;&#xC9C0; &#xC54A;&#xC2B5;&#xB2C8;&#xB2E4;. &#xC6B4;&#xC601; &#xAE30;&#xC900;&#xC5D0;&#xC11C;&#xB294; &#xB204;&#xAC00; &#xC811;&#xADFC;&#xD560; &#xC218; &#xC788;&#xB294;&#xC9C0;, &#xC5B4;&#xB5A4; &#xAD8C;&#xD55C;&#xC73C;&#xB85C; &#xB3D9;&#xAE30;&#xD654;&#xD558;&#xB294;&#xC9C0;, &#xC5B4;&#xB5A4; Git &#xC800;&#xC7A5;&#xC18C;&#xC640; &#xC5B4;&#xB5A4; namespace&#xB97C; &#xB300;&#xC0C1;&#xC73C;&#xB85C; &#xC0BC;&#xB294;&#xC9C0; &#xBA3C;&#xC800; &#xC815;&#xB9AC;&#xD574;&#xC57C; &#xD569;&#xB2C8;&#xB2E4;.</p><h2 id="1-argocd-rbac-configmap%EB%B6%80%ED%84%B0-%ED%99%95%EC%9D%B8%ED%95%9C%EB%8B%A4">1. ArgoCD RBAC ConfigMap&#xBD80;&#xD130; &#xD655;&#xC778;&#xD55C;&#xB2E4;</h2><pre><code class="language-bash">oc -n openshift-gitops get cm argocd-rbac-cm -o yaml
oc -n openshift-gitops get argocd
oc -n openshift-gitops get pods
oc -n openshift-gitops get route</code></pre><h2 id="2-%EA%B7%B8%EB%A3%B9%EC%9D%84-%EB%A7%8C%EB%93%A4%EA%B3%A0-%ED%95%84%EC%9A%94%ED%95%9C-%EA%B6%8C%ED%95%9C%EB%A7%8C-%EC%97%B0%EA%B2%B0%ED%95%9C%EB%8B%A4">2. &#xADF8;&#xB8F9;&#xC744; &#xB9CC;&#xB4E4;&#xACE0; &#xD544;&#xC694;&#xD55C; &#xAD8C;&#xD55C;&#xB9CC; &#xC5F0;&#xACB0;&#xD55C;&#xB2E4;</h2><p>ArgoCD &#xC0AC;&#xC6A9;&#xC790;&#xB97C; &#xBC14;&#xB85C; cluster-admin&#xCC98;&#xB7FC; &#xB2E4;&#xB8E8;&#xC9C0; &#xB9D0;&#xACE0; &#xBC30;&#xD3EC; &#xB300;&#xC0C1; namespace&#xC640; &#xC6B4;&#xC601; &#xC5ED;&#xD560;&#xC744; &#xB098;&#xB215;&#xB2C8;&#xB2E4;.</p><pre><code class="language-yaml">apiVersion: user.openshift.io/v1
kind: Group
metadata:
  name: gitops-admins
users:
  - admin</code></pre><pre><code class="language-bash">oc apply -f gitops-admins.yaml
oc adm policy add-cluster-role-to-group admin gitops-admins
oc adm policy add-cluster-role-to-user admin \
  -z openshift-gitops-argocd-application-controller \
  -n openshift-gitops</code></pre><h2 id="3-repository-%EC%97%B0%EA%B2%B0%EC%9D%80-secret%EA%B3%BC-%EA%B6%8C%ED%95%9C-%EB%B2%94%EC%9C%84%EB%A5%BC-%EA%B0%99%EC%9D%B4-%EB%B3%B8%EB%8B%A4">3. Repository &#xC5F0;&#xACB0;&#xC740; secret&#xACFC; &#xAD8C;&#xD55C; &#xBC94;&#xC704;&#xB97C; &#xAC19;&#xC774; &#xBCF8;&#xB2E4;</h2><p>Repository&#xB97C; &#xC5F0;&#xACB0;&#xD560; &#xB54C;&#xB294; URL&#xB9CC; &#xB123;&#xACE0; &#xB05D;&#xB0B4;&#xBA74; &#xC548; &#xB429;&#xB2C8;&#xB2E4;. &#xC778;&#xC99D; secret, CA, &#xD504;&#xB85D;&#xC2DC;, read-only token &#xC5EC;&#xBD80;&#xB97C; &#xAC19;&#xC774; &#xBD10;&#xC57C; &#xD569;&#xB2C8;&#xB2E4;.</p><pre><code class="language-bash">oc -n openshift-gitops get secret | grep -i repo
oc -n openshift-gitops describe secret &lt;repo-secret-name&gt;
oc -n openshift-gitops logs deploy/openshift-gitops-repo-server --tail=100</code></pre><h2 id="4-application%EC%9D%80-yaml%EB%A1%9C-%EB%82%A8%EA%B8%B4%EB%8B%A4">4. Application&#xC740; YAML&#xB85C; &#xB0A8;&#xAE34;&#xB2E4;</h2><pre><code class="language-yaml">apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: sample-app
  namespace: openshift-gitops
spec:
  project: default
  source:
    repoURL: https://git.example.com/platform/sample-app.git
    targetRevision: main
    path: overlays/prod
  destination:
    server: https://kubernetes.default.svc
    namespace: sample-prod
  syncPolicy:
    automated:
      prune: false
      selfHeal: true</code></pre><h2 id="5-%EC%9E%A5%EC%95%A0%EB%8A%94-repo-server-controller-target-namespace-%EC%88%9C%EC%84%9C%EB%A1%9C-%EB%B3%B8%EB%8B%A4">5. &#xC7A5;&#xC560;&#xB294; repo-server, controller, target namespace &#xC21C;&#xC11C;&#xB85C; &#xBCF8;&#xB2E4;</h2><pre><code class="language-bash">oc -n openshift-gitops get applications.argoproj.io
oc -n openshift-gitops describe application sample-app
oc -n openshift-gitops logs deploy/openshift-gitops-repo-server --tail=200
oc -n openshift-gitops logs deploy/openshift-gitops-application-controller --tail=200
oc -n sample-prod get events --sort-by=.lastTimestamp</code></pre><h2 id="%EC%A0%95%EB%A6%AC">&#xC815;&#xB9AC;</h2><p>OpenShift GitOps &#xC6B4;&#xC601;&#xC740; ArgoCD &#xD654;&#xBA74;&#xC744; &#xC5EC;&#xB294; &#xC77C;&#xC774; &#xC544;&#xB2C8;&#xB77C; RBAC, repository credential, Application YAML, target namespace &#xAD8C;&#xD55C;, sync &#xC815;&#xCC45;&#xC744; &#xD55C; &#xC138;&#xD2B8;&#xB85C; &#xAD00;&#xB9AC;&#xD558;&#xB294; &#xC77C;&#xC785;&#xB2C8;&#xB2E4;.</p>]]></content:encoded></item><item><title><![CDATA[Linux 침해 의심 프로세스: strace, lsof, cron으로 확인하는 순서]]></title><description><![CDATA[CPU를 과점유하는 수상한 프로세스를 strace, lsof, /proc, cron, systemd 기준으로 확인하고 증거 보존 후 제거하는 절차입니다.]]></description><link>https://devmes.com/linux-compromise-strace-lsof-cron-runbook/</link><guid isPermaLink="false">6a3b5b5181de1a000182fb37</guid><category><![CDATA[Linux]]></category><category><![CDATA[Security]]></category><category><![CDATA[Troubleshooting]]></category><category><![CDATA[Incident Response]]></category><category><![CDATA[Monitoring]]></category><dc:creator><![CDATA[devmes]]></dc:creator><pubDate>Wed, 24 Jun 2026 04:21:37 GMT</pubDate><content:encoded><![CDATA[<p>&#xCE68;&#xD574; &#xC758;&#xC2EC; &#xC0C1;&#xD669;&#xC5D0;&#xC11C;&#xB294; &#xBA3C;&#xC800; &#xC8FD;&#xC774;&#xB294; &#xAC83;&#xBCF4;&#xB2E4; &#xC99D;&#xAC70;&#xB97C; &#xB0A8;&#xAE30;&#xB294; &#xC21C;&#xC11C;&#xAC00; &#xC911;&#xC694;&#xD569;&#xB2C8;&#xB2E4;. CPU&#xB97C; &#xBE44;&#xC815;&#xC0C1;&#xC801;&#xC73C;&#xB85C; &#xC4F0;&#xB294; &#xD504;&#xB85C;&#xC138;&#xC2A4;&#xAC00; &#xC788;&#xACE0;, &#xD45C;&#xC900; &#xC785;&#xCD9C;&#xB825;&#xC774; <code>/dev/null</code>&#xB85C; &#xBD99;&#xC5B4; &#xC788;&#xC73C;&#xBA70;, &#xC2E4;&#xD589; &#xACBD;&#xB85C;&#xAC00; &#xD648; &#xB514;&#xB809;&#xD130;&#xB9AC;&#xC758; &#xC228;&#xAE40; &#xACBD;&#xB85C;&#xB77C;&#xBA74; &#xC815;&#xC0C1; &#xB370;&#xBAAC;&#xBCF4;&#xB2E4; &#xC545;&#xC131; &#xB85C;&#xB354;&#xB098; &#xB9C8;&#xC774;&#xB108;&#xB97C; &#xC758;&#xC2EC;&#xD574;&#xC57C; &#xD569;&#xB2C8;&#xB2E4;.</p><h2 id="1-pid-%EA%B8%B0%EC%A4%80%EC%9C%BC%EB%A1%9C-%EC%A6%9D%EA%B1%B0%EB%A5%BC-%EA%B3%A0%EC%A0%95%ED%95%9C%EB%8B%A4">1. PID &#xAE30;&#xC900;&#xC73C;&#xB85C; &#xC99D;&#xAC70;&#xB97C; &#xACE0;&#xC815;&#xD55C;&#xB2E4;</h2><p>&#xBA85;&#xB839;&#xC904;, &#xC2E4;&#xD589; &#xD30C;&#xC77C;, &#xD604;&#xC7AC; &#xC791;&#xC5C5; &#xB514;&#xB809;&#xD130;&#xB9AC;, &#xC5F4;&#xB9B0; &#xD30C;&#xC77C;, &#xB124;&#xD2B8;&#xC6CC;&#xD06C; &#xC5F0;&#xACB0;, &#xD30C;&#xC77C; &#xD574;&#xC2DC;&#xB97C; &#xD55C; &#xBC88;&#xC5D0; &#xB0A8;&#xAE41;&#xB2C8;&#xB2E4;.</p><pre><code class="language-bash">PID=&lt;pid&gt;
ps -fp ${PID}
top -Hp ${PID}
cat /proc/${PID}/cmdline | tr &quot;\0&quot; &quot; &quot;; echo
readlink -f /proc/${PID}/exe
readlink -f /proc/${PID}/cwd
lsof -p ${PID}
ss -pant | grep &quot;${PID}\|ESTAB&quot;
sha256sum &quot;$(readlink -f /proc/${PID}/exe)&quot;</code></pre><h2 id="2-strace%EB%8A%94-%EC%A7%A7%EA%B2%8C-%EB%B6%99%EC%9D%B8%EB%8B%A4">2. strace&#xB294; &#xC9E7;&#xAC8C; &#xBD99;&#xC778;&#xB2E4;</h2><p><code>epoll_wait</code> &#xACC4;&#xC5F4; &#xBC18;&#xBCF5;&#xACFC; &#xC678;&#xBD80; TLS &#xC5F0;&#xACB0;&#xC774; &#xAC19;&#xC774; &#xBCF4;&#xC774;&#xBA74; &#xB124;&#xD2B8;&#xC6CC;&#xD06C; &#xC774;&#xBCA4;&#xD2B8; &#xB8E8;&#xD504;&#xB97C; &#xAC00;&#xC9C4; &#xC758;&#xC2EC; &#xD504;&#xB85C;&#xC138;&#xC2A4;&#xB85C; &#xD310;&#xB2E8;&#xD560; &#xC218; &#xC788;&#xC2B5;&#xB2C8;&#xB2E4;.</p><pre><code class="language-bash">strace -ttT -s 200 -p ${PID} -o /tmp/suspect-${PID}.strace
sleep 10
pkill -INT -f &quot;strace -ttT -s 200 -p ${PID}&quot;
tail -n 80 /tmp/suspect-${PID}.strace</code></pre><h2 id="3-%EC%A7%80%EC%86%8D%EC%84%B1%EC%9D%80-cron-systemd-profile-%EC%88%9C%EC%84%9C%EB%A1%9C-%EB%B3%B8%EB%8B%A4">3. &#xC9C0;&#xC18D;&#xC131;&#xC740; cron, systemd, profile &#xC21C;&#xC11C;&#xB85C; &#xBCF8;&#xB2E4;</h2><p>&#xD504;&#xB85C;&#xC138;&#xC2A4;&#xB97C; &#xC8FD;&#xC600;&#xB294;&#xB370; &#xB2E4;&#xC2DC; &#xC0B4;&#xC544;&#xB098;&#xBA74; &#xC2E4;&#xD589; &#xD30C;&#xC77C;&#xBCF4;&#xB2E4; &#xC9C0;&#xC18D;&#xC131; &#xC9C0;&#xC810;&#xC774; &#xD575;&#xC2EC;&#xC785;&#xB2C8;&#xB2E4;. crontab, systemd unit, rc.local, shell profile, PATH &#xC624;&#xC5FC;&#xC744; &#xBD05;&#xB2C8;&#xB2E4;.</p><pre><code class="language-bash">crontab -l
sudo ls -al /etc/cron* /var/spool/cron 2&gt;/dev/null
sudo systemctl list-unit-files | egrep -i &quot;unknown|cache|update|tmp|miner|bash&quot;
sudo find /etc/systemd/system -maxdepth 3 -type f -mtime -30 -ls
cat /etc/rc.local 2&gt;/dev/null
grep -R &quot;cache\|tmp\|curl\|wget\|bash&quot; /etc/profile /etc/bashrc ~/.bash* 2&gt;/dev/null
echo &quot;$PATH&quot;</code></pre><h2 id="4-%EC%A0%9C%EA%B1%B0-%EC%A0%84%EC%97%90-%EA%B2%A9%EB%A6%AC%ED%95%98%EA%B3%A0-%EC%B0%A8%EB%8B%A8%ED%95%9C%EB%8B%A4">4. &#xC81C;&#xAC70; &#xC804;&#xC5D0; &#xACA9;&#xB9AC;&#xD558;&#xACE0; &#xCC28;&#xB2E8;&#xD55C;&#xB2E4;</h2><p>&#xC758;&#xC2EC; &#xD30C;&#xC77C;&#xC740; &#xACA9;&#xB9AC; &#xB514;&#xB809;&#xD130;&#xB9AC;&#xC5D0; &#xBCF5;&#xC0AC;&#xD558;&#xACE0; &#xD574;&#xC2DC;&#xB97C; &#xB0A8;&#xAE34; &#xB4A4; &#xC678;&#xBD80; &#xD1B5;&#xC2E0;&#xC9C0;&#xB97C; &#xCC28;&#xB2E8;&#xD569;&#xB2C8;&#xB2E4;. &#xADF8; &#xB2E4;&#xC74C; &#xD504;&#xB85C;&#xC138;&#xC2A4;&#xB97C; &#xC885;&#xB8CC;&#xD569;&#xB2C8;&#xB2E4;.</p><pre><code class="language-bash">mkdir -p /root/incident-artifacts
cp -a &quot;$(readlink -f /proc/${PID}/exe)&quot; /root/incident-artifacts/suspect-${PID}.bin
sha256sum /root/incident-artifacts/suspect-${PID}.bin &gt; /root/incident-artifacts/suspect-${PID}.sha256
iptables -I OUTPUT -d &lt;malicious-ip&gt; -j REJECT
kill -TERM ${PID}
sleep 3
kill -KILL ${PID} 2&gt;/dev/null || true</code></pre><h2 id="5-%EB%B3%B5%EA%B5%AC-%ED%9B%84-%EB%AC%B4%EA%B2%B0%EC%84%B1%EC%9D%84-%ED%99%95%EC%9D%B8%ED%95%9C%EB%8B%A4">5. &#xBCF5;&#xAD6C; &#xD6C4; &#xBB34;&#xACB0;&#xC131;&#xC744; &#xD655;&#xC778;&#xD55C;&#xB2E4;</h2><p>&#xD504;&#xB85C;&#xC138;&#xC2A4;&#xB9CC; &#xC81C;&#xAC70;&#xD558;&#xBA74; &#xB05D;&#xC774; &#xC544;&#xB2D9;&#xB2C8;&#xB2E4;. &#xD328;&#xD0A4;&#xC9C0; &#xBB34;&#xACB0;&#xC131;, &#xC2E0;&#xADDC; &#xACC4;&#xC815;, SSH &#xD0A4;, sudoers, &#xCD5C;&#xADFC; &#xBCC0;&#xACBD; &#xD30C;&#xC77C;&#xC744; &#xBD10;&#xC57C; &#xD569;&#xB2C8;&#xB2E4;.</p><pre><code class="language-bash">rpm -Va &gt; /root/incident-artifacts/rpm-verify.txt 2&gt;&amp;1
last -a | head -n 50
lastlog | egrep -v &quot;Never logged in&quot;
find /root /home /tmp /var/tmp -xdev -type f -mtime -7 -ls
find /etc -type f -mtime -7 -ls
grep -R &quot;ssh-rsa\|ssh-ed25519&quot; /root /home 2&gt;/dev/null</code></pre><h2 id="%EC%A0%95%EB%A6%AC">&#xC815;&#xB9AC;</h2><p>&#xCE68;&#xD574; &#xC758;&#xC2EC; &#xD504;&#xB85C;&#xC138;&#xC2A4; &#xBD84;&#xC11D;&#xC758; &#xD575;&#xC2EC;&#xC740; PID &#xAE30;&#xC900; &#xC99D;&#xAC70; &#xACE0;&#xC815;, &#xC9E7;&#xC740; strace, lsof&#xC640; &#xB124;&#xD2B8;&#xC6CC;&#xD06C; &#xC5F0;&#xACB0; &#xD655;&#xC778;, cron/systemd &#xC9C0;&#xC18D;&#xC131; &#xC81C;&#xAC70;, &#xC0AC;&#xD6C4; &#xBB34;&#xACB0;&#xC131; &#xAC80;&#xC99D;&#xC785;&#xB2C8;&#xB2E4;.</p>]]></content:encoded></item><item><title><![CDATA[OpenStack 네트워크·스토리지 장애를 명령 순서로 좁히는 방법]]></title><description><![CDATA[Obsidian에 흩어진 OpenStack 네트워크, 보안 그룹, Cinder 볼륨, 로그 점검 명령을 운영 순서로 재구성했습니다.]]></description><link>https://devmes.com/openstack-network-storage-troubleshooting-command-map/</link><guid isPermaLink="false">6a3b5b5081de1a000182fb2e</guid><category><![CDATA[OpenStack]]></category><category><![CDATA[Network]]></category><category><![CDATA[Storage]]></category><category><![CDATA[Troubleshooting]]></category><category><![CDATA[Cloud Operations]]></category><dc:creator><![CDATA[devmes]]></dc:creator><pubDate>Wed, 24 Jun 2026 04:21:36 GMT</pubDate><content:encoded><![CDATA[<p>OpenStack &#xC7A5;&#xC560;&#xB294; &#xBA85;&#xB839;&#xC744; &#xB9CE;&#xC774; &#xC544;&#xB294; &#xAC83;&#xBCF4;&#xB2E4; &#xC21C;&#xC11C;&#xAC00; &#xC911;&#xC694;&#xD569;&#xB2C8;&#xB2E4;. &#xB124;&#xD2B8;&#xC6CC;&#xD06C;&#xAC00; &#xB9C9;&#xD78C; &#xAC83;&#xC778;&#xC9C0;, &#xBCF4;&#xC548; &#xADF8;&#xB8F9;&#xC774; &#xB9C9;&#xC740; &#xAC83;&#xC778;&#xC9C0;, &#xD3EC;&#xD2B8; &#xBC14;&#xC778;&#xB529;&#xC774; &#xB04A;&#xAE34; &#xAC83;&#xC778;&#xC9C0;, Cinder &#xBCFC;&#xB968;&#xC774;&#xB098; &#xAC8C;&#xC2A4;&#xD2B8; OS &#xC548;&#xCABD; &#xBB38;&#xC81C;&#xC778;&#xC9C0; &#xBA3C;&#xC800; &#xACC4;&#xCE35;&#xC744; &#xB098;&#xB220;&#xC57C; &#xD569;&#xB2C8;&#xB2E4;.</p><h2 id="1-openstack-%EB%A6%AC%EC%86%8C%EC%8A%A4-%EA%B4%80%EA%B3%84%EB%B6%80%ED%84%B0-%EC%9E%A1%EB%8A%94%EB%8B%A4">1. OpenStack &#xB9AC;&#xC18C;&#xC2A4; &#xAD00;&#xACC4;&#xBD80;&#xD130; &#xC7A1;&#xB294;&#xB2E4;</h2><p>VM, &#xD3EC;&#xD2B8;, &#xB124;&#xD2B8;&#xC6CC;&#xD06C;, &#xC11C;&#xBE0C;&#xB137;, &#xB77C;&#xC6B0;&#xD130;, &#xBCF4;&#xC548; &#xADF8;&#xB8F9; &#xAD00;&#xACC4;&#xB97C; &#xBA3C;&#xC800; &#xBD05;&#xB2C8;&#xB2E4;. &#xD3EC;&#xD2B8;&#xAC00; &#xC5B4;&#xB5A4; &#xB124;&#xD2B8;&#xC6CC;&#xD06C;&#xC5D0; &#xBD99;&#xC5B4; &#xC788;&#xACE0; fixed IP&#xAC00; &#xC815;&#xC0C1;&#xC778;&#xC9C0; &#xD655;&#xC778;&#xD574;&#xC57C; tcpdump &#xACB0;&#xACFC;&#xB3C4; &#xD574;&#xC11D;&#xD560; &#xC218; &#xC788;&#xC2B5;&#xB2C8;&#xB2E4;.</p><pre><code class="language-bash">openstack server show &lt;server-id&gt;
openstack port list --server &lt;server-id&gt;
openstack port show &lt;port-id&gt;
openstack network show &lt;network-id&gt;
openstack subnet show &lt;subnet-id&gt;
openstack router list
openstack security group rule list &lt;security-group-id&gt;</code></pre><h2 id="2-%EA%B2%8C%EC%8A%A4%ED%8A%B8-%EB%82%B4%EB%B6%80%EC%97%90%EC%84%9C%EB%8A%94-%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4-%EB%9D%BC%EC%9A%B0%ED%8C%85-dns%EB%A5%BC-%EB%B6%84%EB%A6%AC%ED%95%9C%EB%8B%A4">2. &#xAC8C;&#xC2A4;&#xD2B8; &#xB0B4;&#xBD80;&#xC5D0;&#xC11C;&#xB294; &#xC778;&#xD130;&#xD398;&#xC774;&#xC2A4;, &#xB77C;&#xC6B0;&#xD305;, DNS&#xB97C; &#xBD84;&#xB9AC;&#xD55C;&#xB2E4;</h2><p>ping &#xC2E4;&#xD328;&#xAC00; &#xACE7; &#xC804;&#xCCB4; &#xB124;&#xD2B8;&#xC6CC;&#xD06C; &#xC7A5;&#xC560;&#xB294; &#xC544;&#xB2D9;&#xB2C8;&#xB2E4;. IP, default route, DNS, TCP &#xC811;&#xC18D;&#xC744; &#xAC01;&#xAC01; &#xB098;&#xB220;&#xC11C; &#xD655;&#xC778;&#xD569;&#xB2C8;&#xB2E4;.</p><pre><code class="language-bash">ip addr
ip route
resolvectl status 2&gt;/dev/null || cat /etc/resolv.conf
ping -c 3 &lt;gateway-ip&gt;
curl -sv --connect-timeout 3 http://&lt;target-ip&gt;:&lt;port&gt;/
traceroute &lt;target-ip&gt;
mtr -rw &lt;target-ip&gt;</code></pre><h2 id="3-%ED%8C%A8%ED%82%B7%EC%9D%80-%EC%96%91%EC%AA%BD%EC%97%90%EC%84%9C-%EB%B3%B8%EB%8B%A4">3. &#xD328;&#xD0B7;&#xC740; &#xC591;&#xCABD;&#xC5D0;&#xC11C; &#xBCF8;&#xB2E4;</h2><p>tcpdump&#xB294; &#xD55C; &#xC9C0;&#xC810;&#xC5D0;&#xC11C;&#xB9CC; &#xBCF4;&#xBA74; &#xBC18;&#xCABD;&#xC9DC;&#xB9AC; &#xC99D;&#xAC70;&#xC785;&#xB2C8;&#xB2E4;. &#xAC8C;&#xC2A4;&#xD2B8;&#xC5D0;&#xC11C; &#xB098;&#xAC14;&#xB294;&#xC9C0;, compute &#xB178;&#xB4DC;&#xC758; tap/qbr/ovs &#xCABD;&#xC5D0; &#xBCF4;&#xC774;&#xB294;&#xC9C0;, provider network&#xB85C; &#xB098;&#xAC00;&#xB294;&#xC9C0; &#xC21C;&#xC11C;&#xB300;&#xB85C; &#xBD05;&#xB2C8;&#xB2E4;.</p><pre><code class="language-bash"># guest
sudo tcpdump -ni eth0 host &lt;target-ip&gt; -w /tmp/guest.pcap

# compute node
sudo tcpdump -ni any host &lt;vm-fixed-ip&gt; or host &lt;target-ip&gt;
sudo ovs-vsctl show
sudo ovs-ofctl dump-flows br-int | head</code></pre><h2 id="4-%EC%8A%A4%ED%86%A0%EB%A6%AC%EC%A7%80%EB%8A%94-attach-%EC%83%81%ED%83%9C%EC%99%80-%EA%B2%8C%EC%8A%A4%ED%8A%B8-%ED%8C%8C%EC%9D%BC%EC%8B%9C%EC%8A%A4%ED%85%9C%EC%9D%84-%EB%82%98%EB%88%A0-%EB%B3%B8%EB%8B%A4">4. &#xC2A4;&#xD1A0;&#xB9AC;&#xC9C0;&#xB294; attach &#xC0C1;&#xD0DC;&#xC640; &#xAC8C;&#xC2A4;&#xD2B8; &#xD30C;&#xC77C;&#xC2DC;&#xC2A4;&#xD15C;&#xC744; &#xB098;&#xB220; &#xBCF8;&#xB2E4;</h2><p>Cinder&#xC5D0;&#xC11C; attached&#xB77C;&#xACE0; &#xBCF4;&#xC5EC;&#xB3C4; &#xAC8C;&#xC2A4;&#xD2B8;&#xAC00; &#xB514;&#xC2A4;&#xD06C;&#xB97C; &#xBABB; &#xC7A1;&#xC744; &#xC218; &#xC788;&#xACE0;, &#xAC8C;&#xC2A4;&#xD2B8; &#xD30C;&#xC77C;&#xC2DC;&#xC2A4;&#xD15C; &#xBB38;&#xC81C;&#xB97C; OpenStack &#xBCFC;&#xB968; &#xC7A5;&#xC560;&#xB85C; &#xC624;&#xD574;&#xD560; &#xC218;&#xB3C4; &#xC788;&#xC2B5;&#xB2C8;&#xB2E4;.</p><pre><code class="language-bash">openstack volume list --long
openstack volume show &lt;volume-id&gt;
openstack server show &lt;server-id&gt; -c volumes_attached
openstack volume snapshot list --volume &lt;volume-id&gt;

lsblk
blkid
df -h
dmesg -T | egrep -i &quot;sd[a-z]|nvme|xfs|ext4|i/o|error&quot;</code></pre><h2 id="5-%EB%A1%9C%EA%B7%B8%EB%8A%94-%EC%84%9C%EB%B9%84%EC%8A%A4%EB%B3%84%EB%A1%9C-%EA%B0%99%EC%9D%80-%EC%8B%9C%EA%B0%84%EC%9D%84-%EB%A7%9E%EC%B6%98%EB%8B%A4">5. &#xB85C;&#xADF8;&#xB294; &#xC11C;&#xBE44;&#xC2A4;&#xBCC4;&#xB85C; &#xAC19;&#xC740; &#xC2DC;&#xAC04;&#xC744; &#xB9DE;&#xCD98;&#xB2E4;</h2><p>nova, neutron, cinder &#xB85C;&#xADF8;&#xB294; &#xC7A5;&#xC560; &#xC7AC;&#xD604; &#xC2DC;&#xAC01;&#xC774;&#xB098; request id&#xB97C; &#xAE30;&#xC900;&#xC73C;&#xB85C; &#xAC19;&#xC774; &#xBD10;&#xC57C; &#xD569;&#xB2C8;&#xB2E4;. &#xC0C1;&#xD0DC; &#xBA85;&#xB839;&#xC73C;&#xB85C; &#xD6C4;&#xBCF4;&#xB97C; &#xC904;&#xC778; &#xB4A4; &#xD544;&#xC694;&#xD55C; &#xB85C;&#xADF8;&#xB9CC; &#xBCF4;&#xB294; &#xD3B8;&#xC774; &#xBE60;&#xB985;&#xB2C8;&#xB2E4;.</p><pre><code class="language-bash">openstack compute service list
openstack network agent list
openstack volume service list

sudo tail -n 200 /var/log/nova/nova-compute.log
sudo tail -n 200 /var/log/neutron/server.log
sudo tail -n 200 /var/log/cinder/volume.log</code></pre><h2 id="%EC%A0%95%EB%A6%AC">&#xC815;&#xB9AC;</h2><p>OpenStack &#xC7A5;&#xC560; &#xBD84;&#xC11D;&#xC740; VM &#xC548;&#xC5D0;&#xC11C; &#xC2DC;&#xC791;&#xD558;&#xC9C0; &#xC54A;&#xC2B5;&#xB2C8;&#xB2E4;. &#xB9AC;&#xC18C;&#xC2A4; &#xAD00;&#xACC4;, &#xAC8C;&#xC2A4;&#xD2B8; &#xB124;&#xD2B8;&#xC6CC;&#xD06C;, &#xD328;&#xD0B7; &#xACBD;&#xB85C;, &#xC2A4;&#xD1A0;&#xB9AC;&#xC9C0; attach, &#xC11C;&#xBE44;&#xC2A4; &#xB85C;&#xADF8;&#xB97C; &#xAC19;&#xC740; &#xC2DC;&#xAC04;&#xCD95;&#xC73C;&#xB85C; &#xBB36;&#xC5B4;&#xC57C; &#xD569;&#xB2C8;&#xB2E4;.</p>]]></content:encoded></item><item><title><![CDATA[RHOSO 18: OpenStack on OpenShift를 운영 관점으로 읽기]]></title><description><![CDATA[RHOSP 18로 불리는 Red Hat OpenStack Services on OpenShift 18.0을 운영 관점에서 정리했습니다. OpenShift 위 control plane, RHEL data plane, Operator/CRD 배포 흐름, 네트워크와 마이그레이션 점검 기준을 다룹니다.]]></description><link>https://devmes.com/rhoso18-openstack-on-openshift-control-plane-data-plane/</link><guid isPermaLink="false">6a3b559381de1a000182fb20</guid><category><![CDATA[RHOSO]]></category><category><![CDATA[RHOSP]]></category><category><![CDATA[OpenStack]]></category><category><![CDATA[OpenShift]]></category><category><![CDATA[OCP]]></category><category><![CDATA[Cloud Operations]]></category><dc:creator><![CDATA[devmes]]></dc:creator><pubDate>Wed, 24 Jun 2026 03:57:07 GMT</pubDate><content:encoded><![CDATA[<p>&#xC694;&#xC998; RHOSP 18&#xC774;&#xB77C;&#xACE0; &#xBD80;&#xB974;&#xB294; &#xC8FC;&#xC81C;&#xB294; &#xACF5;&#xC2DD; &#xC81C;&#xD488;&#xBA85;&#xC73C;&#xB85C; &#xBCF4;&#xBA74; <strong>Red Hat OpenStack Services on OpenShift 18.0</strong>, &#xC904;&#xC5EC;&#xC11C; RHOSO 18&#xC785;&#xB2C8;&#xB2E4;. &#xC774;&#xB984;&#xBCF4;&#xB2E4; &#xC911;&#xC694;&#xD55C; &#xBCC0;&#xD654;&#xB294; OpenStack control plane&#xC744; &#xB354; &#xC774;&#xC0C1; &#xC608;&#xC804; director/undercloud &#xC911;&#xC2EC;&#xC73C;&#xB85C;&#xB9CC; &#xBCF4;&#xC9C0; &#xC54A;&#xB294;&#xB2E4;&#xB294; &#xC810;&#xC785;&#xB2C8;&#xB2E4;. RHOSO 18&#xC740; OpenShift &#xC704;&#xC5D0;&#xC11C; OpenStack control plane&#xC744; Operator&#xC640; CRD&#xB85C; &#xC6B4;&#xC601;&#xD558;&#xACE0;, compute &#xAC19;&#xC740; data plane&#xC740; RHEL &#xB178;&#xB4DC;&#xC640; Ansible &#xAE30;&#xBC18; &#xC801;&#xC6A9; &#xD750;&#xB984;&#xC73C;&#xB85C; &#xAD00;&#xB9AC;&#xD558;&#xB294; &#xBAA8;&#xB378;&#xC785;&#xB2C8;&#xB2E4;.</p><h2 id="1-rhosp-18%EB%B3%B4%EB%8B%A4-rhoso-18%EB%A1%9C-%EB%B4%90%EC%95%BC-%ED%95%98%EB%8A%94-%EC%9D%B4%EC%9C%A0">1. RHOSP 18&#xBCF4;&#xB2E4; RHOSO 18&#xB85C; &#xBD10;&#xC57C; &#xD558;&#xB294; &#xC774;&#xC720;</h2><p>&#xAE30;&#xC874; RHOSP &#xC6B4;&#xC601;&#xC790;&#xB294; undercloud, overcloud, TripleO, Heat &#xD15C;&#xD50C;&#xB9BF;, director workflow&#xC5D0; &#xC775;&#xC219;&#xD569;&#xB2C8;&#xB2E4;. RHOSO 18&#xC5D0;&#xC11C;&#xB294; &#xC774; &#xC0AC;&#xACE0;&#xBC29;&#xC2DD;&#xC744; &#xADF8;&#xB300;&#xB85C; &#xAC00;&#xC838;&#xAC00;&#xBA74; &#xC6B4;&#xC601; &#xC9C0;&#xC810;&#xC774; &#xC5B4;&#xAE0B;&#xB0A9;&#xB2C8;&#xB2E4;. OpenStack &#xC11C;&#xBE44;&#xC2A4;&#xB294; OpenShift &#xD074;&#xB7EC;&#xC2A4;&#xD130; &#xC704;&#xC5D0;&#xC11C; Kubernetes &#xB9AC;&#xC18C;&#xC2A4;&#xB85C; &#xC62C;&#xB77C;&#xC624;&#xACE0;, &#xBC30;&#xD3EC;&#xC640; &#xBCC0;&#xACBD;&#xC740; OpenStack Operator&#xAC00; reconciliation&#xD558;&#xB294; &#xBC29;&#xC2DD;&#xC73C;&#xB85C; &#xD750;&#xB985;&#xB2C8;&#xB2E4;.</p><p>&#xACF5;&#xC2DD; &#xB9B4;&#xB9AC;&#xC2A4; &#xB178;&#xD2B8;&#xC5D0;&#xC11C;&#xB3C4; RHOSP 17.1&#xC774; director &#xAE30;&#xBC18; OpenStack-on-OpenStack control plane &#xD615;&#xC2DD;&#xC744; &#xC0AC;&#xC6A9;&#xD558;&#xB294; &#xB9C8;&#xC9C0;&#xB9C9; &#xC81C;&#xD488;&#xAD70;&#xC774;&#xB77C;&#xB294; &#xC810;&#xC744; &#xBA85;&#xC2DC;&#xD569;&#xB2C8;&#xB2E4;. &#xADF8;&#xB798;&#xC11C; RHOSO 18&#xC744; &#xBCFC; &#xB54C;&#xB294; &quot;OpenStack&#xC744; &#xC124;&#xCE58;&#xD55C;&#xB2E4;&quot;&#xBCF4;&#xB2E4; &quot;OpenShift &#xC704;&#xC5D0; OpenStack control plane&#xC744; &#xC120;&#xC5B8;&#xD558;&#xACE0;, &#xC678;&#xBD80; RHEL data plane&#xC744; &#xC5F0;&#xACB0;&#xD55C;&#xB2E4;&quot;&#xB85C; &#xC774;&#xD574;&#xD558;&#xB294; &#xD3B8;&#xC774; &#xB9DE;&#xC2B5;&#xB2C8;&#xB2E4;.</p><h2 id="2-%EA%B0%80%EC%9E%A5-%ED%81%B0-%EB%B3%80%ED%99%94-control-plane%EC%9D%B4-openshift-%EC%9C%84%EB%A1%9C-%EA%B0%84%EB%8B%A4">2. &#xAC00;&#xC7A5; &#xD070; &#xBCC0;&#xD654;: control plane&#xC774; OpenShift &#xC704;&#xB85C; &#xAC04;&#xB2E4;</h2><p>RHOSO 18&#xC758; control plane&#xC740; Keystone, Nova API, Neutron server, Glance, Cinder API, Placement, Horizon &#xAC19;&#xC740; OpenStack &#xC11C;&#xBE44;&#xC2A4;&#xAC00; OpenShift namespace &#xC548;&#xC758; Pod, Service, Secret, ConfigMap, route, PVC &#xAC19;&#xC740; &#xB9AC;&#xC18C;&#xC2A4;&#xB85C; &#xD45C;&#xD604;&#xB429;&#xB2C8;&#xB2E4;. &#xC6B4;&#xC601;&#xC790;&#xB294; &#xAE30;&#xC874; systemd &#xC11C;&#xBE44;&#xC2A4;&#xB9CC; &#xBCF4;&#xB294; &#xB300;&#xC2E0; OpenShift&#xC758; Operator, CRD, Pod &#xC0C1;&#xD0DC;, &#xC774;&#xBCA4;&#xD2B8;, &#xB85C;&#xADF8;&#xB97C; &#xAC19;&#xC774; &#xBD10;&#xC57C; &#xD569;&#xB2C8;&#xB2E4;.</p><p>&#xC774; &#xBCC0;&#xD654;&#xB294; &#xC7A5;&#xC810;&#xACFC; &#xBD80;&#xB2F4;&#xC744; &#xB3D9;&#xC2DC;&#xC5D0; &#xC90D;&#xB2C8;&#xB2E4;. &#xC7A5;&#xC810;&#xC740; &#xC120;&#xC5B8;&#xD615; &#xBC30;&#xD3EC;, Operator &#xAE30;&#xBC18; &#xC870;&#xC815;, OpenShift &#xAD00;&#xCE21;/&#xBCF4;&#xC548;/&#xC2A4;&#xCF00;&#xC904;&#xB9C1; &#xAE30;&#xB2A5;&#xC744; &#xD65C;&#xC6A9;&#xD560; &#xC218; &#xC788;&#xB2E4;&#xB294; &#xC810;&#xC785;&#xB2C8;&#xB2E4;. &#xBD80;&#xB2F4;&#xC740; OpenStack &#xC7A5;&#xC560;&#xCC98;&#xB7FC; &#xBCF4;&#xC5EC;&#xB3C4; &#xC2E4;&#xC81C; &#xC6D0;&#xC778;&#xC774; OpenShift &#xB178;&#xB4DC;, OLM, storage class, network attachment, certificate, secret, route &#xCABD;&#xC5D0; &#xC788;&#xC744; &#xC218; &#xC788;&#xB2E4;&#xB294; &#xC810;&#xC785;&#xB2C8;&#xB2E4;.</p><h2 id="3-control-plane%EA%B3%BC-data-plane%EC%9D%84-%EB%B6%84%EB%A6%AC%ED%95%B4%EC%84%9C-%EB%B4%90%EC%95%BC-%ED%95%9C%EB%8B%A4">3. control plane&#xACFC; data plane&#xC744; &#xBD84;&#xB9AC;&#xD574;&#xC11C; &#xBD10;&#xC57C; &#xD55C;&#xB2E4;</h2><p>RHOSO 18&#xC5D0;&#xC11C; control plane&#xC740; OpenShift &#xC704;&#xC5D0; &#xC788;&#xACE0;, data plane&#xC740; OpenStack &#xC6CC;&#xD06C;&#xB85C;&#xB4DC;&#xB97C; &#xC2E4;&#xC81C;&#xB85C; &#xCC98;&#xB9AC;&#xD558;&#xB294; RHEL &#xAE30;&#xBC18; &#xB178;&#xB4DC;&#xB4E4;&#xC785;&#xB2C8;&#xB2E4;. compute, network, storage &#xCABD; data plane &#xC0C1;&#xD0DC;&#xB97C; &#xBCFC; &#xB54C;&#xB294; OpenShift CR &#xC0C1;&#xD0DC;&#xC640; Ansible &#xC801;&#xC6A9; &#xACB0;&#xACFC;, &#xADF8;&#xB9AC;&#xACE0; &#xB178;&#xB4DC; &#xC790;&#xCCB4;&#xC758; &#xC11C;&#xBE44;&#xC2A4; &#xC0C1;&#xD0DC;&#xB97C; &#xAC19;&#xC774; &#xBD10;&#xC57C; &#xD569;&#xB2C8;&#xB2E4;.</p><p>&#xC6B4;&#xC601;&#xC790;&#xAC00; &#xC790;&#xC8FC; &#xBCF4;&#xAC8C; &#xB420; &#xB9AC;&#xC18C;&#xC2A4;&#xB294; &#xB300;&#xB7B5; &#xB2E4;&#xC74C; &#xD750;&#xB984;&#xC785;&#xB2C8;&#xB2E4;.</p><ul><li><code>OpenStackControlPlane</code>: OpenStack control plane &#xC11C;&#xBE44;&#xC2A4; &#xAD6C;&#xC131;&#xC744; &#xC120;&#xC5B8;&#xD569;&#xB2C8;&#xB2E4;.</li><li><code>OpenStackDataPlaneNodeSet</code>: data plane &#xB178;&#xB4DC; &#xBB36;&#xC74C;&#xACFC; &#xB178;&#xB4DC;&#xBCC4; &#xC124;&#xC815;&#xC744; &#xC120;&#xC5B8;&#xD569;&#xB2C8;&#xB2E4;.</li><li><code>OpenStackDataPlaneDeployment</code>: data plane&#xC5D0; &#xC2E4;&#xC81C; &#xC124;&#xC815; &#xC801;&#xC6A9;&#xC744; &#xD2B8;&#xB9AC;&#xAC70;&#xD558;&#xACE0; &#xC9C4;&#xD589; &#xC0C1;&#xD0DC;&#xB97C; &#xB0A8;&#xAE41;&#xB2C8;&#xB2E4;.</li><li><code>OpenStackVersion</code>: OpenStack Operator&#xC640; &#xBC30;&#xD3EC; &#xBC84;&#xC804; &#xB9E4;&#xD551;&#xC744; &#xD655;&#xC778;&#xD558;&#xB294; &#xAE30;&#xC900;&#xC810;&#xC785;&#xB2C8;&#xB2E4;.</li></ul><h2 id="4-%EC%84%A4%EC%B9%98-%ED%9D%90%EB%A6%84%EC%9D%80-operator%EC%99%80-crd-%EC%A4%91%EC%8B%AC%EC%9C%BC%EB%A1%9C-%EC%9D%BD%EB%8A%94%EB%8B%A4">4. &#xC124;&#xCE58; &#xD750;&#xB984;&#xC740; Operator&#xC640; CRD &#xC911;&#xC2EC;&#xC73C;&#xB85C; &#xC77D;&#xB294;&#xB2E4;</h2><p>&#xBB38;&#xC11C;&#xB97C; &#xC6B4;&#xC601; &#xAD00;&#xC810;&#xC73C;&#xB85C; &#xC555;&#xCD95;&#xD558;&#xBA74; RHOSO 18 &#xBC30;&#xD3EC; &#xD750;&#xB984;&#xC740; &#xB2E4;&#xC74C; &#xC21C;&#xC11C;&#xC785;&#xB2C8;&#xB2E4;. &#xC124;&#xCE58; &#xBA85;&#xB839;&#xC744; &#xC678;&#xC6B0;&#xB294; &#xAC83;&#xBCF4;&#xB2E4; &#xAC01; &#xB2E8;&#xACC4;&#xC5D0;&#xC11C; &#xC5B4;&#xB5A4; &#xACC4;&#xCE35;&#xC774; &#xC900;&#xBE44;&#xB418;&#xB294;&#xC9C0; &#xAD6C;&#xBD84;&#xD558;&#xB294; &#xAC83;&#xC774; &#xC911;&#xC694;&#xD569;&#xB2C8;&#xB2E4;.</p><pre><code class="language-text">1. RHOCP &#xD074;&#xB7EC;&#xC2A4;&#xD130; &#xC900;&#xBE44;
2. OpenStack Operator &#xC124;&#xCE58;
3. OpenStack &#xC811;&#xADFC;&#xC6A9; Secret&#xACFC; &#xAE30;&#xBCF8; &#xC124;&#xC815; &#xC900;&#xBE44;
4. RHOCP / control plane / data plane &#xB124;&#xD2B8;&#xC6CC;&#xD06C; &#xC900;&#xBE44;
5. OpenStackControlPlane CR &#xC0DD;&#xC131;
6. OpenStackDataPlaneNodeSet CR &#xC0DD;&#xC131;
7. OpenStackDataPlaneDeployment&#xB85C; data plane &#xC801;&#xC6A9;
8. OpenStack &#xC11C;&#xBE44;&#xC2A4; endpoint, compute, network, storage &#xAC80;&#xC99D;</code></pre><p>&#xCD08;&#xAE30; &#xC810;&#xAC80;&#xC740; OpenShift &#xD074;&#xB7EC;&#xC2A4;&#xD130; &#xC790;&#xCCB4;&#xAC00; &#xC815;&#xC0C1;&#xC778;&#xC9C0;, OpenStack Operator&#xC640; CRD&#xAC00; &#xB4E4;&#xC5B4;&#xC654;&#xB294;&#xC9C0;, control plane/data plane CR&#xC774; &#xC5B4;&#xB5A4; &#xC0C1;&#xD0DC;&#xC778;&#xC9C0;&#xBD80;&#xD130; &#xD655;&#xC778;&#xD569;&#xB2C8;&#xB2E4;.</p><pre><code class="language-bash">oc get clusterversion
oc get nodes -o wide
oc get co

oc get operators -A | grep -i openstack
oc get crd | grep -i openstack
oc explain openstackcontrolplane.spec

oc get openstackversion -A
oc get openstackcontrolplane -A
oc get openstackdataplanenodeset -A
oc get openstackdataplanedeployment -A</code></pre><h2 id="5-openshift-%EC%9A%94%EA%B5%AC%EC%82%AC%ED%95%AD%EA%B3%BC-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%84%A4%EA%B3%84%EB%A5%BC-%EB%A8%BC%EC%A0%80-%EA%B3%A0%EC%A0%95%ED%95%9C%EB%8B%A4">5. OpenShift &#xC694;&#xAD6C;&#xC0AC;&#xD56D;&#xACFC; &#xB124;&#xD2B8;&#xC6CC;&#xD06C; &#xC124;&#xACC4;&#xB97C; &#xBA3C;&#xC800; &#xACE0;&#xC815;&#xD55C;&#xB2E4;</h2><p>RHOSO control plane&#xC744; &#xC62C;&#xB9AC;&#xB294; OpenShift &#xD074;&#xB7EC;&#xC2A4;&#xD130;&#xB294; &#xB2E8;&#xC21C; &#xD14C;&#xC2A4;&#xD2B8;&#xC6A9; Kubernetes&#xAC00; &#xC544;&#xB2C8;&#xB77C; &#xC6B4;&#xC601; control plane&#xC758; &#xAE30;&#xBC18;&#xC785;&#xB2C8;&#xB2E4;. &#xACF5;&#xC2DD; &#xACC4;&#xD68D; &#xBB38;&#xC11C;&#xB294; RHOSO 18 control plane&#xC744; &#xD638;&#xC2A4;&#xD305;&#xD560; RHOCP &#xD074;&#xB7EC;&#xC2A4;&#xD130; &#xC694;&#xAD6C;&#xC0AC;&#xD56D;&#xC73C;&#xB85C; RHOCP 4.18 &#xAE30;&#xBC18;&#xC758; &#xC0AC;&#xC804; &#xC900;&#xBE44;&#xB41C; 3&#xB178;&#xB4DC; bare metal &#xD074;&#xB7EC;&#xC2A4;&#xD130;&#xB97C; &#xCD5C;&#xC18C; &#xC870;&#xAC74;&#xC73C;&#xB85C; &#xC81C;&#xC2DC;&#xD569;&#xB2C8;&#xB2E4;. HA &#xAD6C;&#xC131;&#xC744; &#xC758;&#xB3C4;&#xD55C;&#xB2E4;&#xBA74; control plane/worker &#xC5ED;&#xD560; &#xBD84;&#xB9AC;, storage, network, &#xC7A5;&#xC560; &#xB3C4;&#xBA54;&#xC778;&#xC744; &#xB354; &#xC5C4;&#xACA9;&#xD558;&#xAC8C; &#xBD10;&#xC57C; &#xD569;&#xB2C8;&#xB2E4;.</p><p>&#xB124;&#xD2B8;&#xC6CC;&#xD06C;&#xB294; &#xB354; &#xC911;&#xC694;&#xD569;&#xB2C8;&#xB2E4;. control plane VIP, OpenShift pod/service &#xB124;&#xD2B8;&#xC6CC;&#xD06C;, data plane &#xAD00;&#xB9AC;&#xB9DD;, storage&#xB9DD;, tenant/provider network, network attachment, NNCP/Nmstate &#xC801;&#xC6A9; &#xC0C1;&#xD0DC;&#xAC00; &#xC11E;&#xC774;&#xBA74; &#xC7A5;&#xC560; &#xC6D0;&#xC778;&#xC744; &#xCC3E;&#xAE30; &#xC5B4;&#xB835;&#xC2B5;&#xB2C8;&#xB2E4;. RHOSO 18&#xC5D0;&#xC11C;&#xB294; &quot;OpenStack network&#xAC00; &#xC548; &#xB41C;&#xB2E4;&quot;&#xB97C; &#xBC14;&#xB85C; Neutron &#xBB38;&#xC81C;&#xB85C; &#xBCF4;&#xC9C0; &#xB9D0;&#xACE0;, OpenShift &#xB124;&#xD2B8;&#xC6CC;&#xD06C;&#xC640; data plane NIC &#xC124;&#xC815;&#xAE4C;&#xC9C0; &#xAC19;&#xC774; &#xBD84;&#xB9AC;&#xD574;&#xC57C; &#xD569;&#xB2C8;&#xB2E4;.</p><pre><code class="language-bash">oc get nncp,nnce -A
oc get network-attachment-definition -A
oc -n openstack get svc -o wide
oc -n openstack get endpoints,endpointslice

openstack endpoint list
openstack network agent list
openstack compute service list
openstack hypervisor list</code></pre><h2 id="6-control-plane-%EC%9E%A5%EC%95%A0%EB%8A%94-openshift-%EB%A6%AC%EC%86%8C%EC%8A%A4%EB%A1%9C-%EC%B6%94%EC%A0%81%ED%95%9C%EB%8B%A4">6. control plane &#xC7A5;&#xC560;&#xB294; OpenShift &#xB9AC;&#xC18C;&#xC2A4;&#xB85C; &#xCD94;&#xC801;&#xD55C;&#xB2E4;</h2><p>API &#xC751;&#xB2F5; &#xC9C0;&#xC5F0;, Keystone &#xC778;&#xC99D; &#xC2E4;&#xD328;, Horizon &#xC811;&#xC18D; &#xC2E4;&#xD328;, Nova API &#xC624;&#xB958;&#xAC00; &#xBCF4;&#xC774;&#xBA74; &#xBA3C;&#xC800; OpenShift namespace &#xC548;&#xC758; Pod&#xC640; Service, route, Secret, Operator &#xB85C;&#xADF8;&#xB97C; &#xD655;&#xC778;&#xD569;&#xB2C8;&#xB2E4;. &#xAE30;&#xC874; OpenStack &#xC6B4;&#xC601;&#xCC98;&#xB7FC; &#xC11C;&#xBE44;&#xC2A4; &#xB85C;&#xADF8;&#xB9CC; &#xBCF4;&#xAE30; &#xC804;&#xC5D0; Operator&#xAC00; &#xC6D0;&#xD558;&#xB294; &#xC0C1;&#xD0DC;&#xB97C; &#xB9CC;&#xB4E4;&#xACE0; &#xC788;&#xB294;&#xC9C0;, &#xBC30;&#xD3EC;&#xAC00; Degraded&#xC778;&#xC9C0;, &#xAD00;&#xB828; Pod&#xAC00; CrashLoop&#xC778;&#xC9C0;&#xBD80;&#xD130; &#xBD10;&#xC57C; &#xD569;&#xB2C8;&#xB2E4;.</p><pre><code class="language-bash">NS=openstack

oc -n ${NS} get pods -o wide
oc -n ${NS} get svc,route,secret,cm
oc -n ${NS} get openstackcontrolplane -o yaml
oc -n ${NS} get openstackversion -o yaml

oc -n ${NS} describe openstackcontrolplane &lt;control-plane-name&gt;
oc -n ${NS} logs deploy/openstack-operator-controller-manager --tail=200</code></pre><h2 id="7-data-plane-%EC%9E%A5%EC%95%A0%EB%8A%94-cr-%EC%83%81%ED%83%9C%EC%99%80-%EB%85%B8%EB%93%9C-%EC%83%81%ED%83%9C%EB%A5%BC-%EA%B0%99%EC%9D%B4-%EB%B3%B8%EB%8B%A4">7. data plane &#xC7A5;&#xC560;&#xB294; CR &#xC0C1;&#xD0DC;&#xC640; &#xB178;&#xB4DC; &#xC0C1;&#xD0DC;&#xB97C; &#xAC19;&#xC774; &#xBCF8;&#xB2E4;</h2><p>Compute &#xB178;&#xB4DC;&#xAC00; &#xC548; &#xBD99;&#xAC70;&#xB098; VM &#xC0DD;&#xC131;&#xC774; &#xC2E4;&#xD328;&#xD558;&#xBA74; OpenStack CLI &#xACB0;&#xACFC;&#xB9CC;&#xC73C;&#xB85C;&#xB294; &#xBD80;&#xC871;&#xD569;&#xB2C8;&#xB2E4;. <code>OpenStackDataPlaneNodeSet</code>&#xACFC; <code>OpenStackDataPlaneDeployment</code>&#xC758; condition, data plane job &#xB85C;&#xADF8;, Ansible &#xC2E4;&#xD589; &#xACB0;&#xACFC;, &#xB178;&#xB4DC;&#xBCC4; systemd &#xC11C;&#xBE44;&#xC2A4;, libvirt, ovs/ovn, storage multipath &#xC0C1;&#xD0DC;&#xB97C; &#xAC19;&#xC774; &#xD655;&#xC778;&#xD574;&#xC57C; &#xD569;&#xB2C8;&#xB2E4;.</p><pre><code class="language-bash">NS=openstack

oc -n ${NS} get openstackdataplanenodeset
oc -n ${NS} describe openstackdataplanenodeset &lt;nodeset-name&gt;
oc -n ${NS} get openstackdataplanedeployment
oc -n ${NS} describe openstackdataplanedeployment &lt;deployment-name&gt;

oc -n ${NS} get jobs,pods -o wide | grep -i dataplane
oc -n ${NS} logs job/&lt;dataplane-job-name&gt; --tail=200</code></pre><h2 id="8-day-2-%EC%9A%B4%EC%98%81-%EA%B8%B0%EC%A4%80">8. Day-2 &#xC6B4;&#xC601; &#xAE30;&#xC900;</h2><p>RHOSO 18 Day-2 &#xC6B4;&#xC601;&#xC740; &#xC138; &#xACC4;&#xCE35;&#xC744; &#xB3D9;&#xC2DC;&#xC5D0; &#xBCF4;&#xB294; &#xBC29;&#xC2DD;&#xC73C;&#xB85C; &#xC815;&#xB9AC;&#xD560; &#xC218; &#xC788;&#xC2B5;&#xB2C8;&#xB2E4;. &#xCCAB;&#xC9F8;, OpenShift &#xACC4;&#xCE35;&#xC785;&#xB2C8;&#xB2E4;. ClusterOperator, Node, MCP, OLM, storage, network &#xC0C1;&#xD0DC;&#xAC00; control plane &#xC548;&#xC815;&#xC131;&#xC744; &#xC88C;&#xC6B0;&#xD569;&#xB2C8;&#xB2E4;. &#xB458;&#xC9F8;, RHOSO &#xC120;&#xC5B8; &#xACC4;&#xCE35;&#xC785;&#xB2C8;&#xB2E4;. OpenStackControlPlane&#xACFC; DataPlane CR&#xC758; desired/current &#xC0C1;&#xD0DC;&#xB97C; &#xBD10;&#xC57C; &#xD569;&#xB2C8;&#xB2E4;. &#xC14B;&#xC9F8;, OpenStack &#xC11C;&#xBE44;&#xC2A4; &#xACC4;&#xCE35;&#xC785;&#xB2C8;&#xB2E4;. endpoint, compute service, network agent, volume service, &#xC774;&#xBBF8;&#xC9C0;&#xC640; flavor, tenant &#xB9AC;&#xC18C;&#xC2A4; &#xAC80;&#xC99D;&#xC774; &#xD544;&#xC694;&#xD569;&#xB2C8;&#xB2E4;.</p><pre><code class="language-bash"># OpenShift &#xACC4;&#xCE35;
oc get co
oc get nodes -o wide
oc get mcp
oc get events -A --sort-by=.lastTimestamp | tail -n 120

# RHOSO &#xACC4;&#xCE35;
oc -n openstack get openstackcontrolplane,openstackdataplanenodeset,openstackdataplanedeployment
oc -n openstack get pods -o wide
oc -n openstack get jobs --sort-by=.metadata.creationTimestamp

# OpenStack &#xC11C;&#xBE44;&#xC2A4; &#xACC4;&#xCE35;
openstack token issue
openstack service list
openstack endpoint list
openstack compute service list
openstack network agent list
openstack volume service list</code></pre><h2 id="9-rhosp-171%EC%97%90%EC%84%9C-%EB%84%98%EC%96%B4%EA%B0%88-%EB%95%8C%EB%8A%94-adoption%EC%9D%84-%EB%B3%84%EB%8F%84-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8%EB%A1%9C-%EB%B4%90%EC%95%BC-%ED%95%9C%EB%8B%A4">9. RHOSP 17.1&#xC5D0;&#xC11C; &#xB118;&#xC5B4;&#xAC08; &#xB54C;&#xB294; adoption&#xC744; &#xBCC4;&#xB3C4; &#xD504;&#xB85C;&#xC81D;&#xD2B8;&#xB85C; &#xBD10;&#xC57C; &#xD55C;&#xB2E4;</h2><p>RHOSP 17.1 &#xD658;&#xACBD;&#xC744; RHOSO 18&#xB85C; &#xB118;&#xAE30;&#xB294; &#xC791;&#xC5C5;&#xC740; &#xB2E8;&#xC21C; &#xC5C5;&#xADF8;&#xB808;&#xC774;&#xB4DC;&#xAC00; &#xC544;&#xB2D9;&#xB2C8;&#xB2E4;. &#xACF5;&#xC2DD; &#xBB38;&#xC11C;&#xB3C4; RHOSP 17.1 deployment adoption, director Operator environment adoption, Nmstate provider migration, VM migration&#xC744; &#xBCC4;&#xB3C4; &#xBB38;&#xC11C; &#xD750;&#xB984;&#xC73C;&#xB85C; &#xB098;&#xB215;&#xB2C8;&#xB2E4;. &#xAE30;&#xC874; cloud&#xC758; &#xB124;&#xD2B8;&#xC6CC;&#xD06C;&#xC640; storage, compute role, instance HA, &#xC6B4;&#xC601; &#xC808;&#xCC28;&#xB97C; &#xADF8;&#xB300;&#xB85C; &#xC0C8; control plane&#xC5D0; &#xC5B9;&#xC744; &#xC218; &#xC788;&#xB294;&#xC9C0; &#xC0AC;&#xC804;&#xC5D0; &#xAC80;&#xC99D;&#xD574;&#xC57C; &#xD569;&#xB2C8;&#xB2E4;.</p><pre><code class="language-text">Adoption &#xC804;&#xC5D0; &#xBA3C;&#xC800; &#xBD84;&#xB9AC;&#xD574;&#xC11C; &#xD655;&#xC778;&#xD560; &#xD56D;&#xBAA9;

- &#xAE30;&#xC874; RHOSP 17.1 &#xC11C;&#xBE44;&#xC2A4; &#xBC84;&#xC804;&#xACFC; &#xD604;&#xC7AC; &#xB204;&#xC801; &#xD328;&#xCE58; &#xC218;&#xC900;
- undercloud/director&#xC5D0; &#xB0A8;&#xC544; &#xC788;&#xB294; &#xC5ED;&#xD560;&#xACFC; Heat &#xD15C;&#xD50C;&#xB9BF; &#xC758;&#xC874;&#xC131;
- neutron &#xB124;&#xD2B8;&#xC6CC;&#xD06C;, provider network, VLAN, routed spine-leaf &#xC124;&#xACC4;
- nova compute host, instance HA, evacuation &#xAE30;&#xC900;
- cinder/glance/swift/manila &#xBC31;&#xC5D4;&#xB4DC;&#xC640; backend&#xBCC4; adoption &#xC9C0;&#xC6D0; &#xC5EC;&#xBD80;
- os-net-config/ifcfg&#xC5D0;&#xC11C; Nmstate &#xC804;&#xD658;&#xC774; &#xD544;&#xC694;&#xD55C; &#xBC94;&#xC704;
- &#xC7A5;&#xC560; &#xC2DC; rollback &#xC9C0;&#xC810;&#xACFC; tenant &#xC601;&#xD5A5; &#xBC94;&#xC704;</code></pre><h2 id="10-%EC%9A%B4%EC%98%81%EC%9E%90%EA%B0%80-%ED%97%B7%EA%B0%88%EB%A6%AC%EB%A9%B4-%EC%95%88-%EB%90%98%EB%8A%94-%EA%B8%B0%EC%A4%80">10. &#xC6B4;&#xC601;&#xC790;&#xAC00; &#xD5F7;&#xAC08;&#xB9AC;&#xBA74; &#xC548; &#xB418;&#xB294; &#xAE30;&#xC900;</h2><ul><li>RHOSO 18&#xC740; OpenStack&#xC744; &#xBC84;&#xB9AC;&#xB294; &#xAC83;&#xC774; &#xC544;&#xB2C8;&#xB77C; OpenStack control plane &#xC6B4;&#xC601; &#xBC29;&#xC2DD;&#xC744; OpenShift &#xC704;&#xB85C; &#xC62E;&#xAE30;&#xB294; &#xBCC0;&#xD654;&#xC785;&#xB2C8;&#xB2E4;.</li><li>OpenStack API &#xC7A5;&#xC560;&#xCC98;&#xB7FC; &#xBCF4;&#xC5EC;&#xB3C4; OpenShift Operator, OLM, network, storage, certificate &#xBB38;&#xC81C;&#xAC00; &#xC6D0;&#xC778;&#xC77C; &#xC218; &#xC788;&#xC2B5;&#xB2C8;&#xB2E4;.</li><li>Data plane&#xC740; &#xC120;&#xC5B8;&#xB9CC;&#xC73C;&#xB85C; &#xB05D;&#xB098;&#xC9C0; &#xC54A;&#xACE0; &#xC2E4;&#xC81C; RHEL &#xB178;&#xB4DC;, Ansible &#xC2E4;&#xD589;, systemd &#xC11C;&#xBE44;&#xC2A4;, NIC/storage &#xC0C1;&#xD0DC;&#xAE4C;&#xC9C0; &#xD655;&#xC778;&#xD574;&#xC57C; &#xD569;&#xB2C8;&#xB2E4;.</li><li>&#xB124;&#xD2B8;&#xC6CC;&#xD06C;&#xB294; OpenShift network, RHOSO control plane network, data plane network, tenant/provider network&#xB97C; &#xBD84;&#xB9AC;&#xD574;&#xC11C; &#xC124;&#xACC4;&#xD574;&#xC57C; &#xD569;&#xB2C8;&#xB2E4;.</li><li>RHOSP 17.1&#xC5D0;&#xC11C; &#xB118;&#xC5B4;&#xAC00;&#xB294; &#xC791;&#xC5C5;&#xC740; &#xC5C5;&#xADF8;&#xB808;&#xC774;&#xB4DC;&#xAC00; &#xC544;&#xB2C8;&#xB77C; adoption/migration &#xD504;&#xB85C;&#xC81D;&#xD2B8;&#xB85C; &#xACC4;&#xD68D;&#xD574;&#xC57C; &#xD569;&#xB2C8;&#xB2E4;.</li></ul><h2 id="%EC%A0%95%EB%A6%AC">&#xC815;&#xB9AC;</h2><p>RHOSO 18&#xC758; &#xD575;&#xC2EC;&#xC740; OpenStack&#xC744; OpenShift &#xC704;&#xC5D0;&#xC11C; &#xC6B4;&#xC601; &#xAC00;&#xB2A5;&#xD55C; control plane&#xC73C;&#xB85C; &#xC7AC;&#xAD6C;&#xC131;&#xD588;&#xB2E4;&#xB294; &#xC810;&#xC785;&#xB2C8;&#xB2E4;. &#xADF8;&#xB798;&#xC11C; &#xC6B4;&#xC601;&#xC790;&#xB294; OpenStack CLI&#xC640; &#xC11C;&#xBE44;&#xC2A4; &#xB85C;&#xADF8;&#xB9CC; &#xBCF4;&#xB294; &#xBC29;&#xC2DD;&#xC5D0;&#xC11C; &#xBC97;&#xC5B4;&#xB098; OpenShift Operator, CRD, Pod, route, storage, network, data plane deployment &#xC0C1;&#xD0DC;&#xB97C; &#xD568;&#xAED8; &#xC77D;&#xC5B4;&#xC57C; &#xD569;&#xB2C8;&#xB2E4;. &#xC0C8; &#xD658;&#xACBD;&#xC744; &#xAD6C;&#xCD95;&#xD558;&#xB4E0; &#xAE30;&#xC874; RHOSP 17.1&#xC744; &#xB118;&#xAE30;&#xB4E0;, &#xBA3C;&#xC800; control plane&#xACFC; data plane &#xACBD;&#xACC4;&#xB97C; &#xBA85;&#xD655;&#xD788; &#xB098;&#xB204;&#xACE0; &#xB124;&#xD2B8;&#xC6CC;&#xD06C;&#xC640; storage &#xC124;&#xACC4;&#xB97C; &#xACE0;&#xC815;&#xD55C; &#xB4A4; &#xAC80;&#xC99D; &#xBA85;&#xB839;&#xC744; &#xACC4;&#xCE35;&#xBCC4;&#xB85C; &#xC313;&#xC544;&#xAC00;&#xB294; &#xBC29;&#xC2DD;&#xC774; &#xC548;&#xC804;&#xD569;&#xB2C8;&#xB2E4;.</p><h2 id="%EA%B3%B5%EC%8B%9D-%EB%AC%B8%EC%84%9C-%EB%A7%81%ED%81%AC">&#xACF5;&#xC2DD; &#xBB38;&#xC11C; &#xB9C1;&#xD06C;</h2><ul><li><a href="https://docs.redhat.com/en/documentation/red_hat_openstack_services_on_openshift/18.0/html-single/release_notes/index" rel="noopener">Red Hat RHOSO 18.0 Release notes</a></li><li><a href="https://docs.redhat.com/en/documentation/red_hat_openstack_services_on_openshift/18.0/html-single/planning_your_deployment/index" rel="noopener">Red Hat RHOSO 18.0 Planning your deployment</a></li><li><a href="https://docs.redhat.com/en/documentation/red_hat_openstack_services_on_openshift/18.0" rel="noopener">Red Hat RHOSO 18.0 documentation index</a></li><li><a href="https://docs.redhat.com/en/documentation/red_hat_openstack_services_on_openshift/18.0/html-single/deploying_red_hat_openstack_services_on_openshift/index" rel="noopener">Deploying Red Hat OpenStack Services on OpenShift</a></li><li><a href="https://docs.redhat.com/en/documentation/red_hat_openstack_services_on_openshift/18.0/html-single/adopting_a_red_hat_openstack_platform_17.1_deployment/index" rel="noopener">Adopting a Red Hat OpenStack Platform 17.1 deployment</a></li><li><a href="https://docs.redhat.com/en/documentation/red_hat_openstack_services_on_openshift/18.0/html-single/validating_and_troubleshooting_the_deployed_cloud/index" rel="noopener">Validating and troubleshooting the deployed cloud</a></li></ul>]]></content:encoded></item><item><title><![CDATA[Compute Node 장애: compute node 장애 뒤 VM 위치를 정리할 때 - host 상태 관점]]></title><description><![CDATA[compute node 장애 뒤 VM 위치를 정리할 때를 host 상태 관점에서 좁혀 보는 케이스. Compute Node 계층의 증상, 확인 명령, 조치 전 판단, 복구 기준을 정리했다.]]></description><link>https://devmes.com/cloud-ops-troubleshooting-compute-node-36770802e0/</link><guid isPermaLink="false">6a3b418581de1a000182f73d</guid><category><![CDATA[Cloud Operations]]></category><category><![CDATA[XenServer]]></category><category><![CDATA[Compute]]></category><category><![CDATA[Migration]]></category><category><![CDATA[Troubleshooting]]></category><dc:creator><![CDATA[devmes]]></dc:creator><pubDate>Wed, 24 Jun 2026 02:31:33 GMT</pubDate><content:encoded><![CDATA[<p><strong>Compute Node &#xC7A5;&#xC560;: compute node &#xC7A5;&#xC560; &#xB4A4; VM &#xC704;&#xCE58;&#xB97C; &#xC815;&#xB9AC;&#xD560; &#xB54C; - host &#xC0C1;&#xD0DC; &#xAD00;&#xC810;</strong> &#xCF00;&#xC774;&#xC2A4;&#xB97C; &#xB2E4;&#xB8EC;&#xB2E4;. &#xD575;&#xC2EC;&#xC740; compute node &#xC7A5;&#xC560; &#xB4A4; VM &#xC704;&#xCE58;&#xB97C; &#xC815;&#xB9AC;&#xD560; &#xB54C;&#xB97C; host &#xC0C1;&#xD0DC; &#xAD00;&#xC810;&#xC5D0;&#xC11C; &#xC881;&#xD600; &#xBCF4;&#xB294; &#xCF00;&#xC774;&#xC2A4;&#xB2E4;.</p><p>&#xC7A5;&#xC560;&#xB97C; &#xC881;&#xD790; &#xB54C;&#xB294; &#xC99D;&#xC0C1;, &#xC601;&#xD5A5; &#xBC94;&#xC704;, &#xB300;&#xC0C1; &#xB9AC;&#xC18C;&#xC2A4;, &#xCD5C;&#xADFC; &#xBCC0;&#xACBD;, &#xB85C;&#xADF8; &#xC2DC;&#xC810;&#xC744; &#xBA3C;&#xC800; &#xB9DE;&#xCD98;&#xB2E4;.</p><p>compute node &#xC7A5;&#xC560;&#xB294; &#xD55C; &#xB300;&#xC758; &#xC11C;&#xBC84; &#xBB38;&#xC81C;&#xAC00; &#xC544;&#xB2C8;&#xB77C; &#xADF8; &#xC704;&#xC5D0; &#xC62C;&#xB77C;&#xAC04; VM &#xBB36;&#xC74C;&#xC758; &#xC11C;&#xBE44;&#xC2A4; &#xC7A5;&#xC560;&#xB85C; &#xBC88;&#xC9C4;&#xB2E4;. &#xADF8;&#xB798;&#xC11C; &#xCCAB; &#xD310;&#xB2E8;&#xC740; hardware &#xAD50;&#xCCB4;&#xAC00; &#xC544;&#xB2C8;&#xB77C;, &#xB0A8;&#xC544; &#xC788;&#xB294; VM&#xC744; &#xC5B4;&#xB514;&#xAE4C;&#xC9C0; &#xC548;&#xC804;&#xD558;&#xAC8C; &#xC62E;&#xAE38; &#xC218; &#xC788;&#xB294;&#xC9C0;&#xC5D0;&#xC11C; &#xC2DC;&#xC791;&#xD55C;&#xB2E4;.</p><p>&#xC6B4;&#xC601; &#xC7A5;&#xC560; &#xB300;&#xC751;&#xC740; &#xC6D0;&#xC778;&#xC744; &#xBC14;&#xB85C; &#xB2E8;&#xC815;&#xD558;&#xAE30;&#xBCF4;&#xB2E4; &#xACC4;&#xCE35;&#xC744; &#xB098;&#xB220; &#xC99D;&#xAC70;&#xB97C; &#xB9DE;&#xCD94;&#xB294; &#xCABD;&#xC774; &#xC548;&#xC804;&#xD558;&#xB2E4;. read-only &#xD655;&#xC778;, &#xBCC0;&#xACBD; &#xC870;&#xCE58;, &#xAC80;&#xC99D; &#xBA85;&#xB839;&#xC744; &#xBD84;&#xB9AC;&#xD574;&#xC57C; &#xAE34;&#xAE09; &#xC0C1;&#xD669;&#xC5D0;&#xC11C;&#xB3C4; &#xD310;&#xB2E8;&#xC774; &#xD754;&#xB4E4;&#xB9AC;&#xC9C0; &#xC54A;&#xB294;&#xB2E4;.</p><h2 id="%EC%9D%B4-%EA%B8%80%EC%97%90%EC%84%9C-%EB%8B%A4%EB%A3%A8%EB%8A%94-%EC%BC%80%EC%9D%B4%EC%8A%A4">&#xC774; &#xAE00;&#xC5D0;&#xC11C; &#xB2E4;&#xB8E8;&#xB294; &#xCF00;&#xC774;&#xC2A4;</h2><!--kg-card-begin: html--><table>
 <tbody>
 <tr><th>&#xCF00;&#xC774;&#xC2A4; &#xCD08;&#xC810;</th><td>compute node &#xC7A5;&#xC560; &#xB4A4; VM &#xC704;&#xCE58;&#xB97C; &#xC815;&#xB9AC;&#xD560; &#xB54C;&#xB97C; host &#xC0C1;&#xD0DC; &#xAD00;&#xC810;&#xC5D0;&#xC11C; &#xC881;&#xD600; &#xBCF4;&#xB294; &#xCF00;&#xC774;&#xC2A4;</td></tr>
 <tr><th>&#xC815;&#xB9AC;&#xD55C; &#xC8FC;&#xC81C;</th><td>Compute Node</td></tr>
 <tr><th>&#xC8FC;&#xC694; &#xACC4;&#xCE35;</th><td>XenServer host, VM scheduling, hardware fault</td></tr>
 <tr><th>&#xC6B4;&#xC601; &#xB2E8;&#xC11C;</th><td>&#xC8FC;&#xC81C; &#xD504;&#xB85C;&#xD30C;&#xC77C;&#xACFC; &#xC7A5;&#xC560; &#xD750;&#xB984; &#xAE30;&#xC900;&#xC73C;&#xB85C; &#xC7AC;&#xAD6C;&#xC131;</td></tr>
 </tbody>
</table><!--kg-card-end: html--><h2 id="%EA%B2%89%EC%9C%BC%EB%A1%9C-%EB%B3%B4%EC%9D%B4%EB%8A%94-%EC%A6%9D%EC%83%81">&#xAC89;&#xC73C;&#xB85C; &#xBCF4;&#xC774;&#xB294; &#xC99D;&#xC0C1;</h2><ul><li>compute node hardware fault, reboot, hang, power off &#xC774;&#xD6C4; VM &#xC81C;&#xC5B4;&#xAC00; &#xBD88;&#xC548;&#xC815;&#xD558;&#xB2E4;.</li><li>&#xAD00;&#xB9AC; &#xD3EC;&#xD138;&#xC5D0;&#xC11C;&#xB294; VM&#xC774; Running&#xC73C;&#xB85C; &#xBCF4;&#xC774;&#xC9C0;&#xB9CC; &#xC2E4;&#xC81C; hypervisor&#xC5D0;&#xC11C;&#xB294; domain&#xC774; &#xC5C6;&#xAC70;&#xB098; &#xBA48;&#xCDB0; &#xC788;&#xB2E4;.</li><li>&#xC7A5;&#xC560; host&#xC5D0;&#xC11C; migration, evacuation, maintenance &#xC804;&#xD658;&#xC774; &#xC2E4;&#xD328;&#xD55C;&#xB2E4;.</li></ul><h2 id="%EB%A1%9C%EA%B7%B8%EC%97%90%EC%84%9C-%EB%A8%BC%EC%A0%80-%EB%88%88%EC%97%90-%EB%93%A4%EC%96%B4%EC%98%A4%EB%8A%94-%EC%8B%A0%ED%98%B8">&#xB85C;&#xADF8;&#xC5D0;&#xC11C; &#xBA3C;&#xC800; &#xB208;&#xC5D0; &#xB4E4;&#xC5B4;&#xC624;&#xB294; &#xC2E0;&#xD638;</h2><p>&#xC6B4;&#xC601; &#xC911;&#xC5D0;&#xB294; &#xAE34; &#xC124;&#xBA85;&#xBCF4;&#xB2E4; &#xBC18;&#xBCF5;&#xB418;&#xB294; &#xB85C;&#xADF8; &#xBB38;&#xAD6C;&#xAC00; &#xBA3C;&#xC800; &#xB208;&#xC5D0; &#xB4E4;&#xC5B4;&#xC628;&#xB2E4;. &#xAC19;&#xC740; &#xBB38;&#xAD6C;&#xAC00; &#xC5B4;&#xB290; &#xCEF4;&#xD3EC;&#xB10C;&#xD2B8;&#xC5D0;&#xC11C; &#xBC18;&#xBCF5;&#xB418;&#xB294;&#xC9C0;&#xC640; &#xC9C1;&#xC804; &#xC0C1;&#xD0DC; &#xBCC0;&#xD654;&#xB97C; &#xBA3C;&#xC800; &#xD655;&#xC778;&#xD55C;&#xB2E4;.</p><ul><li>Compute Node &#xACC4;&#xCE35;&#xC5D0;&#xC11C; &#xC99D;&#xC0C1;&#xC774; &#xC2DC;&#xC791;&#xB418;&#xC9C0;&#xB9CC; &#xC2E4;&#xC81C; &#xC6D0;&#xC778;&#xC740; &#xB2E4;&#xB978; &#xACC4;&#xCE35;&#xC5D0; &#xC788;&#xC744; &#xC218; &#xC788;&#xB2E4;.</li><li>&#xB208;&#xC5D0; &#xBCF4;&#xC774;&#xB294; &#xC5D0;&#xB7EC;&#xBCF4;&#xB2E4; &#xC7A5;&#xC560; &#xC2DC;&#xAC01;, &#xB300;&#xC0C1; &#xB9AC;&#xC18C;&#xC2A4;, &#xC9C1;&#xC804; &#xBCC0;&#xACBD; &#xC774;&#xB825;&#xC744; &#xBA3C;&#xC800; &#xB9DE;&#xCD94;&#xB294; &#xD3B8;&#xC774; &#xBE60;&#xB974;&#xB2E4;.</li><li>&#xC77D;&#xAE30; &#xC804;&#xC6A9; &#xD655;&#xC778;&#xACFC; &#xC0C1;&#xD0DC; &#xBCC0;&#xACBD; &#xC791;&#xC5C5;&#xC744; &#xBD84;&#xB9AC;&#xD558;&#xBA74; &#xAE09;&#xD55C; &#xC0C1;&#xD669;&#xC5D0;&#xC11C;&#xB3C4; &#xD310;&#xB2E8;&#xC774; &#xD750;&#xB824;&#xC9C0;&#xC9C0; &#xC54A;&#xB294;&#xB2E4;.</li></ul><h2 id="%EC%B2%98%EC%9D%8C%EC%97%90-%EB%82%98%EB%88%A0%EB%B4%90%EC%95%BC-%ED%95%A0-%EA%B2%83">&#xCC98;&#xC74C;&#xC5D0; &#xB098;&#xB220;&#xBD10;&#xC57C; &#xD560; &#xAC83;</h2><p>&#xC774; &#xCF00;&#xC774;&#xC2A4;&#xB294; &#xD55C; &#xBC88;&#xC5D0; &#xD574;&#xACB0; &#xBA85;&#xB839;&#xC744; &#xCC3E;&#xAE30;&#xBCF4;&#xB2E4;, &#xC544;&#xB798; &#xAE30;&#xC900;&#xC73C;&#xB85C; &#xACC4;&#xCE35;&#xC744; &#xB098;&#xB204;&#xB294; &#xAC83;&#xC774; &#xBA3C;&#xC800;&#xB2E4;.</p><ul><li>host&#xC758; &#xC804;&#xC6D0;, management network, storage path, xapi &#xC0C1;&#xD0DC;&#xB97C; &#xBA3C;&#xC800; &#xBD84;&#xB9AC;&#xD55C;&#xB2E4;.</li><li>VM &#xB2E8;&#xC704; &#xBB38;&#xC81C;&#xAC00; &#xC544;&#xB2C8;&#xB77C; host &#xB2E8;&#xC704; &#xBB38;&#xC81C;&#xC778;&#xC9C0; resident VM &#xBAA9;&#xB85D;&#xC73C;&#xB85C; &#xD655;&#xC778;&#xD55C;&#xB2E4;.</li><li>hardware &#xAD50;&#xCCB4; &#xC804;&#xD6C4;&#xC5D0;&#xB294; service tool &#xB85C;&#xADF8;&#xC640; hypervisor &#xB85C;&#xADF8;&#xB97C; &#xAC19;&#xC774; &#xB0A8;&#xAE34;&#xB2E4;.</li></ul><h2 id="%ED%99%95%EC%9D%B8%EC%97%90-%EC%93%B4-%EB%AA%85%EB%A0%B9-%ED%9D%90%EB%A6%84">&#xD655;&#xC778;&#xC5D0; &#xC4F4; &#xBA85;&#xB839; &#xD750;&#xB984;</h2><p>&#xBA85;&#xB839;&#xC740; &#xD604;&#xC7AC; &#xD658;&#xACBD;&#xC758; &#xB178;&#xB4DC;&#xBA85;, &#xB9AC;&#xC18C;&#xC2A4; ID, &#xC11C;&#xBE44;&#xC2A4; &#xC774;&#xB984;&#xC744; &#xD655;&#xC778;&#xD55C; &#xB4A4; &#xB300;&#xC0C1;&#xC5D0; &#xB9DE;&#xAC8C; &#xC2E4;&#xD589;&#xD55C;&#xB2E4;.</p><pre><code class="language-bash">xe host-list params=uuid,name-label,enabled
xe host-param-list uuid=&lt;host-uuid&gt;
xe vm-list resident-on=&lt;host-uuid&gt; params=uuid,name-label,power-state
xe task-list status=pending

systemctl status xapi --no-pager
tail -n 200 /var/log/xensource.log
tail -n 200 /var/log/messages

xe vm-migrate vm=&lt;vm-uuid&gt; host=&lt;target-host-uuid&gt; live=true
xe host-disable uuid=&lt;host-uuid&gt;</code></pre><h2 id="%EC%A1%B0%EC%B9%98-%EC%A0%84%EC%97%90-%ED%8C%90%EB%8B%A8%ED%95%A0-%EC%A7%80%EC%A0%90">&#xC870;&#xCE58; &#xC804;&#xC5D0; &#xD310;&#xB2E8;&#xD560; &#xC9C0;&#xC810;</h2><ul><li>&#xAC00;&#xB2A5;&#xD558;&#xBA74; live migration&#xC73C;&#xB85C; &#xBE44;&#xC6B0;&#xACE0;, &#xBD88;&#xAC00;&#xB2A5;&#xD558;&#xBA74; HA &#xB610;&#xB294; cold migration &#xACBD;&#xB85C;&#xB97C; &#xC0AC;&#xC6A9;&#xD55C;&#xB2E4;.</li><li>xapi &#xC7AC;&#xC2DC;&#xC791;&#xC740; &#xC9C4;&#xD589; &#xC911; task&#xC640; VM &#xC601;&#xD5A5;&#xB3C4;&#xB97C; &#xD655;&#xC778;&#xD55C; &#xB4A4; maintenance window&#xC5D0;&#xC11C; &#xC218;&#xD589;&#xD55C;&#xB2E4;.</li><li>&#xC7A5;&#xC560; host &#xACA9;&#xB9AC; &#xD6C4; target host&#xC758; CPU, memory, SR &#xC5EC;&#xC720;&#xB7C9;&#xC744; &#xD655;&#xC778;&#xD55C;&#xB2E4;.</li></ul><h2 id="%EB%B3%B5%EA%B5%AC%EB%90%90%EB%8B%A4%EA%B3%A0-%ED%8C%90%EB%8B%A8%ED%95%98%EB%8A%94-%EA%B8%B0%EC%A4%80">&#xBCF5;&#xAD6C;&#xB410;&#xB2E4;&#xACE0; &#xD310;&#xB2E8;&#xD558;&#xB294; &#xAE30;&#xC900;</h2><ul><li>&#xC7A5;&#xC560; host&#xAC00; pool&#xC5D0;&#xC11C; disable/maintenance &#xC0C1;&#xD0DC;&#xC778;&#xC9C0; &#xD655;&#xC778;&#xD55C;&#xB2E4;.</li><li>&#xC774;&#xC804;&#xB41C; VM&#xC758; power state, NIC, disk attachment&#xB97C; &#xD655;&#xC778;&#xD55C;&#xB2E4;.</li><li>xensource.log&#xC640; management-server.log&#xC5D0; &#xC2E0;&#xADDC; error&#xAC00; &#xBC18;&#xBCF5;&#xB418;&#xC9C0; &#xC54A;&#xB294;&#xC9C0; &#xD655;&#xC778;&#xD55C;&#xB2E4;.</li></ul><h2 id="%EC%9A%B4%EC%98%81%ED%95%98%EB%A9%B4%EC%84%9C-%EB%82%A8%EC%9D%80-%EA%B5%90%ED%9B%88">&#xC6B4;&#xC601;&#xD558;&#xBA74;&#xC11C; &#xB0A8;&#xC740; &#xAD50;&#xD6C8;</h2><p>&#xC774; &#xCF00;&#xC774;&#xC2A4;&#xB294; &#xC870;&#xCE58; &#xC790;&#xCCB4;&#xBCF4;&#xB2E4; &#xB300;&#xC0C1; &#xC2DD;&#xBCC4;&#xC774; &#xB354; &#xC911;&#xC694;&#xD558;&#xB2E4;. &#xAC19;&#xC740; &#x201C;VM&#xC774; &#xC548; &#xB41C;&#xB2E4;&#x201D;&#xB294; &#xC99D;&#xC0C1;&#xC774;&#xC5B4;&#xB3C4; VM guest, compute host, storage attachment, virtual router, management service &#xC911; &#xC5B4;&#xB514;&#xAC00; &#xAE30;&#xC900;&#xC810;&#xC778;&#xC9C0;&#xC5D0; &#xB530;&#xB77C; &#xBA85;&#xB839;&#xACFC; &#xC704;&#xD5D8;&#xB3C4;&#xAC00; &#xC644;&#xC804;&#xD788; &#xB2EC;&#xB77C;&#xC9C4;&#xB2E4;.</p><p>&#xC7A5;&#xC560; &#xC2DC;&#xAC01;, &#xB300;&#xC0C1; &#xB9AC;&#xC18C;&#xC2A4;, &#xC9C1;&#xC804; &#xBCC0;&#xACBD; &#xC774;&#xB825;, &#xD655;&#xC778; &#xBA85;&#xB839;, &#xC2E4;&#xC81C; &#xC870;&#xCE58;, &#xAC80;&#xC99D; &#xACB0;&#xACFC;&#xB97C; &#xAC19;&#xC740; &#xC21C;&#xC11C;&#xB85C; &#xB0A8;&#xACA8;&#xB450;&#xBA74; &#xB2E4;&#xC74C; &#xC7A5;&#xC560;&#xC5D0;&#xC11C; &#xB2E8;&#xC21C; &#xAE30;&#xC5B5;&#xC774; &#xC544;&#xB2C8;&#xB77C; &#xD310;&#xB2E8; &#xADFC;&#xAC70;&#xB85C; &#xB2E4;&#xC2DC; &#xC4F8; &#xC218; &#xC788;&#xB2E4;.</p>]]></content:encoded></item><item><title><![CDATA[Compute Node 장애: compute node 장애를 VM 영향도로 풀어볼 때 - host 상태 관점]]></title><description><![CDATA[compute node 장애를 VM 영향도로 풀어볼 때를 host 상태 관점에서 좁혀 보는 케이스. Compute Node 계층의 증상, 확인 명령, 조치 전 판단, 복구 기준을 정리했다.]]></description><link>https://devmes.com/cloud-ops-troubleshooting-compute-node-75d47f4cdd/</link><guid isPermaLink="false">6a3b418581de1a000182f734</guid><category><![CDATA[Cloud Operations]]></category><category><![CDATA[XenServer]]></category><category><![CDATA[Compute]]></category><category><![CDATA[Migration]]></category><category><![CDATA[Troubleshooting]]></category><dc:creator><![CDATA[devmes]]></dc:creator><pubDate>Wed, 24 Jun 2026 02:31:33 GMT</pubDate><content:encoded><![CDATA[<p><strong>Compute Node &#xC7A5;&#xC560;: compute node &#xC7A5;&#xC560;&#xB97C; VM &#xC601;&#xD5A5;&#xB3C4;&#xB85C; &#xD480;&#xC5B4;&#xBCFC; &#xB54C; - host &#xC0C1;&#xD0DC; &#xAD00;&#xC810;</strong> &#xCF00;&#xC774;&#xC2A4;&#xB97C; &#xB2E4;&#xB8EC;&#xB2E4;. &#xD575;&#xC2EC;&#xC740; compute node &#xC7A5;&#xC560;&#xB97C; VM &#xC601;&#xD5A5;&#xB3C4;&#xB85C; &#xD480;&#xC5B4;&#xBCFC; &#xB54C;&#xB97C; host &#xC0C1;&#xD0DC; &#xAD00;&#xC810;&#xC5D0;&#xC11C; &#xC881;&#xD600; &#xBCF4;&#xB294; &#xCF00;&#xC774;&#xC2A4;&#xB2E4;.</p><p>&#xC7A5;&#xC560;&#xB97C; &#xC881;&#xD790; &#xB54C;&#xB294; &#xC99D;&#xC0C1;, &#xC601;&#xD5A5; &#xBC94;&#xC704;, &#xB300;&#xC0C1; &#xB9AC;&#xC18C;&#xC2A4;, &#xCD5C;&#xADFC; &#xBCC0;&#xACBD;, &#xB85C;&#xADF8; &#xC2DC;&#xC810;&#xC744; &#xBA3C;&#xC800; &#xB9DE;&#xCD98;&#xB2E4;.</p><p>compute node &#xC7A5;&#xC560;&#xB294; &#xD55C; &#xB300;&#xC758; &#xC11C;&#xBC84; &#xBB38;&#xC81C;&#xAC00; &#xC544;&#xB2C8;&#xB77C; &#xADF8; &#xC704;&#xC5D0; &#xC62C;&#xB77C;&#xAC04; VM &#xBB36;&#xC74C;&#xC758; &#xC11C;&#xBE44;&#xC2A4; &#xC7A5;&#xC560;&#xB85C; &#xBC88;&#xC9C4;&#xB2E4;. &#xADF8;&#xB798;&#xC11C; &#xCCAB; &#xD310;&#xB2E8;&#xC740; hardware &#xAD50;&#xCCB4;&#xAC00; &#xC544;&#xB2C8;&#xB77C;, &#xB0A8;&#xC544; &#xC788;&#xB294; VM&#xC744; &#xC5B4;&#xB514;&#xAE4C;&#xC9C0; &#xC548;&#xC804;&#xD558;&#xAC8C; &#xC62E;&#xAE38; &#xC218; &#xC788;&#xB294;&#xC9C0;&#xC5D0;&#xC11C; &#xC2DC;&#xC791;&#xD55C;&#xB2E4;.</p><p>&#xC6B4;&#xC601; &#xC7A5;&#xC560; &#xB300;&#xC751;&#xC740; &#xC6D0;&#xC778;&#xC744; &#xBC14;&#xB85C; &#xB2E8;&#xC815;&#xD558;&#xAE30;&#xBCF4;&#xB2E4; &#xACC4;&#xCE35;&#xC744; &#xB098;&#xB220; &#xC99D;&#xAC70;&#xB97C; &#xB9DE;&#xCD94;&#xB294; &#xCABD;&#xC774; &#xC548;&#xC804;&#xD558;&#xB2E4;. read-only &#xD655;&#xC778;, &#xBCC0;&#xACBD; &#xC870;&#xCE58;, &#xAC80;&#xC99D; &#xBA85;&#xB839;&#xC744; &#xBD84;&#xB9AC;&#xD574;&#xC57C; &#xAE34;&#xAE09; &#xC0C1;&#xD669;&#xC5D0;&#xC11C;&#xB3C4; &#xD310;&#xB2E8;&#xC774; &#xD754;&#xB4E4;&#xB9AC;&#xC9C0; &#xC54A;&#xB294;&#xB2E4;.</p><h2 id="%EC%9D%B4-%EA%B8%80%EC%97%90%EC%84%9C-%EB%8B%A4%EB%A3%A8%EB%8A%94-%EC%BC%80%EC%9D%B4%EC%8A%A4">&#xC774; &#xAE00;&#xC5D0;&#xC11C; &#xB2E4;&#xB8E8;&#xB294; &#xCF00;&#xC774;&#xC2A4;</h2><!--kg-card-begin: html--><table>
 <tbody>
 <tr><th>&#xCF00;&#xC774;&#xC2A4; &#xCD08;&#xC810;</th><td>compute node &#xC7A5;&#xC560;&#xB97C; VM &#xC601;&#xD5A5;&#xB3C4;&#xB85C; &#xD480;&#xC5B4;&#xBCFC; &#xB54C;&#xB97C; host &#xC0C1;&#xD0DC; &#xAD00;&#xC810;&#xC5D0;&#xC11C; &#xC881;&#xD600; &#xBCF4;&#xB294; &#xCF00;&#xC774;&#xC2A4;</td></tr>
 <tr><th>&#xC815;&#xB9AC;&#xD55C; &#xC8FC;&#xC81C;</th><td>Compute Node</td></tr>
 <tr><th>&#xC8FC;&#xC694; &#xACC4;&#xCE35;</th><td>XenServer host, VM scheduling, hardware fault</td></tr>
 <tr><th>&#xC6B4;&#xC601; &#xB2E8;&#xC11C;</th><td>&#xC8FC;&#xC81C; &#xD504;&#xB85C;&#xD30C;&#xC77C;&#xACFC; &#xC7A5;&#xC560; &#xD750;&#xB984; &#xAE30;&#xC900;&#xC73C;&#xB85C; &#xC7AC;&#xAD6C;&#xC131;</td></tr>
 </tbody>
</table><!--kg-card-end: html--><h2 id="%EA%B2%89%EC%9C%BC%EB%A1%9C-%EB%B3%B4%EC%9D%B4%EB%8A%94-%EC%A6%9D%EC%83%81">&#xAC89;&#xC73C;&#xB85C; &#xBCF4;&#xC774;&#xB294; &#xC99D;&#xC0C1;</h2><ul><li>compute node hardware fault, reboot, hang, power off &#xC774;&#xD6C4; VM &#xC81C;&#xC5B4;&#xAC00; &#xBD88;&#xC548;&#xC815;&#xD558;&#xB2E4;.</li><li>&#xAD00;&#xB9AC; &#xD3EC;&#xD138;&#xC5D0;&#xC11C;&#xB294; VM&#xC774; Running&#xC73C;&#xB85C; &#xBCF4;&#xC774;&#xC9C0;&#xB9CC; &#xC2E4;&#xC81C; hypervisor&#xC5D0;&#xC11C;&#xB294; domain&#xC774; &#xC5C6;&#xAC70;&#xB098; &#xBA48;&#xCDB0; &#xC788;&#xB2E4;.</li><li>&#xC7A5;&#xC560; host&#xC5D0;&#xC11C; migration, evacuation, maintenance &#xC804;&#xD658;&#xC774; &#xC2E4;&#xD328;&#xD55C;&#xB2E4;.</li></ul><h2 id="%EB%A1%9C%EA%B7%B8%EC%97%90%EC%84%9C-%EB%A8%BC%EC%A0%80-%EB%88%88%EC%97%90-%EB%93%A4%EC%96%B4%EC%98%A4%EB%8A%94-%EC%8B%A0%ED%98%B8">&#xB85C;&#xADF8;&#xC5D0;&#xC11C; &#xBA3C;&#xC800; &#xB208;&#xC5D0; &#xB4E4;&#xC5B4;&#xC624;&#xB294; &#xC2E0;&#xD638;</h2><p>&#xC6B4;&#xC601; &#xC911;&#xC5D0;&#xB294; &#xAE34; &#xC124;&#xBA85;&#xBCF4;&#xB2E4; &#xBC18;&#xBCF5;&#xB418;&#xB294; &#xB85C;&#xADF8; &#xBB38;&#xAD6C;&#xAC00; &#xBA3C;&#xC800; &#xB208;&#xC5D0; &#xB4E4;&#xC5B4;&#xC628;&#xB2E4;. &#xAC19;&#xC740; &#xBB38;&#xAD6C;&#xAC00; &#xC5B4;&#xB290; &#xCEF4;&#xD3EC;&#xB10C;&#xD2B8;&#xC5D0;&#xC11C; &#xBC18;&#xBCF5;&#xB418;&#xB294;&#xC9C0;&#xC640; &#xC9C1;&#xC804; &#xC0C1;&#xD0DC; &#xBCC0;&#xD654;&#xB97C; &#xBA3C;&#xC800; &#xD655;&#xC778;&#xD55C;&#xB2E4;.</p><ul><li>Compute Node &#xACC4;&#xCE35;&#xC5D0;&#xC11C; &#xC99D;&#xC0C1;&#xC774; &#xC2DC;&#xC791;&#xB418;&#xC9C0;&#xB9CC; &#xC2E4;&#xC81C; &#xC6D0;&#xC778;&#xC740; &#xB2E4;&#xB978; &#xACC4;&#xCE35;&#xC5D0; &#xC788;&#xC744; &#xC218; &#xC788;&#xB2E4;.</li><li>&#xB208;&#xC5D0; &#xBCF4;&#xC774;&#xB294; &#xC5D0;&#xB7EC;&#xBCF4;&#xB2E4; &#xC7A5;&#xC560; &#xC2DC;&#xAC01;, &#xB300;&#xC0C1; &#xB9AC;&#xC18C;&#xC2A4;, &#xC9C1;&#xC804; &#xBCC0;&#xACBD; &#xC774;&#xB825;&#xC744; &#xBA3C;&#xC800; &#xB9DE;&#xCD94;&#xB294; &#xD3B8;&#xC774; &#xBE60;&#xB974;&#xB2E4;.</li><li>&#xC77D;&#xAE30; &#xC804;&#xC6A9; &#xD655;&#xC778;&#xACFC; &#xC0C1;&#xD0DC; &#xBCC0;&#xACBD; &#xC791;&#xC5C5;&#xC744; &#xBD84;&#xB9AC;&#xD558;&#xBA74; &#xAE09;&#xD55C; &#xC0C1;&#xD669;&#xC5D0;&#xC11C;&#xB3C4; &#xD310;&#xB2E8;&#xC774; &#xD750;&#xB824;&#xC9C0;&#xC9C0; &#xC54A;&#xB294;&#xB2E4;.</li></ul><h2 id="%EC%B2%98%EC%9D%8C%EC%97%90-%EB%82%98%EB%88%A0%EB%B4%90%EC%95%BC-%ED%95%A0-%EA%B2%83">&#xCC98;&#xC74C;&#xC5D0; &#xB098;&#xB220;&#xBD10;&#xC57C; &#xD560; &#xAC83;</h2><p>&#xC774; &#xCF00;&#xC774;&#xC2A4;&#xB294; &#xD55C; &#xBC88;&#xC5D0; &#xD574;&#xACB0; &#xBA85;&#xB839;&#xC744; &#xCC3E;&#xAE30;&#xBCF4;&#xB2E4;, &#xC544;&#xB798; &#xAE30;&#xC900;&#xC73C;&#xB85C; &#xACC4;&#xCE35;&#xC744; &#xB098;&#xB204;&#xB294; &#xAC83;&#xC774; &#xBA3C;&#xC800;&#xB2E4;.</p><ul><li>host&#xC758; &#xC804;&#xC6D0;, management network, storage path, xapi &#xC0C1;&#xD0DC;&#xB97C; &#xBA3C;&#xC800; &#xBD84;&#xB9AC;&#xD55C;&#xB2E4;.</li><li>VM &#xB2E8;&#xC704; &#xBB38;&#xC81C;&#xAC00; &#xC544;&#xB2C8;&#xB77C; host &#xB2E8;&#xC704; &#xBB38;&#xC81C;&#xC778;&#xC9C0; resident VM &#xBAA9;&#xB85D;&#xC73C;&#xB85C; &#xD655;&#xC778;&#xD55C;&#xB2E4;.</li><li>hardware &#xAD50;&#xCCB4; &#xC804;&#xD6C4;&#xC5D0;&#xB294; service tool &#xB85C;&#xADF8;&#xC640; hypervisor &#xB85C;&#xADF8;&#xB97C; &#xAC19;&#xC774; &#xB0A8;&#xAE34;&#xB2E4;.</li></ul><h2 id="%ED%99%95%EC%9D%B8%EC%97%90-%EC%93%B4-%EB%AA%85%EB%A0%B9-%ED%9D%90%EB%A6%84">&#xD655;&#xC778;&#xC5D0; &#xC4F4; &#xBA85;&#xB839; &#xD750;&#xB984;</h2><p>&#xBA85;&#xB839;&#xC740; &#xD604;&#xC7AC; &#xD658;&#xACBD;&#xC758; &#xB178;&#xB4DC;&#xBA85;, &#xB9AC;&#xC18C;&#xC2A4; ID, &#xC11C;&#xBE44;&#xC2A4; &#xC774;&#xB984;&#xC744; &#xD655;&#xC778;&#xD55C; &#xB4A4; &#xB300;&#xC0C1;&#xC5D0; &#xB9DE;&#xAC8C; &#xC2E4;&#xD589;&#xD55C;&#xB2E4;.</p><pre><code class="language-bash">xe host-list params=uuid,name-label,enabled
xe host-param-list uuid=&lt;host-uuid&gt;
xe vm-list resident-on=&lt;host-uuid&gt; params=uuid,name-label,power-state
xe task-list status=pending

systemctl status xapi --no-pager
tail -n 200 /var/log/xensource.log
tail -n 200 /var/log/messages

xe vm-migrate vm=&lt;vm-uuid&gt; host=&lt;target-host-uuid&gt; live=true
xe host-disable uuid=&lt;host-uuid&gt;</code></pre><h2 id="%EC%A1%B0%EC%B9%98-%EC%A0%84%EC%97%90-%ED%8C%90%EB%8B%A8%ED%95%A0-%EC%A7%80%EC%A0%90">&#xC870;&#xCE58; &#xC804;&#xC5D0; &#xD310;&#xB2E8;&#xD560; &#xC9C0;&#xC810;</h2><ul><li>&#xAC00;&#xB2A5;&#xD558;&#xBA74; live migration&#xC73C;&#xB85C; &#xBE44;&#xC6B0;&#xACE0;, &#xBD88;&#xAC00;&#xB2A5;&#xD558;&#xBA74; HA &#xB610;&#xB294; cold migration &#xACBD;&#xB85C;&#xB97C; &#xC0AC;&#xC6A9;&#xD55C;&#xB2E4;.</li><li>xapi &#xC7AC;&#xC2DC;&#xC791;&#xC740; &#xC9C4;&#xD589; &#xC911; task&#xC640; VM &#xC601;&#xD5A5;&#xB3C4;&#xB97C; &#xD655;&#xC778;&#xD55C; &#xB4A4; maintenance window&#xC5D0;&#xC11C; &#xC218;&#xD589;&#xD55C;&#xB2E4;.</li><li>&#xC7A5;&#xC560; host &#xACA9;&#xB9AC; &#xD6C4; target host&#xC758; CPU, memory, SR &#xC5EC;&#xC720;&#xB7C9;&#xC744; &#xD655;&#xC778;&#xD55C;&#xB2E4;.</li></ul><h2 id="%EB%B3%B5%EA%B5%AC%EB%90%90%EB%8B%A4%EA%B3%A0-%ED%8C%90%EB%8B%A8%ED%95%98%EB%8A%94-%EA%B8%B0%EC%A4%80">&#xBCF5;&#xAD6C;&#xB410;&#xB2E4;&#xACE0; &#xD310;&#xB2E8;&#xD558;&#xB294; &#xAE30;&#xC900;</h2><ul><li>&#xC7A5;&#xC560; host&#xAC00; pool&#xC5D0;&#xC11C; disable/maintenance &#xC0C1;&#xD0DC;&#xC778;&#xC9C0; &#xD655;&#xC778;&#xD55C;&#xB2E4;.</li><li>&#xC774;&#xC804;&#xB41C; VM&#xC758; power state, NIC, disk attachment&#xB97C; &#xD655;&#xC778;&#xD55C;&#xB2E4;.</li><li>xensource.log&#xC640; management-server.log&#xC5D0; &#xC2E0;&#xADDC; error&#xAC00; &#xBC18;&#xBCF5;&#xB418;&#xC9C0; &#xC54A;&#xB294;&#xC9C0; &#xD655;&#xC778;&#xD55C;&#xB2E4;.</li></ul><h2 id="%EC%9A%B4%EC%98%81%ED%95%98%EB%A9%B4%EC%84%9C-%EB%82%A8%EC%9D%80-%EA%B5%90%ED%9B%88">&#xC6B4;&#xC601;&#xD558;&#xBA74;&#xC11C; &#xB0A8;&#xC740; &#xAD50;&#xD6C8;</h2><p>&#xC774; &#xCF00;&#xC774;&#xC2A4;&#xB294; &#xC870;&#xCE58; &#xC790;&#xCCB4;&#xBCF4;&#xB2E4; &#xB300;&#xC0C1; &#xC2DD;&#xBCC4;&#xC774; &#xB354; &#xC911;&#xC694;&#xD558;&#xB2E4;. &#xAC19;&#xC740; &#x201C;VM&#xC774; &#xC548; &#xB41C;&#xB2E4;&#x201D;&#xB294; &#xC99D;&#xC0C1;&#xC774;&#xC5B4;&#xB3C4; VM guest, compute host, storage attachment, virtual router, management service &#xC911; &#xC5B4;&#xB514;&#xAC00; &#xAE30;&#xC900;&#xC810;&#xC778;&#xC9C0;&#xC5D0; &#xB530;&#xB77C; &#xBA85;&#xB839;&#xACFC; &#xC704;&#xD5D8;&#xB3C4;&#xAC00; &#xC644;&#xC804;&#xD788; &#xB2EC;&#xB77C;&#xC9C4;&#xB2E4;.</p><p>&#xC7A5;&#xC560; &#xC2DC;&#xAC01;, &#xB300;&#xC0C1; &#xB9AC;&#xC18C;&#xC2A4;, &#xC9C1;&#xC804; &#xBCC0;&#xACBD; &#xC774;&#xB825;, &#xD655;&#xC778; &#xBA85;&#xB839;, &#xC2E4;&#xC81C; &#xC870;&#xCE58;, &#xAC80;&#xC99D; &#xACB0;&#xACFC;&#xB97C; &#xAC19;&#xC740; &#xC21C;&#xC11C;&#xB85C; &#xB0A8;&#xACA8;&#xB450;&#xBA74; &#xB2E4;&#xC74C; &#xC7A5;&#xC560;&#xC5D0;&#xC11C; &#xB2E8;&#xC21C; &#xAE30;&#xC5B5;&#xC774; &#xC544;&#xB2C8;&#xB77C; &#xD310;&#xB2E8; &#xADFC;&#xAC70;&#xB85C; &#xB2E4;&#xC2DC; &#xC4F8; &#xC218; &#xC788;&#xB2E4;.</p>]]></content:encoded></item><item><title><![CDATA[볼륨·스냅샷·SR: 스토리지 상태와 VM 상태가 다르게 보일 때 - 스토리지 상태 관점]]></title><description><![CDATA[스토리지 상태와 VM 상태가 다르게 보일 때를 스토리지 상태 관점에서 좁혀 보는 케이스. Storage / Volume 계층의 증상, 확인 명령, 조치 전 판단, 복구 기준을 정리했다.]]></description><link>https://devmes.com/cloud-ops-troubleshooting-storage-volume-snapshot-65926f92b3/</link><guid isPermaLink="false">6a3b418581de1a000182f746</guid><category><![CDATA[Cloud Operations]]></category><category><![CDATA[XenServer]]></category><category><![CDATA[Storage]]></category><category><![CDATA[Snapshot]]></category><category><![CDATA[Troubleshooting]]></category><dc:creator><![CDATA[devmes]]></dc:creator><pubDate>Wed, 24 Jun 2026 02:31:33 GMT</pubDate><content:encoded><![CDATA[<p><strong>&#xBCFC;&#xB968;&#xB7;&#xC2A4;&#xB0C5;&#xC0F7;&#xB7;SR: &#xC2A4;&#xD1A0;&#xB9AC;&#xC9C0; &#xC0C1;&#xD0DC;&#xC640; VM &#xC0C1;&#xD0DC;&#xAC00; &#xB2E4;&#xB974;&#xAC8C; &#xBCF4;&#xC77C; &#xB54C; - &#xC2A4;&#xD1A0;&#xB9AC;&#xC9C0; &#xC0C1;&#xD0DC; &#xAD00;&#xC810;</strong> &#xCF00;&#xC774;&#xC2A4;&#xB97C; &#xB2E4;&#xB8EC;&#xB2E4;. &#xD575;&#xC2EC;&#xC740; &#xC2A4;&#xD1A0;&#xB9AC;&#xC9C0; &#xC0C1;&#xD0DC;&#xC640; VM &#xC0C1;&#xD0DC;&#xAC00; &#xB2E4;&#xB974;&#xAC8C; &#xBCF4;&#xC77C; &#xB54C;&#xB97C; &#xC2A4;&#xD1A0;&#xB9AC;&#xC9C0; &#xC0C1;&#xD0DC; &#xAD00;&#xC810;&#xC5D0;&#xC11C; &#xC881;&#xD600; &#xBCF4;&#xB294; &#xCF00;&#xC774;&#xC2A4;&#xB2E4;.</p><p>&#xC7A5;&#xC560;&#xB97C; &#xC881;&#xD790; &#xB54C;&#xB294; &#xC99D;&#xC0C1;, &#xC601;&#xD5A5; &#xBC94;&#xC704;, &#xB300;&#xC0C1; &#xB9AC;&#xC18C;&#xC2A4;, &#xCD5C;&#xADFC; &#xBCC0;&#xACBD;, &#xB85C;&#xADF8; &#xC2DC;&#xC810;&#xC744; &#xBA3C;&#xC800; &#xB9DE;&#xCD98;&#xB2E4;.</p><p>&#xC2A4;&#xD1A0;&#xB9AC;&#xC9C0; &#xACC4;&#xCE35; &#xC7A5;&#xC560;&#xB294; &#xC870;&#xAE09;&#xD558;&#xAC8C; attach/detach&#xB97C; &#xBC18;&#xBCF5;&#xD560;&#xC218;&#xB85D; &#xC0C1;&#xD0DC;&#xAC00; &#xB354; &#xB098;&#xBE60;&#xC9C8; &#xC218; &#xC788;&#xB2E4;. &#xD2B9;&#xD788; VDI/VBD, snapshot chain, tapdisk&#xAC00; &#xC5BD;&#xD78C; &#xACBD;&#xC6B0;&#xC5D0;&#xB294; &#xC5B4;&#xB5A4; &#xACC4;&#xCE35;&#xC774; &#xC544;&#xC9C1; disk&#xB97C; &#xBD99;&#xC7A1;&#xACE0; &#xC788;&#xB294;&#xC9C0;&#xBD80;&#xD130; &#xBD10;&#xC57C; &#xD55C;&#xB2E4;.</p><p>&#xBCFC;&#xB968; &#xC7A5;&#xC560;&#xB294; &#xD3EC;&#xD138;&#xC758; attach/detach &#xC0C1;&#xD0DC;&#xB9CC; &#xBCF4;&#xACE0; &#xD310;&#xB2E8;&#xD558;&#xBA74; &#xB193;&#xCE58;&#xB294; &#xC9C0;&#xC810;&#xC774; &#xB9CE;&#xB2E4;. &#xC2E4;&#xC81C;&#xB85C;&#xB294; guest OS&#xC758; mount &#xC0C1;&#xD0DC;, XenServer&#xC758; VDI/VBD &#xC5F0;&#xACB0;, SR &#xC5EC;&#xC720;&#xB7C9;, snapshot chain&#xC774; &#xBAA8;&#xB450; &#xD55C; &#xC904;&#xB85C; &#xB9DE;&#xC544;&#xC57C; &#xC815;&#xC0C1;&#xC774;&#xB77C;&#xACE0; &#xBCFC; &#xC218; &#xC788;&#xB2E4;.</p><h2 id="%EC%9D%B4-%EA%B8%80%EC%97%90%EC%84%9C-%EB%8B%A4%EB%A3%A8%EB%8A%94-%EC%BC%80%EC%9D%B4%EC%8A%A4">&#xC774; &#xAE00;&#xC5D0;&#xC11C; &#xB2E4;&#xB8E8;&#xB294; &#xCF00;&#xC774;&#xC2A4;</h2><!--kg-card-begin: html--><table>
 <tbody>
 <tr><th>&#xCF00;&#xC774;&#xC2A4; &#xCD08;&#xC810;</th><td>&#xC2A4;&#xD1A0;&#xB9AC;&#xC9C0; &#xC0C1;&#xD0DC;&#xC640; VM &#xC0C1;&#xD0DC;&#xAC00; &#xB2E4;&#xB974;&#xAC8C; &#xBCF4;&#xC77C; &#xB54C;&#xB97C; &#xC2A4;&#xD1A0;&#xB9AC;&#xC9C0; &#xC0C1;&#xD0DC; &#xAD00;&#xC810;&#xC5D0;&#xC11C; &#xC881;&#xD600; &#xBCF4;&#xB294; &#xCF00;&#xC774;&#xC2A4;</td></tr>
 <tr><th>&#xC815;&#xB9AC;&#xD55C; &#xC8FC;&#xC81C;</th><td>Storage / Volume</td></tr>
 <tr><th>&#xC8FC;&#xC694; &#xACC4;&#xCE35;</th><td>SR, VDI, VBD, snapshot chain, tapdisk</td></tr>
 <tr><th>&#xC6B4;&#xC601; &#xB2E8;&#xC11C;</th><td>&#xC8FC;&#xC81C; &#xD504;&#xB85C;&#xD30C;&#xC77C;&#xACFC; &#xC7A5;&#xC560; &#xD750;&#xB984; &#xAE30;&#xC900;&#xC73C;&#xB85C; &#xC7AC;&#xAD6C;&#xC131;</td></tr>
 </tbody>
</table><!--kg-card-end: html--><h2 id="%EA%B2%89%EC%9C%BC%EB%A1%9C-%EB%B3%B4%EC%9D%B4%EB%8A%94-%EC%A6%9D%EC%83%81">&#xAC89;&#xC73C;&#xB85C; &#xBCF4;&#xC774;&#xB294; &#xC99D;&#xC0C1;</h2><ul><li>&#xBCFC;&#xB968; attach/detach&#xAC00; &#xC2E4;&#xD328;&#xD558;&#xAC70;&#xB098; &#xD3EC;&#xD138; &#xC0C1;&#xD0DC;&#xC640; hypervisor &#xC0C1;&#xD0DC;&#xAC00; &#xB2E4;&#xB974;&#xB2E4;.</li><li>snapshot, coalesce, garbage, primary VHD, SR &#xC6A9;&#xB7C9; &#xACC4;&#xC0B0;&#xC774; &#xB9DE;&#xC9C0; &#xC54A;&#xB294;&#xB2E4;.</li><li>tapdisk &#xB610;&#xB294; VBD&#xAC00; &#xB0A8;&#xC544; VM disk I/O&#xAC00; &#xBA48;&#xCD94;&#xAC70;&#xB098; &#xC791;&#xC5C5;&#xC774; hang &#xC0C1;&#xD0DC;&#xAC00; &#xB41C;&#xB2E4;.</li></ul><h2 id="%EB%A1%9C%EA%B7%B8%EC%97%90%EC%84%9C-%EB%A8%BC%EC%A0%80-%EB%88%88%EC%97%90-%EB%93%A4%EC%96%B4%EC%98%A4%EB%8A%94-%EC%8B%A0%ED%98%B8">&#xB85C;&#xADF8;&#xC5D0;&#xC11C; &#xBA3C;&#xC800; &#xB208;&#xC5D0; &#xB4E4;&#xC5B4;&#xC624;&#xB294; &#xC2E0;&#xD638;</h2><p>&#xC6B4;&#xC601; &#xC911;&#xC5D0;&#xB294; &#xAE34; &#xC124;&#xBA85;&#xBCF4;&#xB2E4; &#xBC18;&#xBCF5;&#xB418;&#xB294; &#xB85C;&#xADF8; &#xBB38;&#xAD6C;&#xAC00; &#xBA3C;&#xC800; &#xB208;&#xC5D0; &#xB4E4;&#xC5B4;&#xC628;&#xB2E4;. &#xAC19;&#xC740; &#xBB38;&#xAD6C;&#xAC00; &#xC5B4;&#xB290; &#xCEF4;&#xD3EC;&#xB10C;&#xD2B8;&#xC5D0;&#xC11C; &#xBC18;&#xBCF5;&#xB418;&#xB294;&#xC9C0;&#xC640; &#xC9C1;&#xC804; &#xC0C1;&#xD0DC; &#xBCC0;&#xD654;&#xB97C; &#xBA3C;&#xC800; &#xD655;&#xC778;&#xD55C;&#xB2E4;.</p><ul><li>Storage / Volume &#xACC4;&#xCE35;&#xC5D0;&#xC11C; &#xC99D;&#xC0C1;&#xC774; &#xC2DC;&#xC791;&#xB418;&#xC9C0;&#xB9CC; &#xC2E4;&#xC81C; &#xC6D0;&#xC778;&#xC740; &#xB2E4;&#xB978; &#xACC4;&#xCE35;&#xC5D0; &#xC788;&#xC744; &#xC218; &#xC788;&#xB2E4;.</li><li>&#xB208;&#xC5D0; &#xBCF4;&#xC774;&#xB294; &#xC5D0;&#xB7EC;&#xBCF4;&#xB2E4; &#xC7A5;&#xC560; &#xC2DC;&#xAC01;, &#xB300;&#xC0C1; &#xB9AC;&#xC18C;&#xC2A4;, &#xC9C1;&#xC804; &#xBCC0;&#xACBD; &#xC774;&#xB825;&#xC744; &#xBA3C;&#xC800; &#xB9DE;&#xCD94;&#xB294; &#xD3B8;&#xC774; &#xBE60;&#xB974;&#xB2E4;.</li><li>&#xC77D;&#xAE30; &#xC804;&#xC6A9; &#xD655;&#xC778;&#xACFC; &#xC0C1;&#xD0DC; &#xBCC0;&#xACBD; &#xC791;&#xC5C5;&#xC744; &#xBD84;&#xB9AC;&#xD558;&#xBA74; &#xAE09;&#xD55C; &#xC0C1;&#xD669;&#xC5D0;&#xC11C;&#xB3C4; &#xD310;&#xB2E8;&#xC774; &#xD750;&#xB824;&#xC9C0;&#xC9C0; &#xC54A;&#xB294;&#xB2E4;.</li></ul><h2 id="%EC%B2%98%EC%9D%8C%EC%97%90-%EB%82%98%EB%88%A0%EB%B4%90%EC%95%BC-%ED%95%A0-%EA%B2%83">&#xCC98;&#xC74C;&#xC5D0; &#xB098;&#xB220;&#xBD10;&#xC57C; &#xD560; &#xAC83;</h2><p>&#xC774; &#xCF00;&#xC774;&#xC2A4;&#xB294; &#xD55C; &#xBC88;&#xC5D0; &#xD574;&#xACB0; &#xBA85;&#xB839;&#xC744; &#xCC3E;&#xAE30;&#xBCF4;&#xB2E4;, &#xC544;&#xB798; &#xAE30;&#xC900;&#xC73C;&#xB85C; &#xACC4;&#xCE35;&#xC744; &#xB098;&#xB204;&#xB294; &#xAC83;&#xC774; &#xBA3C;&#xC800;&#xB2E4;.</p><ul><li>CloudStack volume &#xC0C1;&#xD0DC;, XenServer VDI/VBD &#xC0C1;&#xD0DC;, SR free space&#xB97C; &#xD55C; &#xBC88;&#xC5D0; &#xBCF8;&#xB2E4;.</li><li>&#xC2A4;&#xB0C5;&#xC0F7; chain &#xBB38;&#xC81C;&#xB294; &#xD604;&#xC7AC; VHD, parent, coalesce task&#xB97C; &#xB530;&#xB85C; &#xD655;&#xC778;&#xD55C;&#xB2E4;.</li><li>attach/detach &#xBB38;&#xC81C;&#xB294; guest OS umount &#xC5EC;&#xBD80;&#xC640; hypervisor VBD &#xC0C1;&#xD0DC;&#xB97C; &#xBD84;&#xB9AC;&#xD55C;&#xB2E4;.</li></ul><h2 id="%ED%99%95%EC%9D%B8%EC%97%90-%EC%93%B4-%EB%AA%85%EB%A0%B9-%ED%9D%90%EB%A6%84">&#xD655;&#xC778;&#xC5D0; &#xC4F4; &#xBA85;&#xB839; &#xD750;&#xB984;</h2><p>&#xBA85;&#xB839;&#xC740; &#xD604;&#xC7AC; &#xD658;&#xACBD;&#xC758; &#xB178;&#xB4DC;&#xBA85;, &#xB9AC;&#xC18C;&#xC2A4; ID, &#xC11C;&#xBE44;&#xC2A4; &#xC774;&#xB984;&#xC744; &#xD655;&#xC778;&#xD55C; &#xB4A4; &#xB300;&#xC0C1;&#xC5D0; &#xB9DE;&#xAC8C; &#xC2E4;&#xD589;&#xD55C;&#xB2E4;.</p><pre><code class="language-bash">xe sr-list params=uuid,name-label,physical-size,physical-utilisation
xe vdi-list name-label=&lt;volume-name&gt; params=uuid,name-label,virtual-size,physical-utilisation,sm-config
xe vbd-list vdi-uuid=&lt;vdi-uuid&gt; params=uuid,vm-uuid,device,currently-attached
xe task-list status=pending

tap-ctl list
lsof /var/log
tail -n 200 /var/log/SMlog
tail -n 200 /var/log/blktap/tapdisk.&lt;pid&gt;.log

df -h
lsblk -f
mount | grep &lt;mount-point&gt;</code></pre><h2 id="%EC%A1%B0%EC%B9%98-%EC%A0%84%EC%97%90-%ED%8C%90%EB%8B%A8%ED%95%A0-%EC%A7%80%EC%A0%90">&#xC870;&#xCE58; &#xC804;&#xC5D0; &#xD310;&#xB2E8;&#xD560; &#xC9C0;&#xC810;</h2><ul><li>detach &#xC804; guest OS filesystem flush/umount &#xC5EC;&#xBD80;&#xB97C; &#xD655;&#xC778;&#xD55C;&#xB2E4;.</li><li>VBD&#xAC00; &#xB0A8;&#xC544; &#xC788;&#xC73C;&#xBA74; VM power state&#xC640; device path&#xB97C; &#xD655;&#xC778;&#xD55C; &#xB4A4; &#xC815;&#xB9AC;&#xD55C;&#xB2E4;.</li><li>SR &#xBD80;&#xC871;&#xC740; logical size&#xC640; physical utilization&#xC744; &#xAD6C;&#xBD84;&#xD574;&#xC11C; capacity plan&#xC744; &#xC7A1;&#xB294;&#xB2E4;.</li></ul><h2 id="%EB%B3%B5%EA%B5%AC%EB%90%90%EB%8B%A4%EA%B3%A0-%ED%8C%90%EB%8B%A8%ED%95%98%EB%8A%94-%EA%B8%B0%EC%A4%80">&#xBCF5;&#xAD6C;&#xB410;&#xB2E4;&#xACE0; &#xD310;&#xB2E8;&#xD558;&#xB294; &#xAE30;&#xC900;</h2><ul><li>VDI/VBD &#xBAA9;&#xB85D;&#xC5D0;&#xC11C; orphan attachment&#xAC00; &#xC0AC;&#xB77C;&#xC84C;&#xB294;&#xC9C0; &#xD655;&#xC778;&#xD55C;&#xB2E4;.</li><li>VM &#xBD80;&#xD305; &#xD6C4; guest OS&#xC5D0;&#xC11C; disk, filesystem, mount &#xC0C1;&#xD0DC;&#xB97C; &#xD655;&#xC778;&#xD55C;&#xB2E4;.</li><li>snapshot/coalesce task&#xAC00; &#xC0C8;&#xB85C; &#xB204;&#xC801;&#xB418;&#xC9C0; &#xC54A;&#xB294;&#xC9C0; &#xD655;&#xC778;&#xD55C;&#xB2E4;.</li></ul><h2 id="%EC%9A%B4%EC%98%81%ED%95%98%EB%A9%B4%EC%84%9C-%EB%82%A8%EC%9D%80-%EA%B5%90%ED%9B%88">&#xC6B4;&#xC601;&#xD558;&#xBA74;&#xC11C; &#xB0A8;&#xC740; &#xAD50;&#xD6C8;</h2><p>&#xC774; &#xCF00;&#xC774;&#xC2A4;&#xB294; &#xC870;&#xCE58; &#xC790;&#xCCB4;&#xBCF4;&#xB2E4; &#xB300;&#xC0C1; &#xC2DD;&#xBCC4;&#xC774; &#xB354; &#xC911;&#xC694;&#xD558;&#xB2E4;. &#xAC19;&#xC740; &#x201C;VM&#xC774; &#xC548; &#xB41C;&#xB2E4;&#x201D;&#xB294; &#xC99D;&#xC0C1;&#xC774;&#xC5B4;&#xB3C4; VM guest, compute host, storage attachment, virtual router, management service &#xC911; &#xC5B4;&#xB514;&#xAC00; &#xAE30;&#xC900;&#xC810;&#xC778;&#xC9C0;&#xC5D0; &#xB530;&#xB77C; &#xBA85;&#xB839;&#xACFC; &#xC704;&#xD5D8;&#xB3C4;&#xAC00; &#xC644;&#xC804;&#xD788; &#xB2EC;&#xB77C;&#xC9C4;&#xB2E4;.</p><p>&#xC7A5;&#xC560; &#xC2DC;&#xAC01;, &#xB300;&#xC0C1; &#xB9AC;&#xC18C;&#xC2A4;, &#xC9C1;&#xC804; &#xBCC0;&#xACBD; &#xC774;&#xB825;, &#xD655;&#xC778; &#xBA85;&#xB839;, &#xC2E4;&#xC81C; &#xC870;&#xCE58;, &#xAC80;&#xC99D; &#xACB0;&#xACFC;&#xB97C; &#xAC19;&#xC740; &#xC21C;&#xC11C;&#xB85C; &#xB0A8;&#xACA8;&#xB450;&#xBA74; &#xB2E4;&#xC74C; &#xC7A5;&#xC560;&#xC5D0;&#xC11C; &#xB2E8;&#xC21C; &#xAE30;&#xC5B5;&#xC774; &#xC544;&#xB2C8;&#xB77C; &#xD310;&#xB2E8; &#xADFC;&#xAC70;&#xB85C; &#xB2E4;&#xC2DC; &#xC4F8; &#xC218; &#xC788;&#xB2E4;.</p>]]></content:encoded></item><item><title><![CDATA[볼륨·스냅샷·SR: coalesce 이후 스냅샷 체인을 확인할 때 - 스토리지 프로세스 관점]]></title><description><![CDATA[coalesce 이후 스냅샷 체인을 확인할 때를 스토리지 프로세스 관점에서 좁혀 보는 케이스. Storage / Volume 계층의 증상, 확인 명령, 조치 전 판단, 복구 기준을 정리했다.]]></description><link>https://devmes.com/cloud-ops-troubleshooting-storage-volume-snapshot-243051f26e/</link><guid isPermaLink="false">6a3b418581de1a000182f74f</guid><category><![CDATA[Cloud Operations]]></category><category><![CDATA[XenServer]]></category><category><![CDATA[Storage]]></category><category><![CDATA[Snapshot]]></category><category><![CDATA[Troubleshooting]]></category><dc:creator><![CDATA[devmes]]></dc:creator><pubDate>Wed, 24 Jun 2026 02:31:33 GMT</pubDate><content:encoded><![CDATA[<p><strong>&#xBCFC;&#xB968;&#xB7;&#xC2A4;&#xB0C5;&#xC0F7;&#xB7;SR: coalesce &#xC774;&#xD6C4; &#xC2A4;&#xB0C5;&#xC0F7; &#xCCB4;&#xC778;&#xC744; &#xD655;&#xC778;&#xD560; &#xB54C; - &#xC2A4;&#xD1A0;&#xB9AC;&#xC9C0; &#xD504;&#xB85C;&#xC138;&#xC2A4; &#xAD00;&#xC810;</strong> &#xCF00;&#xC774;&#xC2A4;&#xB97C; &#xB2E4;&#xB8EC;&#xB2E4;. &#xD575;&#xC2EC;&#xC740; coalesce &#xC774;&#xD6C4; &#xC2A4;&#xB0C5;&#xC0F7; &#xCCB4;&#xC778;&#xC744; &#xD655;&#xC778;&#xD560; &#xB54C;&#xB97C; &#xC2A4;&#xD1A0;&#xB9AC;&#xC9C0; &#xD504;&#xB85C;&#xC138;&#xC2A4; &#xAD00;&#xC810;&#xC5D0;&#xC11C; &#xC881;&#xD600; &#xBCF4;&#xB294; &#xCF00;&#xC774;&#xC2A4;&#xB2E4;.</p><p>&#xC7A5;&#xC560;&#xB97C; &#xC881;&#xD790; &#xB54C;&#xB294; &#xC99D;&#xC0C1;, &#xC601;&#xD5A5; &#xBC94;&#xC704;, &#xB300;&#xC0C1; &#xB9AC;&#xC18C;&#xC2A4;, &#xCD5C;&#xADFC; &#xBCC0;&#xACBD;, &#xB85C;&#xADF8; &#xC2DC;&#xC810;&#xC744; &#xBA3C;&#xC800; &#xB9DE;&#xCD98;&#xB2E4;.</p><p>&#xC2A4;&#xD1A0;&#xB9AC;&#xC9C0; &#xACC4;&#xCE35; &#xC7A5;&#xC560;&#xB294; &#xC870;&#xAE09;&#xD558;&#xAC8C; attach/detach&#xB97C; &#xBC18;&#xBCF5;&#xD560;&#xC218;&#xB85D; &#xC0C1;&#xD0DC;&#xAC00; &#xB354; &#xB098;&#xBE60;&#xC9C8; &#xC218; &#xC788;&#xB2E4;. &#xD2B9;&#xD788; VDI/VBD, snapshot chain, tapdisk&#xAC00; &#xC5BD;&#xD78C; &#xACBD;&#xC6B0;&#xC5D0;&#xB294; &#xC5B4;&#xB5A4; &#xACC4;&#xCE35;&#xC774; &#xC544;&#xC9C1; disk&#xB97C; &#xBD99;&#xC7A1;&#xACE0; &#xC788;&#xB294;&#xC9C0;&#xBD80;&#xD130; &#xBD10;&#xC57C; &#xD55C;&#xB2E4;.</p><p>&#xBCFC;&#xB968; &#xC7A5;&#xC560;&#xB294; &#xD3EC;&#xD138;&#xC758; attach/detach &#xC0C1;&#xD0DC;&#xB9CC; &#xBCF4;&#xACE0; &#xD310;&#xB2E8;&#xD558;&#xBA74; &#xB193;&#xCE58;&#xB294; &#xC9C0;&#xC810;&#xC774; &#xB9CE;&#xB2E4;. &#xC2E4;&#xC81C;&#xB85C;&#xB294; guest OS&#xC758; mount &#xC0C1;&#xD0DC;, XenServer&#xC758; VDI/VBD &#xC5F0;&#xACB0;, SR &#xC5EC;&#xC720;&#xB7C9;, snapshot chain&#xC774; &#xBAA8;&#xB450; &#xD55C; &#xC904;&#xB85C; &#xB9DE;&#xC544;&#xC57C; &#xC815;&#xC0C1;&#xC774;&#xB77C;&#xACE0; &#xBCFC; &#xC218; &#xC788;&#xB2E4;.</p><h2 id="%EC%9D%B4-%EA%B8%80%EC%97%90%EC%84%9C-%EB%8B%A4%EB%A3%A8%EB%8A%94-%EC%BC%80%EC%9D%B4%EC%8A%A4">&#xC774; &#xAE00;&#xC5D0;&#xC11C; &#xB2E4;&#xB8E8;&#xB294; &#xCF00;&#xC774;&#xC2A4;</h2><!--kg-card-begin: html--><table>
 <tbody>
 <tr><th>&#xCF00;&#xC774;&#xC2A4; &#xCD08;&#xC810;</th><td>coalesce &#xC774;&#xD6C4; &#xC2A4;&#xB0C5;&#xC0F7; &#xCCB4;&#xC778;&#xC744; &#xD655;&#xC778;&#xD560; &#xB54C;&#xB97C; &#xC2A4;&#xD1A0;&#xB9AC;&#xC9C0; &#xD504;&#xB85C;&#xC138;&#xC2A4; &#xAD00;&#xC810;&#xC5D0;&#xC11C; &#xC881;&#xD600; &#xBCF4;&#xB294; &#xCF00;&#xC774;&#xC2A4;</td></tr>
 <tr><th>&#xC815;&#xB9AC;&#xD55C; &#xC8FC;&#xC81C;</th><td>Storage / Volume</td></tr>
 <tr><th>&#xC8FC;&#xC694; &#xACC4;&#xCE35;</th><td>SR, VDI, VBD, snapshot chain, tapdisk</td></tr>
 <tr><th>&#xC6B4;&#xC601; &#xB2E8;&#xC11C;</th><td>&#xC8FC;&#xC81C; &#xD504;&#xB85C;&#xD30C;&#xC77C;&#xACFC; &#xC7A5;&#xC560; &#xD750;&#xB984; &#xAE30;&#xC900;&#xC73C;&#xB85C; &#xC7AC;&#xAD6C;&#xC131;</td></tr>
 </tbody>
</table><!--kg-card-end: html--><h2 id="%EA%B2%89%EC%9C%BC%EB%A1%9C-%EB%B3%B4%EC%9D%B4%EB%8A%94-%EC%A6%9D%EC%83%81">&#xAC89;&#xC73C;&#xB85C; &#xBCF4;&#xC774;&#xB294; &#xC99D;&#xC0C1;</h2><ul><li>&#xBCFC;&#xB968; attach/detach&#xAC00; &#xC2E4;&#xD328;&#xD558;&#xAC70;&#xB098; &#xD3EC;&#xD138; &#xC0C1;&#xD0DC;&#xC640; hypervisor &#xC0C1;&#xD0DC;&#xAC00; &#xB2E4;&#xB974;&#xB2E4;.</li><li>snapshot, coalesce, garbage, primary VHD, SR &#xC6A9;&#xB7C9; &#xACC4;&#xC0B0;&#xC774; &#xB9DE;&#xC9C0; &#xC54A;&#xB294;&#xB2E4;.</li><li>tapdisk &#xB610;&#xB294; VBD&#xAC00; &#xB0A8;&#xC544; VM disk I/O&#xAC00; &#xBA48;&#xCD94;&#xAC70;&#xB098; &#xC791;&#xC5C5;&#xC774; hang &#xC0C1;&#xD0DC;&#xAC00; &#xB41C;&#xB2E4;.</li></ul><h2 id="%EB%A1%9C%EA%B7%B8%EC%97%90%EC%84%9C-%EB%A8%BC%EC%A0%80-%EB%88%88%EC%97%90-%EB%93%A4%EC%96%B4%EC%98%A4%EB%8A%94-%EC%8B%A0%ED%98%B8">&#xB85C;&#xADF8;&#xC5D0;&#xC11C; &#xBA3C;&#xC800; &#xB208;&#xC5D0; &#xB4E4;&#xC5B4;&#xC624;&#xB294; &#xC2E0;&#xD638;</h2><p>&#xC6B4;&#xC601; &#xC911;&#xC5D0;&#xB294; &#xAE34; &#xC124;&#xBA85;&#xBCF4;&#xB2E4; &#xBC18;&#xBCF5;&#xB418;&#xB294; &#xB85C;&#xADF8; &#xBB38;&#xAD6C;&#xAC00; &#xBA3C;&#xC800; &#xB208;&#xC5D0; &#xB4E4;&#xC5B4;&#xC628;&#xB2E4;. &#xAC19;&#xC740; &#xBB38;&#xAD6C;&#xAC00; &#xC5B4;&#xB290; &#xCEF4;&#xD3EC;&#xB10C;&#xD2B8;&#xC5D0;&#xC11C; &#xBC18;&#xBCF5;&#xB418;&#xB294;&#xC9C0;&#xC640; &#xC9C1;&#xC804; &#xC0C1;&#xD0DC; &#xBCC0;&#xD654;&#xB97C; &#xBA3C;&#xC800; &#xD655;&#xC778;&#xD55C;&#xB2E4;.</p><ul><li>`root 10684 10683 16 16:58 ? 00:12:10 /usr/bin/vhd-util coalesce --debug -n /var/run/sr-mount/&lt;UUID&gt;/&lt;UUID&gt;.vhd`</li><li>`&#xC544;&#xB798; vhd&#xD30C;&#xC77C; coalesce&#xAC00; &#xC5C6;&#xC73C;&#xBA74; &#xB2E4;&#xC74C; &#xBCFC;&#xB968; &#xC9C4;&#xD589;&#xD574;&#xB3C4;&#xB429;&#xB2C8;&#xB2E4;`</li></ul><h2 id="%EC%B2%98%EC%9D%8C%EC%97%90-%EB%82%98%EB%88%A0%EB%B4%90%EC%95%BC-%ED%95%A0-%EA%B2%83">&#xCC98;&#xC74C;&#xC5D0; &#xB098;&#xB220;&#xBD10;&#xC57C; &#xD560; &#xAC83;</h2><p>&#xC774; &#xCF00;&#xC774;&#xC2A4;&#xB294; &#xD55C; &#xBC88;&#xC5D0; &#xD574;&#xACB0; &#xBA85;&#xB839;&#xC744; &#xCC3E;&#xAE30;&#xBCF4;&#xB2E4;, &#xC544;&#xB798; &#xAE30;&#xC900;&#xC73C;&#xB85C; &#xACC4;&#xCE35;&#xC744; &#xB098;&#xB204;&#xB294; &#xAC83;&#xC774; &#xBA3C;&#xC800;&#xB2E4;.</p><ul><li>CloudStack volume &#xC0C1;&#xD0DC;, XenServer VDI/VBD &#xC0C1;&#xD0DC;, SR free space&#xB97C; &#xD55C; &#xBC88;&#xC5D0; &#xBCF8;&#xB2E4;.</li><li>&#xC2A4;&#xB0C5;&#xC0F7; chain &#xBB38;&#xC81C;&#xB294; &#xD604;&#xC7AC; VHD, parent, coalesce task&#xB97C; &#xB530;&#xB85C; &#xD655;&#xC778;&#xD55C;&#xB2E4;.</li><li>attach/detach &#xBB38;&#xC81C;&#xB294; guest OS umount &#xC5EC;&#xBD80;&#xC640; hypervisor VBD &#xC0C1;&#xD0DC;&#xB97C; &#xBD84;&#xB9AC;&#xD55C;&#xB2E4;.</li></ul><h2 id="%ED%99%95%EC%9D%B8%EC%97%90-%EC%93%B4-%EB%AA%85%EB%A0%B9-%ED%9D%90%EB%A6%84">&#xD655;&#xC778;&#xC5D0; &#xC4F4; &#xBA85;&#xB839; &#xD750;&#xB984;</h2><p>&#xBA85;&#xB839;&#xC740; &#xD604;&#xC7AC; &#xD658;&#xACBD;&#xC758; &#xB178;&#xB4DC;&#xBA85;, &#xB9AC;&#xC18C;&#xC2A4; ID, &#xC11C;&#xBE44;&#xC2A4; &#xC774;&#xB984;&#xC744; &#xD655;&#xC778;&#xD55C; &#xB4A4; &#xB300;&#xC0C1;&#xC5D0; &#xB9DE;&#xAC8C; &#xC2E4;&#xD589;&#xD55C;&#xB2E4;.</p><pre><code class="language-bash">xe sr-list params=uuid,name-label,physical-size,physical-utilisation
xe vdi-list name-label=&lt;volume-name&gt; params=uuid,name-label,virtual-size,physical-utilisation,sm-config
xe vbd-list vdi-uuid=&lt;vdi-uuid&gt; params=uuid,vm-uuid,device,currently-attached
xe task-list status=pending

tap-ctl list
lsof /var/log
tail -n 200 /var/log/SMlog
tail -n 200 /var/log/blktap/tapdisk.&lt;pid&gt;.log

df -h
lsblk -f
mount | grep &lt;mount-point&gt;</code></pre><h2 id="%EC%A1%B0%EC%B9%98-%EC%A0%84%EC%97%90-%ED%8C%90%EB%8B%A8%ED%95%A0-%EC%A7%80%EC%A0%90">&#xC870;&#xCE58; &#xC804;&#xC5D0; &#xD310;&#xB2E8;&#xD560; &#xC9C0;&#xC810;</h2><ul><li>detach &#xC804; guest OS filesystem flush/umount &#xC5EC;&#xBD80;&#xB97C; &#xD655;&#xC778;&#xD55C;&#xB2E4;.</li><li>VBD&#xAC00; &#xB0A8;&#xC544; &#xC788;&#xC73C;&#xBA74; VM power state&#xC640; device path&#xB97C; &#xD655;&#xC778;&#xD55C; &#xB4A4; &#xC815;&#xB9AC;&#xD55C;&#xB2E4;.</li><li>SR &#xBD80;&#xC871;&#xC740; logical size&#xC640; physical utilization&#xC744; &#xAD6C;&#xBD84;&#xD574;&#xC11C; capacity plan&#xC744; &#xC7A1;&#xB294;&#xB2E4;.</li></ul><h2 id="%EB%B3%B5%EA%B5%AC%EB%90%90%EB%8B%A4%EA%B3%A0-%ED%8C%90%EB%8B%A8%ED%95%98%EB%8A%94-%EA%B8%B0%EC%A4%80">&#xBCF5;&#xAD6C;&#xB410;&#xB2E4;&#xACE0; &#xD310;&#xB2E8;&#xD558;&#xB294; &#xAE30;&#xC900;</h2><ul><li>VDI/VBD &#xBAA9;&#xB85D;&#xC5D0;&#xC11C; orphan attachment&#xAC00; &#xC0AC;&#xB77C;&#xC84C;&#xB294;&#xC9C0; &#xD655;&#xC778;&#xD55C;&#xB2E4;.</li><li>VM &#xBD80;&#xD305; &#xD6C4; guest OS&#xC5D0;&#xC11C; disk, filesystem, mount &#xC0C1;&#xD0DC;&#xB97C; &#xD655;&#xC778;&#xD55C;&#xB2E4;.</li><li>snapshot/coalesce task&#xAC00; &#xC0C8;&#xB85C; &#xB204;&#xC801;&#xB418;&#xC9C0; &#xC54A;&#xB294;&#xC9C0; &#xD655;&#xC778;&#xD55C;&#xB2E4;.</li></ul><h2 id="%EC%9A%B4%EC%98%81%ED%95%98%EB%A9%B4%EC%84%9C-%EB%82%A8%EC%9D%80-%EA%B5%90%ED%9B%88">&#xC6B4;&#xC601;&#xD558;&#xBA74;&#xC11C; &#xB0A8;&#xC740; &#xAD50;&#xD6C8;</h2><p>&#xC774; &#xCF00;&#xC774;&#xC2A4;&#xB294; &#xC870;&#xCE58; &#xC790;&#xCCB4;&#xBCF4;&#xB2E4; &#xB300;&#xC0C1; &#xC2DD;&#xBCC4;&#xC774; &#xB354; &#xC911;&#xC694;&#xD558;&#xB2E4;. &#xAC19;&#xC740; &#x201C;VM&#xC774; &#xC548; &#xB41C;&#xB2E4;&#x201D;&#xB294; &#xC99D;&#xC0C1;&#xC774;&#xC5B4;&#xB3C4; VM guest, compute host, storage attachment, virtual router, management service &#xC911; &#xC5B4;&#xB514;&#xAC00; &#xAE30;&#xC900;&#xC810;&#xC778;&#xC9C0;&#xC5D0; &#xB530;&#xB77C; &#xBA85;&#xB839;&#xACFC; &#xC704;&#xD5D8;&#xB3C4;&#xAC00; &#xC644;&#xC804;&#xD788; &#xB2EC;&#xB77C;&#xC9C4;&#xB2E4;.</p><p>&#xC7A5;&#xC560; &#xC2DC;&#xAC01;, &#xB300;&#xC0C1; &#xB9AC;&#xC18C;&#xC2A4;, &#xC9C1;&#xC804; &#xBCC0;&#xACBD; &#xC774;&#xB825;, &#xD655;&#xC778; &#xBA85;&#xB839;, &#xC2E4;&#xC81C; &#xC870;&#xCE58;, &#xAC80;&#xC99D; &#xACB0;&#xACFC;&#xB97C; &#xAC19;&#xC740; &#xC21C;&#xC11C;&#xB85C; &#xB0A8;&#xACA8;&#xB450;&#xBA74; &#xB2E4;&#xC74C; &#xC7A5;&#xC560;&#xC5D0;&#xC11C; &#xB2E8;&#xC21C; &#xAE30;&#xC5B5;&#xC774; &#xC544;&#xB2C8;&#xB77C; &#xD310;&#xB2E8; &#xADFC;&#xAC70;&#xB85C; &#xB2E4;&#xC2DC; &#xC4F8; &#xC218; &#xC788;&#xB2E4;.</p>]]></content:encoded></item><item><title><![CDATA[VM 부팅 복구: VM이 커널 단계에서 멈출 때 - 부팅 로그 관점]]></title><description><![CDATA[VM이 커널 단계에서 멈출 때를 부팅 로그 관점에서 좁혀 보는 케이스. Guest Boot 계층의 증상, 확인 명령, 조치 전 판단, 복구 기준을 정리했다.]]></description><link>https://devmes.com/cloud-ops-troubleshooting-guest-boot-7985d9263a/</link><guid isPermaLink="false">6a3b418481de1a000182f72b</guid><category><![CDATA[Cloud Operations]]></category><category><![CDATA[Linux]]></category><category><![CDATA[VM]]></category><category><![CDATA[Recovery]]></category><category><![CDATA[Troubleshooting]]></category><dc:creator><![CDATA[devmes]]></dc:creator><pubDate>Wed, 24 Jun 2026 02:31:32 GMT</pubDate><content:encoded><![CDATA[<p><strong>VM &#xBD80;&#xD305; &#xBCF5;&#xAD6C;: VM&#xC774; &#xCEE4;&#xB110; &#xB2E8;&#xACC4;&#xC5D0;&#xC11C; &#xBA48;&#xCD9C; &#xB54C; - &#xBD80;&#xD305; &#xB85C;&#xADF8; &#xAD00;&#xC810;</strong> &#xCF00;&#xC774;&#xC2A4;&#xB97C; &#xB2E4;&#xB8EC;&#xB2E4;. &#xD575;&#xC2EC;&#xC740; VM&#xC774; &#xCEE4;&#xB110; &#xB2E8;&#xACC4;&#xC5D0;&#xC11C; &#xBA48;&#xCD9C; &#xB54C;&#xB97C; &#xBD80;&#xD305; &#xB85C;&#xADF8; &#xAD00;&#xC810;&#xC5D0;&#xC11C; &#xC881;&#xD600; &#xBCF4;&#xB294; &#xCF00;&#xC774;&#xC2A4;&#xB2E4;.</p><p>&#xC7A5;&#xC560;&#xB97C; &#xC881;&#xD790; &#xB54C;&#xB294; &#xC99D;&#xC0C1;, &#xC601;&#xD5A5; &#xBC94;&#xC704;, &#xB300;&#xC0C1; &#xB9AC;&#xC18C;&#xC2A4;, &#xCD5C;&#xADFC; &#xBCC0;&#xACBD;, &#xB85C;&#xADF8; &#xC2DC;&#xC810;&#xC744; &#xBA3C;&#xC800; &#xB9DE;&#xCD98;&#xB2E4;.</p><p>VM&#xC774; &#xCF1C;&#xC9C0;&#xC9C0; &#xC54A;&#xB294;&#xB2E4;&#xB294; &#xB9D0;&#xC740; platform &#xC7A5;&#xC560;&#xC77C; &#xC218;&#xB3C4; &#xC788;&#xACE0;, guest OS&#xC758; &#xBD80;&#xD305; &#xC7A5;&#xC560;&#xC77C; &#xC218;&#xB3C4; &#xC788;&#xB2E4;. &#xC6B4;&#xC601;&#xC790;&#xB294; console&#xC5D0;&#xC11C; &#xBCF4;&#xC774;&#xB294; &#xD654;&#xBA74;&#xACFC; hypervisor&#xC758; power state&#xB97C; &#xBD84;&#xB9AC;&#xD574;&#xC11C; &#xC6D0;&#xC778;&#xC744; &#xC881;&#xD600;&#xC57C; &#xD55C;&#xB2E4;.</p><p>&#xBD80;&#xD305; &#xC2E4;&#xD328;&#xB294; cloud platform &#xC7A5;&#xC560;&#xCC98;&#xB7FC; &#xC811;&#xC218;&#xB418;&#xC9C0;&#xB9CC; &#xC2E4;&#xC81C; &#xC6D0;&#xC778;&#xC740; guest OS &#xB0B4;&#xBD80;&#xC5D0; &#xC788;&#xB294; &#xACBD;&#xC6B0;&#xAC00; &#xB9CE;&#xB2E4;. kernel, boot loader, filesystem&#xC744; &#xAC74;&#xB4DC;&#xB9AC;&#xB294; &#xBCF5;&#xAD6C;&#xB294; &#xB418;&#xB3CC;&#xB9AC;&#xAE30; &#xC5B4;&#xB824;&#xC6B0;&#xBBC0;&#xB85C; &#xBA3C;&#xC800; snapshot &#xAC00;&#xB2A5; &#xC5EC;&#xBD80;&#xB97C; &#xD655;&#xC778;&#xD574;&#xC57C; &#xD55C;&#xB2E4;.</p><h2 id="%EC%9D%B4-%EA%B8%80%EC%97%90%EC%84%9C-%EB%8B%A4%EB%A3%A8%EB%8A%94-%EC%BC%80%EC%9D%B4%EC%8A%A4">&#xC774; &#xAE00;&#xC5D0;&#xC11C; &#xB2E4;&#xB8E8;&#xB294; &#xCF00;&#xC774;&#xC2A4;</h2><!--kg-card-begin: html--><table>
 <tbody>
 <tr><th>&#xCF00;&#xC774;&#xC2A4; &#xCD08;&#xC810;</th><td>VM&#xC774; &#xCEE4;&#xB110; &#xB2E8;&#xACC4;&#xC5D0;&#xC11C; &#xBA48;&#xCD9C; &#xB54C;&#xB97C; &#xBD80;&#xD305; &#xB85C;&#xADF8; &#xAD00;&#xC810;&#xC5D0;&#xC11C; &#xC881;&#xD600; &#xBCF4;&#xB294; &#xCF00;&#xC774;&#xC2A4;</td></tr>
 <tr><th>&#xC815;&#xB9AC;&#xD55C; &#xC8FC;&#xC81C;</th><td>Guest Boot</td></tr>
 <tr><th>&#xC8FC;&#xC694; &#xACC4;&#xCE35;</th><td>Guest OS, boot loader, kernel, initramfs, root filesystem</td></tr>
 <tr><th>&#xC6B4;&#xC601; &#xB2E8;&#xC11C;</th><td>&#xC8FC;&#xC81C; &#xD504;&#xB85C;&#xD30C;&#xC77C;&#xACFC; &#xC7A5;&#xC560; &#xD750;&#xB984; &#xAE30;&#xC900;&#xC73C;&#xB85C; &#xC7AC;&#xAD6C;&#xC131;</td></tr>
 </tbody>
</table><!--kg-card-end: html--><h2 id="%EA%B2%89%EC%9C%BC%EB%A1%9C-%EB%B3%B4%EC%9D%B4%EB%8A%94-%EC%A6%9D%EC%83%81">&#xAC89;&#xC73C;&#xB85C; &#xBCF4;&#xC774;&#xB294; &#xC99D;&#xC0C1;</h2><ul><li>stop/start &#xD6C4; VM&#xC774; &#xBD80;&#xD305;&#xB418;&#xC9C0; &#xC54A;&#xAC70;&#xB098; single mode, grub, kernel panic &#xC0C1;&#xD0DC;&#xB85C; &#xBA48;&#xCD98;&#xB2E4;.</li><li>kernel upgrade, library deletion, filesystem &#xBB38;&#xC81C; &#xC774;&#xD6C4; console &#xC811;&#xC18D;&#xB9CC; &#xAC00;&#xB2A5;&#xD558;&#xB2E4;.</li><li>cloud platform&#xC740; &#xC815;&#xC0C1;&#xC778;&#xB370; guest OS &#xB0B4;&#xBD80; &#xBB38;&#xC81C;&#xB85C; &#xC11C;&#xBE44;&#xC2A4;&#xAC00; &#xC62C;&#xB77C;&#xC624;&#xC9C0; &#xC54A;&#xB294;&#xB2E4;.</li></ul><h2 id="%EB%A1%9C%EA%B7%B8%EC%97%90%EC%84%9C-%EB%A8%BC%EC%A0%80-%EB%88%88%EC%97%90-%EB%93%A4%EC%96%B4%EC%98%A4%EB%8A%94-%EC%8B%A0%ED%98%B8">&#xB85C;&#xADF8;&#xC5D0;&#xC11C; &#xBA3C;&#xC800; &#xB208;&#xC5D0; &#xB4E4;&#xC5B4;&#xC624;&#xB294; &#xC2E0;&#xD638;</h2><p>&#xC6B4;&#xC601; &#xC911;&#xC5D0;&#xB294; &#xAE34; &#xC124;&#xBA85;&#xBCF4;&#xB2E4; &#xBC18;&#xBCF5;&#xB418;&#xB294; &#xB85C;&#xADF8; &#xBB38;&#xAD6C;&#xAC00; &#xBA3C;&#xC800; &#xB208;&#xC5D0; &#xB4E4;&#xC5B4;&#xC628;&#xB2E4;. &#xAC19;&#xC740; &#xBB38;&#xAD6C;&#xAC00; &#xC5B4;&#xB290; &#xCEF4;&#xD3EC;&#xB10C;&#xD2B8;&#xC5D0;&#xC11C; &#xBC18;&#xBCF5;&#xB418;&#xB294;&#xC9C0;&#xC640; &#xC9C1;&#xC804; &#xC0C1;&#xD0DC; &#xBCC0;&#xD654;&#xB97C; &#xBA3C;&#xC800; &#xD655;&#xC778;&#xD55C;&#xB2E4;.</p><ul><li>Guest Boot &#xACC4;&#xCE35;&#xC5D0;&#xC11C; &#xC99D;&#xC0C1;&#xC774; &#xC2DC;&#xC791;&#xB418;&#xC9C0;&#xB9CC; &#xC2E4;&#xC81C; &#xC6D0;&#xC778;&#xC740; &#xB2E4;&#xB978; &#xACC4;&#xCE35;&#xC5D0; &#xC788;&#xC744; &#xC218; &#xC788;&#xB2E4;.</li><li>&#xB208;&#xC5D0; &#xBCF4;&#xC774;&#xB294; &#xC5D0;&#xB7EC;&#xBCF4;&#xB2E4; &#xC7A5;&#xC560; &#xC2DC;&#xAC01;, &#xB300;&#xC0C1; &#xB9AC;&#xC18C;&#xC2A4;, &#xC9C1;&#xC804; &#xBCC0;&#xACBD; &#xC774;&#xB825;&#xC744; &#xBA3C;&#xC800; &#xB9DE;&#xCD94;&#xB294; &#xD3B8;&#xC774; &#xBE60;&#xB974;&#xB2E4;.</li><li>&#xC77D;&#xAE30; &#xC804;&#xC6A9; &#xD655;&#xC778;&#xACFC; &#xC0C1;&#xD0DC; &#xBCC0;&#xACBD; &#xC791;&#xC5C5;&#xC744; &#xBD84;&#xB9AC;&#xD558;&#xBA74; &#xAE09;&#xD55C; &#xC0C1;&#xD669;&#xC5D0;&#xC11C;&#xB3C4; &#xD310;&#xB2E8;&#xC774; &#xD750;&#xB824;&#xC9C0;&#xC9C0; &#xC54A;&#xB294;&#xB2E4;.</li></ul><h2 id="%EC%B2%98%EC%9D%8C%EC%97%90-%EB%82%98%EB%88%A0%EB%B4%90%EC%95%BC-%ED%95%A0-%EA%B2%83">&#xCC98;&#xC74C;&#xC5D0; &#xB098;&#xB220;&#xBD10;&#xC57C; &#xD560; &#xAC83;</h2><p>&#xC774; &#xCF00;&#xC774;&#xC2A4;&#xB294; &#xD55C; &#xBC88;&#xC5D0; &#xD574;&#xACB0; &#xBA85;&#xB839;&#xC744; &#xCC3E;&#xAE30;&#xBCF4;&#xB2E4;, &#xC544;&#xB798; &#xAE30;&#xC900;&#xC73C;&#xB85C; &#xACC4;&#xCE35;&#xC744; &#xB098;&#xB204;&#xB294; &#xAC83;&#xC774; &#xBA3C;&#xC800;&#xB2E4;.</p><ul><li>hypervisor power state&#xC640; guest OS boot failure&#xB97C; &#xBD84;&#xB9AC;&#xD55C;&#xB2E4;.</li><li>console &#xD654;&#xBA74;, last boot log, root filesystem mount &#xAC00;&#xB2A5; &#xC5EC;&#xBD80;&#xB97C; &#xBA3C;&#xC800; &#xD655;&#xC778;&#xD55C;&#xB2E4;.</li><li>&#xBCF5;&#xAD6C; &#xC804;&#xC5D0;&#xB294; disk snapshot &#xB610;&#xB294; image backup &#xAC00;&#xB2A5; &#xC5EC;&#xBD80;&#xB97C; &#xD310;&#xB2E8;&#xD55C;&#xB2E4;.</li></ul><h2 id="%ED%99%95%EC%9D%B8%EC%97%90-%EC%93%B4-%EB%AA%85%EB%A0%B9-%ED%9D%90%EB%A6%84">&#xD655;&#xC778;&#xC5D0; &#xC4F4; &#xBA85;&#xB839; &#xD750;&#xB984;</h2><p>&#xBA85;&#xB839;&#xC740; &#xD604;&#xC7AC; &#xD658;&#xACBD;&#xC758; &#xB178;&#xB4DC;&#xBA85;, &#xB9AC;&#xC18C;&#xC2A4; ID, &#xC11C;&#xBE44;&#xC2A4; &#xC774;&#xB984;&#xC744; &#xD655;&#xC778;&#xD55C; &#xB4A4; &#xB300;&#xC0C1;&#xC5D0; &#xB9DE;&#xAC8C; &#xC2E4;&#xD589;&#xD55C;&#xB2E4;.</p><pre><code class="language-bash">virsh console &lt;vm-name&gt;
journalctl -xb --no-pager
dmesg -T | tail -n 100
lsblk -f
mount -o ro /dev/&lt;root-device&gt; /mnt

guestfish --ro -a &lt;disk-image&gt;
virt-rescue -a &lt;disk-image&gt;
grubby --info=ALL
systemctl get-default
systemctl status &lt;service&gt; --no-pager</code></pre><h2 id="%EC%A1%B0%EC%B9%98-%EC%A0%84%EC%97%90-%ED%8C%90%EB%8B%A8%ED%95%A0-%EC%A7%80%EC%A0%90">&#xC870;&#xCE58; &#xC804;&#xC5D0; &#xD310;&#xB2E8;&#xD560; &#xC9C0;&#xC810;</h2><ul><li>single mode, rescue image, guestfish &#xC911; &#xAC00;&#xC7A5; &#xC601;&#xD5A5;&#xC774; &#xC791;&#xC740; &#xACBD;&#xB85C;&#xBD80;&#xD130; &#xC120;&#xD0DD;&#xD55C;&#xB2E4;.</li><li>grub/kernel &#xBB38;&#xC81C;&#xB294; &#xC774;&#xC804; kernel&#xB85C; &#xBD80;&#xD305; &#xAC00;&#xB2A5;&#xD55C;&#xC9C0; &#xD655;&#xC778;&#xD55C; &#xB4A4; &#xAE30;&#xBCF8; kernel&#xC744; &#xB418;&#xB3CC;&#xB9B0;&#xB2E4;.</li><li>&#xD30C;&#xC77C; &#xC0AD;&#xC81C;/&#xB77C;&#xC774;&#xBE0C;&#xB7EC;&#xB9AC; &#xC190;&#xC0C1;&#xC740; &#xB3D9;&#xC77C; OS &#xBC84;&#xC804; &#xD328;&#xD0A4;&#xC9C0;&#xB85C; &#xBCF5;&#xAD6C;&#xD55C;&#xB2E4;.</li></ul><h2 id="%EB%B3%B5%EA%B5%AC%EB%90%90%EB%8B%A4%EA%B3%A0-%ED%8C%90%EB%8B%A8%ED%95%98%EB%8A%94-%EA%B8%B0%EC%A4%80">&#xBCF5;&#xAD6C;&#xB410;&#xB2E4;&#xACE0; &#xD310;&#xB2E8;&#xD558;&#xB294; &#xAE30;&#xC900;</h2><ul><li>&#xC815;&#xC0C1; multi-user target&#xAE4C;&#xC9C0; &#xBD80;&#xD305;&#xB418;&#xB294;&#xC9C0; &#xD655;&#xC778;&#xD55C;&#xB2E4;.</li><li>network, disk mount, &#xC8FC;&#xC694; daemon&#xC774; &#xC815;&#xC0C1;&#xC778;&#xC9C0; &#xD655;&#xC778;&#xD55C;&#xB2E4;.</li><li>&#xBCF5;&#xAD6C; &#xC911; &#xC784;&#xC2DC;&#xB85C; &#xBD99;&#xC778; disk/rescue &#xC124;&#xC815;&#xC744; &#xC81C;&#xAC70;&#xD55C;&#xB2E4;.</li></ul><h2 id="%EC%9A%B4%EC%98%81%ED%95%98%EB%A9%B4%EC%84%9C-%EB%82%A8%EC%9D%80-%EA%B5%90%ED%9B%88">&#xC6B4;&#xC601;&#xD558;&#xBA74;&#xC11C; &#xB0A8;&#xC740; &#xAD50;&#xD6C8;</h2><p>&#xC774; &#xCF00;&#xC774;&#xC2A4;&#xB294; &#xC870;&#xCE58; &#xC790;&#xCCB4;&#xBCF4;&#xB2E4; &#xB300;&#xC0C1; &#xC2DD;&#xBCC4;&#xC774; &#xB354; &#xC911;&#xC694;&#xD558;&#xB2E4;. &#xAC19;&#xC740; &#x201C;VM&#xC774; &#xC548; &#xB41C;&#xB2E4;&#x201D;&#xB294; &#xC99D;&#xC0C1;&#xC774;&#xC5B4;&#xB3C4; VM guest, compute host, storage attachment, virtual router, management service &#xC911; &#xC5B4;&#xB514;&#xAC00; &#xAE30;&#xC900;&#xC810;&#xC778;&#xC9C0;&#xC5D0; &#xB530;&#xB77C; &#xBA85;&#xB839;&#xACFC; &#xC704;&#xD5D8;&#xB3C4;&#xAC00; &#xC644;&#xC804;&#xD788; &#xB2EC;&#xB77C;&#xC9C4;&#xB2E4;.</p><p>&#xC7A5;&#xC560; &#xC2DC;&#xAC01;, &#xB300;&#xC0C1; &#xB9AC;&#xC18C;&#xC2A4;, &#xC9C1;&#xC804; &#xBCC0;&#xACBD; &#xC774;&#xB825;, &#xD655;&#xC778; &#xBA85;&#xB839;, &#xC2E4;&#xC81C; &#xC870;&#xCE58;, &#xAC80;&#xC99D; &#xACB0;&#xACFC;&#xB97C; &#xAC19;&#xC740; &#xC21C;&#xC11C;&#xB85C; &#xB0A8;&#xACA8;&#xB450;&#xBA74; &#xB2E4;&#xC74C; &#xC7A5;&#xC560;&#xC5D0;&#xC11C; &#xB2E8;&#xC21C; &#xAE30;&#xC5B5;&#xC774; &#xC544;&#xB2C8;&#xB77C; &#xD310;&#xB2E8; &#xADFC;&#xAC70;&#xB85C; &#xB2E4;&#xC2DC; &#xC4F8; &#xC218; &#xC788;&#xB2E4;.</p>]]></content:encoded></item></channel></rss>